Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  DCL-Toggle funktion in Lisp einbinden

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:  DCL-Toggle funktion in Lisp einbinden (2036 mal gelesen)
Jürgen Scheeren
Mitglied
Energieanlagen Konstrukteur , CAD-Administrator


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

Beiträge: 262
Registriert: 03.04.2003

Autocad MEP 2016
win7x64bit

erstellt am: 28. Okt. 2004 14:48    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 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




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 28. Okt. 2004 15:29    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 Jürgen Scheeren 10 Unities + Antwort hilfreich

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


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

Beiträge: 262
Registriert: 03.04.2003

Autocad MEP 2016
win7x64bit

erstellt am: 28. Okt. 2004 15:48    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 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




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 28. Okt. 2004 16:15    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 Jürgen Scheeren 10 Unities + Antwort hilfreich

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


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

Beiträge: 375
Registriert: 01.02.2001

erstellt am: 28. Okt. 2004 20:14    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 Jürgen Scheeren 10 Unities + Antwort hilfreich

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 Code
Code:

(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


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

Beiträge: 262
Registriert: 03.04.2003

Autocad MEP 2016
win7x64bit

erstellt am: 29. Okt. 2004 08:31    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 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



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

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 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 Jürgen Scheeren 10 Unities + Antwort hilfreich

Rolf,

hast's wohl gaaaanz eilig gehabt? Nicht mal Syntax Coloring im Code;-)))

Gruß, Axel Strube-Zettler

------------------
(defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze

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

benwisch
Mitglied
Bautechniker, CAD-Konstrukteur


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

Beiträge: 375
Registriert: 01.02.2001

erstellt am: 29. Okt. 2004 14:10    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 Jürgen Scheeren 10 Unities + Antwort hilfreich

 
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 >>)

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