| | | 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: DCL-Toggle funktion in Lisp einbinden (2066 mal gelesen)
|
Jürgen Scheeren Mitglied Energieanlagen Konstrukteur , CAD-Administrator
Beiträge: 262 Registriert: 03.04.2003 Autocad MEP 2016 win7x64bit
|
erstellt am: 28. Okt. 2004 14:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Autolisper, ich find einfach kein Beispiel wie ich die Toggle Funktion in eine Lisp-Datei einbinden kann, nicht bei Afro und auch nicht im Forum. Wer kann mir einen Tip geben. Anbei ein Versuchscode der bei value 1 einen Layer anlegen soll. Gruß Jürgen //DCL CODING STARTS HERE //The name of the dialog. Toggle //The start of the dialog definition : dialog //The opening bracket for the dialog definition { //The Label of the dialog definition. //This is what appears in the title bar of the dialog label = "Toggle-Test"; /////////////////////////////////////////////////////////////////////////////////////////////// // //The start of a edit_box tile definition : toggle {key = "tg1"; value = 0; label = "Layer anlegen ";} /////////////////////////////////////////////////////////////////////////////////////////// // //The OK_Cancel button tile definition
ok_cancel ; /////////////////////////////////////////////////////////////////////////////////////////// // //The closing bracket for the dialog definition } //DCL CODING ENDS HERE (prompt "\nType Toggle to run.....")
(defun C:Toggle (/) ;;;;;;;;;;;;Load the dialog file and set a reference to it. (setq dcl_id (load_dialog "Toggle.dcl")) (if (not (new_dialog "Toggle" dcl_id)) (exit ) ) ;;;;;;;;;;;;Dialogverbindung (action_tile "tg1" "(SETQ tg1 $VALUE)(MODE_ANZ1)") (action_tile "cancel" (done_dialog 0)") (action_tile "accept" "(done_dialog )")
;;;;;;;;;;;;Close the dialog (start_dialog) (unload_dialog dcl_id)
;;;;;;;;;;;;Programmebene (if (= tg1 "1") (progn (command "-layer" "_make" "Layername" "" ) ) )
;;;;;;;;;;;; Ende Programm (princ) );defun
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 28. Okt. 2004 15:29 <-- editieren / zitieren --> Unities abgeben: Nur für Jürgen Scheeren
Hallo Jürgen, erstmal prinipiell, solange ein Diafenster aktiv ist, kannst du mit (command ..) nix machen. Ich mache es bei einem Toggle immer so, das ich eine (if abfrage reinbringe: (action-tile .. "(if (= $value "1") (machwas)(machwasanderes))") Bei Fragen ... Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jürgen Scheeren Mitglied Energieanlagen Konstrukteur , CAD-Administrator
Beiträge: 262 Registriert: 03.04.2003 Autocad MEP 2016 win7x64bit
|
erstellt am: 28. Okt. 2004 15:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, so, hab ich gemacht, leider erscheint das Dialogfeld nur kurz und ist dann wieder weg. Muß ich da nochwas mit "set_tile" oder "mode_tile" machen ? Gruß Jürgen (prompt "\nType Toggle to run.....") (defun C:Toggle (/) ;;;;;;;;;;;;Load the dialog file and set a reference to it. (setq dcl_id (load_dialog "Toggle.dcl")) (if (not (new_dialog "Toggle" dcl_id)) (exit ) ) ;;;;;;;;;;;;Dialogverbindung (action-tile "tg1" (if (= $value "1") (Layn))") (action_tile "cancel" (done_dialog 0)") (action_tile "accept" "(done_dialog )")
;;;;;;;;;;;;Close the dialog (start_dialog) (unload_dialog dcl_id)
;;;;;;;;;;;;Programmebene (defun Layn (/) (command "-layer" "_make" "Layername" "" )
) ;;;;;;;;;;;; Ende Programm (princ) );defun Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 28. Okt. 2004 16:15 <-- editieren / zitieren --> Unities abgeben: Nur für Jürgen Scheeren
Hallo Jürgen, in der Konstellation, wie du es jetzt hast, ist immer noch der (command ..)-Aufruf während das Diafenster aktiv ist. Das funktioniert nicht! Du musst dann mit (entmake ..) ran, wenn der Layer unbedingt erstellt werden soll, wenn das Dialogfenster offen ist. Was meines Erachtens keinen Sinn macht, es sei denn, der soll dann gleich in einer Liste angezeigt werden oder so? Was mir auch noch auffällt ist, dass du die Variablen nicht lokal deklariert hast. Insbesondere die dcl_id kann dadurch, dass diese bereits aus vorher gegangenen Aufrufen einen Wert hat, die Ursache des Problems sein. Bei Fragen ... Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 28. Okt. 2004 20:14 <-- editieren / zitieren --> Unities abgeben: Nur für Jürgen Scheeren
Zitat:
ich find einfach kein Beispiel wie ich die Toggle Funktion in eine Lisp-Datei einbinden kann, nicht bei Afro und auch nicht im Forum. Wer kann mir einen Tip geben. Anbei ein Versuchscode der bei value 1 einen Layer anlegen soll.
Hallo Jürgen, habe ein bisschen Zeit dir zu helfen... Holger hat ja schon mitgeteilt, daß command Aufrufe nicht funktionieren, wenn eine DCL-Box aktiv ist! Anbei ein Code, der dir die Funktionsweise von ausgeblendeten Dialogboxen zeigt. Hier mit deinem Bsp. zur Layererzeugung oder bereits vorh. Layer aktiv schalten... Der DCL-Code
Code:
Toggle : dialog{ label = "Toggle-Test"; : toggle {key = "dcl_tg1"; value = 0;label = "Layer anlegen ";} ok_cancel; }
Der Lisp CodeCode:
(defun c:LadeToggleBox (/ DCLid DialogEnd ToggleValue);_deklaration von lokalen Variablen (cond ;; Wenn die DCL-Datei gefunden wurde, sich also in ;; einem Suchpfad befindet, dann ist DCLid > 0 ((> (setq DCLid (load_dialog "Toggle-test.dcl")) 0) ;; Setze Vorgabewerte, DialogEnd ist für die ;; While-Schleife (setq DialogEnd 2 ToggleValue "0" ) ;; Programm bleibt solang aktiv, bis der ;; DialogEnd Wert < 2 ist !! (while (>= DialogEnd 2) (new_dialog "Toggle" DCLid) ;; Bei erstem Aufruf kein Haken und bei ;; widerholtem Aufruf Variablenwert übernehmen (set_tile "dcl_tg1" ToggleValue) ;; Bei jedem Klick auf Toggle kommt es zu einer ;; Variablenzuweisung und es wird (done_dialog 2) ;; gesetzt (siehe weiter unten). (action_tile "dcl_tg1" (strcat "(setq ToggleValue $Value)" "(done_dialog 2)" ) ) (action_tile "cancel" "(done_dialog)") (action_tile "accept" "(done_dialog 1)") ;; start_dialog gibt den Status von done_dialog zurück ;; Ist dieser Wert nun >= 2, dann wird das Dialogfeld ;; nur ausgeblendet zwecks interaktiver Aktionen wie ;; ... entsel, oder command Aufrufe (setq DialogEnd (start_dialog)) ;; Dialogbox ist nun nicht mehr auf dem Bildschirm ;; Es folgt die Bedingungsfunktion Cond mit 3 Listen ;; als Argumente. ;; Das erste Element jeder Liste wird (in der gegebenen Reihenfolge) ;; bearbeitet, bis eines dieser Elemente einen anderen Wert als nil zurückgibt. ;; Anschließend werden die Ausdrücke bearbeitet, und der Wert des letzten ;; Ausdrucks zurückgegeben. (cond ((= 0 DialogEnd) ;_ ABBRECHEN gedrückt (if (= "0" ToggleValue) (princ "\nDu hast ABBRECHEN gedrückt und auf ToggleBox NICHT geklickt" ) (princ "\nDu hast ABBRECHEN gedrückt und auf ToggleBox geklickt" ) ) ) ((= 1 DialogEnd) ;_ OK gedrückt (if (= "0" ToggleValue) (princ "\nDu hast OK gedrückt und auf ToggleBox NICHT geklickt" ) (princ "\nDu hast OK gedrückt und auf ToggleBox geklickt") ) ) ((= 2 DialogEnd) ;_ ToggleBox gedrückt ;; Hier nun der interaktive Part, ;; es kann mit command gearbeitet werden. (if (= "1" ToggleValue) (progn (command "_layer" "_make" "EinNeuerLayer" "") (alert "\"EinNeuerLayer\" wurde neu erstellt, oder\naktuell gesetzt") ) (alert "Kein Häckchen gesetzt\nalso nix für mich zu tun\n:-)" ) ) ) ) ;; Falls DialogEnd = 2 ist (Box ist ausgeblendet), wird nun ;; hier wieder zur while-Schleife zurückgesprungen... ;; und somit die Dialogbox wieder aktiviert! ) ;_ ende While ;; Verlassen der While-Schleife, wenn DialogEnd Wert ;; < 2 ist, also 0 für Abbruch und 1 für OK (unload_dialog DCLid);_ beendet eine DCL-Datei ) ;_ ende cond für DialogEnd Auswertung ('WennDCLnichtGefundenWurde ;_ Selbsterklärend :-) (princ "\nDCL-Datei nicht gefunden (Suchpfad?)") ) ) (prin1) )
Hoffe, daß du damit was anfangen kannst uns wünsche weiterhin viel Spaß beim üben Geets Rolf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jürgen Scheeren Mitglied Energieanlagen Konstrukteur , CAD-Administrator
Beiträge: 262 Registriert: 03.04.2003 Autocad MEP 2016 win7x64bit
|
erstellt am: 29. Okt. 2004 08:31 <-- editieren / zitieren --> Unities abgeben:
Hallo Rolf, das nenn ich eine dokumentierte Funktion, da kann sich der Herr auf der Afro-Lisp Seite ne' Scheibe abschneiden. Klar kann ich damit was anfangen und vielen Dank für die super ausführliche Antwort, auch Danke an Holger, der (entmake ..) Funktion werde ich auch mal nachgehen. Gruß Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 29. Okt. 2004 09:57 <-- editieren / zitieren --> Unities abgeben: Nur für Jürgen Scheeren
|
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 29. Okt. 2004 14:10 <-- editieren / zitieren --> Unities abgeben: Nur für Jürgen Scheeren
Zitat:
Da kann sich der Herr auf der Afro-Lisp Seite ne' Scheibe abschneiden.
Na ja, IMO kommentiert doch Kenny Ramage auch reichlich in seinem Code . Trotzdem, danke für die Blumen. Zitat:
Nicht mal Syntax Coloring im Code;-)))
menno Das gibt's hier (noch?) nicht... [Diese Nachricht wurde von benwisch am 29. Okt. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|