| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Funktion mit Variablem Namen bauen... (550 mal gelesen)
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 23. Mai. 2003 12:35 <-- editieren / zitieren --> Unities abgeben:
Hi, ich hab 'ne Liste: ("C:RWK" "C:SWK" "C:RWP" "C:SWP" "C:Test") Mit der mache ich nun folgendes: (defun CREATE-FUNCTION-FROM-INI (FUNCNAMES /) (foreach ELEM FUNCNAMES (defun-q-list-set (read ELEM) (list '(/) (list 'RUN-XK (substr ELEM 3)) '(princ)) ) ;_ end of defun-q-list-set ) ;_ end of foreach (vl-string-right-trim "/" (apply 'strcat (mapcar '(lambda (X) (strcat (substr X 3) "/")) FUNCNAMES) ) ;_ end of apply ) ;_ end of vl-string-right-trim ) Danach kann ich die Funktionen mit z.B. (C:TEST) von Acad aus aufrufen, aber leider nicht mit "Test", wie gewünscht (deswegen das "C:Test"). Warum geht das nicht? Hat einer 'ne Idee? ------------------ Ciao, Marc 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: 24. Mai. 2003 11:40 <-- editieren / zitieren --> Unities abgeben: Nur für marc.scherer
Die Anmeldung einer Lisp-funktion bei AutoCAD als Befehl ist ja ein externer Prozess, und der wird nur von (defun...) erledigt (in C/C++ muss das z.B. separat vom Programm gemacht werden). Ich vermute, dass AutoCAD in den neueren Versionen da auch vom Datentyp User-Subr abhängig ist. Defun hat in Acad eine lange Geschichte: Anfangs war es identisch mit set, aber mit dem Zusatz der C:-Anmeldung und es erfüllte auch Zusatzaufgaben, was das (damals noch Acad-eigene Memory-Managment) anging. Dann fiel das letzte weg (durch das Windows-Management), und defun war bis auf die C:-Geschichte nur noch ein Pseudonym für set. Und mit Einführung der User-Subrs ist es jetzt die einzige Möglichkeit, diese zu erzeugen - und es ist innerhalb von Lisp auch die einzige Möglichkeit, in AutoCAD neue Befehle zu erzeugen. Es bleibt dir also nichts anderes, als auf defun umzustellen, am Besten ein (mapcar...(apply'defun ...)...) oder so etwas. Dürfte kein Problem werden. Die Funktionen defun-q und defun-q-list-set sind sowieso absolut überflüssig, denn das sind nur set-Makros, wie es früher das defun war - alter Wein in neuen Schläuchen. Gruss, Axel ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 24. Mai. 2003 14:46 <-- editieren / zitieren --> Unities abgeben:
Hi Axel, schön, das ist durchaus interessant. Hilft mir aber leider kein STück weiter... Normalerweise wende ich mich nur dann ans Forum, wenn ich absolut nicht weiterkomme. Ich hab' keine Ahnung wie ich nun über das von Dir vorgeschlagene: "(mapcar...(apply'defun ...)...)" zu einer Lösung kommen könnte... Ich stecke einfach fest. Wärst Du evtl. so nett mir ein wenig mehr Informationen darüber zu geben, wie ich das Problem lösen könnte? ------------------ Ciao, Marc 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: 25. Mai. 2003 00:20 <-- editieren / zitieren --> Unities abgeben: Nur für marc.scherer
Hi Marc, war auch nicht die beste Idee mit mapcar/apply, weil... Na ja, defun ist ja das einzige Makro in AutoLisp, was alles quotet. Also doch eher ein Fall für eval:
Code:
(defun run-xk(dunnowhat / ) (princ(strcat "No idea what's goin' on here with " dunnowhat "...\n")) )(defun create-by-defun(funcnames / ) (mapcar '(lambda(func / ) (eval (list'defun(read func)'( / )(list 'run-xk (substr func 3))'(princ)) ) ) funcnames ) ) (create-by-defun '("C:RWK" "C:SWK" "C:RWP" "C:SWP" "C:Test")) => (C:RWK C:SWK C:RWP C:SWP C:TEST) test<enter> => No idea what's goin' on here with Test...
Den Ausgabeteil habe ich einfach mal weggelassen, weil der keinen Einfluss auf das Wesentliche hat. Die Funktion run-xk ist nur ein Dummy, weil ich keine Ahnung habe, was da bei dir wirklich passiert. Jedenfalls funktioniert's;-) Gruss, Axel
------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 25. Mai. 2003 10:58 <-- editieren / zitieren --> Unities abgeben:
Hi Axel, ich danke Dir vielmals. Man gut, das ich am WE nicht zuhause bin, sonst hätte ich mir bereits an Deinem mapcar/apply Hinweis schon wieder den Arsch abprobiert und es wäre dann doch nicht gegangen ;-)... Ich hab' Dein create-by-defun noch nicht getestet, aber das hast Du ja bereits übernommen, allerbest. Wie immer bin ich Dir sehr dankbar, bist mal wieder die Lösung meiner Probleme... ------------------ Ciao, Marc 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: 26. Mai. 2003 09:19 <-- editieren / zitieren --> Unities abgeben: Nur für marc.scherer
Hallo, ich habe mir auch mal Gedanken gemacht, und bin zu folgendem Ergebnis gekommen:
Code:
(setq func '(princ "blablabla")) (mapcar '(lambda (FNAME) (eval (read(strcat "(""defun " FNAME "()(eval func)(princ))"))) ) '("C:RWK" "C:SWK" "C:RWP" "C:SWP" "C:Test") )
Bei Fragen ... Grüße Holger ------------------ Holger Brischke CADlon - Lisp over night! Neue Tool's im Free-&Download Zugang zum Download schon gesichert? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 26. Mai. 2003 09:31 <-- editieren / zitieren --> Unities abgeben:
Hi Holger, super, eine Alternative zeigt doch auch immer auf, wieviele Wege es doch für die Lösung eines Problems geben kann. (Und natürlich wie blöd ich bin, daß ich da nicht selbst drauf gekommen bin *schnüff*) Danke... ------------------ Ciao, Marc
[Diese Nachricht wurde von marc.scherer am 26. Mai 2003 editiert.] 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: 26. Mai. 2003 10:07 <-- editieren / zitieren --> Unities abgeben: Nur für marc.scherer
Zitat: Original erstellt von marc.scherer:
(Und natürlich wie blöd ich bin, daß ich da nicht selbst drauf gekommen bin *schnüff*)
Hallo Marc, ... da sag ich jetzt nix zu Man lernt ja nie aus! Grüße Holger
------------------ Holger Brischke CADlon - Lisp over night! Neue Tool's im Free-&Download Zugang zum Download schon gesichert? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 26. Mai. 2003 10:10 <-- editieren / zitieren --> Unities abgeben:
|
Dabrunz Mitglied
Beiträge: 127 Registriert: 28.05.2003
|
erstellt am: 28. Mai. 2003 11:40 <-- editieren / zitieren --> Unities abgeben: Nur für marc.scherer
Tag zusammen. mein erstes Posting auf CAD.DE - mal sehen, was draus werden kann. hinzu kommt, dass es nicht einmal besonders aufregend ist: Ich wollte mal auf vlax-add-cmd hinweisen. Mit dieser Funktion lässt sich einiges mehr anstellen als mit (defun c:..). Insbesondere kann damit die C:-Mimik - so wie ich's sehen - abgelöst werden. Achim Dabrunz 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. Mai. 2003 11:59 <-- editieren / zitieren --> Unities abgeben: Nur für marc.scherer
Hallo Achim (man kennt sich ja bereits aus anderen Foren), na denn mal herzlich willkommen - war doch bestimmt auch nicht das letzte Posting. Dem (vlax-add-cmd ...) habe ich bisher noch keine Beachtung geschenkt, zeigt aber mal wieder, dass man sich so langsam mit den vl-irgendwas Befehlen beschäftigen sollte. Da ist doch schon eine Menge mehr möglich, wozu man mit den 'normalen' Befehlsumfang ganz schöne *Hockstrecksprünge* machen müsste. Grüße Holger ------------------ Holger Brischke CADlon - Lisp over night! Neue Tool's im Free-&Download Zugang zum Download schon gesichert? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |