| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Variable für Aufruf optional machen. (463 mal gelesen)
|
Andreas Widmann Mitglied ATHENA Support/Training
Beiträge: 218 Registriert: 24.08.2005
|
erstellt am: 04. Aug. 2009 17:53 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, ich bin sicher ihr könnt mir schnell helfen. Habe leider keine Ahnung von Lisp (und vermutlich deshalb auch nichts in der Suche gefunden). Mein Code ist folgender: (nur die Fett markierten Sachen hab ich reingemacht) Code: (defun seLaySchr (sTyp sWi sMSTB sCo /) (setvar "cmdecho" 0) (if (not (= sCo nil)) (setq previous-color (getvar "cecolor"))) (if (not (= sCo nil)) (setvar "cecolor" sCo)) (setq BMSTB (getvar "CANNOSCALEVALUE")) (setq inpoint (getpoint "\nPunkt in der Fläche wählen oder [Objektwahl] <Objektwahl>:")) (cond ((or (= inpoint "o") (= inpoint "O") (= inpoint nil)) (command "_-hatch" "e" sTyp (/ sMSTB BMSTB) sWi "b" "j" "a") ) ((/= inpoint nil) (command "_-hatch" "e" sTyp (/ sMSTB BMSTB) sWi "b" "j" inpoint) ) ) (setvar "cmdecho" 1) (prin1) )
Aufgerufen wird das ganze so: - Ohne Farbgebung: (seLaySchr "Plast" 45 1) - Mit Farbgebung: (seLaySchr "Plast" 45 1 "RGB:122,122,122") Der Aufruf ohne Farbgebung verursacht aber einen Fehler: "Zu wenig Argumente" Kann mir bitte jemand kurz erklären wie ich "sCo" optional mache? ------------------ Gruß Andreas ------------------------------------------------------------------------------------------------------------------------------------ Die Antwort ist 42! Die Antwort ist 42! Die Antwort ist 42! ...wenn ich nur die Frage wüsste... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 04. Aug. 2009 18:25 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Widmann
Hallo Andreas, klare Antwort: geht (mit Lisp) NICHT! einzige Möglichkeit ist als Argument eine Liste von Argumenten zu übergeben: Code: (defun seLaySchr (argliste /) (setq sTyp (car argliste) sWi (cadr argliste) sMSTB (caddr argliste) sCo (cadddr argliste)) ...
ist kein 4. Listenelement vorhanden, dann ist sCo nil.Grüsse, Henning
------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Widmann Mitglied ATHENA Support/Training
Beiträge: 218 Registriert: 24.08.2005
|
erstellt am: 04. Aug. 2009 18:29 <-- editieren / zitieren --> Unities abgeben:
Ok, schade. Ich denke nicht dass ich, da der Aufruf in nem Werkzeugleistenbutton steckt, aus ner Werkzeugleiste heraus ne Argumentliste übergeben kann. Hab mir aber schon was überlegt, ich schreib die anderen Buttons um sodass sie eine Farbe aufrufen, nur eben die Farbe "bylayer". Dank dir Henning! ------------------ Gruß Andreas ------------------------------------------------------------------------------------------------------------------------------------ Die Antwort ist 42! Die Antwort ist 42! Die Antwort ist 42! ...wenn ich nur die Frage wüsste... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 04. Aug. 2009 18:37 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Widmann
Zitat: Original erstellt von Andreas Widmann: Ich denke nicht dass ich, da der Aufruf in nem Werkzeugleistenbutton steckt, aus ner Werkzeugleiste heraus ne Argumentliste übergeben kann.
Warum nicht? Code: (seLaySchr (list "Plast" 45 1))
Grüsse, Henning ------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 04. Aug. 2009 18:57 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Widmann
Du könntest es so machen: Code: (seLaySchr "Plast" 45 1 "")
Allerdings müsstest Du die Abfrage
Code: (if (not (= sCo nil)) (setvar "cecolor" sCo))
auch umbauen: Code: (if (/= sCo "") ...
Übrigens Code: (if (not (= sCo nil)) ...
= Code: (if sCo ...
Und möglicherweise geht auch das:
Code: (seLaySchr "Plast" 45 1 nil)
------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 05. Aug. 2009 09:21 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Widmann
|
Andreas Widmann Mitglied ATHENA Support/Training
Beiträge: 218 Registriert: 24.08.2005
|
erstellt am: 05. Aug. 2009 10:20 <-- editieren / zitieren --> Unities abgeben:
Hallo, @Geos, danke dir, sehr gut erklärt und hat mir sehr geholfen. Allerdings tritt jetzt ein Phänomen auf das ich mir nicht erklären kann: Alle Schraffuren die ich ohne Farbe (seLaySchr "Plast" 45 1 "") aufrufe funktionieren einwandfrei. Rufe ich aber mit Farbe auf (seLaySchr "Solid" 0 1 "RGB:245,245,245") und klicke dann in die Kontur, dann wird immer die letzte Kontur (bzw. die der vorher erstellten Schraffur) mit ausgewählt. Code: ;;; Erzeugt eine Schraffur in den gewählten Bereich (defun seLaySchr (sTyp sWi sMSTB sCo /) (setq previous-color (getvar "cecolor")) (if (/= sCo "") (setvar "cecolor" sCo)) (setvar "cmdecho" 0) ;(command "_undo" "b") (setq BMSTB (getvar "CANNOSCALEVALUE")) (setq inpoint (getpoint "\nPunkt in der Fläche wählen oder [Objektwahl] <Objektwahl>:")) (cond ((or (= inpoint "o") (= inpoint "O") (= inpoint nil)) (command "_-hatch" "e" sTyp (/ sMSTB BMSTB) sWi "b" "j" "a") ) ((/= inpoint nil) (command "_-hatch" "e" sTyp (/ sMSTB BMSTB) sWi "b" "j" inpoint) ) ) ;(command "_undo" "e") (setvar "cmdecho" 1) (prin1) )
------------------ Gruß Andreas ------------------------------------------------------------------------------------------------------------------------------------ Die Antwort ist 42! Die Antwort ist 42! Die Antwort ist 42! ...wenn ich nur die Frage wüsste... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 05. Aug. 2009 10:29 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Widmann
Bei der Solid-Schraffur gibt es keine Skalierung oder Drehwinkel. Daher läuft Dir die Befehlszeile bei "Solid" aus dem Ruder. Du musst noch unterscheiden: Code: (if (= sTyp "SOLID") (command ...) (command ...)
Grüsse, Henning------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Widmann Mitglied ATHENA Support/Training
Beiträge: 218 Registriert: 24.08.2005
|
erstellt am: 05. Aug. 2009 10:46 <-- editieren / zitieren --> Unities abgeben:
Ein Hoch auf Henning! Das war ja sowas von schnell! Vielen vielen Dank an alle, habt mir viel geholfen! Code: (if (= sTyp "Solid") (command "_-hatch" "e" sTyp "b" "j" "a") (command "_-hatch" "e" sTyp (/ sMSTB BMSTB) sWi "b" "j" "a"))
------------------ Gruß Andreas ------------------------------------------------------------------------------------------------------------------------------------ Die Antwort ist 42! Die Antwort ist 42! Die Antwort ist 42! ...wenn ich nur die Frage wüsste... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |