基于样式查找文本
大家好!!我是autolisp的新手。我需要帮助来解决这个问题。。
我希望在图纸中找到特定风格(如罗马语)的多行文字“J”,并检索其位置(x,y坐标)。我试图在文本的各个位置用一个块(比如“星”)替换所有出现的文本。我找到了lisp程序来查找文本,但我似乎不知道如何使用其属性来进一步处理。
急切地等待回应。。。 欢迎来到论坛。
不能将Lisp与Autocad LT一起使用。 嗯,我必须说,你似乎是一个敏锐的观察者。我实际上在使用Autocad 2011。我不认为我的个人资料会对回复产生影响。 好的,你说的多行文字“J”是什么意思?
你会用一个普通块(不是属性块或动态块)来替换所有文本和MTEXT对象吗? 我正在尝试将图形从PDMS软件转换到autocad。PDMS中的角度符号在autocad中表示为J。我发现正在使用的字体样式叫做“FOP11901”。这实际上是与autocad不兼容的PDMS符号库。因此,我考虑开发一个autolisp文件,该文件将:
1.查找所有出现的具有fontstyle“FOP11901”的多行文字“J”
2、检索其位置坐标。
3、删除文本。
4、在同一位置插入“starang”块(可在图纸中找到)。
希望这能解决我的问题
因此,您需要根据其字体样式选择多行文字,而不是根据您命名的文字样式?
我还是不知道你说的多行文字“j”是什么意思?(如果其字体样式为块,则这可能是唯一需要替换为块的字符串
根据上述说法)?
我附上了相同的屏幕截图:
http://s8.postimage.org/x34tnxp2d/image.png
我相信是文字风格,而不是字体风格。
我的意思是,我有一个多行文本,只有一个字符串条目,那就是字母“J”。此多行文本需要用块替换。 可以
现在试试这个草稿,告诉我它是否适合你的需要。
(defun c:Test (/ b ss)
(if (and (/= (setq b (getstring t "\n Enter name of Block :")) "")
(if (not (tblsearch "BLOCK" B))
(progn
(princ "\n name of Block is not existed ")
nil
)
t
)
(progn (prompt " Select texts ")
(setq
ss (ssget "_:L" '((0 . "*TEXT") (1 . "j") (7 . "FOP11901")))
))
)
((lambda (i / sn e)
(while (setq sn (ssname ss (setq i (1+ i))))
(if (entmakex (list '(0 . "INSERT")
(cons 2 b)
(assoc 10 (entget sn))
(assoc 50 (entget sn))
'(41 . 1.)
'(42 . 1.)
'(43 . 1.)
)
)
(entdel sn)
)
)
)
-1
)
)
(princ)
)
谢谢Tharwat,代码草案有效!!!:D
很高兴听到这个消息。
祝你好运
页:
[1]
2