乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 15|回复: 12

[编程交流] Lisp在Aut中更改单词

[复制链接]

2

主题

7

帖子

5

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 09:40:42 | 显示全部楼层 |阅读模式
你好
下面的lisp是用于更改Autocad图形中文字(文字和多行文字)的lisp。我想知道如何修改这个lisp,以改变块和/或尺寸。有可能吗?
 
 
 
  1. (vl-load-com)
  2. (setq *QuickFR:Words*
  3.       '(("milk" . "coffee")
  4.         ("water" . "wine")
  5.         ("juice" . "beer"))
  6.      )
  7. (defun str-search (pat str / p)
  8. (if (setq p (vl-string-search (strcase pat) (strcase str)))
  9.    (substr str (1+ p) (strlen pat))
  10. )
  11. )
  12. (defun QuickFR (ss / obj item str found changed)
  13. (vlax-for obj (vla-get-ActiveSelectionSet (vla-get-activedocument (vlax-get-acad-object)))
  14.    (setq str (vla-get-TextString obj) found nil)
  15.    (foreach item *QuickFR:Words*
  16.      (while (setq found (str-search (car item) str))
  17.        (setq str (vl-string-subst (cdr item) found str) changed t)
  18.      )
  19.    )
  20.    (if changed(vla-put-TextString obj str))
  21. )
  22. )
  23. (defun c:QuickFR (/ ss)
  24. (if (setq ss (ssget "_:L" '((0 . "TEXT,MTEXT"))))
  25.    (QuickFR ss)
  26. )
  27. (princ)
  28. )
  29. (defun c:QuickFR_All (/ ss)
  30. (if (setq ss (ssget "_X" '((0 . "TEXT,MTEXT"))))
  31.    (QuickFR ss)
  32. )
  33. (princ)
  34. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 09:46:04 | 显示全部楼层
试试这个
 
http://www.cadtutor.net/forum/showthread.php?46135-Batch Find amp;Replace Text&highlight=批次+查找。html
回复

使用道具 举报

2

主题

7

帖子

5

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 09:52:55 | 显示全部楼层
感谢您回复Pb。但我想改进我上面提到的Lisp程序。我怎样才能改善这种习惯?
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

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

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:59:40 | 显示全部楼层
Davidson,张贴代码时请使用代码标签:
 
  1.   (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>
回复

使用道具 举报

2

主题

7

帖子

5

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 10:11:03 | 显示全部楼层
谢谢
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 10:15:54 | 显示全部楼层
那么回到你的代码
 
在块上包含文本并不难,但问题是您是否也要包含属性?
 
不过,我认为包含维度文本将是一个困难的过程,除非它是一个覆盖,否则检索值将是轻而易举的。
 
>帮助!!!
 
我的建议:(问题真的)
我注意到你遍历列表(*QuickFR:Words*)对于每一个选中的文本/多行文字,我会做一些类似于2相字符串匹配的事情。
 
第一阶段:如果没有,不要费心去看清单
第二阶段:如果T,则执行
 
我会这样做,在主例程(一次性)之前,假设*QuickFR:Words*的值来自一个子例程
 
  1. (setq phase1 "")
  2.      (foreach v *QuickFR:Words*
  3.        (setq phase1  (strcat phase1 "*" (car v) "*,") ))

 
从你的例子中,它会给你“*牛奶*,*水*,*果汁*,”
 
运行前
  1.   ...(foreach item *QuickFR:Words*
  2.      (while (setq foun.....

 
运行阶段1测试
使用嵌套选择抓取多行文字实体(如果对象与标注多行文字重叠,则不可靠):
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:21:03 | 显示全部楼层
 
好极了我喜欢它。
 
谢谢李
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 10:22:46 | 显示全部楼层
 
不客气
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:29:38 | 显示全部楼层
对不起,李,我是一个初学者。我试图将第一个选项“挖掘维度的匿名块定义”放在lisp中,但没有成功。
你能帮我整理一下吗?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-7 00:15 , Processed in 0.342176 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表