快速书写:
- (defun c:attfix ( / blk ent enx idx lst sel )
- (if (and (setq sel (LM:ssget "\nSelect text containing attribute values: " '("_:L" ((0 . "TEXT,MTEXT")))))
- (setq blk (LM:ssget "\nSelect block to be populated: " '("_+.:E:S:L" ((0 . "INSERT") (66 . 1)))))
- )
- (progn
- (repeat (setq idx (sslength sel))
- (setq enx (entget (ssname sel (setq idx (1- idx))))
- lst (cons (cons (cdr (assoc 10 enx)) (cdr (assoc 1 enx))) lst)
- )
- )
- (setq ent (entnext (ssname blk 0))
- enx (entget ent)
- )
- (while (= "ATTRIB" (cdr (assoc 0 enx)))
- (entmod (subst (cons 1 (nearesttext (cdr (assoc 10 enx)) lst)) (assoc 1 enx) enx))
- (setq ent (entnext ent)
- enx (entget ent)
- )
- )
- )
- )
- (princ)
- )
- (defun nearesttext ( pnt lst / dis rtn tmp )
- (setq rtn (cdar lst)
- dis (distance pnt (caar lst))
- )
- (foreach itm (cdr lst)
- (if (< (setq tmp (distance pnt (car itm))) dis)
- (setq rtn (cdr itm)
- dis tmp
- )
- )
- )
- rtn
- )
- ;; ssget - Lee Mac
- ;; A wrapper for the ssget function to permit the use of a custom selection prompt
- ;; msg - [str] selection prompt
- ;; arg - [lst] list of ssget arguments
- (defun LM:ssget ( msg arg / sel )
- (princ msg)
- (setvar 'nomutt 1)
- (setq sel (vl-catch-all-apply 'ssget arg))
- (setvar 'nomutt 0)
- (if (not (vl-catch-all-error-p sel)) sel)
- )
- (princ)
原文不会被删除(以防万一!);不考虑没有相应文本项的属性。 |