|  |  | 
|  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | 
|  |  | 
|  | Von Digital Twins bis Hochleistungs-Computing: PNY präsentiert seine Zukunftstechnologien für die Industrie von morgen, eine Pressemitteilung 
 | 
| Autor | Thema:  Lisp und Dialogboxen (1484 mal gelesen) | 
 | DrCNC Mitglied
 
 
  
 
      Beiträge: 96Registriert: 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 gebenDanke
 Johann
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Andreas Kraus Ehrenmitglied
 Elektrotechniker
 
      
 
      Beiträge: 1519Registriert: 11.01.2006
 WIN 11ACAD 2022
 BricsCAD V25.1.07
 |    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: 96Registriert: 04.01.2011
 |    erstellt am: 10. Jul. 2014 20:46  <-- editieren / zitieren -->    Unities abgeben:            | 
                        | Andreas Kraus Ehrenmitglied
 Elektrotechniker
 
      
 
      Beiträge: 1519Registriert: 11.01.2006
 WIN 11ACAD 2022
 BricsCAD V25.1.07
 |    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 und AutoLISPler
 
      
 
      Beiträge: 1781Registriert: 11.10.2004
 Window 11ACAD 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örnhttp://www.bosse-engineering.com
 Orthogonalvermassung Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                       
| 
  
 |  | 
 | DrCNC Mitglied
 
 
  
 
      Beiträge: 96Registriert: 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 |