| |
| 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-Funktion zum Auswahl prüfen (1708 mal gelesen)
|
Hänk Mitglied
Beiträge: 126 Registriert: 10.05.2004 ADT 2004 / AutoCAD 2004
|
erstellt am: 14. Jan. 2006 16:21 <-- editieren / zitieren --> Unities abgeben:
Hi zusammen Ich habe mit Lisp einen Auswahlsatz mittels ssget erstellt den ich dann verwende um dessen Eigenschaften zu verändern (chprop). Das funktioniert soweit, nun möchte ich noch den Fehler abfangen wenn die Auswahl ohne gefundene Objekte abbricht. Mein Ziel ist es den Auswahlsatz zu prüfen, beinhaltet er keine Objekte soll eine Meldung erscheinen und ansonsten soll der chprop Befehl weitergeführt werden um Eigenschaften zu ändern. Wie mache ich sowas? habe die if-Funktion studiert, aber irgendwie weiss ich nicht wie man damit umgeht. Grüsse Hänk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 14. Jan. 2006 16:34 <-- editieren / zitieren --> Unities abgeben: Nur für Hänk
Zitat: Original erstellt von Hänk: Hi zusammenIch habe mit Lisp einen Auswahlsatz mittels ssget erstellt den ich dann verwende um dessen Eigenschaften zu verändern (chprop). Das funktioniert soweit, nun möchte ich noch den Fehler abfangen wenn die Auswahl ohne gefundene Objekte abbricht. Mein Ziel ist es den Auswahlsatz zu prüfen, beinhaltet er keine Objekte soll eine Meldung erscheinen und ansonsten soll der chprop Befehl weitergeführt werden um Eigenschaften zu ändern. Wie mache ich sowas? habe die if-Funktion studiert, aber irgendwie weiss ich nicht wie man damit umgeht. Grüsse Hänk
Das hört sich nach Bedarf für einen Grundkurs an :-)
(ssget) gibt NIL zurück, wenn nichts ausgewählt wird, also ist die Prüfung extrem einfach: (if (setq auswahlsatz (ssget)) (machwasmitdem auswahlsatz) ) Falls Du nicht (ssget) verwendest und prüfen möchtest, ob ein vorhandener (!) Auswahlsatz (also ein Ding mit Datentyp 'PICKSET) Elemente enthält, dann gibt (sslength auswahlsatz) die Anzahl der Elemente darin zurück. Tom Berger
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: 14. Jan. 2006 16:41 <-- editieren / zitieren --> Unities abgeben:
Wie binde ich denn sowas in meinen untenstehenden code ein? Das Lisp macht nichts anderes als alles auf die Farbe 4 zu setzen, ausser LWPolylinien. Ist die Zeichnung aber leer funktionierts nicht ohne Auswahlprüfung. (defun c:test() (setq as (ssget "X" (list (cons -4 "<NOT") (cons 0 "LWPOLYLINE") (cons -4 "NOT>")))) (command "_chprop" "_p" "" "f" "4" "") ) Mein Versuch die If-Funktion zu verwenden scheiterte: (defun c:test() (setq as (ssget "X" (list (cons -4 "<NOT") (cons 0 "LWPOLYLINE") (cons -4 "NOT>")))) (if (null !as)) (alert "Sorry") (command "_chprop" "_p" "" "f" "4" "") ) PS: Das mit dem Grundkurs sehe ich auch so, habe aber bisher nirgendwo sowas gefunden. Angel mich jetzt durch ein Buch vom Mensch und Maschine durch mit mässigem Erfolg.
[Diese Nachricht wurde von Hänk am 14. Jan. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 14. Jan. 2006 18:28 <-- editieren / zitieren --> Unities abgeben: Nur für Hänk
Hallo Hänk! So hat Tom das gemeint:
Code:
(if (setq as (ssget .....)) ; Wenn ein Auswahlsatz erzeugt und mit setq zugewiesen wird (command .....) ;dann mache... (alert "sorry!") ; sonst ... ) ; Ende von If
Beachte, dass auf ein If nur drei klammern folgen dürfen (wenn, dann, sonst). Willst du beim zutreffen der Bedingung mehrere Befehle nacheinander ausführen, musst du Sie mit der Funktion (progn ....) zusammenfassen. Grundkurs unter http://autolisp-tutorial.mapcar.net/ von MAPCAR. Ich habe Lisp mit dem "Handbuch für Benutzeranpassungen" auf ACAD 12 gelernt. Wie ich das geschafft habe weiß isch allerdings auch nicht mehr . Nicht Verzweifeln, sondern weiterfragen. ------------------ Grüße aus dem Siegerland, Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 14. Jan. 2006 18:56 <-- editieren / zitieren --> Unities abgeben: Nur für Hänk
@Hänk Das Ausrufezeichen wird in Lisp nur verwendet, um an der Konsole direkt den Wert einer Variablen auszugeben, aber niemals innerhalb eines Programmes. also nicht (if (null !as))... sondern (if (null as) (Tue_dies) (sonst_dies) ) Und eine schließende Klammer im obigen Ausdruck war auch noch zu viel (zu früh) gesetzt. ------------------ Mit freundlichem Gruß Udo Hübner [Diese Nachricht wurde von CAD-Huebner am 14. Jan. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |