| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: If not mit or verknüpfen (496 mal gelesen)
|
Hänk Mitglied
Beiträge: 126 Registriert: 10.05.2004 ADT 2004 / AutoCAD 2004
|
erstellt am: 02. Feb. 2006 08:17 <-- editieren / zitieren --> Unities abgeben:
Hi zusammen Bei einem Lisp habe ich eine If-Verknüpfung drin um von der gesamten Auswahl ein bestimmtes Objekt einer Farbe herauszufilter, das funktioniert soweit gut. Der Code dazu:
Code: (if (not (and (= (strcase (vla-get-objectname item)) "OBJEKTNAME") (= (vla-get-color item) 10) ) ; ENDE AND ) ; ENDE NOT ); ENDE IF
Nun möchte ich einen zweiten Objekttyp hinzufügen der in derselben Auswahl herausgefiltert wird. Ich habe gedacht man kann das mit einem zusätzlichen OR machen, aber irgendwie will es nicht. Wieso nicht? Das Lisp ist nicht vollständig, es geht lediglich um diese IF-Verzweigung. Code: (if (not (or (and (= (strcase (vla-get-objectname item)) "OBJEKTNAME1") (= (vla-get-color item) 10) ) ; ENDE AND (and (= (strcase (vla-get-objectname item)) "OBJEKTNAME2") (= (vla-get-color item) 10) ) ; ENDE AND ( ;ENDE OR ) ; ENDE NOT ); ENDE IF
Wäre super wenn mir jemand helfen könnte. Grüsse Hänk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 02. Feb. 2006 08:22 <-- editieren / zitieren --> Unities abgeben: Nur für Hänk
imho so: (if(not(and (or(= (strcase (vla-get-objectname item)) "OBJEKTNAME1") (= (strcase (vla-get-objectname item)) "OBJEKTNAME2") ) (= (vla-get-color item) 10) ) ) (progn . . . ) ) Macht was mit Objekten, die nicht vom Typ "OBJEKTNAME1" oder "OBJEKTNAME1" sind und nicht Farbe 10 haben.. ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hänk Mitglied
Beiträge: 126 Registriert: 10.05.2004 ADT 2004 / AutoCAD 2004
|
erstellt am: 02. Feb. 2006 08:32 <-- editieren / zitieren --> Unities abgeben:
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 02. Feb. 2006 09:45 <-- editieren / zitieren --> Unities abgeben: Nur für Hänk
Hi, es gibt doch auch noch andere Möglichkeiten Bedingungen abzuprüfen... Guckst Du mal hier: Code:
(if (not (and (member (strcase (vla-get-objectname ITEM)) (mapcar 'strcase '("AcDb2dPolyline" "AcDbCircle" "AcDbLine")) ) (member (vla-get-color ITEM) '(10 20 256)) ) ) (princ "\nNicht gefiltert.") (princ "\nGefiltert.") )
oder hier mit wcmatch statt mit member Code:
(if (not (and (wcmatch (strcase (vla-get-objectname ITEM)) (strcase "*line,AcDbCircle") ) (member (vla-get-color ITEM) '(10 20 256)) ) ) (princ "\nNicht gefiltert.") (princ "\nGefiltert.") )
...------------------ Ciao, Marc [Diese Nachricht wurde von marc.scherer am 02. Feb. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hänk Mitglied
Beiträge: 126 Registriert: 10.05.2004 ADT 2004 / AutoCAD 2004
|
erstellt am: 02. Feb. 2006 10:27 <-- editieren / zitieren --> Unities abgeben:
Es gibt immer div. Arten zum Ziel, ich möchte aber einmal die erste Variante erfolgreich zu Ende führen. Hier mein Versuch, der aber nicht funktioniert,e r ignoriert die Auswahl um wählt alles aus. Ich habe irgendwas mit or und and verwechselt denke ich, aber weiss nicht weiter: Code:
(if (not (and (or (= (strcase (vla-get-objectname item)) "CIRCLE") (= (vla-get-color item) 8) ) ; ENDE OR (or (= (strcase (vla-get-objectname item)) "ACDBLINE") (= (vla-get-color item) 9) ) ; ENDE OR ) ; ENDE AND ) ; ENDE NOT
Alles soll gewählt werden ausser Kreise mit der Farbe 8 und Linien mit der Farbe 9. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 02. Feb. 2006 10:34 <-- editieren / zitieren --> Unities abgeben: Nur für Hänk
(if(not(or(and(=(strcase (vla-get-objectname item)) "CIRCLE") (= (vla-get-color item) 8) ) (and(= (strcase (vla-get-objectname item)) "ACDBLINE") (= (vla-get-color item) 9) ) ) ) (progn ) ) ------------------ - Thomas - "Du bist einen uns unbekannten Weg in eine andere Form des Seins gegangen. - Wir sehen uns wieder in deinem Paradies!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 02. Feb. 2006 10:46 <-- editieren / zitieren --> Unities abgeben: Nur für Hänk
Zitat: Original erstellt von Hänk: Es gibt immer div. Arten zum Ziel
Klar gibt es das. Aber willst Du jedesmal, wenn Du weitere Objekttypen ausgrenzen willst eine weitere aufwändige Bedingung in Deinen Code frickeln, wenn die Erweiterung einer Liste bzw. eines Strings ausreichend ist? Dein Ansatz ist IMHO schlichtweg umständlich. ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hänk Mitglied
Beiträge: 126 Registriert: 10.05.2004 ADT 2004 / AutoCAD 2004
|
erstellt am: 02. Feb. 2006 12:54 <-- editieren / zitieren --> Unities abgeben:
@Cadmium Danke an Cadmium, mit diesem kleinen Eingriff hat's geklappt. Habe Or und And verwechselt. @marc.scherrer Du hast natürlich Recht, werde mir deine Antwort (jetzt wo das Ding läuft) auch nochmals genauer anschauen Grüsse Hänk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |