Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Befehlsabbruch in Bemaßung

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:  Befehlsabbruch in Bemaßung (1174 mal gelesen)
wisch
Mitglied



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

Beiträge: 78
Registriert: 22.05.2003

erstellt am: 02. Dez. 2009 15: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

Hallo LISP-Profi's!

Ich hab da ein paar Code-Schnipsel angehängt, ich hab das Problem, dass bei Abbruch der Bemaßungsfunktion (z.B. "GS_ATH_DIM_OBJ") der Layer nicht wieder zum Ursprungslayer ($clayer) wechselt.
Was müsste ich denn da noch einbauen?

Vielen Dank im Voraus!


Code:
;;-----------------------------------------------------------------------------
;;Ermitteln und Setzen des vom Bemassungsstil abhängigen Layers für Bemaßungen
;;-----------------------------------------------------------------------------
(defun c:GS_GETLAY_DIM()
(setq DIMS(getvar "DIMSTYLE"));_Dimstyle auslesen
(cond
  ((= DIMS "STANDARD")(setvar "CLAYER" "0"));_Layer entsprechend aktuell setzen
  ((= DIMS "GS_M1-1")(command "_-layer" "M" "GS_DIM_M1-1" "FA" "12" "GS_DIM_M1-1" ""))
  ((= DIMS "GS_M1-10")(command "_-layer" "M" "GS_DIM_M1-10" "FA" "12" "GS_DIM_M1-10" ""))
  )
(princ)
)
;;------------------------------------------------------------------------


;;------------------------------------------------------------------------
;;Funktion zum Erzeugen von Athena-Bemaßungs- und Beschriftungselementen
;;------------------------------------------------------------------------
(defun c:GS_ATH_DIM_OBJ()
(setq $clayer (getvar "clayer"))
(c:GS_GETLAY_DIM)
(c:ATH_DIM_OBJ)
(while (not (= 0 (getvar "CMDACTIVE")))
  (command pause)
)
(setvar "clayer" $clayer)
(princ)
)
;;--------------------------------------------------------------------------
(defun c:GS_ATH_BKET()
(setq $clayer (getvar "clayer"))
(c:GS_GETLAY_DIM)
(c:ATH_BKET)
(while (not (= 0 (getvar "CMDACTIVE")))
  (command pause)
)
(setvar "clayer" $clayer)
(princ)
)

..... usw.

------------------
wisch

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 02. Dez. 2009 15:11    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 wisch 10 Unities + Antwort hilfreich

Hi,
du kannst den "Fehler" abfangen
(vl-catch-all-apply 'deinesub)

[Eidt: siehe auch (vl-catch-all-error-message (siehe Hilfe..)]

oder probierst einen "klassischen" error-Handler einzubauen
(siehe Hilfe oder Forum...)

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."   (www.uni-leipzig.de/~rotheh/elefant.htm)

[Diese Nachricht wurde von Dorfy am 02. Dez. 2009 editiert.]

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

wisch
Mitglied



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

Beiträge: 78
Registriert: 22.05.2003

erstellt am: 03. Dez. 2009 08: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

1) Ich habe bei mapcar zu (vl-catch-all-apply ...) nachgelesen, aber wenn ich es richtig verstehe, geht es hier um Fehlerrückmeldungen.
In meinem Fall interessiert mich nur der Fall, wenn mit ESC abgebrochen wird, soll der Layer wieder zurückgesetzt werden auf den Ausgangswert ($clayer), ich benötige keine Rückmeldungen.

Ich hab nun auch einen Error-Handler eingebaut, aber auch der bringt nicht das gewünschte Ergebnis (der Layer wird nicht zurückgesetzt).

Vielleicht erkennt noch jemand, was das Problem ist, bzw. hat einen besseren Lösungsvorschlag!?

2) Ich hab auch noch eine Frage für etwas Kosmetik: Ich habe mehrere Funktionen, für die ich so wie hier im Beispiel f. "GS_ATH_DIM_OBJ" beinahe die selbe Funktion ausführen möchte. Beinahe deshalb, es soll bis auf die in der Funktion ausgeführten Unterfunktion "ATH_DIM_OBJ" der gleiche Ablauf erfolgen: <clayer ermittel> <GS_GETLAY_DIM (Bemaßungslayer setzen)> <Unterfunktionsaufruf> <vorherigen Layer wieder aktuell setzen>
Wie könnte man das "sauberer" lösen, indem man ev. die Funktionen besser gruppieren kann.
Denke etwa so:
Mein Funktionsaufruf | Unterfunktionsaufruf | Layerkram
GS_ATH_DIM_OBJ | ATH_DIM_OBJ | GS_SET_LAY
GS_ATH_DIM_XYZ | ATH_DIM_XYZ | GS_SET_LAY

Zur Erklärung für mein wahrscheinlich lächerliches Geschreibsel:
Ich Zähle nicht zur Gruppe von LISP-Programmierern -verstehern und -profis,
sondern zur Gruppe der LISP-Zusammenstoppler und -erahner!!!


Code:

;;-----------------------------------------------------
(defun c:GS_ATH_DIM_OBJ()
(startErrorHandler nil)
(setq $clayer (getvar "clayer"))
(c:GS_GETLAY_DIM)
(c:ATH_DIM_OBJ)
(while (not (= 0 (getvar "CMDACTIVE")))
  (command pause)
)
(setvar "clayer" $clayer)
(endErrorHandler)
)
;;-----------------------------------------------------

;;-----------------------------------------------------
;;Error-Handler
;;-----------------------------------------------------
(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 / )
  ; hinzugefügt:
  (while(>(getvar "cmdactive")0)(command))
  (if msg(print msg))
  (command"_undo""_end")
  (foreach pair *savedList*
    (setvar(car pair)(cadr pair))
  )
  (setq *savedVars* nil)
  (setq *error* *oldError*)
  (setq *oldError* nil)
)
;;Ende Error-Handler
;;-----------------------------------------------------


DANKE!

------------------
wisch

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

wisch
Mitglied



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

Beiträge: 78
Registriert: 22.05.2003

WIN 7 Prof. SP1
64Bit Intel i7 2,4GHz 8GB
PDSU 2013
Vault Prof. 2013

erstellt am: 10. Dez. 2009 10:05    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

Vielleicht ist mein Beitrag hier etwas unübersichtlich geworden, ich versuche mal zu entwirren und auf die Kernfrage zurückzukommen:

Beispiel:

Code:
(defun c:FUNKTION1()
  (setq $clayer (getvar "clayer"))
  (c:GET-DIM-LAYER)
  (c:FUNKTION2)
    (while (not (= 0 (getvar "CMDACTIVE")))
      (command pause)
    )
  (setvar "clayer" $clayer)
  (princ)
)

Meine Frage ist nun, wie ich einen Abbruch mittels ESC in der "FUNKTION2", die Benutzereingaben erfordert, so abfangen kann, dass in jedem Fall der Layer wieder zurückgesetzt wird auf "$clayer"?
In der Funktion "GET-DIM-LAYER" wird der Layer in Abhängigkeit vom aktuellen Bemaßungsstil gesetzt, das funktioniert alles soweit.

Danke für eure Hilfe!

------------------
wisch

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: 10. Dez. 2009 10:12    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 wisch 10 Unities + Antwort hilfreich

(defun FUNKTION3()
  (while (not (= 0 (getvar "CMDACTIVE")))
      (command pause)
  )

(defun c:FUNKTION1()
  (setq $clayer (getvar "clayer"))
  (c:GET-DIM-LAYER) 
  (c:FUNKTION2) 
  (VL-CATCH-ALL-APPLY 'FUNKTION3)   
  (setvar "clayer" $clayer)
  (princ)
)

------------------
  - 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

wisch
Mitglied



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

Beiträge: 78
Registriert: 22.05.2003

erstellt am: 10. Dez. 2009 10:50    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

Danke Thomas für die schnelle Antwort!
Leider funktioniert es aber immer noch nicht!
Es muss an der FUNKTION2 liegen, die ja mit
  (c:FUNKTION2)
aufgerufen wird.
Ich hab mal ausprobiert, stattdessen
  (command "_.dimlinear")
einzusetzen, da funktioniert es grundsätzlich, wenn auch in der Befehlszeile die Benutzeraufforderungen fehlen, es steht nur "Befehl:" da!

Hilft das jemandem weiter eine Lösung zu finden??

------------------
wisch

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: 10. Dez. 2009 10:53    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 wisch 10 Unities + Antwort hilfreich

(defun c:FUNKTION1()
  (setq $clayer (getvar "clayer"))
  (c:GET-DIM-LAYER) 
  (VL-CATCH-ALL-APPLY 'c:FUNKTION2)   
  (VL-CATCH-ALL-APPLY 'FUNKTION3)   
  (setvar "clayer" $clayer)
  (princ)
)

------------------
  - 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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 10. Dez. 2009 10:54    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 wisch 10 Unities + Antwort hilfreich

dann fange doch die Funktion2 ab oder poste doch diese einfach mal...
das könnte uns die Glaskugel ersparen
oder poste doch mal alles und nicht nur Fragmente...

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."   (www.uni-leipzig.de/~rotheh/elefant.htm)

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

wisch
Mitglied



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

Beiträge: 78
Registriert: 22.05.2003

erstellt am: 10. Dez. 2009 11: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

Zitat:
Original erstellt von Dorfy:
dann fange doch die Funktion2 ab oder poste doch diese einfach mal...
das könnte uns die Glaskugel ersparen
oder poste doch mal alles und nicht nur Fragmente...


@Heiko:
Ich habe eigentlich im ersten Beitrag ganz oben in diesem Thread alles wesentliche angeführt, meine LISP ist zwar noch größer, aber da sind nur noch andere Dinge drinnen.

@Thomas:
Leider bringt auch
(VL-CATCH-ALL-APPLY 'c:FUNKTION2)
nicht das gewünschte Ergebnis.
Die FUNKTION2 ist ein ATHENA-Befehl, vielleicht liegt es an dem? Da weiß ich aber nicht, wie ich das herausfinden kann!?!

------------------
wisch

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 10. Dez. 2009 11:29    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 wisch 10 Unities + Antwort hilfreich

was erhälts du denn als Rückgabe mit vl-catch-all-error-message

(vl-catch-all-error-message (VL-CATCH-ALL-APPLY 'c:Funktion2))

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."   (www.uni-leipzig.de/~rotheh/elefant.htm)

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

wisch
Mitglied



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

Beiträge: 78
Registriert: 22.05.2003

erstellt am: 10. Dez. 2009 12:02    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

Wenn ich mit ESC abbreche gar keine Rückmeldung,
wenn ich den Befehl normal durchlaufen lasse, bekomme ich:
  ; Fehler: Argument ist kein vl-catch-all-apply-Fehler:
  Befehl:

------------------
wisch

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