Lisp在Aut中更改单词
你好下面的lisp是用于更改Autocad图形中文字(文字和多行文字)的lisp。我想知道如何修改这个lisp,以改变块和/或尺寸。有可能吗?
(vl-load-com)
(setq *QuickFR:Words*
'(("milk" . "coffee")
("water" . "wine")
("juice" . "beer"))
)
(defun str-search (pat str / p)
(if (setq p (vl-string-search (strcase pat) (strcase str)))
(substr str (1+ p) (strlen pat))
)
)
(defun QuickFR (ss / obj item str found changed)
(vlax-for obj (vla-get-ActiveSelectionSet (vla-get-activedocument (vlax-get-acad-object)))
(setq str (vla-get-TextString obj) found nil)
(foreach item *QuickFR:Words*
(while (setq found (str-search (car item) str))
(setq str (vl-string-subst (cdr item) found str) changed t)
)
)
(if changed(vla-put-TextString obj str))
)
)
(defun c:QuickFR (/ ss)
(if (setq ss (ssget "_:L" '((0 . "TEXT,MTEXT"))))
(QuickFR ss)
)
(princ)
)
(defun c:QuickFR_All (/ ss)
(if (setq ss (ssget "_X" '((0 . "TEXT,MTEXT"))))
(QuickFR ss)
)
(princ)
) 试试这个
http://www.cadtutor.net/forum/showthread.php?46135-Batch Find amp;Replace Text&highlight=批次+查找。html 感谢您回复Pb。但我想改进我上面提到的Lisp程序。我怎样才能改善这种习惯?
我从来没有真正看过代码。
我的回复是基于帖子的标题,很抱歉
你知道他们是怎么说的,“不要试图重新发明轮子”
我想这是可以改进的(如果还有什么需要改进的话),但我理解你的意思:眨眼:
第一眼:
可以选择“只查找整个单词”就好了
(QuickFR ss T);
我稍后会看一看 Davidson,张贴代码时请使用代码标签:
(Without the spaces in the tags)<p> </p><p>Link to original code:</p><p> </p><p>http://www.cadtutor.net/forum/showthread.php?57399-Lisp-to-change-words-in-an-Autocad-drawing&p=389220&viewfull=1#post389220</p> 谢谢 那么回到你的代码
在块上包含文本并不难,但问题是您是否也要包含属性?
不过,我认为包含维度文本将是一个困难的过程,除非它是一个覆盖,否则检索值将是轻而易举的。
>帮助!!!
我的建议:(问题真的)
我注意到你遍历列表(*QuickFR:Words*)对于每一个选中的文本/多行文字,我会做一些类似于2相字符串匹配的事情。
第一阶段:如果没有,不要费心去看清单
第二阶段:如果T,则执行
我会这样做,在主例程(一次性)之前,假设*QuickFR:Words*的值来自一个子例程
(setq phase1 "")
(foreach v *QuickFR:Words*
(setq phase1(strcat phase1 "*" (car v) "*,") ))
从你的例子中,它会给你“*牛奶*,*水*,*果汁*,”
运行前
...(foreach item *QuickFR:Words*
(while (setq foun.....
运行阶段1测试
使用嵌套选择抓取多行文字实体(如果对象与标注多行文字重叠,则不可靠):
李
好极了我喜欢它。
谢谢李
不客气 对不起,李,我是一个初学者。我试图将第一个选项“挖掘维度的匿名块定义”放在lisp中,但没有成功。
你能帮我整理一下吗?
页:
[1]
2