Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  action_tile

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:  action_tile (1402 mal gelesen)
fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 16. Dez. 2003 10:59    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

moin,

ich habe in einem dialogfeld ein eingabefeld und ein listenfeld.
immer wenn ich in dem eingabefeld bin und mit return bestätige soll der eintrag in das listenfeld übernommen werden. das problem ist nur, wenn ich das dialogfeld verlasse, wird der letzte eintrag nochmals übernommen.

------------------

MfG
Frank

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: 16. Dez. 2003 11:23    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 fca_mi2 10 Unities + Antwort hilfreich

Hallo Frank,

was soll man dir dabei helfen? Das ist ein Logik-Problem.
Ich vermute, du hat in dem (action-tile ..) vom ok Feld auch diese Anweisung drin, die dir das Listenfeld um diesen Wert erweiteret. Das muss da raus.

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

fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 16. Dez. 2003 11:25    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

nee nee,

das passiert auch wenn ich mit der maus ein anderes eingabefeld anklicke.

------------------

MfG
Frank

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: 16. Dez. 2003 11:30    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 fca_mi2 10 Unities + Antwort hilfreich

poste mal die Tile-Definition aus der DCL und den zugehörigen (action-tile..)

Ein Action-Tile beim Edit Feld wird immer dann ausgeführt, wenn dieses verlassen wird. Dabei ist es egal wohin man mit der Maus klickert.

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

fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 16. Dez. 2003 12:25    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

hier die dcl :

fc_kaefig : dialog {
    label="Käfig bauen";
    :row{
    :boxed_column{
        :edit_box {
            key        = "DCLEdit1" ;
            label      = "Abstand in x-Richtung" ;
            value      = "0" ;
            edit_width = 3 ;
            height    =  0.9 ;
        }
        : button {
            key        = "DCLButton1" ;
            label      = "x Einfügen" ;
            width      = 10.0 ;
            height    =  2.1 ;
            is_tab_stop = false ;
        }
        :list_box {
            key        = "DCLListLabel1" ;
            label      = "Abtände in x-Richtung" ;
            width      = 10.0 ;
            height    =  10.0 ;
            is_tab_stop = false ;
            list    = "" ;
        }
    }
    :boxed_column{   
        :edit_box {
            key        = "DCLEdit2" ;
            label      = "Abstand in y-Richtung" ;
            value      = "0" ;
            edit_width = 3 ;
            height    =  0.9 ;
        }
        : button {
            key        = "DCLButton2" ;
            label      = "y Einfügen" ;
            width      = 10.0 ;
            height    =  2.1 ;
            is_tab_stop = false ;
        }
        :list_box {
            key        = "DCLListLabel2" ;
            label      = "Abtände in y-Richtung" ;
            width      = 10.0 ;
            height    =  10.0 ;
            is_tab_stop = false ;
            list    = "" ;
        }
        }
    :boxed_column{       
        :edit_box {
            key        = "DCLEdit3" ;
            label      = "Höhenlage in z-Richtung" ;
            value      = "0" ;
            edit_width = 3 ;
            height    =  0.9 ;
        }
        : button {
            key        = "DCLButton3" ;
            label      = "z Einfügen" ;
            width      = 10.0 ;
            height    =  2.1 ;
            is_tab_stop = false ;
        }       
        :list_box {
            key        = "DCLListLabel3" ;
            label      = "Höhenlagen in z-Richtung" ;
            width      = 10.0 ;
            height    =  10.0 ;
            is_tab_stop = false ;
            list    = "" ;
        }
        }
        }
ok_only;
}


und hier das lisp :

(defun ld_fc_kaefig( / dcl_id)
  (defun x_einfueg (/)
    (if (and (= x_liste nil) (/= (get_tile "DCLEdit1") ""))
      (setq x_liste (list (get_tile "DCLEdit1")))
      (setq x_liste (append x_liste (list (get_tile "DCLEdit1"))))
    );if
;;;    (set_tile "DCLEdit1" "")
    (start_list "DCLListLabel1")
      (mapcar 'add_list x_liste)
    (end_list)

  );defun
  (defun y_einfueg (/)
    (if (and (= y_liste nil) (/= (get_tile "DCLEdit2") ""))
      (setq y_liste (list (get_tile "DCLEdit2")))
      (setq y_liste (append y_liste (list (get_tile "DCLEdit2"))))
    );if
;;;    (set_tile "DCLEdit2" "")
    (start_list "DCLListLabel2")
      (mapcar 'add_list y_liste)
    (end_list)   
  );defun
  (defun z_einfueg (/)
    (if (and (= z_liste nil) (/= (get_tile "DCLEdit3") ""))
      (setq z_liste (list (get_tile "DCLEdit3")))
      (setq z_liste (append z_liste (list (get_tile "DCLEdit3"))))
    );if
    (set_tile "DCLEdit3" "")
    (start_list "DCLListLabel3")
      (mapcar 'add_list z_liste)
    (end_list)   
  );defun 
  (defun init_handler()  ;Initialation_Code
    (setq x_liste nil)
    (setq y_liste nil)
    (setq z_liste nil)
    (princ)
  );End of Initial Function
  (defun set_data() ;Start Set function
      (princ)
  );End of Set function
  (defun get_data() ;Start Get function
      (princ)
  );End of Get function
  (if (setq dcl_id (load_dialog "fc_kaefig.DCL"))
      (if (new_dialog "fc_kaefig" dcl_id)
          (progn
              (init_handler)
              (set_data)
              (action_tile "accept" "(get_data)(done_dialog)")
      (action_tile "DCLEdit1" "(x_einfueg)")
      (action_tile "DCLEdit2" "(y_einfueg)")
      (action_tile "DCLEdit3" "(z_einfueg)")    
              (start_dialog)
              (unload_dialog dcl_id)
            )
        )
    )
)


(defun c:kae (/ bx by bz n n2 ep epx epy epz zp zpx zpy zpz)
  (ld_fc_kaefig)

  (fc_layer_anlegen "T__KONS_KAEFIG" "cyan" "continuous" "acadiso-lin")
   
  (setq bx 0)
  (setq by 0)
  (foreach n x_liste
    (setq bx (+ bx (atof n)))
  );foreach
  (princ "\nbx:")
  (princ bx)
  (foreach n y_liste
    (setq by (+ by (atof n)))
  );foreach
  (princ "\nby:")
  (princ by) 

  (setq epz 0.0)
  (setq zpz 0.0)

  (foreach n2 z_liste
    (setq epz (atof n2))
    (setq zpz epz)
   
    (setq epx 0.0)
    (setq epy 0.0)
    (setq zpx 0.0)
    (setq zpy 0.0)
 
  (foreach n x_liste
    (setq epx (+ epx (atof n)))
    (setq epy (- 0.0 2.00))
    (setq ep (list epx epy epz))
    (setq zpx epx)
    (setq zpy (+ by 2.00))
    (setq zp (list zpx zpy zpz))
    (fc_linie ep zp "T__KONS_KAEFIG" 256 1.00 "bylayer")
  );foreach

    (setq epx 0.0)
    (setq epy 0.0)
    (setq zpx 0.0)
    (setq zpy 0.0)
   
  (foreach n y_liste
    (setq epx (- 2.00))
    (setq epy (+ epy (atof n)))
    (setq ep (list epx epy epz))
    (setq zpx (+ bx 2.00))
    (setq zpy epy)
    (setq zp (list zpx zpy zpz))
    (fc_linie ep zp "T__KONS_KAEFIG" 256 1.00 "bylayer")
  );foreach
   
  );foreach
 
);defun

------------------

MfG
Frank

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 16. Dez. 2003 12:44    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 fca_mi2 10 Unities + Antwort hilfreich

bin mir nicht ganz sicher , aber du müsstest im action-tile
den parameter $REASON deiner lisp-funktion mitgegen,
der ist soweit ich noch weiss bei verlassen eines eingabefeldes mit tab oder maus den wert 2 bei enter den wert 1

in etwa so:
(action_tile "MeineEingabeBox" "(MeinLispFuerEingabe $REASON)")

und im lisp den wert abprüfen, nur bei 1 die liste aktualisieren
sonst häng dochmal ein print rein , um die variable zu prüfen

------------------

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 16. Dez. 2003 12:55    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 fca_mi2 10 Unities + Antwort hilfreich

hab jetzt erst gesehen, dass du dein lisp und dcl gepostet hast

im action_tile ergäntzt du folgendermassen
(action_tile "DCLEdit1" "(x_einfueg $REASON)")

un im aufgerufenem programm prüfst du den übergebenen wert
(defun x_einfueg ( wie /)
  (cond ((= wie 1) ; mit enter 
        .... nur hier soller weietrtun

------------------

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 16. Dez. 2003 13:03    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 fca_mi2 10 Unities + Antwort hilfreich

noch ein tipp

ich würde die 3 unterprogramme x-einfueg y-einfueg und z-einfueg
zusammenlegen auf ein programm

in etwa so
(action_tile "DCLEdit1" "(einfueg $REASON $value $key)")
(action_tile "DCLEdit2" "(einfueg $REASON $value $key)")
(action_tile "DCLEdit3" "(einfueg $REASON $value $key)")

und zum testen
(defun einfueg ( wie wert wer / )
  (print wie)
  (print wert)
  (print wer)
)

mit $REASON bekommst du wie der event zustandekam
mit $VALUE bekommst du den inhalt des eingabefeldes
mit $KEY bekommst du welches eingabefeld das lisp gestartet hat

damit könnte man das ganze etwas übersichtlicher machen

------------------

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

fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 16. Dez. 2003 13: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

vielen dank eucgh beiden,

jetzt klappt es prima !

------------------

MfG
Frank

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: 16. Dez. 2003 13:28    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 fca_mi2 10 Unities + Antwort hilfreich

Hallo Frank,

war zu langsam beim umstellen deines Codes. Dennoch mal ein paar Änderungen, die dir den Umgang mit (defun und der Übergabe von Variablen etwas verdeutlichen. Ich würde das Einfügen eines neuen Listenwertes nur dann machen, wenn der Anwender bewusst den Einfügen-Button drückt. Also nix mit (action-tile ..) beim Edit-Feld.
Schau es dir an, und

bei Fragen ...

Grüße Holger

Code:

(defun ld_fc_kaefig(x_liste y_liste z_liste / dcl_id)
  (if (setq dcl_id (load_dialog "fc_kaefig.DCL"))
    (if (new_dialog "fc_kaefig" dcl_id)
      (progn
        (dcl:set_list "DCLListLabel1" x_liste)
        (dcl:set_list "DCLListLabel2" y_liste)
        (dcl:set_list "DCLListLabel3" z_liste)
        (action_tile "accept" "(done_dialog)")
        (action_tile "DCLButton1" "(setq x_liste(xyz_einfueg \"DCLListLabel1\" \"DCLEdit1\" x_liste))")
        (action_tile "DCLButton2" "(setq y_liste(xyz_einfueg \"DCLListLabel2\" \"DCLEdit2\" y_liste))")
        (action_tile "DCLButton3" "(setq z_liste(xyz_einfueg \"DCLListLabel3\" \"DCLEdit3\" z_liste))")
        (start_dialog)
        (unload_dialog dcl_id)
        (list x_liste y_liste z_liste)
        )
      )
    )
  )
(defun xyz_einfueg (key key_von liste / wert)
  (setq wert (get_tile key_von))
  (if (and
        wert
        (/= wert "")
        (not (member wert liste))
        )
    (setq liste (reverse (cons wert (reverse liste))))
    liste
    )
  (dcl:set_list key liste)
  (set_tile key_von "")
  (mode_tile key_von 2)
  liste
  )
(defun dcl:set_list (key liste)
  (start_list key 3)
  (mapcar 'add_list liste)
  (end_list)
  )
(defun c:kae (/ bx by bz n n2 ep epx epy epz zp zpx zpy zpz)
  (setq erg (ld_fc_kaefig nil nil nil)
        xli (car erg)
        yli (cadr erg)
        zli (caddr erg)
        )
  ;;Nur als Bsp ->
  (setq erg (ld_fc_kaefig xli yli zli)
        xli (car erg)
        yli (cadr erg)
        zli (caddr erg)
        )
  ;;<-Bsp

  ..... hier weiter dein code
  (fc_layer_anlegen "T__KONS_KAEFIG" "cyan" "continuous" "acadiso-lin")


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

fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 17. Dez. 2003 07:09    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

moin,

erst mal danke für die antwort, habe wieder einiges dazu gelernt.

dass der wert in die liste übernommen wird, finde ich ganz gut, denn dann muss man nicht ständig zwischen tastatur und maus hin und her greifen.
hier habe auch versucht deinen code zu verstehen, habe aber noch ein paar fragen, die ich in die betreffende zeile geschrieben habe :

(defun ld_fc_kaefig(x_liste y_liste z_liste / dcl_id)
  (if (setq dcl_id (load_dialog "fc_kaefig.DCL"))
    (if (new_dialog "fc_kaefig" dcl_id)
      (progn
        (dcl:set_list "DCLListLabel1" x_liste)
        (dcl:set_list "DCLListLabel2" y_liste)
        (dcl:set_list "DCLListLabel3" z_liste)
        (action_tile "accept" "(done_dialog)")
        (action_tile "DCLButton1" "(setq x_liste(xyz_einfueg \"DCLListLabel1\" \"DCLEdit1\" x_liste))")
        (action_tile "DCLButton2" "(setq y_liste(xyz_einfueg \"DCLListLabel2\" \"DCLEdit2\" y_liste))")
        (action_tile "DCLButton3" "(setq z_liste(xyz_einfueg \"DCLListLabel3\" \"DCLEdit3\" z_liste))")
        (start_dialog)
        (unload_dialog dcl_id)
        (list x_liste y_liste z_liste)  ;*********************was erreichst du damit ?
        )
      )
    )
  )

(defun xyz_einfueg (key key_von liste / wert)
  (setq wert (get_tile key_von))
  (if (and
        wert
        (/= wert "")
        (not (member wert liste))
        )
    (setq liste (reverse (cons wert (reverse liste))))
    liste                                            ;************liste ist doch eine variable, verstehe ich nicht
    )
  (dcl:set_list key liste)
  (set_tile key_von "")
  (mode_tile key_von 2)
  liste
  )
(defun dcl:set_list (key liste)
  (start_list key 3)
  (mapcar 'add_list liste)
  (end_list)
  )
(defun c:kae (/ bx by bz n n2 ep epx epy epz zp zpx zpy zpz)
  (setq erg (ld_fc_kaefig nil nil nil)  ;*******************das hier verstehe ich auch nicht
        xli (car erg)
        yli (cadr erg)
        zli (caddr erg)
        )
  ;;Nur als Bsp ->
  (setq erg (ld_fc_kaefig xli yli zli)
        xli (car erg)
        yli (cadr erg)
        zli (caddr erg)
        )

------------------

MfG
Frank

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: 17. Dez. 2003 09:43    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 fca_mi2 10 Unities + Antwort hilfreich

Hallo Frank,

jedes Lisp-Funktion hat ein Ergebnis. Mit (defun ..) definiert man eine eigene Lisp-Funktion. Also hat auch diese ein Ergebnis. Welches? Es ist die Rückgabe, der zuletzt in der Routine ausgeführten Funktion.

(defun irgendwas (a / b)
(setq b 1)
(repeat a
(setq b (* 2 b))
)
b
)

Die Funktion irgendwas bekommt als Übergabe den Parameter a. Mit diesem werden irgendwelche Berechnungen durchgeführt und irgendwann innerhalb der Funktion die Variable b belegt. Da in der Funktion aber auch noch andere Sachen gemacht werden, so dass das gewünschte Ergebnis, der Wert der Variablen b, nicht als letztes Ergebnis zzur Verfügung steht, wird am Ende einfach die Variable noch einmal hingeschrieben. Somit kann man das Ergebnis des Funktionsaufrufs auch einer Variablen zuweisen.

(setq ergebnis (irgendwas 5))

Möchte man mehrere Ergebnisse einer Funktion erhalten, dann ist es notwendig diese in einer Liste zusammen zu fassen.
In unserem Bsp könnte das dann so aussehen:

(defun irgendwas (a / b)
(setq b 1)
(repeat a
(setq b (* 2 b))
(setq a (* 3 b))
)
(list b a)
)

Hier sieht man auch, dass man den Wert einer Variablen, der als Parameter übergeben wurde, innerhalb der Funktion wie eine ganz normale Variable nutzen kann. Das Ergebnis ist nun allerdings eine Liste mit 2 Werten.

(setq ergebnis (irgendwas 5)
wert1 (car ergebnis)
wert2 (cadr ergebnis)
)

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

fca_mi2
Mitglied
Bauingenieur


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

Beiträge: 505
Registriert: 10.01.2003

ACAD2018

erstellt am: 17. Dez. 2003 10:13    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

vielen dank nochmals,

habe heute und gestern wieder eine menge grundlagen über lisp gelernt .
ich hoffe, die unities haben euch erreicht !

------------------

MfG
Frank

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