在所有类型的文本中搜索f
大家好,我需要一些帮助来修改我找到的lisp。我需要打开一个区域,让它找到所有多行文字、多重引线和维度,并查找强制文字颜色。如果它发现任何强制文本,只需将强制文本更改为另一种颜色。
下面的代码对于多行文字和多重引线非常有效,但我需要修改两件事:
[列表=1]
[*]我需要能够打开一个区域,目前我必须单独选择每个项目。我知道我需要从entsel到ssget,但无论如何设置ssget,我总是会遇到选择错误。
[*]我还需要在例程中包含维度文本。它目前不适用于维度。
[/列表]
任何帮助都将不胜感激。
非常感谢。
(defun c:test2 (/ en_ename en_obj en_txt)
(vl-load-com)
(if (and (setq en_ename (car (entsel "\nSelect Objects: ")))
(setq en_obj (vlax-ename->vla-object en_ename))
)
(progn (setq en_txt (vla-get-TextString en_obj))
(while (vl-string-search "\\C1;" en_txt) (setq en_txt (vl-string-subst "\\C3;" "\\C1;" en_txt)))
(vla-put-textstring en_obj en_txt)
)
)
(princ)
)
一些提示,未经测试!
(setq ss (ssget (list (cons 0 "Mtext,Leader,dimension"))))
(repeat (setq x (sslength ss))
(setq en_obj (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
(setq en_txt (vla-get-TextString en_obj))
(if ( = (vl-string-search "\\C1;" en_txt) T)
(progn
(setq en_txt (vl-string-subst "\\C3;" "\\C1;" en_txt))
(vla-put-textstring en_obj en_txt)
)
)
) ; end repeat
比加尔,
非常感谢您提供的信息,有两件事。。。如果我将维度保留在:
(setq ss(ssget(列表(cons 0“多行文字,引线,维度”)))
我得到:选择对象:;错误:ActiveX服务器返回错误:未知名称:TextString
如果我移除并离开:
(setq ss(ssget(列表(cons 0“多行文字,前导”)))
我没有收到错误,但它不起作用。。。。我在命令提示符下什么也没有得到。我会继续玩它,但任何帮助都将不胜感激。
截至目前的代码:
(defun c:test7 (/ en_ename en_obj en_txt)
(vl-load-com)
(setq ss (ssget (list (cons 0 "Mtext,multiLeader"))))
(repeat (setq x (sslength ss))
(setq en_obj (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
(setq en_txt (vla-get-TextString en_obj))
(if ( = (vl-string-search "\\C1;" en_txt) T)
(progn
(setq en_txt (vl-string-subst "\\C3;" "\\C1;" en_txt))
(vla-put-textstring en_obj en_txt)
)
)
)
(princ)
)
比加尔,
好的,所以我发得有点快。很抱歉。通过将你的代码和我的代码结合起来,我解决了第二个问题。但我仍然需要一些尺寸方面的帮助。我认为这必须以不同的方式处理,因为我不确定维度中的文本是否被视为文本字符串。不过我只是在猜测。
(defun c:test7 (/ en_ename en_obj en_txt)
(vl-load-com)
(setq ss (ssget (list (cons 0 "Mtext,multiLeader"))))
(repeat (setq x (sslength ss))
(setq en_obj (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
(setq en_txt (vla-get-TextString en_obj))
(progn
(setq en_txt (vla-get-TextString en_obj))
(while (vl-string-search "\\C1;" en_txt)
(setq en_txt (vl-string-subst "\\C3;" "\\C1;" en_txt)))
(vla-put-textstring en_obj en_txt)
)
)
(princ)
)
好吧,那么。。。这是我到目前为止所拥有的,它是有效的!!!某种程度上。
我得到一个错误:;错误:错误的参数类型:VLA-OBJECT
我能拼凑起来可能是因为我的选择集。我对选择集很陌生,我知道我这样做是不对的。我似乎不知道该怎么做才对。
由于我需要处理不同于多行文字和多重引线的维度,如何通过窗口执行一个选择并设置两个单独的参数。
现在,LiSP将要求我执行一个选择,然后执行另一个选择。
(defun c:test11 (/ ss_mm ss_dm mm_obj mm_txt)
(vl-load-com)
(setq ss_mm (ssget (list (cons 0 "MTEXT,MULTILEADER"))))
(setq ss_dm (ssget (list (cons 0 "DIMENSION"))))
(repeat (setq x_mm (sslength ss_mm))
(setq mm_obj (vlax-ename->vla-object (ssname ss_mm (setq x_mm (- x_mm 1)))))
(setq mm_txt (vla-get-TextString mm_obj))
(progn
(while (vl-string-search "\\C1;" mm_txt)
(setq mm_txt (vl-string-subst "\\C3;" "\\C1;" mm_txt)))
(vla-put-textstring mm_obj mm_txt)
)
)
(repeat (setq x_dm (sslength ss_dm))
(setq dm_obj (vlax-ename->vla-object (ssname ss_dm (setq x_dm (- x_dm 1)))))
(setq dm_txt (vla-get-textoverride dm_obj))
(progn
(while (vl-string-search "\\C1;" dm_txt)
(setq dm_txt (vl-string-subst "\\C3;" "\\C1;" dm_txt)))
(vla-put-textoverride dm_obj dm_txt)
)
)
(vla-delete ss_dm)
(vla-delete ss_mm)
(princ)
)
(defun C:test11 ( / fBIGAL SS i o s )
; (fBIGAL s "\\C1;" "\\C3;")
(defun fBIGAL ( s sr su ) (while (vl-string-search sr s) (setq s (vl-string-subst su sr s)) ) )
(if (setq SS (ssget "_:L-I" (list (cons 0 "MTEXT,MULTILEADER,DIMENSION"))))
(repeat (setq i (sslength SS))
(if (setq o (vlax-ename->vla-object (ssname SS (setq i (1- i)))))
(or
(and
(vlax-property-available-p o 'TextString)
(setq s (fBIGAL (vla-get-TextString o) "\\C1;" "\\C3;"))
(vla-put-TextString o s)
)
(and
(vlax-property-available-p o 'TextOverride)
(setq s (fBIGAL (vla-get-TextOverride o) "\\C1;" "\\C3;"))
(vla-put-TextOverride o s)
)
); or
); if
); repeat
); if SS
(princ)
) (vl-load-com) (princ)
吼叫声
非常感谢!!我已经玩了好几天了。它工作得很好。这个周末我会仔细分析一下,看看你是怎么做到的。再次感谢!! Cylis0509当您试图找到正确的名称以及在顶层可以直接访问哪些属性时,这个lisp是您最好的朋友。在某些情况下,当您沿着对象数据树向下时,可以继续转储。还可以查看SSGET提供的一些选项,如X W F和http://www.lee-mac.com有一个关于各种其他选项的很好的教程,比如“L-I”
重新剖析(ssname SS(setq i(1-i k)а)])项目编号从总数中减去1的原因是选择集从零开始,而不是从1开始。
;;; Dump all methods and properties for selected objects ;
;;;===================================================================;
;;; DumpIt ;
;;;-------------------------------------------------------------------;
;;;===================================================================;
(defun C:DumpIt ( / ent)
(while (setq ent (entsel))
(vlax-Dump-Object
(vlax-Ename->Vla-Object (car ent)) T
)
)
(textpage)
(princ)
)
比加尔,
非常感谢!这Lisp程序是无价之宝。非常感谢。
页:
[1]