atb1984 发表于 2022-7-6 14:51:24

宏帮助

我有一个用于标题栏信息的块,其属性包括绘图标题、日期、绘图人、检查人等。是否有宏或lisp例程可用于自动更改绘图中的一个属性。我需要在大约100个图形中使用相同的首字母更改“Approved By”属性,我正在尝试找到最快速的方法来实现这一点,而实际上不必在每个图形中键入首字母。我熟悉编写lisp例程,但对visual basic和宏一点也不熟悉。
 
我正在运行autocad 2004
 
提前感谢您的帮助。

Lee Mac 发表于 2022-7-6 15:12:00

在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”,因为标签不能包含空格。

atb1984 发表于 2022-7-6 15:18:54

谢谢你的回复,这个程序运行良好,是一个很好的起点。
 
如果我想使用这个命令编辑几个属性,例程的哪一部分会改变?
 
例如,编辑“checked\u by”和“approved\u by”字段。
 
或者我需要创建第二个例程并使用两个命令在dwg中执行它吗?

Lee Mac 发表于 2022-7-6 15:34:09

只需将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))

BIGAL 发表于 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之前添加读取文件

Lee Mac 发表于 2022-7-6 15:55:09

 
不错的一个BiGAl,一些很棒的建议。
页: [1]
查看完整版本: 宏帮助