Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Funktion mit Variablem Namen bauen...

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:  Funktion mit Variablem Namen bauen... (547 mal gelesen)
marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
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 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

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



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: 24. Mai. 2003 11:40    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 marc.scherer 10 Unities + Antwort hilfreich

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



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

Beiträge: 2490
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 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

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



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: 25. Mai. 2003 00:20    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 marc.scherer 10 Unities + Antwort hilfreich

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



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

Beiträge: 2490
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 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

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




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: 26. Mai. 2003 09:19    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 marc.scherer 10 Unities + Antwort hilfreich

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



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

Beiträge: 2490
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 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

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




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: 26. Mai. 2003 10:07    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 marc.scherer 10 Unities + Antwort hilfreich

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



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

Beiträge: 2490
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 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

Na ja Holger,
DANN SAG' AUCH NIX DAZU!!!!
Marc-> <-Holger

------------------
Ciao,
Marc

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

Dabrunz
Mitglied



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

Beiträge: 127
Registriert: 28.05.2003

erstellt am: 28. Mai. 2003 11:40    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 marc.scherer 10 Unities + Antwort hilfreich

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




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. Mai. 2003 11: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 Nur für marc.scherer 10 Unities + Antwort hilfreich

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

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