| |
![](https://ww3.cad.de/php/image.php?resolution=width:20050) | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Autollisp Problem. (440 mal gelesen)
|
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif)
![Schreiben Sie einen Gästebucheintrag für FiRePhoeniX](/foren/ubb/pmimages/gbu.gif) Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 03. Jan. 2008 11:03 <-- editieren / zitieren --> Unities abgeben: ![1 Unity (wenig hilfreich, aber dennoch)](/foren/ubb/z1.gif) ![2 Unities](/foren/ubb/z2.gif) ![3 Unities](/foren/ubb/z3.gif) ![4 Unities](/foren/ubb/z4.gif) ![5 Unities](/foren/ubb/z5.gif) ![6 Unities](/foren/ubb/z6.gif) ![7 Unities](/foren/ubb/z7.gif) ![8 Unities](/foren/ubb/z8.gif) ![9 Unities](/foren/ubb/z9.gif)
Hi, ich bescheftige mich seit ein paar Tagen mit Autolisp. Komme meiner meinung auch gut vorran. Aber jetzt ist schicht im Schacht ![](/foren/ubb/biggrin.gif) meine kenntnise reichen einfach nicht aus. Ich wollte das so machen das man ein Rohrdurchmesser wählt. Und dann soll das Programm den block mit den richtigen Duchmesser einfügen. Klingt leicht sagen die experten für mich ist das ein bisschen schwer. Ok ich muss dazu dagen das ist mein erstes Programm ![](/foren/ubb/biggrin.gif) . Ok kommen wir zur sache, das Programm was ich geschrieben habe macht eingentlich das was ich will es fügt die Blöcke ein aber am ende steht da immer der satz "Fehler: no function definition: nil". Trotz eingefügten Blockes. ![](/foren/ubb/confused.gif) Ich vermutte mal ich hab den IF befehl falsch. Könnte mir einer helfen bitte ich verzweifle mit meinem geringen wissen. Danke im vorraus mfg FirePhoeniX hier der Code ----------------------------------------------- (defun C:schacht4 () (setq ein (getpoint "\nBasispunkt Wählen.")) (setq DN (getreal "\nRohrdurchmesser wählen von 150 - 1000 [?] :")) (if (= DN 150) (command "einfüge" "szg150.dwg" Ein "1" "1" "0") ((if (= DN 200) (command "einfüge" "szg200.dwg" Ein "1" "1" "0") ((if (= DN 250) (command "einfüge" "szg250.dwg" Ein "1" "1" "0") ((if (= DN 300) (command "einfüge" "szg300.dwg" Ein "1" "1" "0") ((if (= DN 350) (command "einfüge" "szg350.dwg" Ein "1" "1" "0") ((if (= DN 400) (command "einfüge" "szg400.dwg" Ein "1" "1" "0") ((if (= DN 450) (command "einfüge" "szg450.dwg" Ein "1" "1" "0") ((if (= DN 500) (command "einfüge" "szg500.dwg" Ein "1" "1" "0") (prompt "\nschade") ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif)
![Schreiben Sie einen Gästebucheintrag für joern bosse](/foren/ubb/pmimages/gbu.gif) Beiträge: 1760 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: 03. Jan. 2008 11:24 <-- editieren / zitieren --> Unities abgeben: ![1 Unity (wenig hilfreich, aber dennoch)](/foren/ubb/z1.gif) ![2 Unities](/foren/ubb/z2.gif) ![3 Unities](/foren/ubb/z3.gif) ![4 Unities](/foren/ubb/z4.gif) ![5 Unities](/foren/ubb/z5.gif) ![6 Unities](/foren/ubb/z6.gif) ![7 Unities](/foren/ubb/z7.gif) ![8 Unities](/foren/ubb/z8.gif) ![9 Unities](/foren/ubb/z9.gif) Nur für FiRePhoeniX
Hallo FirePhoenix, so einen Beitrag würde ich ins LISP-Forum schieben, dort ist er sicherlich besser aufgehoben. Für Dein Problem: anstatt immer mit if abzufragen würde ich COND verwenden, weil Du nicht nur nach wahr oder falsch abfragst, sondern mehrere Möglichkeiten vorgibst. Folgender Code ist ungetestet, aber so ungefähr sollte es funktionieren:
Code:
(defun C:schacht4 ( / ein DN) (setq ein (getpoint "\nBasispunkt Wählen.")) (setq DN (getreal "\nRohrdurchmesser wählen von 150 - 1000 [?] :")) (cond ((= DN 150) (command "einfüge" "szg150.dwg" Ein "1" "1" "0")) ((= DN 200) (command "einfüge" "szg200.dwg" Ein "1" "1" "0")) ((= DN 250) (command "einfüge" "szg250.dwg" Ein "1" "1" "0")) ((= DN 300) (command "einfüge" "szg300.dwg" Ein "1" "1" "0")) ((= DN 350) (command "einfüge" "szg350.dwg" Ein "1" "1" "0")) ((= DN 400) (command "einfüge" "szg400.dwg" Ein "1" "1" "0")) ((= DN 450) (command "einfüge" "szg450.dwg" Ein "1" "1" "0")) ((= DN 500) (command "einfüge" "szg500.dwg" Ein "1" "1" "0")) ('T (alert "schade."))) )
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif)
![Schreiben Sie einen Gästebucheintrag für FiRePhoeniX](/foren/ubb/pmimages/gbu.gif) Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 03. Jan. 2008 11:47 <-- editieren / zitieren --> Unities abgeben: ![1 Unity (wenig hilfreich, aber dennoch)](/foren/ubb/z1.gif) ![2 Unities](/foren/ubb/z2.gif) ![3 Unities](/foren/ubb/z3.gif) ![4 Unities](/foren/ubb/z4.gif) ![5 Unities](/foren/ubb/z5.gif) ![6 Unities](/foren/ubb/z6.gif) ![7 Unities](/foren/ubb/z7.gif) ![8 Unities](/foren/ubb/z8.gif) ![9 Unities](/foren/ubb/z9.gif)
Danke joern bosse für die schnelle antwort. Ich hab das mit dem Befehl cond probiert habs aber nicht hinbekommen hab ne Klammer vergessen ![](/foren/ubb/tongue.gif) . Sorry das ich das hier rein geschrieben habe wusste nicht wo hin damit. Danke noch mal. Hätte aber trotzdem noch ne frage. Warum hast du am anfang des programms ( / ein DN) geschrieben was bedeudet das? Teilst du die Variable ein durch die variable DN aber warum. Steh gerade voll auf dem Schlauch. Die zweite frage ist Was macht der Befehl alert?? Könntest du mir das erklären. Wie gesagt bin anfänger ![](/foren/ubb/biggrin.gif) . mfg FiRePhoeniX
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif)
![Schreiben Sie einen Gästebucheintrag für joern bosse](/foren/ubb/pmimages/gbu.gif) Beiträge: 1760 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: 03. Jan. 2008 11:57 <-- editieren / zitieren --> Unities abgeben: ![1 Unity (wenig hilfreich, aber dennoch)](/foren/ubb/z1.gif) ![2 Unities](/foren/ubb/z2.gif) ![3 Unities](/foren/ubb/z3.gif) ![4 Unities](/foren/ubb/z4.gif) ![5 Unities](/foren/ubb/z5.gif) ![6 Unities](/foren/ubb/z6.gif) ![7 Unities](/foren/ubb/z7.gif) ![8 Unities](/foren/ubb/z8.gif) ![9 Unities](/foren/ubb/z9.gif) Nur für FiRePhoeniX
Hallo FirePhoenix, ( / ein DN) das ist reine Gewohnheit, damit werden die Variablen "ein" und "DN" lokal deklariert, d.h. sobald die Funktion durchgelaufen ist sind diese Variablen nicht mehr belegt. Wenn Du das nicht machst könnte es zu Problemen kommen, wenn mehrere Funktionen die gleichen Variablennamen verwenden. (Der Schrägstrick steht hier nicht für "geteilt", sondern nur als Trennung zwischen globalen und lokalen Variablen) (alert "hallo FirePhoenix")
Tippe den Klammerausdruck mal in Deine Befehlszeile von AutoCAD ein, dann wirst Du sehen ![](/foren/ubb/zwinker.gif) Und wenn Du noch Literatur brauchst, da kann ich Dir das AutoLISP-Kochbuch empfehlen: http://ww3.cad.de/foren/ubb/Forum54/HTML/017491.shtml#000000 ------------------ viele Grüße Jörn [Diese Nachricht wurde von joern bosse am 03. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif)
![Schreiben Sie einen Gästebucheintrag für FiRePhoeniX](/foren/ubb/pmimages/gbu.gif) Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 03. Jan. 2008 12:06 <-- editieren / zitieren --> Unities abgeben: ![1 Unity (wenig hilfreich, aber dennoch)](/foren/ubb/z1.gif) ![2 Unities](/foren/ubb/z2.gif) ![3 Unities](/foren/ubb/z3.gif) ![4 Unities](/foren/ubb/z4.gif) ![5 Unities](/foren/ubb/z5.gif) ![6 Unities](/foren/ubb/z6.gif) ![7 Unities](/foren/ubb/z7.gif) ![8 Unities](/foren/ubb/z8.gif) ![9 Unities](/foren/ubb/z9.gif)
|
cad4fun Ehrenmitglied
![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif)
![Schreiben Sie einen Gästebucheintrag für cad4fun](/foren/ubb/pmimages/gbu.gif) Beiträge: 1846 Registriert: 06.12.2004 privat ACAD 2013 und 2017 deutsch, Windows 7 64Bit HP Elite 7500 Series MT,Intel Cote i5-3470 CPU 3,20Ghz,16GB RAM ATI FirePro V (FireGL V) Graphics Adapter Treiberversion: 15.201.1151.1008
|
erstellt am: 03. Jan. 2008 13:23 <-- editieren / zitieren --> Unities abgeben: ![1 Unity (wenig hilfreich, aber dennoch)](/foren/ubb/z1.gif) ![2 Unities](/foren/ubb/z2.gif) ![3 Unities](/foren/ubb/z3.gif) ![4 Unities](/foren/ubb/z4.gif) ![5 Unities](/foren/ubb/z5.gif) ![6 Unities](/foren/ubb/z6.gif) ![7 Unities](/foren/ubb/z7.gif) ![8 Unities](/foren/ubb/z8.gif) ![9 Unities](/foren/ubb/z9.gif) Nur für FiRePhoeniX
ein wenig kürzer (defun C:s4 ( / ein DN BL) (setq ein (getpoint "\nBasispunkt Wählen.")) (setq DN (getstring "\nRohrdurchmesser wählen von 150 - 1000 [?] :")) (setq BL (strcat "szg" DN ".dwg" )) (command "einfüge" BL Ein "1" "1" "0") ('T (alert "schade.")) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif)
![Schreiben Sie einen Gästebucheintrag für FiRePhoeniX](/foren/ubb/pmimages/gbu.gif) Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 03. Jan. 2008 13:42 <-- editieren / zitieren --> Unities abgeben: ![1 Unity (wenig hilfreich, aber dennoch)](/foren/ubb/z1.gif) ![2 Unities](/foren/ubb/z2.gif) ![3 Unities](/foren/ubb/z3.gif) ![4 Unities](/foren/ubb/z4.gif) ![5 Unities](/foren/ubb/z5.gif) ![6 Unities](/foren/ubb/z6.gif) ![7 Unities](/foren/ubb/z7.gif) ![8 Unities](/foren/ubb/z8.gif) ![9 Unities](/foren/ubb/z9.gif)
cool danke für denn kurzen Code. Hilft mir zwar wenig da ich ihn nicht verstehe aber trotzdem danke ![](/foren/ubb/biggrin.gif) . Ich hätte sofort noch ne frage: Wie kann ich eine wiederholunh einbauen. Ich will das so haben wenn man nichts von der Liste gewählt hat kommt der alert "schade"(hab ich schon geändert aber zu erklärung)jetzt geht das lisp programm aus. Soll es aber nicht es soll auf die Zeiche: (setq DN (getreal "\nRohrdurchmesser wählen von 150 - 1000 [?] :")) zurück gehen um einen anderen wert einzugeben. Das soll so lange gehen bis der richtige wert eingeben wurde. Hoffe das ist verständlich. mfg FiRePhoeniX Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cad4fun Ehrenmitglied
![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif)
![Schreiben Sie einen Gästebucheintrag für cad4fun](/foren/ubb/pmimages/gbu.gif) Beiträge: 1846 Registriert: 06.12.2004 privat ACAD 2013 und 2017 deutsch, Windows 7 64Bit HP Elite 7500 Series MT,Intel Cote i5-3470 CPU 3,20Ghz,16GB RAM ATI FirePro V (FireGL V) Graphics Adapter Treiberversion: 15.201.1151.1008
|
erstellt am: 03. Jan. 2008 13:54 <-- editieren / zitieren --> Unities abgeben: ![1 Unity (wenig hilfreich, aber dennoch)](/foren/ubb/z1.gif) ![2 Unities](/foren/ubb/z2.gif) ![3 Unities](/foren/ubb/z3.gif) ![4 Unities](/foren/ubb/z4.gif) ![5 Unities](/foren/ubb/z5.gif) ![6 Unities](/foren/ubb/z6.gif) ![7 Unities](/foren/ubb/z7.gif) ![8 Unities](/foren/ubb/z8.gif) ![9 Unities](/foren/ubb/z9.gif) Nur für FiRePhoeniX
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif)
![Schreiben Sie einen Gästebucheintrag für joern bosse](/foren/ubb/pmimages/gbu.gif) Beiträge: 1760 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: 03. Jan. 2008 14:09 <-- editieren / zitieren --> Unities abgeben: ![1 Unity (wenig hilfreich, aber dennoch)](/foren/ubb/z1.gif) ![2 Unities](/foren/ubb/z2.gif) ![3 Unities](/foren/ubb/z3.gif) ![4 Unities](/foren/ubb/z4.gif) ![5 Unities](/foren/ubb/z5.gif) ![6 Unities](/foren/ubb/z6.gif) ![7 Unities](/foren/ubb/z7.gif) ![8 Unities](/foren/ubb/z8.gif) ![9 Unities](/foren/ubb/z9.gif) Nur für FiRePhoeniX
Hallo, schau Dir noch mal folgende Code an, er ist wieder ungetestet, aber man könnte so eine While-Schleife integrieren, so das der Benutzer den DN-Wert nochmal eingeben kann wenn er falsch ist. Ich hoffe, die Kommentare helfen Dir weiter. Code:
(defun C:s4 ( / ein DN) ;;;der Variablen einen Wert ungleich nil zuweisen, damit die erste ;;;While-Schleife durchlaufen werden kann (setq DN 'T) ;;;wenn ein Basispunkt gewählt wird (if(setq ein (getpoint "\nBasispunkt Wählen.")) ;;;dann eine While-Schleife, solange DN einen Wert hat (while DN ;;;Wenn DN und die zugehörige DWG-Datei vorhanden (if(and(setq DN (getstring "\nRohrdurchmesser wählen von 150 - 1000 [?] :")) (findfile (strcat "szg" DN ".dwg" ))) ;;;dann füge den Block ein und setzt DN auf nil, ;;;damit while beendet wird (progn (command "einfüge" (strcat "szg" DN ".dwg" ) ein "1" "1" "0") (setq DN nil)) ;;;wenn nicht, dann prüfen, ob Eingabe gemacht wurde oder nicht ;;;wenn DN (dann war der Wert falsch, weil die zugehörige ;;;DWG-Datei nicht gefunden worden ist) (if DN (alert "falscher Rohdurchmesser"))));;;end while (alert "kein Basispunkt gewählt.")))
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
![](/foren/ubb/star3.gif) ![](/foren/ubb/star3.gif)
![Schreiben Sie einen Gästebucheintrag für FiRePhoeniX](/foren/ubb/pmimages/gbu.gif) Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 03. Jan. 2008 14:20 <-- editieren / zitieren --> Unities abgeben: ![1 Unity (wenig hilfreich, aber dennoch)](/foren/ubb/z1.gif) ![2 Unities](/foren/ubb/z2.gif) ![3 Unities](/foren/ubb/z3.gif) ![4 Unities](/foren/ubb/z4.gif) ![5 Unities](/foren/ubb/z5.gif) ![6 Unities](/foren/ubb/z6.gif) ![7 Unities](/foren/ubb/z7.gif) ![8 Unities](/foren/ubb/z8.gif) ![9 Unities](/foren/ubb/z9.gif)
danke joern bosse das du dir so viel mühe gemacht hast. Der code ich cool. Aber mit dem befehl getkword geht das einfacher meiner meinung und hat den gleichen sinn. ( das gute an den Befehel ich kenn ihn mir ist der nur nicht eingefallen weil ich ihn nur ein mal kurz angetestet habe) aber danke für alle ich seit die bessten. mfg FiRePhoeniX [Diese Nachricht wurde von FiRePhoeniX am 03. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |