试试这个。它会提示您选择所需的块,但我们可以进行操作。我只是想看看这是否在做你想做的事情。
注意,它会要求您输入属性标记,因此在运行LISP之前,您应该知道它是什么。
如果可行,我们可以调整它,使其自动选择要编辑的块。
- (defun c:blkEdit( / ent attTag attVal)
- (setq ent (car (entsel "\nSelect block: "))
- attTag (getstring "\nEnter attribute tag: ")
- attVal (getstring "\nEnter desired value for attribute: "))
- (blkTagEdit ent attTag attVal)
- )
- (defun blkTagEdit(blkEnt attTag attVal / attEnt attLst)
- (if (= (cdr (assoc 66 (entget blkEnt))) 1)
- (progn
- (setq attEnt (entnext blkEnt))
- (while (/= (cdr (assoc 0 (entget attEnt))) "SEQEND")
- (if attEnt (setq attLst (cons (cons (cdr (assoc 2 (entget attEnt))) attEnt) attLst)))
- (setq attEnt (entnext attEnt)))
- (if attLst (mapcar '(lambda (x) (vla-put-textString (vlax-ename->vla-object (cdr x)) attVal))
- (vl-remove-if-not '(lambda (x) (= (car x) attTag)) attLst)))
- )
- )
- (princ)
- )
|