试试这个
- ;; cca.lsp
- (defun C:CCA (/ attent atttag attval elist en head pt ss tail)
- (setq osm (getvar "osmode"))
- (setvar "osmode" 513)
- (setq pt (getpoint
- "\n *** Specify point on the source block ***"))
- (setq ss (ssget pt (list (cons 0 "INSERT") (cons 66 1))))
- (sssetfirst nil ss)
- (if ss
- (progn
- (setq en (ssname ss 0))
- (setq elist (entget en))
- (while (= (cdr
- (assoc 0
- (setq elist (entget (entnext
- (setq attent (cdr (assoc -1 elist))))))))
- "ATTRIB")
- (setq atttag (cdr (assoc 2 elist)))
- (setq attval (cdr (assoc 1 elist)))
- (cond ((eq "NODE_ID" atttag)
- (setq head (cdr (assoc 1 elist))))
- ((eq "DEVICE-TYPE_ID" atttag)
- (setq tail (cdr (assoc 1 elist))))
- (T nil)
- )
- (ssdel en ss)
- )
- )
- (princ "\n 0 blocks selected")
- )
- (sssetfirst nil nil)
- (setq ss nil)
- (prompt
- "\n *** Select all target blocks you need to update ***")
- (setq ss (ssget (list (cons 0 "INSERT") (cons 66 1))))
- (sssetfirst nil ss)
- (if (and head tail ss)
- (progn
- (while
- (setq en (ssname ss 0))
- (setq elist (entget en))
- (while (= (cdr
- (assoc 0
- (setq elist (entget (entnext
- (setq attent (cdr (assoc -1 elist))))))))
- "ATTRIB")
- (setq atttag (cdr (assoc 2 elist)))
- (if (eq "ACTIVE" atttag)
- (progn
- (entmod (subst (cons 1 (strcat head "-" tail))
- (assoc 1 elist)
- elist))
- (entupd en)
- )
- )
- (ssdel en ss)
- )
- )
- (sssetfirst nil nil)
- )
- (princ "\n 0 blocks selected")
- )
- (setvar "osmode" osm)
- (princ)
- )
- (princ " *** Start command wit CCA ***")
- (princ)
~'J'~ |