宏帮助
我有一个用于标题栏信息的块,其属性包括绘图标题、日期、绘图人、检查人等。是否有宏或lisp例程可用于自动更改绘图中的一个属性。我需要在大约100个图形中使用相同的首字母更改“Approved By”属性,我正在尝试找到最快速的方法来实现这一点,而实际上不必在每个图形中键入首字母。我熟悉编写lisp例程,但对visual basic和宏一点也不熟悉。我正在运行autocad 2004
提前感谢您的帮助。 在LISP中,可以这样做:
(defun c:upd (/ ss att aLst)
(if (setq ss (ssget "X" (list (cons 0 "INSERT") (cons 2 "BLOCKNAME")
(cons 66 1) (if (getvar "CTAB")(cons 410 (getvar "CTAB"))
(cons 67 (- 1 (getvar "TILEMODE")))))))
(progn
(foreach x (mapcar 'cadr (ssnamex ss))
(setq att (entnext x))
(while (not (eq "SEQEND" (cdadr (setq aLst (entget att)))))
(if (= "APPROVED_BY" (cdr (assoc 2 aLst)))
(entmod (subst (cons 1 "ABC") (assoc 1 aLst) aLst)))
(setq att (entnext att)))))
(princ "\n<!> No Block Found <!>"))
(command "_regenall")
(princ))
更改突出显示的部分以适合。
我假设你的意思是“approved\u by”,而不是“approved by”,因为标签不能包含空格。 谢谢你的回复,这个程序运行良好,是一个很好的起点。
如果我想使用这个命令编辑几个属性,例程的哪一部分会改变?
例如,编辑“checked\u by”和“approved\u by”字段。
或者我需要创建第二个例程并使用两个命令在dwg中执行它吗? 只需将IF更改为如下条件:
(defun c:upd (/ ss att aLst)
(if (setq ss (ssget "X" (list (cons 0 "INSERT") (cons 2 "BLOCKNAME")
(cons 66 1) (if (getvar "CTAB")(cons 410 (getvar "CTAB"))
(cons 67 (- 1 (getvar "TILEMODE")))))))
(progn
(foreach x (mapcar 'cadr (ssnamex ss))
(setq att (entnext x))
(while (not (eq "SEQEND" (cdadr (setq aLst (entget att)))))
(cond ((= "APPROVED_BY" (cdr (assoc 2 aLst)))
(entmod (subst (cons 1 "ABC") (assoc 1 aLst) aLst)))
((= "CHECKED_BY" (cdr (assoc 2 aLst)))
(entmod (subst (cons 1 "DEF") (assoc 1 aLst) aLst))))
(setq att (entnext att)))))
(princ "\n<!> No Block Found <!>"))
(command "_regenall")
(princ))
还有一些额外的帮助,你提到100个DWG,你可以创建一个脚本来打开DWG并自动运行。你会惊讶于这种情况发生得有多快。
打开dwg1(加载“upd”)upd关闭Y
打开dwg2(加载“upd”)upd关闭Y
如果你把upd。那么你的初创企业中的lsp
打开dwg1 upd关闭Y
此外,如果您需要更改名称或要更改的详细信息,可以让它以这种方式读取数据文件,您不会一直更改lisp代码。
FRED批准
乔治检查
修订版1
txt文件
弗雷德
乔治
1.
只需在lee的代码中的if之前添加读取文件
不错的一个BiGAl,一些很棒的建议。
页:
[1]