[LISP]求助-如何特殊显示修改过的标注文字
本帖最后由 作者 于 2008-11-26 21:44:27 编辑 <br /><br /> <p>我希望能有个小程序,可以将修改过的“标注文字”以特殊颜色显示。见附件,图中尺寸334为修改过的“标注文字”,其余标注文字为默认值。谢谢!</p><p></p><p>------------------------------------------------------------------------------------------------------------------------------------------------------------------------</p><p>2008-11-26</p><p>根据七楼之前的总结,最后编好的lsp如下,但最近发现不能用于CAD 2008,特来向各位再次求助。先谢谢了。</p><p></p><p>;尺寸修改过的特殊颜色标出change text color<br/>;一、标注文本改成"%%c<>"、"M<>x0.75"之类的,由于有<>,<br/>; 标注会随修改自动更新,这种情况下文字颜色也保持不变。<br/>;二、当text override 中不含<>时实际测量长度是100,<br/>; text override 的不是文本是100,而是40或者一个文本等,显示为紫色。<br/>;三、实际测量长度是100,text override 的文本也是100,显示为蓝色</p><p>(defun c:ctc ()<br/> (setvar "cmdecho" 0)<br/> (command "undo" "be")<br/> (setq ss (ssget '((0 . "DIMENSION"))))<br/> (setq l (sslength ss))<br/> (setq i 0<br/> j 0<br/> )<br/> (repeat l<br/> (setq ent (ssname ss i))<br/> (setq obj (vlax-ename->vla-object ent))<br/> (setq txt (vla-get-TextOverride obj))<br/> (setq mea (vla-get-Measurement obj))<br/> (if (/= txt "")<br/> ;_标注文本为M<>x0.75、M10.0x0.75的样式<br/> (cond ((= (substr txt 1 1) "M")<br/> (setq k 2)<br/> (if (/= (substr txt 2 1) "<")<br/> (progn<br/> (while (and (> (ascii (substr txt k 1)) 46)<br/> (< (ascii (substr txt k 1)) 57)<br/> )<br/> (setq k (1+ k))<br/> )<br/> (setq txt1 (substr txt 2 (- k 2)))<br/> (if (not (equal (atof txt1) mea 0.0001))<br/> (vla-put-TextColor obj 3)<br/> )<br/> (setq j (1+ j))<br/> )<br/> )<br/> )<br/> ;_标注文本为%%c<>、%%C6.0 的样式<br/> ((= (substr txt 1 1) "%")<br/> (if (not (= (substr txt 4 1) "<"))<br/> (setq j (modify-color obj txt mea 4 j))<br/> )<br/> )<br/> ;_标注文本为6-%%c<>、6-%%C1.2 的样式<br/> ((= (substr txt 2 1) "-")<br/> (if (= (substr txt 3 1) "%")<br/> (if (not (= (substr txt 6 1) "<"))<br/> (setq j (modify-color obj txt mea 6 j))<br/> )<br/> (if (not (= (substr txt 3 1) "<"))<br/> (setq j (modify-color obj txt mea 3 j))<br/> )<br/> )<br/> )<br/> ;_标注文本为<>、6.0的形式<br/> (T<br/> (if (not (= (substr txt 1 1) "<"))<br/> (setq j (modify-color obj txt mea 1 j))<br/> )<br/> )<br/> )<br/> )<br/> (setq i (1+ i))<br/> )<br/> (command "undo" "e")<br/> (setvar "cmdecho" 1)<br/> (if (= j 0)<br/> (princ "\n 程序执行完毕,未发现手工修改过的尺寸!")<br/> (princ (strcat "\n 共发现" (rtos j) "个尺寸被修改过"))<br/> )<br/> (princ)<br/>)</p><p>(defun modify-color (obj0 txt0 mea0 k0 j0 / jj txt11)<br/> (setq txt11 (substr txt0 k0))<br/> (if (equal (atof txt11) mea0 0.0001)<br/> (vla-put-TextColor obj0 5)<br/> (vla-put-TextColor obj0 6)<br/> )<br/> (setq jj (1+ j0))<br/> jj<br/>)</p><p></p><p></p> 参考一下(defun c:test ()(setq ss (ssget "x" '((0 . "DIMENSION"))))
(setq l (sslength ss))
(setq i 0)
(repeat l
(setq ent (ssname ss i))
(setq obj (vlax-ename->vla-object ent))
(setq txt (vla-get-TextOverride obj))
(if (/= txt "")
(vla-put-TextColor obj 1)
)
(setq i (1+ i))
)
)
<P>试过了,好用的。多谢!</P>
<P>还有两点请教:</P>
<P> 一、程序默认是对图中所有的标注操作,能不能改成对<FONT color=#ff0000>选定的对象中标注</FONT>操作啊。</P>
<P> 二、我们这里有好多图纸中标注文字颜色默认就是红色,所以用了这个程序后看不出变化。</P>
<P>------------再次感谢楼上的朋友!</P> <A href="http://bbs.mjtd.com/forum.php?mod=viewthread&tid=2844" target="_blank" >http://bbs.mjtd.com/forum.php?mod=viewthread&tid=2844</A> <P>龙哥链接的贴子请得比较全面,楼主可以参考一下,另外你提到的问题可以如下修改</P>
<P>(setq ss (ssget "x" '((0 . "DIMENSION"))))<BR>--->(setq ss (ssget '((0 . "DIMENSION"))))</P>
<P>(vla-put-TextColor obj 1)----->(vla-put-TextColor obj 其它颜色号)<BR><BR></P> <P> 谢谢 <A name=82717><FONT color=#000066><B>ljpnb</B></FONT></A>和龙哥,我觉得 <A name=82717><FONT color=#000066><B>ljpnb</B></FONT></A> 改过后的可以选择对象这一点更人性化一些 ,毕竟这是<A name=82717><FONT color=#000066><B>ljpnb</B></FONT></A>大侠根据我的要求做的,我当然喜欢啦。</P>
<P>(当然龙哥的程序改一下也可以做到这点的)</P>
<P>--------</P>
<P>刚刚试了两位大侠的程序,发现一个现象,</P>
<P>标注文本修改后,不管测量值是否与标注文本相等,文本都变颜色,可不可以改一下,当</P>
<P>测量值是否与标注文本相等,文本都变颜色1</P>
<P>测量值是否与标注文本不相等,文本都变颜色2</P>
<P>谢谢!</P>
<P> </P> 程序当中(setq txt (vla-get-TextOverride obj))的TXT值,对TXT值多加一个判断就可以了。 根据5楼修改后的程序如下(defun c:test ()
(setq ss (ssget'((0 . "DIMENSION"))))
(setq l (sslength ss))
(setq i 0)
(repeat l
(setq ent (ssname ss i))
(setq obj (vlax-ename->vla-object ent))
(setq txt (vla-get-TextOverride obj))
(if (/= txt "")
(vla-put-TextColor obj 6)
)
(setq i (1+ i))
)
)但是7楼说的增加一个TXT判断,我不会,能不能再帮忙修改一下,上传一个完整程序啊,这样也可以让别的网友直接使用啊。谢谢ljpnb了。
怎么把图片传的和楼主一样啊我不会拜托大家帮帮谢了 <P>我是直接作为上传jpg图片的,显示出来就是这样了。</P>