| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Werte aus Dialog in Dialog übertragen (1705 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 23. Mai. 2013 10:32 <-- editieren / zitieren --> Unities abgeben:
Hallo! Bin vom Urlaub zurück und stürze mich auf ein interessantes Thema mit DCL. Und zwar habe ich einen Dialog, in dem einmal ein Auswahlmöglichkeit von Textblöcken steht und eine Voransicht wo man sieht was in dem Textblock steht. Soweit kein Problem Jetzt möchte ich bspw. neue Textblöcke hinzufügen, dazu habe ich einen Add button integriert. Bei Drücken erscheint ein neuer Dialog mit der Abfrage Name Textblock und Textblockvoransicht. Die neueingegebenen Werte möchte ich das sie gleich in dem vorherigen Dialog angezeigt werden. Welchen Funktionen kämen dazu in DCL infrage ? ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 23. Mai. 2013 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 23. Mai. 2013 12:21 <-- editieren / zitieren --> Unities abgeben:
Ich bin soweit gekommen den Dialog aufzubauen, eine vorgegebene Liste als Textblockname und -voransicht einzugeben Wenn ich jetzt auf den Add-button klicke erscheint zwar die Abfrage für neue Eingabe, allerdings werden die nicht in den Variablen Selection und Preview abgelegt. Irgendetwas mache ich falsch ?
Code:
(defun c:test ( / file tmp dch return) (cond ( (not (and (setq file (open (setq tmp (vl-filename-mktemp nil nil ".dcl")) "w")) (write-line " CHAN : dialog {label = \"NOTES\"; : list_box {label = \"Choose Selection :\";key = \"selections\";height = 12;} : list_box {label = \"Preview :\";key = \"preview\";width = 50;height = 5;} : boxed_row { : button {key = \"Okay\";label = \" Okay \";is_default = true;} : button {key = \"Cancel\";label = \" Cancel \";is_default = false;is_cancel = true;} : button {key = \"Add\";label = \" Add \";is_default = false;is_cancel = true;} } } ADD : dialog {label = \"Add\"; : row { : edit_box {key = \"Selection\";label = \"Selection:\";edit_width = 25;height = 1;value = \"\";} } : edit_box {key = \"Preview\";label = \"Preview:\";edit_width = 25;height = 1;value = \"\";} ok_cancel; } " file ) (not (close file)) ) ) ) ) ;; Run Dcl menu dialog (if (<= (setq dcl_id (load_dialog tmp)) 0) (alert "Error loading DCL file.") ) (if (not (new_dialog "CHAN" dcl_id)) (alert "Error loading dialog.") ) (princ) ;; function selects tabell ;; read in dialog (if (null NAMES) (setq NAMES (list '("1" "TEST1") '("2" "TEST2") '("3" "TEST3"))) ;testweise ) (start_list "selections") (mapcar 'add_list (mapcar 'car NAMES)) (end_list) (action_tile "selections" (strcat "(progn (setq SIZ $value)" "(start_list \"preview\")" "(mapcar ' add_list (setq txt (cdr (assoc (nth (atoi siz)(mapcar 'car NAMES))NAMES))))" "(end_list)" "(mode_tile \"accept\" 2))" ) ) (action_tile "Okay" (strcat "(progn " "(setq txt (car txt))" "(done_dialog 1))" ) ) (action_tile "cancel" "(done_dialog 0)") (action_tile "Add" (strcat "(if (<= (setq dcl_id (load_dialog tmp)) 0) (alert \"Error loading DCL file.\") )" "(if (not (new_dialog \"ADD\" dcl_id)) (alert \"Error loading dialog.\") ) (start_dialog)" ) )
; hier will ich jetzt erreichen, dass der neue Textblockname eingefügt wird (start_list "Selection") (add_list "(setq Selection $value)") (add_list "(setq Preview $value)") (setq res (start_dialog)) (unload_dialog dcl_id) (vl-file-delete fname) (princ) )
------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
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: 23. Mai. 2013 14:15 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo Dirk, vielleicht solltest Du erstmal ein bißchen "aufräumen", sieht ziemlich durcheinander aus. In die Action_tile-Anweisungen würde ich (auch wenn es geht) nicht soviel reinpacken, ist unübersichtlich. Als Beispiel habe ich die Funktion "Add" beigepackt, diese wird durch (action_tile "Add" "(add Siz Names tmp)") aufgerufen, die notwendigen Variablen werden übergeben. In der Funktion werden dann die EditBoxen "Selection" und "Preview" mit Werten gefüllt. Die Funktion kann dann z.B. die sinnvolle Rückgabe des neu eingegebenen Wertes haben. [code] (defun c:test ( / file tmp dch return) (cond ( (not (and (setq file (open (setq tmp (vl-filename-mktemp nil nil ".dcl")) "w")) (write-line " CHAN : dialog {label = \"NOTES\"; : list_box {label = \"Choose Selection :\";key = \"selections\";height = 12;} : list_box {label = \"Preview :\";key = \"preview\";width = 50;height = 5;} : boxed_row { : button {key = \"Okay\";label = \" Okay \";is_default = true;} : button {key = \"Cancel\";label = \" Cancel \";is_default = false;is_cancel = true;} : button {key = \"Add\";label = \" Add \";is_default = false;is_cancel = true;} } } ADD : dialog {label = \"Add\"; : row { : edit_box {key = \"Selection\";label = \"Selection:\";edit_width = 25;height = 1;value = \"\";} } : edit_box {key = \"Preview\";label = \"Preview:\";edit_width = 25;height = 1;value = \"\";} ok_cancel; } " file ) (not (close file)) ) ) ) ) ;; Run Dcl menu dialog (if (<= (setq dcl_id (load_dialog tmp)) 0) (alert "Error loading DCL file.") ) (if (not (new_dialog "CHAN" dcl_id)) (alert "Error loading dialog.") ) (princ) ;; function selects tabell ;; read in dialog (if (null NAMES) (setq NAMES (list '("1" "TEST1") '("2" "TEST2") '("3" "TEST3"))) ;testweise ) (start_list "selections") (mapcar 'add_list (mapcar 'car NAMES)) (end_list) (action_tile "selections" (strcat "(progn (setq SIZ $value)" "(start_list \"preview\")" "(mapcar ' add_list (setq txt (cdr (assoc (nth (atoi siz)(mapcar 'car NAMES))NAMES))))" "(end_list)" "(mode_tile \"accept\" 2))" ) ) (action_tile "Okay" (strcat "(progn " "(setq txt (car txt))" "(done_dialog 1))" ) ) (action_tile "cancel" "(done_dialog 0)") (action_tile "Add" "(add Siz Names tmp)")
; hier will ich jetzt erreichen, dass der neue Textblockname eingefügt wird (start_list "Selection") (add_list "(setq Selection $value)") (add_list "(setq Preview $value)") (setq res (start_dialog)) (unload_dialog dcl_id) (vl-file-delete fname) (princ) ) ;;;AddFunktion (defun Add (SIZ NAMES TMP / DCL_ID ) (if (<= (setq dcl_id (load_dialog tmp)) 0) (alert "Error loading DCL file.") ) (if (not (new_dialog "ADD" dcl_id)) (alert "Error loading dialog.") )
(set_tile "Selection" (car(nth (atoi siz)NAMES))) (set_tile "Preview" (cadr(nth (atoi siz)NAMES))) (start_dialog) ) [code] ------------------ viele Grüße Jörn http://www.bosse-engineering.com Koordinatenausgabe Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 23. Mai. 2013 14:46 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn! Kann man eigentlich andersherum über den Add dialog, neue Werte in var NAMES ablegen, die wiederum im aufgefrischten Note dialog angezeigt werden. Oder ist das nicht im Sinne von DCL machbar ? ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
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: 23. Mai. 2013 15:05 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo Dirk, naklar. 1. mit Get_Tile holst Du Dir die Werte aus den EditBoxen "Selection" und "Preview" und speicherst die z.B. in die Varialblen "SelectionGet" und "PreviewGet". (setq NAMES (list '("1" "TEST1") '("2" "TEST2") '("3" "TEST3"))) 2. Prüfen mit (if(assoc SelectionGet NAMES) JA: (subst (list SelectionGet PreviewGet)(assoc SelectionGet NAMES)NAMES) NEIN: (append NAMES (list(list SelectionGet PreviewGet))) => Vl-Sort hinterher damit die Reihenfolge wieder stimmt. Die aktuelle Liste NAMES wird von der Funktion "Add" zurückgegeben und dann mußt Du im vorhergehenden Dialogfenster die Liste wieder aktualisieren. Das aber alles nur so auf die Schnelle als Gedankenansatz, gibt sicherlich noch mehr Möglichkeiten das zu lösen. ------------------ viele Grüße Jörn http://www.bosse-engineering.com Koordinatenausgabe Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 23. Mai. 2013 15:10 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
ich hab immer ne Funktion DLG-CHECK : z.B. (defun DLG-CHECK(/ ABSTAND) (if (setq LMIN(distof(get_tile "LMIN"))) (list LMIN (=(get_tile "DELETE" )"1") (list (=(get_tile "CIRCLE" ) "1") (=(get_tile "ARC" ) "1") (=(get_tile "PLINE" ) "1") (=(get_tile "LINE" ) "1") (=(get_tile "SPLINE" ) "1") (=(get_tile "ELLIPSE") "1") ) ) (alert "Numerischer Wert für Objektlängengrenzwert erforderlich!") ) ) die dann in der DLG-Run-Routine aufgerufen wird : (defun DLG-RUN() .... (action_tile "OK" "(setq RETURN(DLG-CHECK))(done_dialog 1)") (action_tile "CANCEL" "(setq RETURN nil)(done_dialog 0)") ... RETURN ) damit werden die Dialogsachen zurückgegeben
------------------ Also ich finde Unities gut ... und andere sicher auch --------------------------------------- - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 23. Mai. 2013 15:30 <-- editieren / zitieren --> Unities abgeben:
Danke für die HG, mir fehlt es einfach noch an Wissen, wobei ich die Seiten auf AFRAlisp und Jeffery Sanders durchgegangen bin. Vielleicht ist das Thema noch ein wenig zu avanciert für mich. Meine erste Frage ist, wenn ich die (set_tile "ABC") funktion verwende, speichere ich im DialogObjekt "ABC" einen Wert Korrekt? Und wenn ich danach die Funktion (get_tile "ABC") aufrufe müsste ich doch umgekehrt den zuvor eingegebenen Wert erhalten. Ich steige da nicht ganz durch ?! ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 23. Mai. 2013 15:35 <-- editieren / zitieren --> Unities abgeben:
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 24. Mai. 2013 09:14 <-- editieren / zitieren --> Unities abgeben:
Kurze Rückmeldung, ich bin jetzt soweit gekommen, dass ich in dem Add dialog Werte eingeben kann, die in die Variablen GetSelection und GetPreview geschrieben werden. Drücke ich aber dann auf okay um den Add dialog abzuschliessen, schliesst es mir auch den Notes dialog,(also den Eingangsdialog). Was muss ich tun, damit das nicht eintritt, sondern die Liste NAMES aufgefrischt und im Dialog Notes richtig angezeigt wird ? [edit] Ein Ausschnitt, wie ich im Add dialog die Variablen erzeuge Code:
(action_tile "Add" (strcat "(if (<= (setq dcl_id (load_dialog tmp)) 0) (alert \"Error loading DCL file.\") ) (if (not (new_dialog \"ADD\" dcl_id)) (alert \"Error loading dialog.\") ) (action_tile \"Selection\" (strcat (set_tile \"Selection\" \"Enter Textblock Name Here\") (mode_tile \"Selection\" 2) (action_tile \"Selection\" \"(setq GetSelection $value)\") (action_tile \"Preview\" (strcat (set_tile \"Preview\" \"Enter Textblock Value Here\") (mode_tile \"Preview\" 2) (action_tile \"Preview\" \"(setq GetPreview $value)\") (start_dialog) ) ) ) )" ) ) ; Auffrischen der Liste Names nach Eingabe neuer Werte im Add dialog (setq NAMES (append NAMES (list (list GetSelection GetPreview))))
[Diese Nachricht wurde von cadplayer am 24. Mai. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
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: 24. Mai. 2013 10:05 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 24. Mai. 2013 11:54 <-- editieren / zitieren --> Unities abgeben:
Deine Abruffunktion "Add" habe ich getestet. Läuft bei mit nicht ...few arguments... Ich muss die Sache erstmal heute auf sich beruhen lassen, ich dreh mich nämlich im Kreis.. [Diese Nachricht wurde von cadplayer am 24. Mai. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
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: 24. Mai. 2013 12:21 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 24. Mai. 2013 13:02 <-- editieren / zitieren --> Unities abgeben:
3 Argumente: das ist mir bekannt. netter Verweis Die Abfrage get_tile muss man nur in die Funktion einfügen, damit ich letztendlich einen Wert in GetSelection erhalte. Vom deinem Ansatz ist es mir klar jetzt. Du willst quasi mit der Abruffunktion beide Werte für GetPreview und GetSelection abfragen. Ist das so ausführbar, wie es meine Funktion mit action_tile, letzteres Codebeispiel schon ausführt. Ich finde es allerdings übersichtlich genug, finde daher Unterfunktionen überflüssig. Mein letzteres Problem ist lediglich, dass ich die neue NAMES variable im Eingangsdialog "NOTES" auffrischen will, um dann mit dem neu hinzugefügten Textblock weiterarbeiten kann. Sorry, wenn mein code wiedermal ziehmlich unübersichtlich ausfällt. Ich versuche immer meine Beispiele weiterzuentwickeln. Höre daher immer gern Eure Kritiken und Vorschläge. Danke vielvielmals. ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se 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: 24. Mai. 2013 17:56 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: ...Drücke ich aber dann auf okay um den Add dialog abzuschliessen, schliesst es mir auch den Notes dialog,(also den Eingangsdialog). Was muss ich tun, damit das nicht eintritt ...
Das kannst Du mit den Rückgabewerten von start_dialog bzw. done_dialog steuern. ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 27. Mai. 2013 12:56 <-- editieren / zitieren --> Unities abgeben:
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
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: 27. Mai. 2013 14:08 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo Dirk, ich habe 3 Sachen im Code geändert: 1. Im DCL-Write-Teil habe ich für den Button "Add" die Attribute is_default = false;is_cancel = true; herausgenommen. 2. Ich habe die Funktion chan:set hinzugefügt, die kann dann gleichzeitig für die Initialisierung des 1. Dialogfensters und für die Action_tile-Anweisung "Add" verwendet werden. 3. Die Rückgabe der Funktion "Add" ist die Liste NAMES, dann kann auch damit das erste Dialogfenster aktualisiert werden. ------------------ viele Grüße Jörn http://www.bosse-engineering.com Koordinatenausgabe Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 27. Mai. 2013 16:17 <-- editieren / zitieren --> Unities abgeben:
Danke für deine schnelle Hilfe - funktioniert enwandfrei. Konkrete Angaben mache ich dir morgen. Mir sind nur einige Dinge unklar und brauche da mal deine Gedankengänge. Entschuldige, wenn ich es so sage - es aber nicht so meine: Mir kommt es manchmal so vor in der Programmierung, alles umgekehrt aufzuzäumen ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 28. Mai. 2013 10:00 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn! Deine Zeilen leuchten mir zwar ein,ABER nicht wirklich, wie die Funktionen action_tile, start_dialog, done_dialog arbeiten. Fragen, die auftreten - was ist eigentliche eine tile - bedient action_tile einfach gesagt, was mit der tile passieren soll - start_dialog steht prinzipiell am Ende, wird erst hier der Dialog gestartet in dem Zusammenhang was macht dann done_dialog Vielleicht wirken die Fragen etwas durcheinander. Vielleicht kennt jemand eine gute Seite, da die Afralisp seite nur einen Einstieg bietet, aber beispielweise die Dialog-vorlagen-befehle nicht weiter erklärt werden. Bisher bin ich soweit gekommen, dass mit action_tile die ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se [Diese Nachricht wurde von cadplayer am 28. Mai. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Abteilungsleiter Technisches Facilitymanagement (m/w/d) | Werden Sie Teil unseres ELW-Teams, das gerne Verantwortung übernimmt - für Umwelt, für Menschen, für Wiesbaden. Wir sind der kommunale Entsorger für Abfälle und Abwasser in Wiesbaden und gehören zu den technisch führenden Entsorgungsfachbetrieben in Hessen. Wir sorgen für eine saubere Stadt, halten Rohstoffe im Kreislauf und erzeugen erneuerbare Energien. Wir betreiben eine Deponie, zwei moderne Klärwerke und das 800 km lange Kanalnetz.... | Anzeige ansehen | Teamleitung, Gruppenleitung |
|
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1143 Registriert: 20.12.2002
|
erstellt am: 28. Mai. 2013 10:39 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 28. Mai. 2013 10:43 <-- editieren / zitieren --> Unities abgeben:
|