Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Abbruchfunktion in LSP

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Abbruchfunktion in LSP (1204 mal gelesen)
Bauvermesser
Mitglied
Vermesser


Sehen Sie sich das Profil von Bauvermesser an!   Senden Sie eine Private Message an Bauvermesser  Schreiben Sie einen Gästebucheintrag für Bauvermesser

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von jörg.jwd an!   Senden Sie eine Private Message an joerg.jwd  Schreiben Sie einen Gästebucheintrag für joerg.jwd

Beiträge: 3109
Registriert: 05.11.2003

erstellt am: 21. Feb. 2014 06:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bauvermesser 10 Unities + Antwort hilfreich

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
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 21. Feb. 2014 10:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bauvermesser 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Bauvermesser an!   Senden Sie eine Private Message an Bauvermesser  Schreiben Sie einen Gästebucheintrag für Bauvermesser

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 25. Feb. 2014 10:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bauvermesser 10 Unities + Antwort hilfreich

ganz einfach wäre vorher zu gucken, ob es den Block gibt ... und den neuen noch nicht gibt
(if(and(or(tblobjname "BLOCK" "BL01")
          (prompt "\nBlock nicht vorhanden")
      ) 
      (or(not(tblobjname "BLOCK" "BL100"))
          (prompt "\nBlock in den umbenannt werden soll, gibt es schon.")
      )
  )
(command "_RENAME" "_BLOCK" "BL01" "BL100")
)

da man das ja nicht 100 fach wiederholen will am besten ne Funktion draus machen,
die als Parameter die 2 Namen bekommt ..

------------------
Also ich finde Unities gut ... und andere sicher auch
---------------------------------------
  - 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

Bauvermesser
Mitglied
Vermesser


Sehen Sie sich das Profil von Bauvermesser an!   Senden Sie eine Private Message an Bauvermesser  Schreiben Sie einen Gästebucheintrag für Bauvermesser

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

gute Idee, da es sich maximal um 10 blöcke handelt
werde ich es mit ja /nein Variante testen und melde mich nochmal.

------------------
Gruß vom Bauvermesser;

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz