| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: Abbruchfunktion in LSP (1536 mal gelesen)
|
Bauvermesser Mitglied Vermesser
 
 Beiträge: 460 Registriert: 18.03.2006 AMD 2600, 2024RAM ,WIN XP PROF-SP3, ACAD 2005, Firmenrechner,
|
erstellt am: 20. Feb. 2014 20:48 <-- editieren / zitieren --> Unities abgeben:         
hallo, habe eine einfache LSP erstellt bei welcher eine Abbruchfunktion eingebaut werden soll, geht aber nicht , wo liegt mein fehler? Fehler im Klammerwald oder? Möchte eigentlich ein einfache Abbruchmöglichkeit finden ganz allgemein, welche ich auch in anderen LSP einsetzten kann. Kann mir bitte jemand helfen. (defun C:BLOCKUMB () ;*Abbruchbedingungen festlegen*----------------------------------------------- (defun-q *error* (msg) (RSETZ) (command "_UNDO" "_MARK") (princ "\nProgramm abgebrochen - es wurde nichts geändert. ") (princ) ) (alert (strcat "folgende Blöcke werden aus Codierung 2013 umbenannt:" "\n cod-045, cod-052 " "\nfalls nein ->Abbruch " ) ) (command "_RENAME" "_BLOCK" "BL01" "BL100") (command "_RENAME" "_BLOCK" "BL02" "BL200") (command "_RENAME" "_BLOCK" "BL03" "BL300") (command "_RENAME" "_BLOCK" "BL04" "BL400") (RSETZ) (command "_UNDO" "_BACK") (princ) )
------------------ Gruß vom Bauvermesser; Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jörg.jwd Ehrenmitglied V.I.P. h.c. CAD-PDM Administrator
     
 Beiträge: 3109 Registriert: 05.11.2003
|
erstellt am: 21. Feb. 2014 06:42 <-- editieren / zitieren --> Unities abgeben:          Nur für Bauvermesser
Hallo Bauvermesser, wo hast du denn (RSETZ) definiert? Ich nehme mal an dass das was nach dem ersten (RSETZ) kommt die Definition davon sein soll. Wenn dem so ist schreib da mal (defun RSETZ). ------------------ Grüße Jörg da ich weiß daß ich nichts weiß weiß ich immer noch mehr als die die nicht wissen daß sie nichts wissen (weiß nicht von wem) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
       

 Beiträge: 22497 Registriert: 03.06.2002 Alles
|
erstellt am: 21. Feb. 2014 10:01 <-- editieren / zitieren --> Unities abgeben:          Nur für Bauvermesser
Warum funktioniert dein Code nicht ? Das ist schwer zu sagen wenn man die Datei nicht hat in der du testest, aber das Programm kann man verbessern, so das dies nicht unbedingt wichtig ist: Vorher nach altem und neuen Namen prüfen.. oder auch: Nebensächlichkeiten: (RSETZ) wird wohl diverse Einstellungen (die nicht innerhalb des AutoCAD-Befehls "BLOCKUMB" gesetzt werden) zurückstellen ? Etwas merkwürdig, aber deine Sache. *error*Funktion: Wenn du diese schon innerhalb von c:BLOCKUMB definierst, dann kannst du diese auch lokalisieren, also (defun c:Blockumb (/ *error*) - wenn du dies nicht machst, dann sorge dafür das du dir die vorherige *error*-Funktion speicherst (setq oldError *error*) und in deiner *Error*-Funktion wieder zurück setzt (setq *error* oldError) Undo: Den Befehl solltest du dir mit all sienen Optionen auch noch mal ansehen denke ich, dafür solltest du dir mal ne Stunde Zeit nehmen oder eben wenigstens deinen Code noch mal checken. HauptProblem: Dein Programm kann ja nur crashen wenn die Befehlszeile (Befehl _Rename) mit Werten gefüttert wird, die nicht stimmig sind, die nachfolgenden Lispanweisungen crashen dann, weil noch ein Command aktiv ist. Jetzt wird die *error*-Funktion aufgerufen und (RSETZ) ausgeführt, da aber der Command weiterhin aktiv ist, wird auch das crashen. Du mußt in der Routine also zunächst dafür sorgen das kein Command mehr aktiv ist ! Ein simpler Weg: (command nil nil) ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bauvermesser Mitglied Vermesser
 
 Beiträge: 460 Registriert: 18.03.2006 AMD 2600, 2024RAM ,WIN XP PROF-SP3, ACAD 2005, Firmenrechner,
|
erstellt am: 25. Feb. 2014 10:04 <-- editieren / zitieren --> Unities abgeben:         
da habe ich mich wohl verschätzt was die Kopliziertheit meiner Frage angeht. Ich da ich das mit dem ABBRUCH nicht hinbekommen habe ich einen andren Weg gewälht. (defun C:BLOCKUMB () (alert (strcat "folgende Blöcke werden aus Codierung 2013 umbenannt:" "\n cod-045, cod-052,xxx,yyy " "\n_" ) ) (initget "Ja Nein") (if(=(getkword "Blöcke umbenennen? [Ja/Nein] <Nein>:")"Ja") (progn (command "_RENAME" "_BLOCK" "BL01" "BL100") (princ "\n") (command "_RENAME" "_BLOCK" "BL02" "BL200") (princ "\n") (command "_RENAME" "_BLOCK" "BL03" "BL300") ;; (command "_RENAME" "_BLOCK" "BL04" "BL400") ) (progn (command _cancel) (prompt"\nBlöcke-nummerierung kontrollieren oder -->LISP neu starten") ) ) ) Es ist eben nur so wie bereits von cadffm bemerkt. Sobald ein Block nicht vorhanden, und dies wird öfters der fall sein,bleibt die lsp stecken. Ich könnte um dies zu umgehen erst alle nichtvorhandenen Blöcke erzeugen und dann alle mit nur PUNKT löschen, aber ich denke es lohnt sich der Aufwand nicht. Ich wußte nicht das RENAME so verstockt ist, was den Programm ablauf angeht.Darum vielen Dank für die Hilfe. Einen Versuch war's Wert. Sollte noch jemand eine einfache Idee haben welche ich hinbekomme, kann er sich ja melden, ansonsten schließe ich den Beitrag ------------------ Gruß vom Bauvermesser; Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 .
|
erstellt am: 25. Feb. 2014 10:15 <-- editieren / zitieren --> Unities abgeben:          Nur für Bauvermesser
|

| |
Bauvermesser Mitglied Vermesser
 
 Beiträge: 460 Registriert: 18.03.2006 AMD 2600, 2024RAM ,WIN XP PROF-SP3, ACAD 2005, Firmenrechner,
|
erstellt am: 25. Feb. 2014 19:45 <-- editieren / zitieren --> Unities abgeben:         
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |