; Auslesen von Attributinformationen einer Blockreferenz ; ; Aufruf (getATTDATA ) ; ; Rückgabe nil oder (("ATT1" "aaa" #) ("ATT2" "bbb" #)) ; (defun getATTDATA (ITEM / ATTDATA) (if (and ITEM (or (= (type ITEM) 'VLA-OBJECT) (setq ITEM (vlax-ename->vla-object ITEM))) (vlax-property-available-p ITEM 'hasattributes) (= (vla-get-hasattributes ITEM) :vlax-true) ) (setq ATTDATA (vlax-safearray->list(vlax-variant-value (vla-Getattributes ITEM))) ATTDATA (mapcar 'list (mapcar 'strcase (mapcar 'vla-get-TagString ATTDATA)) ; ATT-Tag (mapcar 'vla-get-TextString ATTDATA) ; ATT-Wert ATTDATA ; vla-Objekt ) ) ) );_defun ; Kunterbunte Beispielfunktion (defun C:TEST nil (if (and; Blockreferenz ermitteln (setq SRCBNAME "SK_NEU") (setq BlockRefli (ssget "_X" (list '(0 . "INSERT")(cons 410 (getvar "CTAB"))))) (setq BlockRefli (vl-remove-if-not '(lambda(i)(wcmatch (strcase(vla-get-effectivename i)) SRCBNAME)) (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex BlockRefli))) ) ) ) (= 1 (length BlockRefli)) ; Attributdaten auslesen (setq ALIST (getATTDATA (car BlockRefli))) ; Liste der Attributdaten einlesen (setq eb3 (cadr(assoc "ATT1" ALIST))) ; Beispielzuordnung, GROSSschreibung beachten, NAME ANPASSEN! (setq eb7 (cadr(assoc "ATT2" ALIST))) ; Beispielzuordnung, GROSSschreibung beachten, NAME ANPASSEN! ) ; wenn alles passt wie gewünscht, weitermachen ; Test-Ausgabe: Was ist in ALIST enthalten?= (progn (setq INHALTALIST ALIST) (while INHALTALIST (terpri)(prin1 (car INHALTALIST)) (setq INHALTALIST (cdr INHALTALIST)) ) (alert eb3) (alert eb7) ) (alert "Problem..?") ) (nil) );_defun