| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Attribute abfragen (1420 / mal gelesen)
|
vision Mitglied
Beiträge: 113 Registriert: 27.10.2003 AutoCAD 2015 Expresstools Windows 10
|
erstellt am: 06. Nov. 2018 12:37 <-- editieren / zitieren --> Unities abgeben:
Hallo, in dem Lisp möchte ich noch den Wert vom Attribut BEZEICHNUNG2 im Block abfragen. Für ein Beispiel hierzu währe ich sehr dankbar. (if(and(SETQ ent (car(ENTSEL "\nText-Block anklicken: "))) (setq gg (assoc 10 (entget ent))) (=(cdr(assoc 66 (entget ENT)))1) ) (WHILE (AND (SETQ ent (ENTNEXT ent)) (/= (CDR (ASSOC 0 (ENTGET ent))) "SEQEND") ) (IF(AND (=(CDR (ASSOC 0 (ENTGET ent))) "ATTRIB") (=(strcase(CDR (ASSOC 2 (ENTGET ent)))) "BEZEICHNUNG1") ;Attributname 1! ) (progn (SETQ BLATTNR (CDR (ASSOC 1 (ENTGET ent)))) (Ausgabe) ;Unterprogramm ) ) ) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 06. Nov. 2018 12:46 <-- editieren / zitieren --> Unities abgeben: Nur für vision
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 06. Nov. 2018 12:58 <-- editieren / zitieren --> Unities abgeben: Nur für vision
Hallo Vision, CADmium war schneller, aber hier auch nochmal ein Beispiel, das kannst Du Dir bestimmt anpassen: Code:
(defun test:attwert (obj AttName / OBJLIST ATTWERT) (while (and(not AttWert) (setq obj (entnext obj)) (setq objList(entget obj)) (=(cdr(assoc 0 objList))"ATTRIB")) (if(=(strcase(cdr(assoc 2 objList)))(strcase AttName)) (setq AttWert (cdr(assoc 1 objList)))) ) AttWert) (defun c:test ( / ATTNAME ATTWERT OBJ) (setq AttName "BEZEICHNUNG2") (if (and (setq obj (car(entsel "\nBlock picken:"))) (= (cdr(assoc 0 (entget obj)))"INSERT")) (if (setq AttWert(test:attwert obj AttName)) (alert AttWert) (alert (strcat "Attribut mit dem Namen \""AttName"\" nicht gefunden."))) (if obj (alert "Das war kein Block.")) ) (princ))
------------------ viele Grüße Jörn http://www.bosse-engineering.com Foto-Manager Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
vision Mitglied
Beiträge: 113 Registriert: 27.10.2003 AutoCAD 2015 Expresstools Windows 10
|
erstellt am: 06. Nov. 2018 13:58 <-- editieren / zitieren --> Unities abgeben:
Hallo, vielleicht ist meine Anfrage nicht so eindeutig. Ich möchte die Werte von den zwei Attributen (BEZEICHNUNG1, BEZEICHNUNG2) zusammen haben. Ich hatte es schon mit einer zweiten IF-Abfrage mit dem Attribut BEZEICHNUNG2 innerhalb der WHILE Schleife versucht. Das wurde mir aber mit einem Fehler quittiert. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 381 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 06. Nov. 2018 14:31 <-- editieren / zitieren --> Unities abgeben: Nur für vision
|
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 06. Nov. 2018 14:32 <-- editieren / zitieren --> Unities abgeben: Nur für vision
oder sowas.... Code: (if(and(SETQ ent (car(ENTSEL "\nText-Block anklicken: "))) (setq gg (assoc 10 (entget ent))) (=(cdr(assoc 66 (entget ENT)))1) ) (WHILE (AND (SETQ ent (ENTNEXT ent)) (/= (CDR (ASSOC 0 (ENTGET ent))) "SEQEND") ) (if(=(CDR (ASSOC 0 (ENTGET ent))) "ATTRIB") (cond ((=(strcase(CDR (ASSOC 2 (ENTGET ent)))) "BEZEICHNUNG1") ;Attributname 1! (SETQ TEXT1 (CDR (ASSOC 1 (ENTGET ent)))) ) ((=(strcase(CDR (ASSOC 2 (ENTGET ent)))) "BEZEICHNUNG2") ;Attributname 1! (SETQ TEXT2 (CDR (ASSOC 1 (ENTGET ent)))) ) ) ) ) (if(and TEXT1 TEXT2) (progn (setq TEXTGES(strcat TEXT1 TEXT2)) (machsonstnochwas) ) ) )
------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
vision Mitglied
Beiträge: 113 Registriert: 27.10.2003 AutoCAD 2015 Expresstools Windows 10
|
erstellt am: 06. Nov. 2018 15:35 <-- editieren / zitieren --> Unities abgeben:
|
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 06. Nov. 2018 15:47 <-- editieren / zitieren --> Unities abgeben: Nur für vision
|
vision Mitglied
Beiträge: 113 Registriert: 27.10.2003 AutoCAD 2015 Expresstools Windows 10
|
erstellt am: 06. Nov. 2018 15:53 <-- editieren / zitieren --> Unities abgeben:
|
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 06. Nov. 2018 16:10 <-- editieren / zitieren --> Unities abgeben: Nur für vision
ah, ein progn vergessen.. Das hättest du aber auch sehen können Code: (if (and (SETQ ent (car (ENTSEL "\nText-Block anklicken: "))) (setq gg (assoc 10 (entget ent))) (= (cdr (assoc 66 (entget ENT))) 1) ) (progn (WHILE (AND (SETQ ent (ENTNEXT ent)) (/= (CDR (ASSOC 0 (ENTGET ent))) "SEQEND") ) (if (= (CDR (ASSOC 0 (ENTGET ent))) "ATTRIB") (cond ((= (strcase (CDR (ASSOC 2 (ENTGET ent)))) "SFBCODE") ;Attributname 1! (SETQ TEXT1 (CDR (ASSOC 1 (ENTGET ent)))) ) ((= (strcase (CDR (ASSOC 2 (ENTGET ent)))) "FMATT07") ;Attributname 1! (SETQ TEXT2 (CDR (ASSOC 1 (ENTGET ent)))) ) ) ) ) (if (and TEXT1 TEXT2) (progn (setq TEXTGES (strcat TEXT1 TEXT2)) (machsonstnochwas) ) ) ) )
------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
vision Mitglied
Beiträge: 113 Registriert: 27.10.2003 AutoCAD 2015 Expresstools Windows 10
|
erstellt am: 06. Nov. 2018 16:48 <-- editieren / zitieren --> Unities abgeben:
Hallo CADwiesel, es läuft. Vielen Dank! Es ergibt sich aber noch ein anderes Problem: Ein Attributwert benutze ich für einen Dateinamen. Jetzt kann es passieren, dass unerlaubte Zeichen im Text sind (z.B. /). Gibt es eine Routine die solche Zeichen ersetzt? Für Ihre Unterstützung bedanke ich mich im Voraus. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 07. Nov. 2018 09:53 <-- editieren / zitieren --> Unities abgeben: Nur für vision
sowas? Code: (defun ersetzeSTR (TEXT / Z ZL ct) (setq ct 1 ZL "" ) (repeat (strlen TEXT) (setq Z (substr TEXT ct 1)) (cond ( (eq Z "§") (setq Z "X") ) ( (eq Z "%") (setq Z "Y") ) (T Z) ) (setq ZL (strcat ZL Z)) (setq ct (1+ ct)) ) ZL )
(ersetzeSTR "asj%%kdghg23454$34kljg65§§234") => "asjYYkdghg23454$34kljg65XX234" ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Technischer Systemplaner (m/w/d) | Technologien auf das nächste Level zu heben, sich Herausforderungen zu stellen und an den Innovationen von morgen zu arbeiten - dafür benötigen wir bei FERCHAU Expert:innen wie dich: als ambitionierte:r Kolleg:innen, der:die wie wir Technologien auf die nächste Stufe bringen möchten. Wir realisieren spannende Projekte für namhafte Kunden in allen Technologiebereichen und für alle Branchen und sorgen für sichere und nachhaltige Technologielösungen.... | Anzeige ansehen | Technischer Zeichner, Bauzeichner |
|
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 07. Nov. 2018 11:21 <-- editieren / zitieren --> Unities abgeben: Nur für vision
Ich benutze für Attribute folgendes Programm: Code:
(DEFUN ATTGET (name / att elem a b brk) (WHILE (NOT brk) (SETQ elem (ENTGET (SETQ name (ENTNEXT name)))) (IF (= (CDR (ASSOC 0 elem)) "SEQEND")(SETQ brk T) (SETQ b (CONS (CONS (CDR (ASSOC 2 elem))(CDR (ASSOC 1 elem))) b)) ) ) b )
Aufruf mit (ATTGET elementname) Zurück kommt eine Dotted-Pair-Liste (("RBNR" . "") ("M1" . "") ("M2" . "44.87 m²") ("BODEN" . "Holz") ("ZIMMER" . "WOHNKÜCHE")) Mit (ASSOC "M2" liste) kann ich die einzelnen Werte abgreifen. Mit (STRCAT (ASSOC "RBNR" liste)(ASSOC "ZIMMER" liste)) .... ... usw ------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |