乐筑天下

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

[编程交流] 宏帮助

[复制链接]

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 14:51:24 | 显示全部楼层 |阅读模式
我有一个用于标题栏信息的块,其属性包括绘图标题、日期、绘图人、检查人等。是否有宏或lisp例程可用于自动更改绘图中的一个属性。我需要在大约100个图形中使用相同的首字母更改“Approved By”属性,我正在尝试找到最快速的方法来实现这一点,而实际上不必在每个图形中键入首字母。我熟悉编写lisp例程,但对visual basic和宏一点也不熟悉。
 
我正在运行autocad 2004
 
提前感谢您的帮助。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:12:00 | 显示全部楼层
在LISP中,可以这样做:
 
  1. (defun c:upd (/ ss att aLst)
  2. (if (setq ss (ssget "X" (list (cons 0 "INSERT") (cons 2 "[b][color=Red]BLOCKNAME[/color][/b]")
  3.    (cons 66 1) (if (getvar "CTAB")(cons 410 (getvar "CTAB"))
  4.       (cons 67 (- 1 (getvar "TILEMODE")))))))
  5.    (progn
  6.      (foreach x (mapcar 'cadr (ssnamex ss))
  7.    (setq att (entnext x))
  8.    (while (not (eq "SEQEND" (cdadr (setq aLst (entget att)))))
  9.      (if (= "[color=Red][b]APPROVED_BY[/b][/color]" (cdr (assoc 2 aLst)))
  10.        (entmod (subst (cons 1 "[b][color=Red]ABC[/color][/b]") (assoc 1 aLst) aLst)))
  11.      (setq att (entnext att)))))
  12.    (princ "\n<!> No Block Found <!>"))
  13. (command "_regenall")
  14. (princ))

 
更改突出显示的部分以适合。
 
我假设你的意思是“approved\u by”,而不是“approved by”,因为标签不能包含空格。
回复

使用道具 举报

3

主题

9

帖子

6

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 15:18:54 | 显示全部楼层
谢谢你的回复,这个程序运行良好,是一个很好的起点。
 
如果我想使用这个命令编辑几个属性,例程的哪一部分会改变?
 
例如,编辑“checked\u by”和“approved\u by”字段。
 
或者我需要创建第二个例程并使用两个命令在dwg中执行它吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:34:09 | 显示全部楼层
只需将IF更改为如下条件:
 
  1. (defun c:upd (/ ss att aLst)
  2. (if (setq ss (ssget "X" (list (cons 0 "INSERT") (cons 2 "[color=Red][b]BLOCKNAME[/b][/color]")
  3.    (cons 66 1) (if (getvar "CTAB")(cons 410 (getvar "CTAB"))
  4.       (cons 67 (- 1 (getvar "TILEMODE")))))))
  5.    (progn
  6.      (foreach x (mapcar 'cadr (ssnamex ss))
  7.    (setq att (entnext x))
  8.    (while (not (eq "SEQEND" (cdadr (setq aLst (entget att)))))
  9.      (cond ((= "[b][color=Red]APPROVED_BY[/color][/b]" (cdr (assoc 2 aLst)))
  10.         (entmod (subst (cons 1 "[color=Red][b]ABC[/b][/color]") (assoc 1 aLst) aLst)))
  11.        ((= "[b][color=Red]CHECKED_BY[/color][/b]" (cdr (assoc 2 aLst)))
  12.         (entmod (subst (cons 1 "[color=Red][b]DEF[/b][/color]") (assoc 1 aLst) aLst))))
  13.      (setq att (entnext att)))))
  14.    (princ "\n<!> No Block Found <!>"))
  15. (command "_regenall")
  16. (princ))
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 15:51:15 | 显示全部楼层
还有一些额外的帮助,你提到100个DWG,你可以创建一个脚本来打开DWG并自动运行。你会惊讶于这种情况发生得有多快。
 
打开dwg1(加载“upd”)upd关闭Y
打开dwg2(加载“upd”)upd关闭Y
 
如果你把upd。那么你的初创企业中的lsp
打开dwg1 upd关闭Y
 
此外,如果您需要更改名称或要更改的详细信息,可以让它以这种方式读取数据文件,您不会一直更改lisp代码。
FRED批准
乔治检查
修订版1
 
txt文件
弗雷德
乔治
1.
 
只需在lee的代码中的if之前添加读取文件
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:55:09 | 显示全部楼层
 
不错的一个BiGAl,一些很棒的建议。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-6-1 21:58 , Processed in 0.728394 second(s), 75 queries .

© 2020-2025 乐筑天下

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