(defun GetAttribut ( pAttName / a1 a2 iAttEname ename edate a1 ok ) (setq a1 (nentsel) iAttEname nil) (length a1) (cond ((= (type a1) 'LIST) (cond ; direkt ein Attribut gewählt -> mal schauen obs das richtige ist ((and (setq edate (entget (car a1))) (= (cdr (assoc 0 edate)) "ATTRIB") (= (cdr (assoc 2 edate)) pAttName) ) (setq iAttEname (car a1)) ) ; ein Attribut in einem nicht verschachtelten Block gewählt aber das falsche ((and (setq edate (entget (car a1))) (= (cdr (assoc 0 edate)) "ATTRIB") (= (length a1) 2) ) (setq ename (ssname (ssadd (car a1) (ssadd)) 0)) (while (and (setq ename (entnext ename)) (setq edate (entget ename)) (= (cdr (assoc 0 edate)) "ATTRIB") ) (if (= (cdr (assoc 2 edate)) pAttName) (setq iAttEname ename)) ) ) ; ein Attribut in einem verschachtelten Block gewählt aber das falsche ((and (setq edate (entget (car a1))) (= (cdr (assoc 0 edate)) "ATTRIB") (= (length a1) 4) ) (setq ename (car a1) ok nil) (while (not ok) (setq ename (entnext ename)) (if (= (cdr (assoc 0 (entget ename))) "SEQEND") (setq ename (cdr (assoc -2 (entget ename))) ok t)) ) (while (and (setq ename (entnext ename)) (setq edate (entget ename)) (= (cdr (assoc 0 edate)) "ATTRIB") ) (if (= (cdr (assoc 2 edate)) pAttName) (setq iAttEname ename)) ) ) ; ein komplexes Element gewählt ((= (length a1) 4) (setq a2 (cadddr a1) i 0) (while (and (not iAttEname) (< i (length a2))) (setq ename (nth i a2) i (1+ i)) (while (and (setq ename (entnext ename)) (setq edate (entget ename)) (= (cdr (assoc 0 edate)) "ATTRIB") ) (if (= (cdr (assoc 2 edate)) pAttName) (setq iAttEname ename)) ) ) ) ) ) ) iAttEname )