| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Lisp und Dialogboxen (1351 mal gelesen)
|
DrCNC Mitglied
Beiträge: 96 Registriert: 04.01.2011
|
erstellt am: 10. Jul. 2014 14:53 <-- editieren / zitieren --> Unities abgeben:
Hallo, Ich bin Anfänger in Lisp und bekomme leider das nicht hin. Ich möchte von einem Dialog die Auswahl in eine Variable schreiben. Die Textfelder funktionieren aber nicht die Auswahl. Code:
(defun DialogFraesen (/ I1 OK) (setq I1 (load_dialog "CNC.DCL")) (if (null (new_dialog "CNC" I1)) (alert "\n \nLaden der Dialogbox nicht moeglich!") ) (setq ZAchse (atof (get_tile "ZAchse"))) (setq WZNr (atof (get_tile "WZNr"))) (setq Vor (atof (get_tile "Vor"))) (setq Ab (atof (get_tile "Ab")))(setq Links (get_tile "Links")) (setq Nein (get_tile "Nein")) (setq Rechts (get_tile "Rechts")) (action_tile "ZAchse" "(setq ZAchse(atoi $value))") (action_tile "WZNr" "(setq WZNr(atoi $value))") (action_tile "Vor" "(setq Vor(atoi $value))") (action_tile "Ab" "(setq Ab(atoi $value))") (action_tile "Links" "(setq Links $value)") (action_tile "Nein" "(setq Nein $value)") (action_tile "Rechts" "(setq Rechts $value)") (if(= Links "1")(setq Wzkr "WRKL")) (if(= Nein "1")(setq Wzkr "WRKN")) (if(= Rechts "1")(setq Wzkr "WRKR")) ;;;(setq Wzkr "WRKR") (action_tile "CANCEL" "(DONE_DIALOG 0)") (setq OK (start_dialog)) (unload_dialog I1) (if (= OK 0) ; Abbruchfunktion (progn (R_VAR) (exit)) ) ) // Fuer Woodwop6.LSP CNC : dialog { label = "Woodwop"; initial_focus = "ZAchse"; : column { : edit_box { width = 40; label = "Z-Achse:"; key = "ZAchse"; edit_width = 6; edit_limit = 5; value = "0"; } : edit_box { width = 40; label = "Abstand:"; key = "Ab"; edit_width = 6; edit_limit = 5; value = "0"; } : edit_box { width = 40; label = "Werkzeug:"; key = "WZNr"; edit_width = 6; edit_limit = 5; value = "148"; } : edit_box { width = 40; label = "Vorschub:"; key = "Vor"; edit_width = 6; edit_limit = 5; value = "5"; }
: boxed_column { : text { label = "Radiuskorrektur:"; } : row { : radio_button { key = "Links"; label = "Links"; value = "0"; } : radio_button { key = "Nein"; label = "Nein"; value = "1"; } : radio_button { key = "Rechts"; label = "Rechts"; value = "0"; } } } } spacer; spacer; ok_cancel; }
Vieleicht kann mir jemand einen Rat geben Danke Johann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 10. Jul. 2014 17:01 <-- editieren / zitieren --> Unities abgeben: Nur für DrCNC
Hallo Johann, ich würds so machen: Code: (defun DialogFraesen (/ I1 OK) (setq I1 (load_dialog "CNC.DCL")) (if (null (new_dialog "CNC" I1)) (alert "\n \nLaden der Dialogbox nicht moeglich!") ) (setq ZAchse (atof (get_tile "ZAchse"))) (setq WZNr (atof (get_tile "WZNr"))) (setq Vor (atof (get_tile "Vor"))) (setq Ab (atof (get_tile "Ab"))) (setq Links (get_tile "Links")) (setq Nein (get_tile "Nein")) (setq Rechts (get_tile "Rechts")) (setq Auswahl "Nein") (action_tile "ZAchse" "(setq ZAchse(atoi $value))") (action_tile "WZNr" "(setq WZNr(atoi $value))") (action_tile "Vor" "(setq Vor(atoi $value))") (action_tile "Ab" "(setq Ab(atoi $value))") (action_tile "Links" "(setq auswahl (get_tile \"auswahl\"))") (action_tile "Nein" "(setq auswahl (get_tile \"auswahl\"))") (action_tile "Rechts" "(setq auswahl (get_tile \"auswahl\"))") (if (= Links "1") (setq Wzkr "WRKL") ) (if (= Nein "1") (setq Wzkr "WRKN") ) (if (= Rechts "1") (setq Wzkr "WRKR") ) ;;;(setq Wzkr "WRKR")
(action_tile "CANCEL" "(DONE_DIALOG 0)") (setq OK (start_dialog)) (unload_dialog I1) (if (= OK 0) ; Abbruchfunktion (progn (R_VAR) (exit)) ) ) CNC : dialog { label = "Woodwop"; initial_focus = "ZAchse"; : column { : edit_box { width = 40; label = "Z-Achse:"; key = "ZAchse"; edit_width = 6; edit_limit = 5; value = "0"; } : edit_box { width = 40; label = "Abstand:"; key = "Ab"; edit_width = 6; edit_limit = 5; value = "0"; } : edit_box { width = 40; label = "Werkzeug:"; key = "WZNr"; edit_width = 6; edit_limit = 5; value = "148"; } : edit_box { width = 40; label = "Vorschub:"; key = "Vor"; edit_width = 6; edit_limit = 5; value = "5"; } : boxed_column { : text { label = "Radiuskorrektur:"; } : radio_row { key = "auswahl"; : radio_button { key = "Links"; label = "Links"; value = "0"; } : radio_button { key = "Nein"; label = "Nein"; value = "1"; } : radio_button { key = "Rechts"; label = "Rechts"; value = "0"; } } } } spacer; spacer; ok_cancel; }
In der Variablen Auswahl steht dann deine Auswahl. Sollte helfen. ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DrCNC Mitglied
Beiträge: 96 Registriert: 04.01.2011
|
erstellt am: 10. Jul. 2014 20:46 <-- editieren / zitieren --> Unities abgeben:
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 11. Jul. 2014 08:18 <-- editieren / zitieren --> Unities abgeben: Nur für DrCNC
Ja, ok, die Auswertung der Variablen hat noch gefehlt. Dann eben so: Code: (defun DialogFraesen (/ I1 OK) (setq I1 (load_dialog "CNC.DCL")) (if (null (new_dialog "CNC" I1)) (alert "\n \nLaden der Dialogbox nicht moeglich!") ) (setq ZAchse (atof (get_tile "ZAchse"))) (setq WZNr (atof (get_tile "WZNr"))) (setq Vor (atof (get_tile "Vor"))) (setq Ab (atof (get_tile "Ab"))) (setq Links (get_tile "Links")) (setq Nein (get_tile "Nein")) (setq Rechts (get_tile "Rechts")) (setq Auswahl "Nein") (action_tile "ZAchse" "(setq ZAchse(atoi $value))") (action_tile "WZNr" "(setq WZNr(atoi $value))") (action_tile "Vor" "(setq Vor(atoi $value))") (action_tile "Ab" "(setq Ab(atoi $value))") (action_tile "Links" "(setq auswahl (get_tile \"auswahl\"))" ) (action_tile "Nein" "(setq auswahl (get_tile \"auswahl\"))") (action_tile "Rechts" "(setq auswahl (get_tile \"auswahl\"))" ) ;;;(setq Wzkr "WRKR") (action_tile "CANCEL" "(DONE_DIALOG 0)") (setq OK (start_dialog)) (unload_dialog I1) (setq Wzkr (cond ((= auswahl "Links") "WRKL" ) ((= auswahl "Nein") "WRKN" ) ((= auswahl "Rechts") "WRKR" ) ) ) (if (= OK 0) ; Abbruchfunktion (progn (R_VAR) (exit)) ) )
------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de [Diese Nachricht wurde von Andreas Kraus am 11. Jul. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 11. Jul. 2014 08:19 <-- editieren / zitieren --> Unities abgeben: Nur für DrCNC
Hallo Johann, ich habe Deinen Code prinzipiel mal anders aufgebaut, ansonsten aber hoffentlich einfach gehalten: Es läuft folgendermaßen: 1. Erstellen einer (Variablen)-Liste, Zugriff auf die Werte dann z.B. mit (cdr(assoc "Vor" Variablen)) 2. Laden des Dialoges 3. Werte im Dialog setzen, dafür habe ich die Funktion "DialogFraesen:Set", dort werden mit Hilfe der Funktion "set_tile" die Werte aus der VariablenListe gesetzt. 4. Action_tile-Anweisungen für Radio-Buttons: Mit der Funktion "DialogFraesen:Subst:Variablen" wird die VariablenListe mit Hilfe der Funktion SUBST aktualisiert. 5. Starten des Dialoges, Beenden mit OK => 1 oder Abbrechen => 0 6. Für den Beenden mit OK wird der Action_tile-Anweisung "accept" vor dem Beenden noch die Funktion "DialogFraesen:Get" aufgerufen: es werden die Werte der Edit-Boxen mit der Funktion "get_tile" abgerufen und mit der Funktion "subst" wieder in der VariablenListe aktualisiert. 7. Nach dem Beenden des Dialoges mit OK stehen alle aktuellen Werte in der Variablenliste und können für die weitere Verwendung abgerufen werden. 8. Viel Spaß beim ausprobieren. Code:
(defun DialogFraesen (/ I1 OK) (setq Variablen (list (cons "ZAchse" "0") (cons "WZNr" "148") (cons "Vor" "5") (cons "Ab" "0") (cons "Radiuskorrektur" "Links") )) (setq I1 (load_dialog "e:\\Zwischenablage\\4Cadde\\CNC\\CNC.DCL")) (if (null (new_dialog "CNC" I1)) (alert "\n \nLaden der Dialogbox nicht moeglich!") ) (DialogFraesen:Set Variablen) (action_tile "Links" "(setq Variablen(DialogFraesen:Subst:Variablen Variablen \"Radiuskorrektur\" \"Links\"))") (action_tile "Nein" "(setq Variablen(DialogFraesen:Subst:Variablen Variablen \"Radiuskorrektur\" \"Nein\"))") (action_tile "Rechts" "(setq Variablen(DialogFraesen:Subst:Variablen Variablen \"Radiuskorrektur\" \"Rechts\"))") (action_tile "accept" "(setq Variablen(DialogFraesen:Get Variablen))(DONE_DIALOG 1)") (action_tile "cancel" "(setq Variablen(DialogFraesen:Get Variablen))(DONE_DIALOG 0)") (setq OK (start_dialog)) (unload_dialog I1) (if (= OK 0) ; Abbruchfunktion (exit) (progn (cond ((= (cdr(assoc "Radiuskorrektur" Variablen))"Links") (setq Wzkr "WRKL")) ((= (cdr(assoc "Radiuskorrektur" Variablen))"Rechts") (setq Wzkr "WRKR")) ((= (cdr(assoc "Radiuskorrektur" Variablen))"Nein") (setq Wzkr "WRKN"))) (alert (strcat "Folgende Werte wurden der Dbox entnommen:\n" (apply 'strcat (mapcar '(lambda(A)(strcat "\n- "(car A) ": " (cdr A)))Variablen)) "\nWzkr = " Wzkr )))) ) (defun DialogFraesen:Subst:Variablen (Variablen key wert / ) (subst (cons key wert)(assoc key Variablen)Variablen) ) (defun DialogFraesen:Set (Variablen / ) (set_tile "ZAchse" (cdr(assoc "ZAchse" Variablen))) (set_tile "WZNr" (cdr(assoc "WZNr" Variablen))) (set_tile "Vor" (cdr(assoc "Vor" Variablen))) (set_tile "Ab" (cdr(assoc "Ab" Variablen))) (set_tile "Links" (if (= (cdr(assoc "Radiuskorrektur" Variablen))"Links")"1" "0")) (set_tile "Rechts" (if (= (cdr(assoc "Radiuskorrektur" Variablen))"Rechts")"1" "0")) (set_tile "Nein" (if (= (cdr(assoc "Radiuskorrektur" Variablen))"Nein")"1" "0")) ) (defun DialogFraesen:Get (Variablen / ) (setq Variablen (subst (cons "ZAchse" (get_tile "ZAchse"))(assoc "ZAchse" Variablen)Variablen) Variablen (subst (cons "WZNr" (get_tile "WZNr"))(assoc "WZNr" Variablen)Variablen) Variablen (subst (cons "Vor" (get_tile "Vor"))(assoc "Vor" Variablen)Variablen) Variablen (subst (cons "Ab" (get_tile "Ab"))(assoc "Ab" Variablen)Variablen)))
------------------ viele Grüße Jörn http://www.bosse-engineering.com Orthogonalvermassung Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DrCNC Mitglied
Beiträge: 96 Registriert: 04.01.2011
|
erstellt am: 12. Jul. 2014 13:56 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn, Dank deiner genaueren Beschreibung deines Codes, habe ich dieses Problem einigermaßen kappiert. Ich habe meinen Code etwas abgeändert und es funktioniert bestens. Code:
(defun DialogFraesen (/ I1 OK) (setq I1 (load_dialog "CNC.DCL")) (if (null (new_dialog "CNC" I1)) (alert "\n \nLaden der Dialogbox nicht moeglich!") ) (setq ZAchse (atof (get_tile "ZAchse"))) (setq WZNr (atof (get_tile "WZNr"))) (setq Vor (atof (get_tile "Vor"))) (setq Ab (atof (get_tile "Ab"))) (setq Wzkr "NoWRK") (action_tile "ZAchse" "(setq ZAchse(atoi $value))") (action_tile "WZNr" "(setq WZNr(atoi $value))") (action_tile "Vor" "(setq Vor(atoi $value))") (action_tile "Ab" "(setq Ab(atoi $value))") (action_tile "auswahl" "(setq Wzkr $value)") (action_tile "CANCEL" "(DONE_DIALOG 0)") (setq OK (start_dialog)) (unload_dialog I1) (if (= OK 0) ; Abbruchfunktion (progn (R_VAR) (exit)) ) ) CNC : dialog { label = "Woodwop"; initial_focus = "ZAchse"; : boxed_column { : edit_box { label = "Z-Achse:"; key = "ZAchse"; edit_width = 6; edit_limit = 5; value = "0"; } : edit_box { label = "Abstand:"; key = "Ab"; edit_width = 6; edit_limit = 5; value = "0"; } : edit_box { label = "Werkzeug:"; key = "WZNr"; edit_width = 6; edit_limit = 5; value = "148"; } : edit_box { label = "Vorschub:"; key = "Vor"; edit_width = 6; edit_limit = 5; value = "5"; } } } spacer; : boxed_column { label = "Radiuskorrektur:"; : radio_row { key = "auswahl"; : radio_button { key = "WRKL"; label = "links "; value = "0"; } : radio_button { key = "NoWRK"; label = "nein "; value = "1"; } : radio_button { key = "WRKR"; label = "rechts"; value = "0"; } } } spacer; spacer; ok_cancel; }
Den Code von Andreas hatte bei mir wieder nicht funktioniert. besten Dank für eure Antworten. mfg Johann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |