Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Lisp und Dialogboxen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Lisp und Dialogboxen (1343 mal gelesen)
DrCNC
Mitglied



Sehen Sie sich das Profil von DrCNC an!   Senden Sie eine Private Message an DrCNC  Schreiben Sie einen Gästebucheintrag für DrCNC

Beiträge: 96
Registriert: 04.01.2011

erstellt am: 10. Jul. 2014 14:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 10. Jul. 2014 17:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DrCNC 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von DrCNC an!   Senden Sie eine Private Message an DrCNC  Schreiben Sie einen Gästebucheintrag für DrCNC

Beiträge: 96
Registriert: 04.01.2011

erstellt am: 10. Jul. 2014 20:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke,
Leider funktioniert auch dieser Code nicht.
Es sollen für (links nein rechts) eben der
Text "WRKL" "WRKN" oder "WRKR" stehen, wird aber nichts übergeben.
Danke
Johann

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 11. Jul. 2014 08:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DrCNC 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 11. Jul. 2014 08:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DrCNC 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von DrCNC an!   Senden Sie eine Private Message an DrCNC  Schreiben Sie einen Gästebucheintrag für DrCNC

Beiträge: 96
Registriert: 04.01.2011

erstellt am: 12. Jul. 2014 13:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz