| |
| 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: Funktionsaufruf aus anderer Funktion (1257 mal gelesen)
|
Christian B. Mitglied
Beiträge: 86 Registriert: 09.03.2006 Windows 7 AutoCAD 2009 AutoCAD Architecture 2012
|
erstellt am: 30. Jan. 2010 23:17 <-- editieren / zitieren --> Unities abgeben:
Hallo, habe mal wieder eine Frage als Lisp-Anfänger, Habe folgende beiden Befehle in einer Lisp-datei (defun c:aa(a b c/ d e) (setq e (caddr c) d (cadr c) c (car c)) ) (defun c:ne() (aa 10 11 '("a" "b" "c")) ) Im ACAD: ne -> ; Fehler: no function definition: AA Was mach ich da Falsch, das Beispiel kommt aus dem Kochbuch für Lisp. Grüße Christian B.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Niggemann Mitglied
Beiträge: 165 Registriert: 31.10.2003 Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010
|
erstellt am: 31. Jan. 2010 01:34 <-- editieren / zitieren --> Unities abgeben: Nur für Christian B.
Hallo Christian schreib es mal so (defun c:aa(a b c / d e) (setq e (caddr c) d (cadr c) c (car c)) ) (defun c:ne() (c:aa 10 11 '("a" "b" "c")) ) und nicht so (defun c:aa(a b c/ d e).....!! du hast 2 Fehler gehabt mfg Niggemann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 31. Jan. 2010 10:28 <-- editieren / zitieren --> Unities abgeben: Nur für Christian B.
Hallo Christian, ich würde das "c:" weglassen, daß ist eigenlich nur dafür gedacht, daß Du die Funktion direkt in der Befehlszeile von AutoCAD starten kannst, aber ohne Parameterübergabe. (defun aa(a b c/ d e) (setq e (caddr c) d (cadr c) c (car c)) ) (defun ne() (aa 10 11 '("a" "b" "c")) ) Mit "c:" könnte man jetzt eine aufrufenden Funktion definieren: (defun c:StartFunktion( / ) (ne) ) Jetzt kannst Du die StartFunktion direkt in der Befehlszeile von AutoCAD mit "StartFunktion" ausführen. (Wenn Du allerdings den Rückgabewert der Funktion verarbeiten willst ist es sinnvoller: (setq Rueckgabewert (ne)) ------------------ viele Grüße Jörn http://www.bosse-engineering.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 31. Jan. 2010 11:26 <-- editieren / zitieren --> Unities abgeben: Nur für Christian B.
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 31. Jan. 2010 11:47 <-- editieren / zitieren --> Unities abgeben: Nur für Christian B.
|
Christian B. Mitglied
Beiträge: 86 Registriert: 09.03.2006
|
erstellt am: 31. Jan. 2010 12:29 <-- editieren / zitieren --> Unities abgeben:
|
neurosis Mitglied dipl.ing.
Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 31. Jan. 2010 17:02 <-- editieren / zitieren --> Unities abgeben: Nur für Christian B.
|
Christian B. Mitglied
Beiträge: 86 Registriert: 09.03.2006 Windows 7 AutoCAD 2009 AutoCAD Architecture 2012
|
erstellt am: 31. Jan. 2010 23:06 <-- editieren / zitieren --> Unities abgeben:
Guten Abend nochmals, hab hier noch etwas mit den Funktionen; ich schreib es mal in dieses Forum, da das Problem vermutlich auch mit Funktionen zusammen hängt: (defun c:ausfueren() (initget 1 "a s") (setq Auswahl (getkword "\ Auswahl: <A>nsicht oder <S>nitt? ")) cond ((= Auswahl "s") ( (setq d2 20) (LINIE_0 P1 P2 d2 "CYAN" "VERDECKT") (setq d2 (- 0.0 d2)) (LINIE_0 P1 P2 d2 "CYAN" "VERDECKT") ) ) ((= Auswahl "a") ( (prompt "Ansicht ") ) ) ) ) Fehlerhafte Funktion: 20 Fehlerhafte Funktion: Ansicht Stimmt da etwas mit den Klammern nicht, da ja cond auch nur Funktionen oder Befehle verarbeitet, oder? Gruß Christian
[Diese Nachricht wurde von Christian B. am 31. Jan. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 01. Feb. 2010 07:28 <-- editieren / zitieren --> Unities abgeben: Nur für Christian B.
Hallo Christian, mit den Klammern war da wirklich etwas durcheinander, hier noch mal die Funktion aufgeräumt: Code: (defun c:ausfueren( / AUSWAHL D2 P1 P2) (initget 1 "a s") (setq Auswahl (getkword "\ Auswahl: <A>nsicht oder <S>nitt? ")) (cond ((= Auswahl "s") (setq d2 20) (LINIE_0 P1 P2 d2 "CYAN" "VERDECKT") (setq d2 (- 0.0 d2)) (LINIE_0 P1 P2 d2 "CYAN" "VERDECKT") ) ((= Auswahl "a") (prompt "Ansicht ") ) );;;end cond )
Jetzt fehlt allerdings noch die Definition der Funktion LINIE_0, aber die wirst Du bestimmt haben. ------------------ viele Grüße Jörn http://www.bosse-engineering.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian B. Mitglied
Beiträge: 86 Registriert: 09.03.2006
|
erstellt am: 01. Feb. 2010 18:33 <-- editieren / zitieren --> Unities abgeben:
Hi, hab noch eine Frage zu meiner initget Konstruktion: bei manchen Zeichenobjekten im ACAD, zB. beim Kreis sind schon gewisse Sachen voreingestellt, so dass ich nur noch auf enter Drücken muss (wenn ich die Auswahloptionen nicht haben will) also dann eine Auswahl zwischen a bzw. Enter (so als Voreinstellung) und s habe? Kann ich das irgendwie in meine iniget Funktion einbauen? Ich habe es schon mit \\ oder "" probiert Muss ich da irgendeinen Umweg über die ASCI Tabelle nehmen? (initget 1 "a s") (setq Auswahl (getkword "\ Auswahl: <A>nsicht oder <S>nitt? ")) (cond ((= Auswahl "s") ... Gruß Christian B. Und vielen herzlichen Dank für eure Antworten bisher, AutoLisp scheint einem wirklich keinen Klammerfehler zu verzeihen [Diese Nachricht wurde von Christian B. am 01. Feb. 2010 editiert.]
[Diese Nachricht wurde von Christian B. am 01. Feb. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 01. Feb. 2010 18:47 <-- editieren / zitieren --> Unities abgeben: Nur für Christian B.
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 01. Feb. 2010 19:24 <-- editieren / zitieren --> Unities abgeben: Nur für Christian B.
Zitat: Original erstellt von Christian B.: ... bei manchen Zeichenobjekten im ACAD, zB. beim Kreis sind schon gewisse Sachen voreingestellt, so dass ich nur noch auf enter Drücken muss (wenn ich die Auswahloptionen nicht haben will) also dann eine Auswahl zwischen a bzw. Enter (so als Voreinstellung) und s habe? Kann ich das irgendwie in meine iniget Funktion einbauen?
Hi Christian, du kannst bei vielen (nicht allen) Objekten auf zugehörige Systemvariablen zurückgreifen. Bei deiner Abfrage (initget) sind dir die voreingestellten Sachen nicht immer im Vorfeld bekannt, es sei denn du haust dir den Speicher dauerhaft voll mit "Müll". (und darstellen möchtest du die voreingestellten Werte zum bestätigen sicher auch!?) Systemvariablen sind meist beim Befehl in der Hilfe zufinden bzw. sie "klingen" oft ähnlich... ... Eingabengestaltung siehe Link cadmaro.de ... ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." (www.uni-leipzig.de/~rotheh/elefant.htm) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |