VF-Linienzug: Wizard-Gruppendialoge waehrend Journal-Replay unterdrueckt
Beim Editieren einer bestehenden VF_n-Kette (VARIOFOERDERER_EDIT) feuerten
die Wizard-DCL-Gruppendialoge (vflw-gruppe-*-impl) weiterhin, obwohl der
Ablauf gerade aus dem gespeicherten Journal repliziert wurde - sie waren nur
an *vfl-wizard-mode* gebunden, nicht an den Replay-Status. Ihre Antworten
landeten in *vflw-pending*, wurden dort aber nie konsumiert (die vfl-in-*-
Wrapper pruefen die Replay-Queue zuerst) und blieben liegen. Sobald die
Replay-Queue leer war und auf Live-Eingabe umgeschaltet wurde, laseen die
Wrapper diese laengst veralteten, falsch typisierten Werte statt neu zu
fragen - z.B. landete eine Menue-Antwort ("1") in vfl-in-point und liess
vfl-neue-linie-messen mit "bad argument type <1> ; expected <CONS>" abstuerzen.
Neue Hilfsfunktion vfl-wizard-aktiv prueft zusaetzlich *vfl-replay-queue*
und ersetzt an allen 15 Aufrufstellen die reine *vfl-wizard-mode*-Abfrage.
Als Absicherung leeren vfl-journal-reset und vfl-journal-replay-start jetzt
zusaetzlich *vflw-pending*.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+32
-17
@@ -132,7 +132,8 @@
|
||||
;; *vfl-journal* wird in UMGEKEHRTER Reihenfolge gehalten (neuestes zuerst, cons).
|
||||
|
||||
(defun vfl-journal-reset ()
|
||||
(setq *vfl-journal* '() *vfl-replay-queue* nil))
|
||||
(setq *vfl-journal* '() *vfl-replay-queue* nil)
|
||||
(if (boundp '*vflw-pending*) (setq *vflw-pending* nil)))
|
||||
|
||||
;; Eintrag anhaengen (vorn, da Reverse-Reihenfolge).
|
||||
;; Zusaetzlich (falls ein Debug-Schalter fuer die aktuelle Sitzung eine .dbg-
|
||||
@@ -210,6 +211,19 @@
|
||||
(if (not (boundp '*vflw-menu-default*)) (setq *vflw-menu-default* 1))
|
||||
(if (not (boundp '*vflw-menu-frage*)) (setq *vflw-menu-frage* nil))
|
||||
|
||||
;; Wizard-GRUPPEN-Dialoge (vflw-gruppe-*-impl) duerfen NUR bei echter Live-
|
||||
;; Eingabe aufgehen - waehrend eines Journal-Replays (Editieren/Fortsetzen
|
||||
;; einer bestehenden Kette, *vfl-replay-queue* gesetzt) liefern vfl-in-point/
|
||||
;; -string/-real/-int/-value ihre Werte bereits stumm aus der Replay-Queue;
|
||||
;; ein trotzdem geoeffneter Gruppen-Dialog wuerde einerseits unnoetig
|
||||
;; blockieren und andererseits seine Antworten in *vflw-pending* ablegen, wo
|
||||
;; sie NICHT konsumiert werden (die Wrapper pruefen die Replay-Queue zuerst)
|
||||
;; und liegen bleiben - sobald die Replay-Queue erschoepft ist und auf Live-
|
||||
;; Eingabe umgeschaltet wird, liest der naechste Wrapper diese laengst
|
||||
;; veralteten, falsch typisierten Werte statt neu zu fragen (siehe
|
||||
;; vfl-neue-linie-messen: fuehrte zu einem String-statt-Punkt-Absturz).
|
||||
(defun vfl-wizard-aktiv () (and *vfl-wizard-mode* (null *vfl-replay-queue*)))
|
||||
|
||||
(defun c:VF_WIZARD_AN ()
|
||||
(setq *vfl-wizard-mode* T)
|
||||
(princ "\nVF-Linienzug-Assistent: EIN (DCL-Dialoge)")
|
||||
@@ -868,7 +882,8 @@
|
||||
;; zur Lesequelle, *vfl-journal* startet leer und wird bei der erneuten
|
||||
;; Ausfuehrung neu aufgebaut. Genutzt von vfl-edit-ent und der Wiederaufnahme.
|
||||
(defun vfl-journal-replay-start (forward-journal)
|
||||
(setq *vfl-replay-queue* forward-journal *vfl-journal* '()))
|
||||
(setq *vfl-replay-queue* forward-journal *vfl-journal* '())
|
||||
(if (boundp '*vflw-pending*) (setq *vflw-pending* nil)))
|
||||
|
||||
;; --- Glied-Zerlegung fuer den Editier-Dialog ---
|
||||
;; Labels der Glieder (STEP-Marker) in Bau-Reihenfolge.
|
||||
@@ -1252,7 +1267,7 @@
|
||||
(defun vfl-baue-horizontal-koerper (frame hz dL ziel-modus gf2-laenge /
|
||||
pt m1 sep-vor pt-vor-bogen sep-nach ist-ende-antwort)
|
||||
(setq pt (car frame))
|
||||
(if *vfl-wizard-mode*
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-horizontal-impl (list ziel-modus)))
|
||||
(princ (ssg-text "vfl-sep-vor-frage"))
|
||||
(princ (ssg-text "vfl-ja"))
|
||||
@@ -1399,7 +1414,7 @@
|
||||
(progn (princ (ssg-text "vfl-abgebrochen-kein-ziel")) nil)
|
||||
(progn
|
||||
(setq dL (car linie-mess) hzn (cadr linie-mess))
|
||||
(if *vfl-wizard-mode*
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-ziel-hoehe-impl (list (caddr (car frame)))))
|
||||
(setq hn (vfl-in-real (ssg-textf "vfl-prompt-hoehe-kettenende"
|
||||
(list (rtos (caddr (car frame)) 2 1)))))
|
||||
@@ -1605,7 +1620,7 @@
|
||||
(setq dL (car linie-mess) hzn (cadr linie-mess))
|
||||
(if (> dL 1.0)
|
||||
(progn
|
||||
(if *vfl-wizard-mode*
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-ziel-hoehe-impl (list (caddr (car frame)))))
|
||||
(setq hn (vfl-in-real (ssg-textf "vfl-prompt-hoehe-endpunkt"
|
||||
(list (rtos (caddr (car frame)) 2 1)))))
|
||||
@@ -1715,7 +1730,7 @@
|
||||
|
||||
;; Interaktiv (i18n): GF-Bogen-Winkel + Seite abfragen, dann Kern aufrufen.
|
||||
(defun vfl-insert-gf-bogen (frame / bwinkel bseite antwort)
|
||||
(if *vfl-wizard-mode*
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-winkel-seite-impl
|
||||
(list "vfl-gf-bogen-winkel-header"
|
||||
(list (ssg-text "vfl-winkel-30") (ssg-text "vfl-winkel-60") (ssg-text "vfl-winkel-90"))
|
||||
@@ -1784,7 +1799,7 @@
|
||||
;; (siehe ks-normalize-name).
|
||||
;; Interaktiv (i18n): Vario-Kurve-Winkel + Seite + Variante abfragen, dann Kern.
|
||||
(defun vfl-insert-vario-kurve (frame / kwinkel kseite kvariante antwort)
|
||||
(if *vfl-wizard-mode* (vl-catch-all-apply 'vflw-gruppe-variokurve-impl nil))
|
||||
(if (vfl-wizard-aktiv) (vl-catch-all-apply 'vflw-gruppe-variokurve-impl nil))
|
||||
(princ (ssg-text "vfl-variokurve-winkel-header"))
|
||||
(princ (ssg-text "vfl-opt1-90grad"))
|
||||
(princ (ssg-text "vfl-opt2-60grad"))
|
||||
@@ -1861,7 +1876,7 @@
|
||||
;; ES-Winkel (30/90) + Seite erst am Kettenende abfragen. Setzt *vfl-es-winkel*
|
||||
;; und die ES-Masse (ein-dx/dz) fuer die Variante. Rueckgabe: Seite (links/rechts).
|
||||
(defun vfl-frage-es-seite ( / antwort es-seite)
|
||||
(if *vfl-wizard-mode*
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-winkel-seite-impl
|
||||
(list "vf-winkel-ein-header"
|
||||
(list (ssg-text "vf-winkel-90") (ssg-text "vf-winkel-30"))
|
||||
@@ -2185,7 +2200,7 @@
|
||||
(if (and (boundp '*ssg-start-stack*) *ssg-start-stack*) (ssg-end))
|
||||
(princ))))
|
||||
|
||||
(if *vfl-wizard-mode*
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-punkt-hoehe-impl
|
||||
(list "vfl-prompt-startpunkt-kette" "Starthoehe (Z, mm):")))
|
||||
(setq startpunkt (vfl-in-point nil (ssg-text "vfl-prompt-startpunkt-kette")))
|
||||
@@ -2196,7 +2211,7 @@
|
||||
(if (null start-hoehe) (setq start-hoehe (caddr startpunkt)))
|
||||
(setq startpunkt (list (car startpunkt) (cadr startpunkt) start-hoehe))
|
||||
|
||||
(if *vfl-wizard-mode*
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-as-impl (list "vfl-as-setzen-frage")))
|
||||
(princ (ssg-text "vfl-as-setzen-frage"))
|
||||
(princ (ssg-text "vfl-ja"))
|
||||
@@ -2357,7 +2372,7 @@
|
||||
)
|
||||
)
|
||||
(setq gf-ok t)
|
||||
(if *vfl-wizard-mode*
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-gefaelle-impl
|
||||
(list (vfl-gf-hoehe-vorschlag (caddr p-aktuell)))))
|
||||
(princ (ssg-text "vfl-gefaelle-festlegen-header"))
|
||||
@@ -2465,7 +2480,7 @@
|
||||
(if (< deltaL 1000.0)
|
||||
(princ (ssg-text "vfl-fehler-vf-kurz"))
|
||||
(progn
|
||||
(if *vfl-wizard-mode*
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-ziel-hoehe-impl (list (caddr p-aktuell))))
|
||||
(setq hoehe-neu
|
||||
(vfl-in-real (ssg-textf "vfl-prompt-hoehe-linienendpunkt" (list (rtos (caddr p-aktuell) 2 1)))))
|
||||
@@ -2533,7 +2548,7 @@
|
||||
(list (rtos deltaL 2 0) (rtos deltaH 2 1))))
|
||||
)
|
||||
(progn
|
||||
(if *vfl-wizard-mode*
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-ziel-hoehe-impl (list (caddr p-aktuell))))
|
||||
(setq hoehe-neu
|
||||
(vfl-in-real (ssg-textf "vfl-prompt-hoehe-linienendpunkt" (list (rtos (caddr p-aktuell) 2 1)))))
|
||||
@@ -3433,7 +3448,7 @@
|
||||
(setq obj-liste (mapcar 'vlax-ename->vla-object ss))
|
||||
|
||||
;; --- 2. Startpunkt + Z + AS-Seite ---
|
||||
(if *vfl-wizard-mode*
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-punkt-hoehe-impl
|
||||
(list "vfl-m3-prompt-startpunkt" "Starthoehe (Z, mm):")))
|
||||
(setq startpunkt (vfl-in-point nil (ssg-text "vfl-m3-prompt-startpunkt")))
|
||||
@@ -3442,7 +3457,7 @@
|
||||
(list (rtos (caddr startpunkt) 2 1)))))
|
||||
(if (null start-hoehe) (setq start-hoehe (caddr startpunkt)))
|
||||
(setq startpunkt (list (car startpunkt) (cadr startpunkt) start-hoehe))
|
||||
(if *vfl-wizard-mode*
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-as-impl (list "vfl-as-setzen-frage")))
|
||||
(princ (ssg-text "vfl-as-setzen-frage"))
|
||||
(princ (ssg-text "vfl-ja"))
|
||||
@@ -3468,7 +3483,7 @@
|
||||
)
|
||||
|
||||
;; --- 3. Endpunkt + Z + ES-Seite (NEU in Modus 3) ---
|
||||
(if *vfl-wizard-mode*
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-punkt-hoehe-impl
|
||||
(list "vfl-m3-prompt-endpunkt" "Zielhoehe (Z, mm):")))
|
||||
(setq endpunkt (vfl-in-point nil (ssg-text "vfl-m3-prompt-endpunkt")))
|
||||
@@ -3477,7 +3492,7 @@
|
||||
(list (rtos (caddr endpunkt) 2 1)))))
|
||||
(if (null end-hoehe) (setq end-hoehe (caddr endpunkt)))
|
||||
(setq endpunkt (list (car endpunkt) (cadr endpunkt) end-hoehe))
|
||||
(if *vfl-wizard-mode*
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-as-impl (list "vfl-es-setzen-frage")))
|
||||
(princ (ssg-text "vfl-es-setzen-frage"))
|
||||
(princ (ssg-text "vfl-ja"))
|
||||
|
||||
Reference in New Issue
Block a user