feizheng 发表于 2006-2-9 11:51:00

[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&lt;&gt;"、"M&lt;&gt;x0.75"之类的,由于有&lt;&gt;,<br/>;&nbsp;&nbsp;&nbsp; 标注会随修改自动更新,这种情况下文字颜色也保持不变。<br/>;二、当text override 中不含&lt;&gt;时实际测量长度是100,<br/>;&nbsp;&nbsp;&nbsp; text override 的不是文本是100,而是40或者一个文本等,显示为紫色。<br/>;三、实际测量长度是100,text override 的文本也是100,显示为蓝色</p><p>(defun c:ctc ()<br/>&nbsp; (setvar "cmdecho" 0)<br/>&nbsp; (command "undo" "be")<br/>&nbsp; (setq ss (ssget '((0 . "DIMENSION"))))<br/>&nbsp; (setq l (sslength ss))<br/>&nbsp; (setq&nbsp;&nbsp;&nbsp; i 0<br/>&nbsp;&nbsp;&nbsp; j 0<br/>&nbsp; )<br/>&nbsp; (repeat l<br/>&nbsp;&nbsp;&nbsp; (setq ent (ssname ss i))<br/>&nbsp;&nbsp;&nbsp; (setq obj (vlax-ename-&gt;vla-object ent))<br/>&nbsp;&nbsp;&nbsp; (setq txt (vla-get-TextOverride obj))<br/>&nbsp;&nbsp;&nbsp; (setq mea (vla-get-Measurement obj))<br/>&nbsp;&nbsp;&nbsp; (if&nbsp;&nbsp;&nbsp; (/= txt "")<br/>&nbsp;;_标注文本为M&lt;&gt;x0.75、M10.0x0.75的样式<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond ((= (substr txt 1 1) "M")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq k 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (/= (substr txt 2 1) "&lt;")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (while&nbsp;&nbsp;&nbsp; (and (&gt; (ascii (substr txt k 1)) 46)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&lt; (ascii (substr txt k 1)) 57)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq k (1+ k))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq txt1 (substr txt 2 (- k 2)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (not (equal (atof txt1) mea 0.0001))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vla-put-TextColor obj 3)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq j (1+ j))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;;_标注文本为%%c&lt;&gt;、%%C6.0 的样式<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((= (substr txt 1 1) "%")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (not (= (substr txt 4 1) "&lt;"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq j (modify-color obj txt mea 4 j))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;;_标注文本为6-%%c&lt;&gt;、6-%%C1.2 的样式<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((= (substr txt 2 1) "-")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= (substr txt 3 1) "%")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (not (= (substr txt 6 1) "&lt;"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq j (modify-color obj txt mea 6 j))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (not (= (substr txt 3 1) "&lt;"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq j (modify-color obj txt mea 3 j))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;;_标注文本为&lt;&gt;、6.0的形式<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (T<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (not (= (substr txt 1 1) "&lt;"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq j (modify-color obj txt mea 1 j))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (setq i (1+ i))<br/>&nbsp; )<br/>&nbsp; (command "undo" "e")<br/>&nbsp; (setvar "cmdecho" 1)<br/>&nbsp; (if (= j 0)<br/>&nbsp;&nbsp;&nbsp; (princ "\n 程序执行完毕,未发现手工修改过的尺寸!")<br/>&nbsp;&nbsp;&nbsp; (princ (strcat "\n 共发现" (rtos j) "个尺寸被修改过"))<br/>&nbsp; )<br/>&nbsp; (princ)<br/>)</p><p>(defun modify-color (obj0 txt0 mea0 k0 j0 / jj txt11)<br/>&nbsp; (setq txt11 (substr txt0 k0))<br/>&nbsp; (if (equal (atof txt11) mea0 0.0001)<br/>&nbsp;&nbsp;&nbsp; (vla-put-TextColor obj0 5)<br/>&nbsp;&nbsp;&nbsp; (vla-put-TextColor obj0 6)<br/>&nbsp; )<br/>&nbsp; (setq jj (1+ j0))<br/>&nbsp; jj<br/>)</p><p></p><p></p>

ljpnb 发表于 2006-2-9 14:12:00

参考一下(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))
)
)

feizheng 发表于 2006-2-9 15:44:00

<P>试过了,好用的。多谢!</P>
<P>还有两点请教:</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一、程序默认是对图中所有的标注操作,能不能改成对<FONT color=#ff0000>选定的对象中标注</FONT>操作啊。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 二、我们这里有好多图纸中标注文字颜色默认就是红色,所以用了这个程序后看不出变化。</P>
<P>------------再次感谢楼上的朋友!</P>

龙龙仔 发表于 2006-2-9 16:07:00

<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>

ljpnb 发表于 2006-2-9 16:33:00

<P>龙哥链接的贴子请得比较全面,楼主可以参考一下,另外你提到的问题可以如下修改</P>
<P>(setq ss (ssget "x" '((0 . "DIMENSION"))))<BR>---&gt;(setq ss (ssget&nbsp; '((0 . "DIMENSION"))))</P>
<P>(vla-put-TextColor obj 1)-----&gt;(vla-put-TextColor obj 其它颜色号)<BR><BR></P>

feizheng 发表于 2006-2-9 19:03:00

<P>&nbsp;谢谢 <A name=82717><FONT color=#000066><B>ljpnb</B></FONT></A>和龙哥,我觉得&nbsp; <A name=82717><FONT color=#000066><B>ljpnb</B></FONT></A>&nbsp;改过后的可以选择对象这一点更人性化一些 ,毕竟这是<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>&nbsp;</P>

ljpnb 发表于 2006-2-9 19:47:00

程序当中(setq txt (vla-get-TextOverride obj))的TXT值,对TXT值多加一个判断就可以了。

feizheng 发表于 2006-2-10 10:43:00

根据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了。

zmdjing 发表于 2006-2-10 10:55:00

怎么把图片传的和楼主一样啊我不会拜托大家帮帮谢了

feizheng 发表于 2006-2-10 11:03:00

<P>我是直接作为上传jpg图片的,显示出来就是这样了。</P>
页: [1] 2 3
查看完整版本: [LISP]求助-如何特殊显示修改过的标注文字