;----------------------------------------------------------- ; ATTSEL.Lsp ; Copyright 1990 by Looking Glass Microproducts ;----------------------------------------------------------- ; Return item from an association list ; (defun ITEM (N ALIST) (cdr (assoc N ALIST)) ) ;----------------------------------------------------------- ; Return list of attributes attached to ENAME ; ((Tag Value Insertion-point).... ) ; (defun GETATTS (ENAME / ATTENT OUTLIST) (while (= "ATTRIB" (ITEM 0 (setq ENAME (entnext ENAME) ATTENT (entget ENAME) ) ) ) (setq OUTLIST (cons (list (ITEM 2 ATTENT) ; Attribute TAG (ITEM 1 ATTENT) ; Attribute VALUE (trans ; Attribute Insertion Point (if (member (ITEM 72 ATTENT) '(0 3 5)) (ITEM 10 ATTENT) (ITEM 11 ATTENT) ) ENAME 1 ) ) OUTLIST ) ) ) (reverse OUTLIST) ) ;----------------------------------------------------------- ; Return nearest of each attribute tag ; (defun NEAREST (SPNT INLIST / OUTLIST TAG PRIOR) (foreach NODE INLIST (setq TAG (car NODE) PRIOR (assoc TAG OUTLIST) ) (if (null PRIOR) (setq OUTLIST (cons NODE OUTLIST)) (if (< (distance SPNT (caddr NODE)) (distance SPNT (caddr PRIOR)) ) (setq OUTLIST (subst NODE PRIOR OUTLIST)) ) ) ) (reverse OUTLIST) ) ;----------------------------------------------------------- ; Prompt user to select an attribute. ; ; Return a list, consisting of the name and ; insertion point of the block selected, ; along with the nearest of each attribute tag. ; (defun ATTSEL (PRMPT / AGAIN ENAME ENT SPNT SELENT) (setq AGAIN T) (while AGAIN (if (setq SELENT (entsel PRMPT)) (progn (setq ENAME (car SELENT) ENT (entget ENAME) SPNT (cadr SELENT) ) (cond ((/= "INSERT" (ITEM 0 ENT)) (prompt "\nEntity is not a block." ) ) (T (setq AGAIN nil) (append SELENT (NEAREST SPNT (GETATTS ENAME)) ) ) ) ) (setq AGAIN nil) ; nothing selected ) ) )