| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: *error* function (833 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 05. Sep. 2013 13:41 <-- editieren / zitieren --> Unities abgeben:
Ich bin ein wenig unsicher geworden, was das error*handling betrifft. Generell schreibe ich in die Funktion Code: (defun *error* ()
alles rein, was wieder den ursprünglichen Zustandstand der Zeichnung mit deren Systemvariabl. usw. wieder herstellt bevor die Funktion ausgeführt wurde. Jetzt habe ich eine Funktion erstellt, die mir bei Programmausstieg mit Esc (entspr. Abbruch) eine bestimmt Variable in einen Dictionary schreibt. Die Funktion läuft an sich und habe ich geprüft. Nur im Kontex bei drücken Esc, will es mir die Funktion nicht richtig ausführen. Hier die von mir erstellte erro funktion
Code: (defun *error* () ; Zufügen von Items in den vorhandenen Dictionary "DrawingDatas" (if (dict-list "DrawingDatas") ; sollte bereits das Item BlockName existieren (if (assoc 1 (cdr (assoc "BlockName" (dict-list "DrawingDatas")))) (progn ; Lösche den vorhanden Dictionary (vl-remove (car (dict-list "DrawingDatas")) ; Item Blockname (dict-list "DrawingDatas") ; Dictionary Blockname ) ; und gebe die neuen Daten in den Dictionary BlockName (if (Dict:New "DrawingDatas" (list (cons 1 "DrawingDatas"))) (dict-put-data "DrawingDatas" "BlockName" Name) ) ) ) ) ; Wenn der Dictionary nicht vorhanden ist, dann lege ihn an (if (Dict:New "DrawingDatas" (list (cons 1 "DrawingDatas"))) (dict-put-data "DrawingDatas" "BlockName" Name) ) ); defun
------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 05. Sep. 2013 14:25 <-- editieren / zitieren --> Unities abgeben:
Die eigentliche Frage, wird generell die *error* funktion ausgeführt, wenn das Programm abgebrochen wird (Bsp. drücken <Esc> )? Kann man eine while-schleife mit drücken durch <Enter> beenden. Bei mir sollen Symbole manuell solange gesetzt werden, bis keine mehr erwünscht sind. ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 05. Sep. 2013 16:09 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
Meldin Mitglied
Beiträge: 381 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 05. Sep. 2013 16:10 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Das sieht eher so aus als Esc erwünscht wäre warum dann nicht vl-catch-all-apply. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 05. Sep. 2013 17:14 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
wo is n da die Abbruch Funktion, die ich durch drücken auf Enter erreichen will . so wie ich das sehe kann man nur Punkte anklicken bis zum umfallen. rein bei drücken ändert sich da nix. kann mich auch irren hab jetzt kein acad zur Hand. in meinem fall will ich Blöcke auf GEW. Blöcke legen ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 05. Sep. 2013 17:20 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Sorry Wolfgang ein Beitrag erschien erst jetzt bei mir. das sollte eigentlich funktionieren. setz mich vielleicht daheim noch mal hin. bin grad auf dem Heimweg ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 05. Sep. 2013 18:48 <-- editieren / zitieren --> Unities abgeben:
Code: (vl-catch-all-apply '(lambda () (while (command "_insert" "1" (and (getpoint))) 1 1 0 )))
Ein etwas unheimliches konstrukt, kann mir einer erklären was da passiert. Ich möchte erreichen, dass ein Fehler in der while-schleife erzeugt wird, um while abzubrechen. Bin ich auf der verkehrten Spur? ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 06. Sep. 2013 07:47 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo Dirk, ich habe die den "_.insert"-Befehl mal in eine separate Funktion verlagert. Über vl-catch-all-error-p wird 'T zurückgegeben, wenn ein Fehler aufgetreten ist (z.B. ESC). Wenn einfach keine weiterer Einfügepunkt eingegeben wird, dann wird ein nil als Rückgabe zurückgegeben und kann somit auch ausgewertet werden. Code:
(defun c:test ( / Name pkt error) (setq Name "1") (while(and (not (setq error (vl-catch-all-error-p (setq pkt (vl-catch-all-apply 'test:cmd:Insert (list Name)))))) pkt)) (if error (alert "Funktion abgebrochen.") (alert "Funktion beendet (keine weiterer Punkt).")) ) (defun test:cmd:Insert (Name / pkt) (setq pkt (getpoint "\nEinfügepunkt:")) (command "_.insert" Name pkt 1 1 0) pkt )
------------------ viele Grüße Jörn http://www.bosse-engineering.com Kordinaten einlesen Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 06. Sep. 2013 11:43 <-- editieren / zitieren --> Unities abgeben:
Jörn! Einsame Spitze! Ich konnte es gleich so bei mir einbauen, das war mundgerecht. Ich muss mir nochmal genau anschauen was vl-catch-all-error-p: vl-catch-all-apply: macht. Schaffe es nur heute abend vielleicht. Vielen Danke für deine grosse Mühe. ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |