| |
| 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: Lisp Problem... (1300 mal gelesen)
|
sonnen4tel Mitglied
Beiträge: 8 Registriert: 30.07.2003
|
erstellt am: 30. Jul. 2003 09:18 <-- editieren / zitieren --> Unities abgeben:
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 30. Jul. 2003 09:21 <-- editieren / zitieren --> Unities abgeben: Nur für sonnen4tel
Hallo Klaus, das jetzt hier verbal zu umschreiben fällt mir schwer. Wenn's nicht geheim ist, dann stelle doch die LISP mal hier in's Forum, dann schauen ich und andere mal drüber. Bei Fragen ... Grüße Holger ------------------ Holger Brischke CADlon - Lisp over night! Irgendwann muß man schlafen, deshalb: +!+!+Urlaub vom 01.08.-30.08.2003+!+!+ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sonnen4tel Mitglied
Beiträge: 8 Registriert: 30.07.2003
|
erstellt am: 30. Jul. 2003 09:47 <-- editieren / zitieren --> Unities abgeben:
Hai! Das Problem ist, dass ich das Problem bei mir nicht nachvollziehen kann. Ein Kunde von mir hat irgendeine Autocadapplikation laufen - und ich vermute, dass die das Problem verursacht. Ist diese Meldung generell unbekannt? Kann man folgendermaßen leicht reproduzieren: Befehl: (defun c:test() (_> (setq X (getpoint "Punkt")) (_> ) C:TEST (getstring "Befehl:") (command (eval (c:test))) Kann nicht zu LISP zurückkehren. "(command (eval (c:test)))" Ist es möglich, dass die eingesetzte Applikation die Befehlszeile umgebogen hat und die Eingaben selber auswerten will? Wenn ja, wie kann ich das umgehen? Danke und lg Klaus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3336 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 30. Jul. 2003 10:52 <-- editieren / zitieren --> Unities abgeben: Nur für sonnen4tel
|
Ex-Mitglied
|
erstellt am: 30. Jul. 2003 12:17 <-- editieren / zitieren -->
Hi, sag mal was bezweckst du mit der Zeile (getstring "Befehl:"). Diese Zeile steht so ohne Zusammenhang dort. Du weißt das Ergebnis dieser Zeile nicht einmal einer Variable zu, geschweige denn, du benutzt sie in einem anderen Lisp-Ausdruck. Daweiteren versuchst du die Funktion c:test mit (command (eval (c:test))) als AutoCAD-Befehl auszuführen. Das wird so nicht funktonieren, da es keinen AutoCAD-Befehl gibt, der aussieht wie ein Punkt. Du machst hier nämlich folgendes: 1. die Funktion c:test fragt nach einem Punkt. Das Ergebnis ist also eine Koordinate. 2. Die Koordinate wird evaluiert, d.h. sie wird mit Command wie ein AutoCAD-Befehl behandelt und es wird versucht diesen auch auszuführen. 3. Da das nicht geht - es gibt ja kein Befehl der wie eine Koordinate aussieht -, wird diese Fehlermeldung auch erzeugt. Also eine ganz normale AutoCAD-Reaktion. Tipp: SChreib malwas du damit bezwecken willst, vielleicht kann ich Dir helfen. Jürgen
|
sonnen4tel Mitglied
Beiträge: 8 Registriert: 30.07.2003
|
erstellt am: 30. Jul. 2003 14:04 <-- editieren / zitieren --> Unities abgeben:
Hai und Danke! Mein Programm lautet CreateDXF und ich will, dass es bei einem Kunden einwandfrei funktioniert. Der Kunde erhält aber immer folgende Ausgabe: .............. Erzeuge Layer Beschriftung... ************************************************************* Eingabeteil.................................................... Geben Sie bitte die Artikelnummer ein: Kann nicht zu LISP zurückkehren. Geben Sie den Nullpunkt an: Kann nicht zu LISP zurückkehren. Ungültiger Punkt. Geben Sie den Nullpunkt an: Ungültiger Punkt. Geben Sie den Nullpunkt an: Ungültiger Punkt. Geben Sie den Nullpunkt an: Kann nicht zu LISP zurückkehren. Ungültiger Punkt. Geben Sie den Nullpunkt an: Erzeuge neues Attribut: 'BREITE*TIEFE*HOEHE' Erzeuge neuen Block mit Namen: (setq cvp (getvar "CVPORT"))(princ) Ungültiger Block Name. ; Fehler: Funktion abgebrochen .................... und das immer bei den Codezeilen: (while (= (setq ArtNummer (getstring "\nGeben Sie bitte die Artikelnummer ein: ") ) "" ) ) . Mit dem Beispiel Befehl: (defun c:test() (_> (setq X (getpoint "Punkt")) (_> ) C:TEST (getstring "Befehl:") (command (eval (c:test))) Kann nicht zu LISP zurückkehren. "(command (eval (c:test)))" wollte ich nur zeigen wie man die Fehlermeldung reproduzieren kann. Ist ein bisschen kompliziert zu erklären. Aber ich hoffe ich habs damit geschafft. lg und Danke Klaus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
J.Becker Mitglied Dipl.-Ing. Versorgungstechnik
Beiträge: 78 Registriert: 28.05.2003 ADT 2007, Windows XP, SP2, MAP, MCAD, Inventor
|
erstellt am: 30. Jul. 2003 21:21 <-- editieren / zitieren --> Unities abgeben: Nur für sonnen4tel
|
J.Becker Mitglied Dipl.-Ing. Versorgungstechnik
Beiträge: 78 Registriert: 28.05.2003
|
erstellt am: 30. Jul. 2003 21:22 <-- editieren / zitieren --> Unities abgeben: Nur für sonnen4tel
|
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 31. Jul. 2003 21:38 <-- editieren / zitieren --> Unities abgeben: Nur für sonnen4tel
Wäre besser, diese Diskussion liefe im Lisp-Forum. Aber egal. "Kann nicht zu AutoLisp zurückkehren" bedeutet: Der AutoLisp-Interpreter ist nicht reentrant. Das wiederum bedeutet: Es gibt nur eine laufende Instanz des Interpreters. Jeder Versuch, über (command ...) zu AutoCAD zu wechseln und dort eine Befehlseingabe abzusetzen, die mit '(' oder '!' beginnt, zum Scheitern verurteilt ist. Diese beiden Zeichen veranlassen AutoCAD nämlich normalerweise, zum Lisp-Interpreter zu wechseln. Da der aber schon aktiv ist, kommt diese Meldung. Also: jedwede Konstruktion wie (command "(...)") oder (command "!...") geht in die Hose. Der Fehlerkommt aber auch, wenn man versucht, innerhalb eines (getpoint ...) ein Lisp-Utility wie z.B. "ref" zu starten, um den Punkt einzugeben. Soweit dazu, wo diese Fehlermeldung herkommt. Das ist hier aber nicht ersichtlich - das Beispiel mit c:test ist anders und erzeugt auch einen ganz anderen Fehler: (defun c:test()(setq x(getpoint"Punkt: "))) Abgesehen davon, dass hier vermutlich unwissentlich eine globale Variable erzeugt wird, ist die Funktion korrekt. Sie gibt den vom User eingegebenen Punkt zurück. (c:test) => (1.234 7.654 0.0) Jetzt soll aber dieser Punkt auch noch evaluiert werden! Punkte sind Listen, und wenn eine Liste evaluiert werden soll, dann muss das erste Element eine ausführbare Funktion sein. 1.234 ist aber eine Zahl und keine Funktion, und deswegen kommt hier die Fehlermeldung "bad function 1.234" (deutsch: "Fehlerhafte Funktion 1.234"). Und das zu Recht. Ich glaube auch nicht, dass dein AutoCAD da anders ist als alle anderen, Klaus. Das (getstring "Befehl: ") wurde schon bemängelt - auch ich weiss nicht, wozu das dienen soll ausser zur Verwirrung. Ich würde also erstmal meinen eigenen Code aufräumen, bevor ich irgendwelche Applikationen verdächtige. Jedenfalls stelle ich in 99,9% aller Fälle fest, dass es meine eigenen Fehler waren, die die Probleme verursacht haben. Ausnahmen gibt es, z.B. bei den Reaktoren, aber nicht, wenn es um ein paar Zeilen halbgaren Code geht. 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 |
sonnen4tel Mitglied
Beiträge: 8 Registriert: 30.07.2003
|
erstellt am: 01. Aug. 2003 16:17 <-- editieren / zitieren --> Unities abgeben:
Hai Alex! Danke für Deine ausführliche Beschreibung. Gebe zu, dass das mit dem getstring und der Funktion c:test etwas verwirrend war. Sollte aber nur als Beispiel dienen, dass es diese Fehlermeldung gibt. Zurück: Was kann noch einen Unterscheid machen, wenn ein Programm auf einem System mit Autocad 2000 und einer Datei läuft, und auf einem anderen Autocad 2000 mit derselben Zeichnung nicht läuft? Ich programmiere seit 10 Jahren sehr intensiv mit Lisp - und ob mein Programm einen Fehler hat oder nicht kann ich mittlerweile sehr gut einschätzen. Danke und lg Klaus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Safa Mitglied Dipl.-Ing.
Beiträge: 13 Registriert: 20.07.2003
|
erstellt am: 29. Aug. 2003 17:44 <-- editieren / zitieren --> Unities abgeben: Nur für sonnen4tel
Hallo Klaus, ich glaube Du bist erfahren genug mir helfen zu können. Ich habe ein 3D-Lisp Programm.Ich kann diese Programm bei Win98/Autocad14 sehr gut benutzen, aber gleiche Programm bei Win2000/Autocad2002 funktioniert einfach nicht. Obwohl ich vorher gesehen habe, dass das funktioniert. System ladet ordnungsgemaes Lisp-Dateien.Was mache ich falsch? Grüss Safa Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
STRGALTDEL Mitglied Tischler
Beiträge: 61 Registriert: 15.02.2003 AutoCAD2002 SP1, IntelliCAD2001 Win XP SP1,PIII 1GHz, 328MB RAM, nvidia GFORCE 4
|
erstellt am: 31. Aug. 2003 22:12 <-- editieren / zitieren --> Unities abgeben: Nur für sonnen4tel
Hallo Safa, Ich glaube hier gehts gleich gut zur Sache... nicht bös gemeint, aber: Stelle die selbe Frage doch besser im Lisp-Forum; denn dort lümmeln sich alle, die dir helfen können und noch besser, alle mit ähnlichen Problemen die es auch interessiert. Vielleicht giebt es auch schon eine Antwort auf deine Frage!? ...schöne Grüße, Frank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 01. Sep. 2003 08:21 <-- editieren / zitieren --> Unities abgeben: Nur für sonnen4tel
@sonnen4tel Willkommen im Forum. Du solltest dein Lisp Prog mal im Vlide-Editor Debuggen und mal die Variablen und Rückgaben überwachen. dan hast du den Fehler sicherlich schnell entdeckt. Da du ja auch schon lange im Geschäft bist, dürfte das eigentlich schnell erledigt sein. @Safa In der Autocadversion 2000 (R15) hat sich schon einiges gegenüber der R14 geändert. Ich wage mal einen 'Schuss ins Blaue' dein Lisp arbeitet mit command Befehlen, die nicht an die 2000 angepasst wurden. bei einigen Befehlen muss ein minus (-) vor die Commands gesetzt werden.
------------------ Gruß CADwiesel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |