| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Autolisp 2010 (2392 mal gelesen)
|
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 11. Aug. 2009 12:52 <-- editieren / zitieren --> Unities abgeben:
Bei mir funktionieren in Autocad 2010 plötzlich verschiedene Lisp-Programme nicht mehr ordnungsgemäß. Z.B.: folgender Codeteil stützt in 2010 ab: (COMMAND "_FILLET" pt1 pt3 "_FILLET" pt2 pt4) wobei pt1, pt2, pt3, pt4 nur 3d-Koordinaten beinhalten. Wenn ich nach dem Abbruch diese Sequenz von der Befehlszeile aufrufe, dann geht alles, ebenso wenn ich die Befehle normal eingebe und die Parameter mit !pt1 etc. eingebe. Offensichtlich tritt bei "_BREAK" ein ähnlicher Fehler auf... Was wurde da in 2010 geändert und was muß ich tun, damit das in Lisp wieder geht? Offensichtlich wurde da was beim Picken in Lisp-Scripts geändert?
------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 11. Aug. 2009 13:05 <-- editieren / zitieren --> Unities abgeben:
Anderes Beispiel zum Nachvollziehen: (defun C:ftest() (SETq a (cdr (entsel))) (SETq b (cdr (entsel))) (command "_fillet" a b) )
Mit CDR filtere ich nur den Punkt, da es meine Anwendung auch so liefert. In Lisp-Dateien gehts so nicht, im Einzelablauf ist es kein Problem. ------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 11. Aug. 2009 13:15 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 11. Aug. 2009 13:15 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
ab 2010 konnte man IMHO im command erzwingen , welche "Befehlsversion" zur Anwendungkommt 2010 oder ne ältere .... ich find momentan auf die Schnelle aber nichts im Netz dazu .. glaube , es wurde mal auf augi.com oder theswamp.org gepostet ... ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9732 Registriert: 01.12.2003 One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11
|
erstellt am: 11. Aug. 2009 13:24 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
|
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 11. Aug. 2009 13:40 <-- editieren / zitieren --> Unities abgeben:
Danke für die raschen Antworten, lösen das Problem aber leider nicht. (InitCommandVersion 1) ändert ja nur die Befehlsoptionen, oder? Meine Lisp-Scrips benützen aber nie Optionsabkürzungen. Der Fehler bei der Objektwahl bleibt trotz (InitCommandVersion 1) bestehen.
------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9732 Registriert: 01.12.2003 One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11
|
erstellt am: 11. Aug. 2009 14:24 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
Ich füge bei (Command "_Fillet" ... grundsätzlich die Elemtnamen mit an, das funktionmiert auch in 2010 bisher problemlos. Code: (defun c:fillettest ( / pPt sPt nPt rad line1 line2) ; Udo Hübner für CAD.de ; sample Data (setq pPt '(10.0 10.0 0.0) sPt '(30.0 10.0 0.0) nPt '(60.0 50.0 0.0) rad 10.0 ) ; Draw Lines (command "_Line" pPt sPt "") (setq line1 (entlast)) (command "_Line" SPt nPt "") (setq line2 (entlast)) ; set Filletradius (setvar "filletrad" rad) ; create the fillet, and catch possible errors (vl-catch-all-apply '(lambda () (command "_fillet" (list line1 (polar sPt (angle spt ppt) rad)) (list line2 (polar sPt (angle spt npt) rad)) ) ) ) )
------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 11. Aug. 2009 15:23 <-- editieren / zitieren --> Unities abgeben:
|
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 13. Aug. 2009 15:56 <-- editieren / zitieren --> Unities abgeben:
Nochmal kurz die Fehlerbeschreibung: Sobald in der Zeichnung Objekte kopiert wurden, schaffen es einige Autocad-Befehle aus Lisp-Dateien heraus nicht mehr einwandfrei ein Objekt zu wählen. Bis zu dem Zeitpunkt, wo ein Objekt KOPIERT wird, läuft alles einwandfrei - und dann wieder nach schliessen und wiederöffnen. Mir scheint, dass da was in der Objektdatenbank hängt...
------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 13. Aug. 2009 16:18 <-- editieren / zitieren -->
Hi Bernhard, die Wahl der Objekte mittels (command ... und dann Punkte hinzuschiessen kann schon mal ein Problem mit dem Bildschirmspeicher haben. Zum einen funktioniert das nur, wenn diese Elemente auch am Bildschirm sichtbar sind (oder zumindest innerhalb des virtuellen Regen-Bereichs). Zum anderen kannst Du ev. auch darüber stolpern, dass an dieser Stelle mehrere Elemente übereinander liegen (oder zumindests im Bereich der Pickbox-Größe), damit hast Du kaum die Chance, zu gewährleisten, dass Du das richtige Element triffst. Ein Abhilfe kann schon sein (statt Speichern/Schliessen/Öffnen) dass Du zuvor ein _regenall machst. HTH, - alfred - ------------------ www.hollaus.at |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 13. Aug. 2009 16:32 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 13. Aug. 2009 16:36 <-- editieren / zitieren -->
Hi, Zitat: Möglicherweise ein Grafiktreiberproblem?
wenig wahrscheinlich, Du kannst ja mal probieren, die Hardwarebeschleunigung abzudrehen, damit schiebt man das AutoCAD am weitesten von der Graphikkarte (und den Optimierungsversuchen dieser) weg. - alfred - ------------------ www.hollaus.at |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 13. Aug. 2009 17:03 <-- editieren / zitieren --> Unities abgeben:
|
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 24. Feb. 2010 10:51 <-- editieren / zitieren --> Unities abgeben:
Hallo! Das Problem besteht immer noch. Nochmal in Kürze: Bevor in der Zeichnung Objekte kopiert oder verschoben werden, passt alles. Dann machen aber Befehle wie ABRUNDEN oder BRUCH in Lisp Probleme und brechen mit Fehler ab. In AutoCAD 2008 gibt es dieses Problem nicht. ------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 24. Feb. 2010 10:58 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
.. vielleicht weil in 2008 beim Kopieren die Option Mehrfach nicht standardmäßig aktiviert ist, wie es in den neueren Versionen der Fall ist. Es könnte also sein, dass der Kopieren-Befehl immernoch aktiv ist, während der Abrunden/Break/...-Befehl bereits gestartet wird. Dass muss schief gehen. Kannst du ja mal prüfen .. die Infos hierim Thread reichen nicht aus, um da eine konkrete Fehleranalyse zu betreiben. Bei Fragen ... Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 24. Feb. 2010 11:48 <-- editieren / zitieren --> Unities abgeben:
Nein, hat mit aktiven Befehlen nix zu tun. Auch der Kopierbefehl hat mit dem Lisp-Programm eigentlich nix zu tun, nur dass das Lisp nach der Anwendung eines Kopierbefehls in Autocad nicht mehr funkt. ------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 24. Feb. 2010 12:25 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
|
snoopyonline Mitglied Architekt
Beiträge: 192 Registriert: 17.05.2003
|
erstellt am: 24. Feb. 2010 17:32 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
|
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 25. Feb. 2010 07:06 <-- editieren / zitieren --> Unities abgeben:
Ich denke der Fehler liegt einfach im Lisp-Interpreter. Wenn ich die Lisp-Zeilen nach dem Absturz in der Kommandozeile einfüge, dann geht es wieder... ------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3329 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 25. Feb. 2010 09:04 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
Hi, also, meinen "Custom-Fillet"-Befehle habe ich auch in 2006 und 2008 keine Punkte, sondern das gegeben, was Udo geschrieben hat: Zweimal eine Liste mit Objektname und Punkt, also das, was (entsel) liefern würde. Demo:
Code: (command "_fillet" (entsel)(entsel))
bzw. siehe Udos Antwort, auf die hier gar nicht weiter eingegangen wurde!Nix anderes erwartet der FILLET-Befehl, denn er fragt nach zwei Objekten! Über den Klickpunkt, also die zweite Komponente der Liste, entscheidet FILLET lediglich, wo abgerundet wird. Du erwartest, dass der Befehl durch die Übergabe von zwei Punkten entscheidet, welche Objekte und an welcher Stelle bearbeitet werden sollen. Kann er IMHO so gar nicht leisten. Und dann sollten die Variablen lokalisiert sein. Dann verhält sich Acad vielleicht weniger seltsam. Gruß CADchup ------------------ CADmaro.de [Diese Nachricht wurde von CADchup am 25. Feb. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 25. Feb. 2010 09:09 <-- editieren / zitieren --> Unities abgeben:
Der "Fehler" liegt darin, dass Autolisp ab 2010 für Befehle wie ABRUNDEN, BRUCH etc. für die korrekte Ausführung die Angabe von element/punkt (im Sinne des Lisp-Befehls ENTSEL) braucht, um auch nach dem Kopieren von Objekten einwandfrei zu funktionieren. Bis Autocad 2008 war das noch nicht der Fall. Jedenfalls muß ich meine App´s dahingehend umbauen, dass diese Angaben auch immer entsprechend von Unterfunktion zu Funktion zu Befehl durchgereicht werden. ------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 25. Feb. 2010 09:12 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von CADchup: Hi,also, meinen "Custom-Fillet"-Befehle habe ich auch in 2006 und 2008 keine Punkte, sondern das gegeben, was Udo geschrieben hat: Zweimal eine Liste mit Objektname und Punkt, also das, was (entsel) liefern würde.
Soweit sonnenklar, ABER bis ACAD 2008 (oder 2009?) kein Problem, bis das erste Objekt kopiert wird, auch kein Problem. ------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3329 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 25. Feb. 2010 09:28 <-- editieren / zitieren --> Unities abgeben: Nur für Bernhard GSD
Zitat: Soweit sonnenklar, ABER bis ACAD 2008 (oder 2009?) kein Problem, bis das erste Objekt kopiert wird, auch kein Problem.
Nicht bei mir. Dein Code von hier tut's in meinem 2008 nicht. Aber das ist ja wurscht. Problem erkannt, Gefahr gebannt. ------------------ CADmaro.de [Diese Nachricht wurde von CADchup am 25. Feb. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 25. Feb. 2010 15:23 <-- editieren / zitieren --> Unities abgeben:
Folgende kleine Funktion ermöglicht aus einem errechneten Punkt (der auf einem Objekt liegt) das Element in der für diverese Autocad-Befehle erforderlichen Form bereitzustellen. Voraussetzung ist dass am Punkt nur ein Objekt liegt. Das sollte durch den aufrufenden Programmablauf sichergestellt sein. Code: (defun elemauspunkt(pt / pt) (list (SSNAME (SSGET "_C" (polar pt 0.7854 0.0001) (polar pt 3.9270 0.0001)) 0) pt) )
------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |