fix: Wizard-Dropdowns auf Radiobuttons, Abbrechen-Bug, ES-Element-Ausgleichsbogen
- vfl-in-abstand/-in-selection pruefen jetzt *vfl-wizard-abbruch-grund* (bisher liefen beide an vfl-in-value/-value-p vorbei, ein Klick auf "Abbrechen" im Wizard-Dialog fiel dadurch auf einen rohen getpoint zurueck statt die Kette zu beenden) - Kombiniertes ES-Element-Dialogfeld (Ja/Nein + Winkel 90/30 + Seite links/rechts in einem Bildschirm, analog AS-Element) - Separator VOR/NACH (horizontales Stueck) und Ist-Kettenende-Frage von Dropdown auf Radiobuttons umgestellt, "Nein" als Vorgabe - Neigungswinkel-Eingabe bei Gefaellestrecke: 3 Grad als Vorgabe statt "Gegebene Hoehe" - Zweig-C-Unterfrage (Endpunkt/Zielhoehe) bei "Steigende GF" bekommt eigenen Radiobutton-Dialog statt generischem Dropdown-Fallback - ES-Element-Anhaengung nach einer steigenden GF (Zweig C) baut jetzt vorher per vfl-bogen-uebergang zurueck auf die Standard-Fallend-Basis (ES-Element-Hardware gibt es nur fuer diese Anfahrt) - Stufe-2-Diagnosetext klargestellt (Mindestlaenge vs. Fixwert ohne GF-Bogen) - Horizontal-VF: 1000mm-Mindestlaenge entfernt, GF1-Ziel-Hoehe-Feature wiederhergestellt Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
18ee46b361
commit
942012e44d
+165
-36
@@ -862,24 +862,34 @@
|
||||
;; berechnet wird. Konventionswahl dieses Projekts (siehe vf-linienzug-modus,
|
||||
;; wahl="Linie-GF"): Option "1" = Hoehe, Option "2" = Winkel - Hoehe ist
|
||||
;; daher hier Default, nicht der DCL-eigene value="1" bei modus_winkel.
|
||||
(defun vflw-gruppe-gefaelle-impl (hoehe-default nur-winkel / dat dcl-pfad ergebnis gmodus gwert winkel-default)
|
||||
;; winkel-als-default: T, wenn (bei nicht gesperrter Hoehe-Option) trotzdem
|
||||
;; der Neigungswinkel statt der Zielhoehe vorausgewaehlt sein soll - genutzt
|
||||
;; von der Aufrufstelle "Zielhoehe zuerst" (die dortige Nachfrage ist zwar
|
||||
;; textlich "Hoehe zuerst", die pragmatische Standard-Antwort ist aber meist
|
||||
;; der direkt vorgegebene Neigungswinkel).
|
||||
(defun vflw-gruppe-gefaelle-impl (hoehe-default nur-winkel winkel-als-default /
|
||||
dat dcl-pfad ergebnis gmodus gwert winkel-default)
|
||||
(setq winkel-default (ssg-cfg-or "vario" "gefaelle_winkel" 3))
|
||||
(setq dat (load_dialog (vflw-dcl-pfad)))
|
||||
(if (not (new_dialog "vflw_gefaelle" dat))
|
||||
(if (and dat (>= dat 0)) (unload_dialog dat))
|
||||
(progn
|
||||
(set_tile "kopf" (vflw-clean (ssg-text "vfl-gefaelle-festlegen-header")))
|
||||
(if nur-winkel
|
||||
(progn
|
||||
(set_tile "modus_winkel" "1")
|
||||
(set_tile "wlabel" "Neigungswinkel (Grad):")
|
||||
(set_tile "wert" (rtos (float winkel-default) 2 1))
|
||||
(mode_tile "modus_hoehe" 1)
|
||||
(set_tile "hinweis" (ssg-text "vfl-gf-hinweis-laenge-berechnet")))
|
||||
(progn
|
||||
(set_tile "modus_hoehe" "1")
|
||||
(set_tile "wlabel" "Zielhoehe (Z, mm):")
|
||||
(set_tile "wert" (rtos hoehe-default 2 1))))
|
||||
(cond
|
||||
(nur-winkel
|
||||
(set_tile "modus_winkel" "1")
|
||||
(set_tile "wlabel" "Neigungswinkel (Grad):")
|
||||
(set_tile "wert" (rtos (float winkel-default) 2 1))
|
||||
(mode_tile "modus_hoehe" 1)
|
||||
(set_tile "hinweis" (ssg-text "vfl-gf-hinweis-laenge-berechnet")))
|
||||
(winkel-als-default
|
||||
(set_tile "modus_winkel" "1")
|
||||
(set_tile "wlabel" "Neigungswinkel (Grad):")
|
||||
(set_tile "wert" (rtos (float winkel-default) 2 1)))
|
||||
(t
|
||||
(set_tile "modus_hoehe" "1")
|
||||
(set_tile "wlabel" "Zielhoehe (Z, mm):")
|
||||
(set_tile "wert" (rtos hoehe-default 2 1))))
|
||||
;; Wertfeld MUSS beim Moduswechsel mit umschalten - sonst steht dort
|
||||
;; nach dem Wechsel noch der Wert des vorherigen Modus (Hoehe/Winkel
|
||||
;; sind nicht dieselbe Groesse, ein stehengebliebener Hoehenwert waere
|
||||
@@ -911,9 +921,10 @@
|
||||
|
||||
;; "Neue Linie: GF" - Vorfrage "Wie soll die Laenge bestimmt werden?"
|
||||
;; (Endpunkt/Zielhoehe/Steigende GF). Die verschachtelte Unterfrage bei
|
||||
;; Zweig C (Endpunkt vs. Zielhoehe, nur 2 Optionen) zeigt bewusst KEINEN
|
||||
;; eigenen Wizard-Dialog - der 3-Optionen-Dialog hier waere dort irrefuehrend
|
||||
;; (dritte Kachel "Steigend" existiert in diesem Kontext gar nicht mehr).
|
||||
;; Zweig C (Endpunkt vs. Zielhoehe, nur 2 Optionen) hat einen EIGENEN,
|
||||
;; separaten Dialog (vflw-gruppe-gf-steigend-untermodus-impl, weiter unten) -
|
||||
;; der 3-Optionen-Dialog hier waere dort irrefuehrend (dritte Kachel
|
||||
;; "Steigend" existiert in diesem Kontext gar nicht mehr).
|
||||
(defun vflw-gruppe-gf-laenge-modus-impl ( / dat ergebnis gwahl)
|
||||
(setq dat (load_dialog (vflw-dcl-pfad)))
|
||||
(if (not (new_dialog "vflw_gf_laenge_modus" dat))
|
||||
@@ -938,6 +949,33 @@
|
||||
)
|
||||
(princ))
|
||||
|
||||
;; Zweig C ("Steigende GF") Unterfrage Endpunkt/Zielhoehe - dieselben 2
|
||||
;; Optionen wie vflw-gruppe-gf-laenge-modus-impl, aber ohne die 3. Kachel
|
||||
;; "Steigend" (siehe dcl/vf_linienzug_wizard.dcl, vflw_gf_steigend_untermodus).
|
||||
;; Lief bisher mangels eigenem Dialog auf den generischen Dropdown-Fallback
|
||||
;; (vflw-wahl) hinaus.
|
||||
(defun vflw-gruppe-gf-steigend-untermodus-impl ( / dat ergebnis gwahl)
|
||||
(setq dat (load_dialog (vflw-dcl-pfad)))
|
||||
(if (not (new_dialog "vflw_gf_steigend_untermodus" dat))
|
||||
(if (and dat (>= dat 0)) (unload_dialog dat))
|
||||
(progn
|
||||
(set_tile "kopf" (vflw-clean (ssg-text "vfl-gf-laenge-modus-header")))
|
||||
(action_tile "accept"
|
||||
"(setq gwahl (if (= (get_tile \"modus_hoehe\") \"1\") \"2\" \"1\"))
|
||||
(done_dialog 1)")
|
||||
(action_tile "cancel" "(done_dialog 0)")
|
||||
(action_tile "back" "(done_dialog 2)")
|
||||
(setq ergebnis (start_dialog))
|
||||
(unload_dialog dat)
|
||||
(cond
|
||||
((= ergebnis 1) (vflw-pending-push-all (list gwahl)))
|
||||
((= ergebnis 2) (setq *vfl-wizard-abbruch-grund* "zurueck"))
|
||||
(t (setq *vfl-wizard-abbruch-grund* "abbrechen"))
|
||||
)
|
||||
)
|
||||
)
|
||||
(princ))
|
||||
|
||||
;; "Neue Linie: GF" - Separator VOR/NACH (2 Ja/Nein-Toggles in einem
|
||||
;; Bildschirm). Siehe dcl/vf_linienzug_wizard.dcl (vflw_sep_gf).
|
||||
(defun vflw-gruppe-sep-gf-impl ( / dat ergebnis gsepvor gsepnach)
|
||||
@@ -1075,7 +1113,10 @@
|
||||
(set_tile (strcat "kopf" (itoa i)) zeile)
|
||||
(setq i (1+ i)))
|
||||
(while (<= i max-zeilen) (set_tile (strcat "kopf" (itoa i)) "") (setq i (1+ i)))
|
||||
(set_tile "wahl_ja" "1")
|
||||
;; Default "Nein" (nicht der DCL-eigene "Ja"-Default): alle bisherigen
|
||||
;; Aufrufstellen (Separator-Zusatzfragen) haben auch im Konsolen-Pfad
|
||||
;; "Nein" als Vorgabe (vfl-menu default-idx=2).
|
||||
(set_tile "wahl_nein" "1")
|
||||
(action_tile "accept" "(setq gwahl (get_tile \"wahl_nein\")) (done_dialog 1)")
|
||||
(action_tile "cancel" "(done_dialog 0)")
|
||||
(action_tile "back" "(done_dialog 2)")
|
||||
@@ -1665,6 +1706,15 @@
|
||||
;; geloescht hat), wird das klar gemeldet statt eine unvollstaendige Auswahl
|
||||
;; stillschweigend weiterzureichen.
|
||||
(defun vfl-in-selection (filter / popped v handles h en k ss fehlt)
|
||||
;; Zentraler Abbruch-Trigger (siehe Kommentar in vfl-in-value): auch
|
||||
;; vfl-in-selection hat eine eigenstaendige Replay-/Journal-Logik und laeuft
|
||||
;; NICHT ueber vfl-in-value - ohne diesen Check bliebe ein von einem
|
||||
;; VORHERGEHENDEN Gruppen-Dialog gesetztes *vfl-wizard-abbruch-grund*
|
||||
;; unbemerkt liegen, statt hier zuverlaessig zu terminieren.
|
||||
(if *vfl-wizard-abbruch-grund*
|
||||
(progn
|
||||
(dbgmsg (strcat "ABBRUCH-TRIGGER: *vfl-wizard-abbruch-grund*=" *vfl-wizard-abbruch-grund* " -> (exit)"))
|
||||
(exit)))
|
||||
(setq popped (if *vfl-replay-queue* (vfl-replay-pop) nil))
|
||||
(if popped
|
||||
(progn
|
||||
@@ -2455,6 +2505,8 @@
|
||||
(setq labels (append labels
|
||||
(list (ssg-textf "vfl-winkel-option" (list idx (car e) (rtos (cadr e) 2 1) (rtos (caddr e) 2 1))))))
|
||||
(setq idx (1+ idx)))
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-winkel-wahl-impl (list ergebnis-liste gueltige)))
|
||||
(setq antwort (vfl-menu-int (ssg-textf "vfl-prompt-wahl-bis-n" (list (length gueltige)))
|
||||
labels 1 "vfl-mehrere-winkel-header"))
|
||||
(vfl-winkel-nach-index gueltige antwort))))
|
||||
@@ -2847,6 +2899,17 @@
|
||||
;; ohnehin immer die des Vorgaengers, ein Journal-Eintrag dafuer waere
|
||||
;; redundant. Rueckgabe: (deltaL . hz) oder nil bei Abbruch/leerer Eingabe.
|
||||
(defun vfl-in-abstand (p-akt hz-vorgabe prompt / p2 rad ux uy deltaL hz-aktuell popped)
|
||||
;; Zentraler Abbruch-Trigger (siehe Kommentar in vfl-in-value): vfl-in-abstand
|
||||
;; hat eine EIGENE Pending-/Replay-Logik und laeuft NICHT ueber vfl-in-value/
|
||||
;; -value-p - ohne diesen Check wuerde ein per Wizard-Dialog gesetztes
|
||||
;; *vfl-wizard-abbruch-grund* hier NICHT erkannt: die Pending-Queue ist nach
|
||||
;; einem Dialog-Abbruch leer, der Code faellt dann auf einen rohen
|
||||
;; (vfl-getpoint ...)-Aufruf zurueck statt zu terminieren - genau das
|
||||
;; Fehlerbild "Abbrechen springt zurueck in die Abfrage" statt zu beenden.
|
||||
(if *vfl-wizard-abbruch-grund*
|
||||
(progn
|
||||
(dbgmsg (strcat "ABBRUCH-TRIGGER: *vfl-wizard-abbruch-grund*=" *vfl-wizard-abbruch-grund* " -> (exit)"))
|
||||
(exit)))
|
||||
;; Eigene Replay-Logik (zwei Eintraege pro Aufruf), darum ein eigener
|
||||
;; Headless-Riegel: leere Queue = Desync, nicht "Nutzer soll picken".
|
||||
(if (and (null *vfl-replay-queue*) (vfl-headless-p))
|
||||
@@ -3278,6 +3341,8 @@
|
||||
(princ (ssg-text "vfl-sep-vor-frage"))
|
||||
(princ (ssg-text "vfl-ja"))
|
||||
(princ (ssg-text "vfl-nein"))
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-ja-nein-impl (list (ssg-text "vfl-sep-vor-frage"))))
|
||||
(setq sep-vor (= (vfl-menu (ssg-text "vfl-prompt-wahl-1-2-def2")
|
||||
(list (ssg-text "vfl-ja") (ssg-text "vfl-nein")) 2 "vfl-sep-vor-frage") "1"))
|
||||
;; Separator NACH abfragen (noch nicht bauen) - im Ziel-Modus muss der
|
||||
@@ -3285,6 +3350,8 @@
|
||||
(princ (ssg-text "vfl-sep-nach-frage"))
|
||||
(princ (ssg-text "vfl-ja"))
|
||||
(princ (ssg-text "vfl-nein"))
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-ja-nein-impl (list (ssg-text "vfl-sep-nach-frage"))))
|
||||
(setq sep-nach (= (vfl-menu (ssg-text "vfl-prompt-wahl-1-2-def2")
|
||||
(list (ssg-text "vfl-ja") (ssg-text "vfl-nein")) 2 "vfl-sep-nach-frage") "1"))
|
||||
(if ziel-modus
|
||||
@@ -3757,7 +3824,7 @@
|
||||
letzt-hz fertig ziel-ende ziel-gf2 res3 gf2-eff entry-start
|
||||
res-h vor-antwort es-gewuenscht es-antwort save-eindx save-eindz
|
||||
hoehe-vorschlaege hoehe-ab hoehe-auf hoehe-fallback
|
||||
schon-flach winkel-hoehen-erg)
|
||||
schon-flach winkel-hoehen-erg es-seite)
|
||||
;; Vorbelegung: ES gewuenscht (Default) - nur bei "3 - Kettenende definieren"
|
||||
;; wird explizit gefragt und ggf. auf nil gesetzt (siehe dort).
|
||||
(setq es-gewuenscht t)
|
||||
@@ -3839,18 +3906,30 @@
|
||||
(if (= antwort "3")
|
||||
;; --- Option 3: Kettenende exakt am Zielpunkt (nur EIN Motor) ---
|
||||
(progn
|
||||
;; ES-Element hier gewuenscht? Falls nein, ein-dx/ein-dz waehrend der
|
||||
;; Zerlegung (vfl-body-abschluss -> vfl-body-zerlegung -> berechne-
|
||||
;; alle-winkel) temporaer nullen, damit KEIN ES-Fussabdruck reserviert
|
||||
;; wird - die Kette endet dann direkt am Zielpunkt ohne Separator+ES.
|
||||
;; ES-Element hier gewuenscht (+ falls ja: Winkel/Seite) - kombinierter
|
||||
;; Dialog wie AS-Element (vflw-gruppe-as-impl). Winkel/Seite werden
|
||||
;; JETZT (nicht erst spaeter in vfl-vf-einheit-abschluss) erfragt, weil
|
||||
;; sie den tatsaechlichen ES-Fussabdruck (ein-dx/ein-dz, per
|
||||
;; vfl-es-masse-setzen INNERHALB von vfl-frage-es-seite gesetzt)
|
||||
;; bestimmen - der muss VOR vfl-body-abschluss feststehen, sonst
|
||||
;; rechnet die Streckenzerlegung mit dem falschen (alten) Fussabdruck
|
||||
;; und die Kette trifft den Zielpunkt nicht exakt. Falls nein: ein-dx/
|
||||
;; ein-dz waehrend der Zerlegung temporaer nullen, damit KEIN
|
||||
;; ES-Fussabdruck reserviert wird - die Kette endet dann direkt am
|
||||
;; Zielpunkt ohne Separator+ES.
|
||||
(princ (ssg-text "vfl-es-setzen-frage"))
|
||||
(princ (ssg-text "vfl-ja"))
|
||||
(princ (ssg-text "vfl-es-nein-zielpunkt"))
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-as-impl (list "vfl-es-setzen-frage")))
|
||||
(setq es-antwort (vfl-menu (ssg-text "prompt-wahl-1-2")
|
||||
(list (ssg-text "vfl-ja") (ssg-text "vfl-es-nein-zielpunkt")) 1
|
||||
"vfl-es-setzen-frage"))
|
||||
(setq es-gewuenscht (/= es-antwort "2"))
|
||||
(if (not es-gewuenscht)
|
||||
(if es-gewuenscht
|
||||
;; dialog-schon-gezeigt=T: Winkel+Seite kamen bereits aus dem
|
||||
;; kombinierten vflw-gruppe-as-impl-Dialog oben mit.
|
||||
(setq es-seite (vfl-frage-es-seite t))
|
||||
(progn (setq save-eindx ein-dx save-eindz ein-dz)
|
||||
(setq ein-dx 0.0 ein-dz 0.0)))
|
||||
(setq res3 (vfl-body-abschluss frame letzt-hz p-umlenk))
|
||||
@@ -3868,6 +3947,8 @@
|
||||
(princ (ssg-text "vfl-opt-horizontaler-foerderer"))
|
||||
(princ (ssg-text "vfl-opt-vario-kurve"))
|
||||
(princ (ssg-text "vfl-opt-auf-ab-foerderer"))
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-naechstes-im-vf-impl nil))
|
||||
(setq antwort (vfl-menu (ssg-text "vfl-prompt-wahl-1-3-def3")
|
||||
(list (ssg-text "vfl-opt-horizontaler-foerderer")
|
||||
(ssg-text "vfl-opt-vario-kurve")
|
||||
@@ -4011,7 +4092,7 @@
|
||||
;; still die falsche GF2 hinter dem Motor entsteht.
|
||||
(setq gf2-eff (if ziel-ende ziel-gf2 L_GF2-bau))
|
||||
(setq frame (vfl-vf-ausgang-bauen frame letzt-hz gf2-eff))
|
||||
(list frame vf-count ziel-ende es-gewuenscht)
|
||||
(list frame vf-count ziel-ende es-gewuenscht es-seite)
|
||||
)
|
||||
|
||||
;; Rundet einen Winkel (Grad) auf das naechste 30-Grad-Vielfache DES WELT-
|
||||
@@ -4457,9 +4538,15 @@
|
||||
(vf-set-es-masse winkel seite)
|
||||
seite)
|
||||
|
||||
(defun vfl-frage-es-seite ( / antwort es-seite)
|
||||
;; dialog-schon-gezeigt: T, wenn Winkel+Seite BEREITS ueber einen vorherigen
|
||||
;; kombinierten Dialog (vflw-gruppe-as-impl, "ES-Element setzen?" + Winkel +
|
||||
;; Seite in einem Bildschirm) abgefragt und in die Pending-Queue gelegt
|
||||
;; wurden - dann NICHT nochmal den eigenen Winkel+Seite-Dialog zeigen (sonst
|
||||
;; doppelter Dialog), nur die bereits wartenden Werte konsumieren. Sonst
|
||||
;; (normaler Fall) nil - eigener Dialog wie bisher.
|
||||
(defun vfl-frage-es-seite (dialog-schon-gezeigt / antwort es-seite)
|
||||
(vfl-journal-mark "ES")
|
||||
(if (vfl-wizard-aktiv)
|
||||
(if (and (vfl-wizard-aktiv) (not dialog-schon-gezeigt))
|
||||
(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"))
|
||||
@@ -4650,7 +4737,7 @@
|
||||
(princ))
|
||||
|
||||
(defun vfl-vf-einheit-abschluss (frame hz richtung winkel L_GF L_VF auto-ende gf-verteilung-fest eingang-modus /
|
||||
antwort res es-s ende es-gewuenscht)
|
||||
antwort res es-s ende es-gewuenscht es-seite-vorab)
|
||||
;; GF-Verteilung: halbe Staustrecke am Ausgang (GF2) oder alles am Einlauf.
|
||||
;; gf-verteilung-fest: Aufrufer erzwingt die Antwort (z.B. "2", wenn L_GF
|
||||
;; wegen eingang-modus ohnehin 0.0 ist - die Frage waere dann sinnlos).
|
||||
@@ -4667,7 +4754,7 @@
|
||||
(ssg-text "vfl-gf-verteilung-ganz-einlauf")) 2
|
||||
"vfl-gf-verteilung-header"))))
|
||||
(setq res (vfl-vf-einheit frame hz richtung winkel L_GF L_VF (= antwort "1") eingang-modus))
|
||||
(setq frame (nth 0 res) es-gewuenscht (nth 3 res))
|
||||
(setq frame (nth 0 res) es-gewuenscht (nth 3 res) es-seite-vorab (nth 4 res))
|
||||
;; Kettenende? Bei auto-ende (Kettenende-Modus) ohne Frage direkt ES setzen.
|
||||
;; ziel-ende (Option 3 IN der VF-Einheit) OHNE ES-Wunsch (dort abgefragt,
|
||||
;; siehe vfl-vf-einheit): Kette endet direkt hier, kein Separator+ES, keine
|
||||
@@ -4682,6 +4769,8 @@
|
||||
(princ (ssg-text "vfl-ist-kettenende-frage"))
|
||||
(princ (ssg-text "vfl-ja-separator-es"))
|
||||
(princ (ssg-text "vfl-nein-weiterbauen"))
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-ist-kettenende-2opt-impl nil))
|
||||
(setq antwort (vfl-menu (ssg-text "vfl-prompt-wahl-1-2-def2")
|
||||
(list (ssg-text "vfl-ja-separator-es")
|
||||
(ssg-text "vfl-nein-weiterbauen")) 2
|
||||
@@ -4697,7 +4786,11 @@
|
||||
(vfl-ziel-report frame)
|
||||
)
|
||||
((= antwort "1")
|
||||
(setq es-s (vfl-frage-es-seite))
|
||||
;; War die ES-Seite (+Winkel) schon in vfl-vf-einheit erfragt (Option 3,
|
||||
;; ziel-ende - dort VOR vfl-body-abschluss noetig, siehe dortiger
|
||||
;; Kommentar), hier NICHT erneut fragen (waere doppelt journalisiert und
|
||||
;; ein-dx/ein-dz wurden dort schon fuer die Zerlegung genutzt).
|
||||
(setq es-s (if es-seite-vorab es-seite-vorab (vfl-frage-es-seite nil)))
|
||||
(setq frame (vfl-insert-es-element "VF" frame
|
||||
(car (frame->hz-winkel frame)) 0.0
|
||||
(caddr (car frame)) es-s))
|
||||
@@ -4709,6 +4802,8 @@
|
||||
(princ (ssg-text "vfl-sep-an-stelle-frage"))
|
||||
(princ (ssg-text "vfl-ja"))
|
||||
(princ (ssg-text "vfl-nein"))
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-ja-nein-impl (list (ssg-text "vfl-sep-an-stelle-frage"))))
|
||||
(setq antwort (vfl-menu (ssg-text "vfl-prompt-wahl-1-2-def2")
|
||||
(list (ssg-text "vfl-ja") (ssg-text "vfl-nein")) 2
|
||||
"vfl-sep-an-stelle-frage"))
|
||||
@@ -4733,6 +4828,14 @@
|
||||
sep-anzahl erg-bogen vf-eingang-lgf vf-eingang-modus
|
||||
eingang-laenge winkel-hoehen-erg
|
||||
bogen-mass fest-drop fest-laenge eingang-fertig)
|
||||
;; "Zurueck"/"Abbrechen"-Flag ganz am Anfang zuruecksetzen (auch schon vor
|
||||
;; der ersten Praeambel-Frage) - sonst wuerde ein von einem VORHERIGEN Lauf
|
||||
;; noch gesetztes Flag (z.B. nach "Abbrechen") den allerersten vfl-in-*-
|
||||
;; Aufruf dieses NEUEN Laufs sofort wieder abbrechen (siehe zentraler Check
|
||||
;; in vfl-in-value/-value-p). Wird ausserdem in vfl-acc-reset erneut
|
||||
;; zurueckgesetzt (spaeter im Ablauf) sowie unmittelbar vor jedem "Zurueck"-
|
||||
;; Neuaufruf in vfl-modus-abbruch-sichern.
|
||||
(setq *vfl-wizard-abbruch-grund* nil)
|
||||
(princ "\n\n=========================================")
|
||||
(princ (ssg-text "vfl-modus1-header"))
|
||||
(princ "\n=========================================")
|
||||
@@ -5005,9 +5108,15 @@
|
||||
(setq frame (nth 0 erg) deltaL (nth 1 erg) p-aktuell (car frame))
|
||||
)
|
||||
)
|
||||
(if (< deltaL *vfk-vf-mindestlaenge*)
|
||||
;; KEINE pauschale "Umlenk+Motor"-Mindestlaenge mehr hier: der noetige
|
||||
;; Fussabdruck haengt davon ab, ob gleich eine Motorstation folgt oder
|
||||
;; weitergebaut wird - genau das fragt vfl-baue-horizontal-koerper
|
||||
;; ("Ist der Endpunkt der Foerderer?") und rechnet mit dem REAL
|
||||
;; gemessenen Fussabdruck (siehe vfl-vf-einheit). Hier bleibt nur der
|
||||
;; Degenerationsschutz wie bei "Neue Linie: GF".
|
||||
(if (< deltaL 1.0)
|
||||
(progn
|
||||
(princ (ssg-text "vfl-fehler-horizontal-vf-kurz"))
|
||||
(princ (ssg-text "vfl-fehler-linie-zu-kurz"))
|
||||
(if dbg-an
|
||||
(dbgmsg (strcat "GEOMETRIE FEHLGESCHLAGEN: Horizontal-VF zu kurz (deltaL="
|
||||
(rtos deltaL 2 0) ")"))))
|
||||
@@ -5110,6 +5219,7 @@
|
||||
;; gezeigt. gf-laenge-modus="2" => Zielhoehe zuerst (Zweig B), "3" =>
|
||||
;; steigende GF (Sonderfall, Zweig C, KEIN Separator), sonst (Default
|
||||
;; "1") Endpunkt waehlen (Zweig A, heutiges Verhalten + Separator).
|
||||
(setq gf-laenge-modus "1")
|
||||
(if (vfl-wizard-aktiv) (vl-catch-all-apply 'vflw-gruppe-gf-laenge-modus-impl nil))
|
||||
(princ (ssg-text "vfl-gf-laenge-modus-header"))
|
||||
(princ (ssg-text "vfl-gf-laenge-modus-opt-endpunkt"))
|
||||
@@ -5132,6 +5242,7 @@
|
||||
(princ (ssg-text "vfl-gf-laenge-modus-header"))
|
||||
(princ (ssg-text "vfl-gf-laenge-modus-opt-endpunkt"))
|
||||
(princ (ssg-text "vfl-gf-laenge-modus-opt-hoehe"))
|
||||
(if (vfl-wizard-aktiv) (vl-catch-all-apply 'vflw-gruppe-gf-steigend-untermodus-impl nil))
|
||||
(setq gf-steigend-modus (vfl-menu (ssg-text "prompt-wahl-1-2")
|
||||
(list (ssg-text "vfl-gf-laenge-modus-opt-endpunkt")
|
||||
(ssg-text "vfl-gf-laenge-modus-opt-hoehe")) 1
|
||||
@@ -5265,6 +5376,10 @@
|
||||
(progn
|
||||
(if (> sep-anzahl 0)
|
||||
(setq deltaH (max 0.0 (- deltaH (* sep-anzahl *vfk-separator-laenge* (sin rad3))))))
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-gefaelle-impl
|
||||
(list (vfl-gf-hoehe-vorschlag (caddr p-aktuell)) t nil)))
|
||||
(princ (ssg-text "vfl-gefaelle-festlegen-header"))
|
||||
(setq winkel
|
||||
(vfl-in-real (ssg-textf "vfl-prompt-neigungswinkel-laenge-berechnet" (list (rtos gf-max-winkel 2 1)))))
|
||||
(if (null winkel) (setq winkel gf-max-winkel))
|
||||
@@ -5346,13 +5461,13 @@
|
||||
(progn
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-gefaelle-impl
|
||||
(list (vfl-gf-hoehe-vorschlag (caddr p-aktuell)) nil)))
|
||||
(list (vfl-gf-hoehe-vorschlag (caddr p-aktuell)) nil t)))
|
||||
(princ (ssg-text "vfl-gefaelle-festlegen-header"))
|
||||
(princ (ssg-text "vfl-gefaelle-opt-hoehe"))
|
||||
(princ (ssg-text "vfl-gefaelle-opt-winkel"))
|
||||
(setq antwort (vfl-menu (ssg-text "prompt-wahl-1-2")
|
||||
(list (ssg-text "vfl-gefaelle-opt-hoehe")
|
||||
(ssg-text "vfl-gefaelle-opt-winkel")) 1
|
||||
(ssg-text "vfl-gefaelle-opt-winkel")) 2
|
||||
"vfl-gefaelle-festlegen-header"))
|
||||
(if (= antwort "2")
|
||||
(progn
|
||||
@@ -5477,7 +5592,21 @@
|
||||
(setq antwort (vfl-frage-ist-kettenende))
|
||||
(cond
|
||||
((= antwort "1")
|
||||
(setq es-seite (vfl-frage-es-seite))
|
||||
;; ES-Element-Hardware gibt es nur fuer die Anfahrt auf der
|
||||
;; STANDARD Fallend-Basis (+gefaelle-winkel) - kommt die
|
||||
;; Kette hier steigend an (Zweig C, winkel < 0), fehlt sonst
|
||||
;; der Rueckweg-Bogen und das ES-Element wuerde in einer
|
||||
;; physisch nicht existierenden "steigend"-Orientierung
|
||||
;; angehaengt. vfl-bogen-uebergang ist bei einer bereits
|
||||
;; fallenden Ankunft ein No-Op.
|
||||
(if (< winkel 0.0)
|
||||
(progn
|
||||
(setq erg-bogen (vfl-bogen-uebergang frame *vfk-gefaelle-winkel*))
|
||||
(setq frame (car erg-bogen))
|
||||
(setq winkel *vfk-gefaelle-winkel*)
|
||||
)
|
||||
)
|
||||
(setq es-seite (vfl-frage-es-seite nil))
|
||||
(setq frame (vfl-insert-es-element "GF" frame hz-neu winkel
|
||||
(caddr (car frame)) es-seite))
|
||||
(setq fertig t))
|
||||
@@ -5780,7 +5909,7 @@
|
||||
)
|
||||
(cond
|
||||
((= antwort "1")
|
||||
(setq es-seite (vfl-frage-es-seite))
|
||||
(setq es-seite (vfl-frage-es-seite nil))
|
||||
(setq frame (vfl-insert-es-element "GF" frame hz-neu winkel
|
||||
(caddr (car frame)) es-seite))
|
||||
(setq fertig t))
|
||||
@@ -6990,7 +7119,7 @@
|
||||
(if (null frame) (progn (princ (ssg-text "vfl-m3-nichts-gebaut")) (exit)))
|
||||
;; vfl-frage-es-seite nutzt intern bereits vfl-in-value/vfl-menu - wird also
|
||||
;; automatisch mitgeloggt, kein manueller dbgmsg noetig.
|
||||
(setq es-seite (vfl-frage-es-seite))
|
||||
(setq es-seite (vfl-frage-es-seite nil))
|
||||
(if (= run-typ "VF")
|
||||
(progn
|
||||
(setq frame (vfl2-vf-close frame (car (frame->hz-winkel frame))))
|
||||
@@ -7606,7 +7735,7 @@
|
||||
(princ (ssg-text "vfl-m3-lauf-abschluss-offen-hinweis")))
|
||||
((= m2-lauf-antwort "3")
|
||||
(setq es-vorhanden t)
|
||||
(if (null es-seite) (setq es-seite (vfl-frage-es-seite))))
|
||||
(if (null es-seite) (setq es-seite (vfl-frage-es-seite nil))))
|
||||
(t (setq es-vorhanden nil)))))
|
||||
|
||||
;; ================= PHASE B: BAUEN (messen statt schaetzen) =================
|
||||
|
||||
@@ -343,6 +343,38 @@ vflw_gf_laenge_modus : dialog {
|
||||
}
|
||||
}
|
||||
|
||||
// Zweig C ("Steigende GF") Unterfrage: dieselben 2 Optionen wie oben
|
||||
// (Endpunkt/Zielhoehe), aber OHNE die 3. Kachel "Steigend" - die existiert in
|
||||
// diesem Kontext nicht mehr (wir sind ja schon im Steigend-Zweig). Bisher lief
|
||||
// diese Frage mangels eigenem Dialog auf den generischen Dropdown-Fallback
|
||||
// (vflw_wahl) hinaus - siehe vflw-gruppe-gf-steigend-untermodus-impl.
|
||||
vflw_gf_steigend_untermodus : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
: column {
|
||||
: text {
|
||||
key = "kopf";
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: boxed_radio_column {
|
||||
key = "modus";
|
||||
label = "";
|
||||
: radio_button { key = "modus_endpunkt"; label = "Endpunkt waehlen (Laenge ergibt sich)"; value = "1"; }
|
||||
: radio_button { key = "modus_hoehe"; label = "Zielhoehe festlegen (Laenge wird berechnet)"; }
|
||||
}
|
||||
}
|
||||
|
||||
: row {
|
||||
alignment = centered;
|
||||
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
|
||||
spacer;
|
||||
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
|
||||
spacer;
|
||||
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
|
||||
}
|
||||
}
|
||||
|
||||
// Separator VOR/NACH bei "Neue Linie: GF": beide Ja/Nein-Fragen in einem
|
||||
// Bildschirm (Toggles, da echte Ja/Nein-Fragen - kein Radio-Cluster noetig).
|
||||
// Siehe vflw-gruppe-sep-gf-impl in vf_linienzug.lsp.
|
||||
|
||||
+4
-4
@@ -355,10 +355,10 @@
|
||||
"vfl-stufe2-diagnose-details": "\n [Details] schon-flach=%1 | aus-dx=%2 mm (Einlauf, sollte 0 sein) | ein-dx=%3 mm ein-dz=%4 mm (ES-Element) | bogen-x1=%5 mm bogen-z1=%6 mm (Eintrittsbogen 3->0 Grad, nur falls nicht schon-flach) | bogen-x2=%7 mm bogen-z2=%8 mm (Austrittsbogen 0->3 Grad, immer) | FESTE_HORIZONTAL=%9 mm (Separator+Motorstation)",
|
||||
"vfl-stufe2-fest-kettenende": "\n Motorstation+Separator+ES benoetigen: Laenge=%1 mm, Hoehenabsenkung=%2 mm (fest, unabhaengig vom Winkel)",
|
||||
"vfl-stufe2-fest-eingang": "\n Umlenkstation+Separator+Motorstation+ES benoetigen: Laenge=%1 mm, Hoehenabsenkung=%2 mm (fest, unabhaengig vom Winkel)",
|
||||
"vfl-stufe2-minl": "\n [Mindestwert 1] Ohne geraden VF-Anteil (GF nach Zielhoehe dimensioniert): mindestens %1 mm Streckenlaenge noetig (vorhanden: %2 mm)",
|
||||
"vfl-stufe2-minl-unmoeglich": "\n [Mindestwert 1] Nicht per Streckenlaenge loesbar: schon ohne GF-Bogen aendert sich die Hoehe um %1 mm - die Zielhoehe verlangt aber nur %2 mm (zu wenig Hoehenunterschied fuer die feste Neigung)",
|
||||
"vfl-stufe2-minh": "\n [Mindestwert 2] Ohne GF-Bogen (Rest als gerader VF-Anteil, der die Hoehe nicht aendert): mindestens %1 mm Hoehenaenderung noetig (vorhanden: %2 mm)",
|
||||
"vfl-stufe2-minh-unmoeglich": "\n [Mindestwert 2] Nicht per Zielhoehe loesbar: schon ohne geraden VF-Anteil und ohne GF-Bogen betraegt der feste Fussabdruck %1 mm - die Strecke bietet aber nur %2 mm",
|
||||
"vfl-stufe2-minl": "\n [Mindestlaenge] Ohne geraden VF-Anteil (GF nach Zielhoehe dimensioniert): mindestens %1 mm Streckenlaenge noetig (vorhanden: %2 mm)",
|
||||
"vfl-stufe2-minl-unmoeglich": "\n [Mindestlaenge] Nicht per Streckenlaenge loesbar: schon ohne GF-Bogen aendert sich die Hoehe um %1 mm - die Zielhoehe verlangt aber nur %2 mm (zu wenig Hoehenunterschied fuer die feste Neigung)",
|
||||
"vfl-stufe2-minh": "\n [Fixwert ohne GF-Bogen] Rest als gerader VF-Anteil (hoehenneutral): diese Aufteilung ergibt IMMER genau %1 mm Hoehenaenderung, unabhaengig von der Laenge - Zielhoehe verlangt aber %2 mm, passt also nur bei exakter Uebereinstimmung",
|
||||
"vfl-stufe2-minh-unmoeglich": "\n [Fixwert ohne GF-Bogen] Nicht per Zielhoehe loesbar: schon ohne geraden VF-Anteil und ohne GF-Bogen betraegt der feste Fussabdruck %1 mm - die Strecke bietet aber nur %2 mm",
|
||||
"vfl-stufe2-ungueltig": "\n Stufe 2 (horizontal+GF) war ungueltig - es wurde stattdessen Stufe 1 (VF-Winkel-Suche) versucht (siehe Tabelle oben).",
|
||||
"vfl-frage-gf2-minimum": "\n Berechnetes GF2=%1 mm liegt unter der ueblichen Mindestlaenge (%2 mm).\n Ja = mit den exakt berechneten %1 mm bauen (Zielpunkt wird exakt getroffen).\n Nein = auf %2 mm auffuellen (Zielpunkt verschiebt sich entsprechend weiter).",
|
||||
"vfl-fehler-rest-nicht-baubar": "\n FEHLER: Rest nicht baubar (zu steil/zu kurz fuer Schwanz Motor+GF2+Separator+ES). Bitte weiter zeichnen oder flacher planen.",
|
||||
|
||||
+4
-4
@@ -356,10 +356,10 @@
|
||||
"vfl-stufe2-diagnose-details": "\n [Details] already-flat=%1 | aus-dx=%2 mm (entry, should be 0) | ein-dx=%3 mm ein-dz=%4 mm (ES element) | bogen-x1=%5 mm bogen-z1=%6 mm (entry bend 3->0 deg, only if not already-flat) | bogen-x2=%7 mm bogen-z2=%8 mm (exit bend 0->3 deg, always) | FESTE_HORIZONTAL=%9 mm (separator+motor station)",
|
||||
"vfl-stufe2-fest-kettenende": "\n Motor station+separator+ES require: length=%1 mm, height drop=%2 mm (fixed, independent of angle)",
|
||||
"vfl-stufe2-fest-eingang": "\n Reversing station+separator+motor station+ES require: length=%1 mm, height drop=%2 mm (fixed, independent of angle)",
|
||||
"vfl-stufe2-minl": "\n [Minimum 1] Without a straight VF section (GF sized to the target height): at least %1 mm of distance needed (available: %2 mm)",
|
||||
"vfl-stufe2-minl-unmoeglich": "\n [Minimum 1] Not solvable via distance: even without a GF bend the height already changes by %1 mm - the target only calls for %2 mm (not enough height difference for the fixed incline)",
|
||||
"vfl-stufe2-minh": "\n [Minimum 2] Without a GF bend (remainder as a straight VF section, which does not change height): at least %1 mm of height change needed (available: %2 mm)",
|
||||
"vfl-stufe2-minh-unmoeglich": "\n [Minimum 2] Not solvable via target height: even without a straight VF section and without a GF bend, the fixed footprint is already %1 mm - the distance only offers %2 mm",
|
||||
"vfl-stufe2-minl": "\n [Minimum distance] Without a straight VF section (GF sized to the target height): at least %1 mm of distance needed (available: %2 mm)",
|
||||
"vfl-stufe2-minl-unmoeglich": "\n [Minimum distance] Not solvable via distance: even without a GF bend the height already changes by %1 mm - the target only calls for %2 mm (not enough height difference for the fixed incline)",
|
||||
"vfl-stufe2-minh": "\n [Fixed value without GF bend] Remainder as a straight VF section (height-neutral): this split ALWAYS results in exactly %1 mm of height change, regardless of length - but the target height calls for %2 mm, so this only fits on an exact match",
|
||||
"vfl-stufe2-minh-unmoeglich": "\n [Fixed value without GF bend] Not solvable via target height: even without a straight VF section and without a GF bend, the fixed footprint is already %1 mm - the distance only offers %2 mm",
|
||||
"vfl-stufe2-ungueltig": "\n Stage 2 (horizontal+GF) was invalid - stage 1 (VF angle search) was tried instead (see table above).",
|
||||
"vfl-frage-gf2-minimum": "\n Calculated GF2=%1 mm is below the usual minimum length (%2 mm).\n Yes = build with the exact calculated %1 mm (hits the target point exactly).\n No = pad up to %2 mm (target point shifts further accordingly).",
|
||||
"vfl-fuege-block-ein": "\n Inserting %1 ...",
|
||||
|
||||
Reference in New Issue
Block a user