davidson_cesar 发表于 2022-7-6 09:40:42

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

pBe 发表于 2022-7-6 09:46:04

试试这个
 
http://www.cadtutor.net/forum/showthread.php?46135-Batch Find amp;Replace Text&highlight=批次+查找。html

davidson_cesar 发表于 2022-7-6 09:52:55

感谢您回复Pb。但我想改进我上面提到的Lisp程序。我怎样才能改善这种习惯?

pBe 发表于 2022-7-6 09:55:49

 
我从来没有真正看过代码。
我的回复是基于帖子的标题,很抱歉
 
你知道他们是怎么说的,“不要试图重新发明轮子”
 
我想这是可以改进的(如果还有什么需要改进的话),但我理解你的意思:眨眼:
 
第一眼:
可以选择“只查找整个单词”就好了
 
(QuickFR ss T);
 
我稍后会看一看

Lee Mac 发表于 2022-7-6 09:59:40

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>

davidson_cesar 发表于 2022-7-6 10:11:03

谢谢

pBe 发表于 2022-7-6 10:15:54

那么回到你的代码
 
在块上包含文本并不难,但问题是您是否也要包含属性?
 
不过,我认为包含维度文本将是一个困难的过程,除非它是一个覆盖,否则检索值将是轻而易举的。
 
>帮助!!!
 
我的建议:(问题真的)
我注意到你遍历列表(*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测试
使用嵌套选择抓取多行文字实体(如果对象与标注多行文字重叠,则不可靠):

Lee Mac 发表于 2022-7-6 10:21:03

 
好极了我喜欢它。
 
谢谢李

pBe 发表于 2022-7-6 10:22:46

 
不客气

Lee Mac 发表于 2022-7-6 10:29:38

对不起,李,我是一个初学者。我试图将第一个选项“挖掘维度的匿名块定义”放在lisp中,但没有成功。
你能帮我整理一下吗?
页: [1] 2
查看完整版本: Lisp在Aut中更改单词