| |
| 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: ErrorHandler (858 mal gelesen)
|
rkauskh Ehrenmitglied V.I.P. h.c. Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006
|
erstellt am: 08. Mai. 2009 12:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Ich habe mir den einfachen ErrorHandler bei Mapcar "geklaut", aber da scheint der Wurm drin zu sein. Hier nochmal der Code: Code: ;;;der Error-Handler von Mapcar (defun startErrorHandler(varsToSave / ) (command "_undo" "_begin") (foreach pair varsToSave (setq *saveList* (cons (cons (car pair) (getvar(car pair)) ) saveList ) ) (setvar(car pair)(cdr pair)) ) (setq *oldError* *error*) (setq *error* myErrorFunction) ) (defun endErrorHandler( / ) (*error* nil) )
(defun myErrorFunction (msg / ) (if (= (getvar "cmdactive") 0) (progn (command "_undo" "_end") (foreach pair *saveList* (setvar(car pair)(cdr pair)) ) (setq *saveList* nil) (setq *varsToSave* nil) (setq *error* *oldError*) (setq *oldError* nil) ) ) )
Aufgerufen wird er mit: Code: (startErrorHandler '(("osmode" . 0) ("cmddia" . 0) ("filedia" . 0) ("cmdecho" . 0)))
Die Systemvariablen werden bei einem Abbruch leider nicht wiederhergestellt. Ich bin ratlos wo der Fehler stecken könnte. ------------------ MfG RK 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: 08. Mai. 2009 12:25 <-- editieren / zitieren --> Unities abgeben: Nur für rkauskh
|
rkauskh Ehrenmitglied V.I.P. h.c. Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006
|
erstellt am: 08. Mai. 2009 23:38 <-- editieren / zitieren --> Unities abgeben:
Hallo Werd ich machen. Das könnte eventl. auch gleich mein zweites Problem mit lösen. Beim Export in ein DXF beendet sich mein LISP wenn die Zieldatei schon existiert. Für den Fall sollte *error* für einen sauberen Abgang suchen. Sollte vl-catch-all-error-p & Co den Fehler handlen und das Prog fortsetzen können, wäre das noch besser. Ich geh erstmal lesen. ------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 09. Mai. 2009 09:29 <-- editieren / zitieren --> Unities abgeben: Nur für rkauskh
Zitat: Original erstellt von rkauskh: Hallo Beim Export in ein DXF beendet sich mein LISP wenn die Zieldatei schon existiert. Für den Fall sollte *error* für einen sauberen Abgang suchen. Sollte vl-catch-all-error-p & Co den Fehler handlen und das Prog fortsetzen können, wäre das noch besser.
da macht man dann sowas ... : (setvar "filedia" 0) (if(findfile "meine.dxf") (command "_saveas" "dxf" 16 "meine.dxf" "_y") (command "_saveas" "dxf" 16 "meine.dxf" ) ) (setvar "filedia" 1) oder probier mal (command "_dxfout" "meine.dxf" "_V" "r12" 16 )
aber catchen ist auch nicht verkehrt, damit kann man dann auch noch fehlende Schreibrechte ect. abfangen ------------------ - 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 |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 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: 11. Mai. 2009 08:35 <-- editieren / zitieren --> Unities abgeben: Nur für rkauskh
Zitat: Original erstellt von rkauskh: Ich habe mir den einfachen ErrorHandler bei Mapcar "geklaut", aber da scheint der Wurm drin zu sein.
Hi rkauskh, Du sagt "den einfachen Errorhandler", das heißt diesen Thread bzw. den bei cad.de gemeinsam weiterentwickelten Errorhandler kennst Du bereits? http://ww3.cad.de/foren/ubb/Forum145/HTML/000435.shtml#000021 Der Vollständigkeit halber wollte ich den zumindest erwähnt haben, denn an dem Ding haben wir bei cad.de (inklusive Axel und Achim) schon recht viel gefeilt. Für meine Zwecke ist der absolut idiotensicher und verrichtet seit Jahren seinen Dienst ohne murren und perfekt. ------------------ Ciao, Marc [Diese Nachricht wurde von marc.scherer am 11. Mai. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Ehrenmitglied V.I.P. h.c. Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006
|
erstellt am: 12. Mai. 2009 08:27 <-- editieren / zitieren --> Unities abgeben:
Hallo Kommentarlos überschreiben möchte ich das bestehende File nicht, damit der User wenigstens einen Hinweis bekommt, das er mal prüfen müßte, warum eigentlich 2 namensidentische Dateien erzeugt werden. Der Name wird aus einer eindeutigen Nummer gebildet, die eigentlich nicht doppelt vorkommen kann. Ich versuche mich grad an vl-catch-all-error. Mit "einfach" meinte ich, daß bei Mapcar ja noch ein zweiter Handler beschrieben ist, der mehr kann. Der überfordert aber mein aktuelles LISP-Wissen und ich verstehe gern was ich da mache. Das sollte keine abwertende Bemerkung sein, falls das so rübergekommen ist.
------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 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: 13. Mai. 2009 08:03 <-- editieren / zitieren --> Unities abgeben: Nur für rkauskh
Zitat: Original erstellt von rkauskh: ...daß bei Mapcar ja noch ein zweiter Handler beschrieben ist, der mehr kann. Der überfordert aber mein aktuelles LISP-Wissen und ich verstehe gern was ich da mache.
Nun ja, bei komplexen Funktionen vom seligen Axel geht das nicht nur Dir so. Ich hab' so das ein oder andere Schätzchen in meiner Bibliothek das von Axel kommt. Immer irgendwelche komplexen, rekursiv arbeitenden Dreizeiler die ich einfach als BlackBox ansehe... Eingabe durchjagen und sicher sein das der Output genau so rauskommt wie versprochen. Verstehen tue ich das ein oder andere Ding nur im Ansatz; manchmal gar nicht ;-) Dir noch viel Spaß beim Error-Handeln! Ich zitiere noch mal den Axel: Zitat:
Wer versteht denn schon was von dem ganzen 'grünen' Code in Visual C++ (= irgendwelche Wizard-Makros)? Wir benutzen auch die vla-curve-...-Funktionen, ohne den mathematischen Hintergrund zu verstehen. Mein Reden ist ja auch immer: Warum ständig das Rad neu erfinden? Dieser Handler soll funktionieren und anwenderfreundlich sein. Verstehen? Gerne - muss aber nicht sein. Er soll auch mit chaotischen Anfänger[n|programmen] laufen.
Aus: http://ww3.cad.de/foren/ubb/Forum145/HTML/000435.shtml#000035 ------------------ Ciao, Marc
[Diese Nachricht wurde von marc.scherer am 13. Mai. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Ehrenmitglied V.I.P. h.c. Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006
|
erstellt am: 14. Mai. 2009 10:12 <-- editieren / zitieren --> Unities abgeben:
Hallo Ich habe jetzt mit vl-catch-all-apply das Überschreiben einer bestehenden Datei geregelt und den Programmabbruch verhindert. Für das gesamte LISP habe ich die *error*-Funktion von oben genommen. Funktioniert soweit. Da ich eigentlich den gesamten Code "zusammengeklaut" habe, teilweise von mapcar, teilweise hier im Forum, würde ich das Resultat gern allen zur Verfügung stellen. Gibt es dafür eine zentrale Möglichkeit? Der Vollständigkeit halber, in dem Code von oben mußte die fettgedruckte Zeile noch geändert werden, dann lief es. [CODE][/;;;der Error-Handler von Mapcar (defun startErrorHandler(varsToSave / ) (command "_undo" "_begin") (foreach pair varsToSave (setq *saveList* (cons (cons (car pair) (getvar(car pair)) ) *saveList* ) ) (setvar(car pair)(cdr pair)) ) (setq *oldError* *error*) (setq *error* myErrorFunction) ) (defun endErrorHandler( / ) (*error* nil) )
(defun myErrorFunction (msg / ) (if (= (getvar "cmdactive") 0) (progn (command "_undo" "_end") (foreach pair *saveList* (setvar(car pair)(cdr pair)) ) (setq *saveList* nil) (setq *varsToSave* nil) (setq *error* *oldError*) (setq *oldError* nil) ) ) )CODE]
------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |