| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Vorgabewerte an Lisp übergeben (2841 mal gelesen)
|
Stefan Michel Mitglied
Beiträge: 40 Registriert: 01.06.2006
|
erstellt am: 09. Mai. 2007 18:03 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe mir ein Lisp geschrieben für eine Schraffur. Die Lisp fragt mich mehrere Daten ab (z.b. Schraffurwinkel, Abstand, Schraffurfarbe). Nun möchte ich mir mehrere Werkzeugkästen anlegen welche bereits bestimmte Vorgaben (zb. Schraffurwinkel 0°, 45°, 90° usw. Vorgeben. Das ich nach Defun Variablen deklarieren kann welche ich in der Eingabeaufforderung direkt mit übergeben kann weiss ich. Allerdings brächte ich dann ja einen IF-Befehl für jede Variablenabfrage in der Lisp weil wenn ich z.b. Schraffurwinkel 90° direkt beim Befehlsaufruf mit übergebe soll diese Abfrage in der Lisp ja nicht mehr kommen. Kann mir jemdan bitte erklären wie so etwas geht? DANKE vorab Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Claudio Mitglied Architekt
Beiträge: 334 Registriert: 13.04.2002 ACA, Revit, MAX 2020
|
erstellt am: 09. Mai. 2007 18:46 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Michel
Hallo Stefan! Variablen werden mit setq definiert. z.B.: (setq HWIN 45) -> (setq HTYP "ANSI31") (setq HSCAL 2) (setq HWIN 45) und dann die Variablen an den Befehl übergeben-> (command "_hatch" HTYP HSCAL HWIN) Gruß Claudio Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Claudio Mitglied Architekt
Beiträge: 334 Registriert: 13.04.2002
|
erstellt am: 09. Mai. 2007 18:58 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Michel
Hallo Stafan! ...glaube allerdings, daß das Problem noch etwas anders gelagert ist (konnte es Deiner Frage nicht genau entnehmen) - vielleicht hängst Du das Lisp an, dann kann man das Problem besser nachvollziehen. (..Ablauf beim Buttonaufruf..) Gruß Claudio Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3336 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 09. Mai. 2007 22:14 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Michel
Hi, wahrscheinlich meinst du etwas in dieser Art: (defun MeinBefehl (param1 param2 param3 / var1 var2) (if (not param1) (setq param1 (getreal "\nParameter 1: ")) ) (if (not param2) .... Für jeden Parameter, den du nicht mitgeben willst, gibst du der Funktion jetzt ein nil mit: (MeinBefehl 45.0 nil nil) Wenn ein Parameter nil ist, fragt die Funktion den Wert ab. Gruß CADchup
------------------ CADmaro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stefan Michel Mitglied
Beiträge: 40 Registriert: 01.06.2006
|
erstellt am: 10. Mai. 2007 07:27 <-- editieren / zitieren --> Unities abgeben:
guten morgen, also das was CADchup geschrieben hat schaut schon ganz gut aus. Nun habe ich aber folgendes Problem an der Sache. ich habe die Variablen die z.b. für den Schraffurabstand zuständig sind Global definiert um beim erneuten Befehlsaufruf immer automatisch den letzteingegebnen Wert als Vorgabe zu haben. Deshalb ist die Variable nie auf nil! Hier mal mein Lisp zur besseren Nachvollziehbarkeit: (defun c:hs ( / winkel abstand farbe)
(if (= hs_abstand nil) (setq hs_abstand 10)) (if (= hs_farbe nil) (setq hs_farbe "Grün")) (setq winkel (+ 90(*(getangle "\nWinkel 90° zur Schraffurrichtung wählen:")(/ 180 pi)))) (setq abstand (getreal (strcat"\nSchraffurabstand eingeben <" (rtos hs_abstand)">:"))) (if (/= abstand nil) (setq hs_abstand abstand)) (command "-schraff" "e" "b" winkel hs_abstand "N" (while (/=(getvar "CMDACTIVE")0)(command pause))) (initget "g b l") (setq farbe(getkword (strcat"\nSchraffurfarbe wählen (Grün/Braun/vonLayer) <" hs_farbe">:"))) (if(= farbe "g") (setq hs_farbe "Grün")) (if(= farbe "b") (setq hs_farbe "Braun")) (if(= farbe "l") (setq hs_farbe "vonLayer")) (cond ((= hs_farbe "Grün") (entmod(append(entget(entlast)) '((62 . 3 ))))) ((= hs_farbe "Braun") (entmod(append(entget(entlast)) '((62 . 40))))) );end cond (princ) );end defun Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stefan Michel Mitglied
Beiträge: 40 Registriert: 01.06.2006
|
erstellt am: 10. Mai. 2007 07:28 <-- editieren / zitieren --> Unities abgeben:
|
Stefan Michel Mitglied
Beiträge: 40 Registriert: 01.06.2006
|
erstellt am: 10. Mai. 2007 08:36 <-- editieren / zitieren --> Unities abgeben:
hallo, ich bin gerade selber draufgekommen! ich nehem einfach für die variablene welche ich direkt an den Befehl übergebe andere namen. dann kann ich mit ner IF-funktion prüfen ob diese übergeben wurden und kann entweder die globale Variable der übergebenen gleichsetzen oder wenn die übergebene variable nicht existiert die benutzereingabe starten! vielen Dank für die Denkanstösse Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 10. Mai. 2007 08:42 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Michel
Ich habe dir hier mal was gemacht - vielleicht kannst es ja nutzen: Code: (defun hs ( hs_abstand hs_farbe / winkel abstand farbe)(if (null hs_abstand) (if(null(setq hs_abstand (getreal (strcat"\nSchraffurabstand eingeben <" (rtos 10)">:")))) (setq hs_abstand 10)) ) (setq winkel (+ 90(*(getangle "\nWinkel 90° zur Schraffurrichtung wählen:")(/ 180 pi)))) (if(null hs_farbe) (if(null(setq hs_farbe (acad_colordlg 256))) (setq hs_farbe 3) ) ) (command "schraff" "b" winkel hs_abstand "N" (while (/=(getvar "CMDACTIVE")0)(command pause))) ;;; (if (= hs_farbe nil) (setq hs_farbe "Grün")) (entmod(append(entget(entlast)) (list(cons 62 hs_farbe )))) (princ) );end defun (defun c:col () (hs nil nil) ) ;;; für einen Externen Aufruf per Makro kannst du es auch so nutzen: ;;; ^C^C(hs 0.1 1) ;;; oder ;;; ^C^C(hs nil 11) ;;; oder ;;; oder ;;; oder
------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stefan Michel Mitglied
Beiträge: 40 Registriert: 01.06.2006
|
erstellt am: 10. Mai. 2007 09:31 <-- editieren / zitieren --> Unities abgeben:
Hallo CADwiesel, vielen Dank für die überarbeitung. Leider ist es bei deiner überarbeiteten Version so, dass z.b. der Schraffurabstand (bei benutzereingabe) immer als Vorgabe auf 10 gesetzt wird, bei meiner Lisp wurde der letzte eingegebene Wert als Vorgabe gesetzt (also wenn ich quasi beim 1. befehlsaufruf 33 als Abstand eingegeben habe wurde mir beim 2. Befehlsaufruf auch die 33 als Vorgabewert angezeigt und übernommen. Dies sollte auch so bleiben. Genauso ist es bei der Farbgebung. Deswegen denke ich, ich muss nochmal neue variablen anlegen für die vorgabewerte damit hier die globalen variablen nicht überschreiben werden! ich werds mal probieren und denke es sollte eigentlich klappen. Danke an alle Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zimcad Mitglied Büro für Bauplanung & Bautechnik
Beiträge: 49 Registriert: 26.07.2004 aca-2017, win10-64bit
|
erstellt am: 15. Mai. 2007 19:06 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Michel
habe das gerade mal überflogen. Ohne alles genau gelesen zu haben warum setzt du nicht mittels Lisp über (setvar...) die Systemvariablen HPNAME, HPANG usw. Dann kannst du anschliessend einen Punkt an den Schraffurbefehl übergeben. Wenn die Variablen gesetzt sind, startet Schraff mit diesen als Vorgabe. ------------------ Gruss A. Zimmermann 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: 21. Mai. 2007 12:54 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Michel
Ich mache sowas eigentlich in dieser Art (defun c:Test (/ a1 ) (if (not Name) (setq name "keiner")) (setq a1 (getstring (strcat "Namen eingeben <" name "> : "))) (if (/= a1 "") (setq name a1)) (alert (strcat "Ihr Name ist " name)) ) in einem Werkzeugkasten kann man dann ganz einfach das Ding so ablegen ^c^cTEST Anton
[Diese Nachricht wurde von fuchsi am 21. Mai. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |