fix: VF-Linienzug 100%-Wiederherstellung aus e76e24e abgeschlossen

Restauriert alles aus e76e24e, das nach dem Reset auf master fehlte oder nur
teilweise wiederhergestellt war, und mit dem Kollegen-Umbau abgeglichen:

- vf_core.lsp: Radio-Button-Dialoge fuer Anlagen-Typ/Linienzug-Modus
  (vfc-dialog-typ-waehlen/-linienzug-modus-waehlen) + Zurueck-Schleife im
  c:VarioFoerderer-Dispatcher
- Vario-Kurve/GF-Bogen-Erkennung am Kettenanfang: vfl-eingang-modus-bestimmen
  threaded durch vfl-vf-eingang-bauen/vfl-vf-einheit/vfl-vf-einheit-abschluss,
  inkl. Punkt-7-Winkel/Hoehen-Tabelle fuer reduzierten Eingang
- Modus 2: Lauf-Anfang/Lauf-Abschluss (offener Anfang/Ende, GF-Verteilung
  "alles Auslauf", Kletter-zu-kurz-Fallback) + Separator VOR/NACH bei
  GF-Geraden
- Systemischer Bug behoben: mehrere Wizard-Dialogfunktionen nutzten noch
  start_list/add_list (Dropdown) gegen laengst auf boxed_radio_column
  umgestellte DCL-Dialoge (vflw-gruppe-as/-gefaelle/-variokurve/
  -winkel-seite-impl, vflw-seg-linie-m2/-m3/-bogen-impl,
  vfl-glied-gf-bogen/-vario/-as-es-dialog)
- Zentraler Abbruch-Trigger in vfl-in-value/-value-p wiederhergestellt (ohne
  ihn wirkte der Zurueck/Abbrechen-Button in keinem Wizard-Dialog)
- vfl-frage-ist-endpunkt/-ist-kettenende als eigene Funktionen mit
  Wizard-Dialog extrahiert (vorher Konsolen-Duplikate ohne Dialog-Hookup)
- 3 vfs-vf-entry-Aufrufe mit falscher Argumentzahl gefixt (akute
  Absturz-Bugs in Modus 2/3)
- Tote Funktion vflw-gruppe-horizontal-impl entfernt (Tiles nicht mehr im
  DCL vorhanden)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-11 18:26:48 +02:00
parent 4a444b4858
commit 0a1d21d8c5
13 changed files with 3106 additions and 654 deletions
+26 -5
View File
@@ -146,12 +146,14 @@
(vsp-journal spec))
;; --- Linie-GF, Zielhoehe zuerst (laenge_modus "hoehe") ---
;; Kein Separator-Paar VOR der Hoehen-/Winkel-Eingabe wie im Endpunkt-Zweig
;; - hier stehen sie NACH DL(+hz), aber vor Hoehe/Winkel (siehe
;; vf-linienzug-modus, Zweig B).
;; Kettenanfang braucht nur eine REINE Richtungswahl (vfl-in-richtung: nur
;; REAL, KEIN DL-Token - die Laenge ist hier ja noch unbekannt, sie ergibt
;; sich erst aus Hoehe/Winkel). Kein Separator-Paar VOR der Hoehen-/Winkel-
;; Eingabe wie im Endpunkt-Zweig - hier stehen sie NACH der Richtung, aber
;; vor Hoehe/Winkel (siehe vf-linienzug-modus, Zweig B).
(setq spec (tsp-spec T (list
(tsp-sek (list (cons "glied" "Linie-GF") (cons "laenge_modus" "hoehe")
(cons "dl" 100.0) (cons "hz" 0.0)
(cons "hz" 0.0)
(cons "sep_vor" 1) (cons "sep_nach" 0)
(cons "hoehe" 1800.0) (cons "winkel" 3.0)
(cons "ende" "nein")) nil))))
@@ -159,7 +161,7 @@
(append (tsp-pre-mit-as)
(list (cons "STEP" "Linie-GF") (cons "STR" "1")
(cons "STR" "2") ; laenge_modus: hoehe
(cons "DL" 100.0) (cons "REAL" 0.0)
(cons "REAL" 0.0) ; reine Richtungswahl, kein DL
(cons "STR" "1") (cons "STR" "2") ; Separator vor(ja)/nach(nein)
(cons "REAL" 1800.0) (cons "REAL" 3.0)
(cons "STR" "3")))
@@ -182,6 +184,25 @@
(cons "STR" "3")))
(vsp-journal spec))
;; --- Linie-GF, Sonderfall Steigend, Zielhoehe-Unterwahl ---
;; Wie "hoehe" oben: nur reine Richtungswahl (REAL, kein DL) am
;; Kettenanfang - KEIN Separator-Feld.
(setq spec (tsp-spec T (list
(tsp-sek (list (cons "glied" "Linie-GF") (cons "laenge_modus" "steigend")
(cons "steigend_modus" "hoehe")
(cons "hz" 0.0)
(cons "hoehe" 1810.0) (cons "winkel" 1.5)
(cons "ende" "nein")) nil))))
(tsp-journal-eq "Linie-GF, Steigend + Zielhoehe"
(append (tsp-pre-mit-as)
(list (cons "STEP" "Linie-GF") (cons "STR" "1")
(cons "STR" "3") ; laenge_modus: steigend
(cons "STR" "2") ; steigend_modus: hoehe
(cons "REAL" 0.0) ; reine Richtungswahl, kein DL
(cons "REAL" 1810.0) (cons "REAL" 1.5)
(cons "STR" "3")))
(vsp-journal spec))
;; --- Horizontal-VF: horizontaler Erstkoerper ---
;; Nur hier stehen Separator vor/nach VOR der Endpunkt-Antwort
;; (vfl-baue-horizontal-koerper im Ziel-Modus).
+9 -3
View File
@@ -342,7 +342,7 @@ LISP_FAELLE = {
"start": _start(),
"sektionen": [
{"glied": "Linie-GF", "laenge_modus": "hoehe",
"dl": 100.0, "hz": 0.0, "sep_vor": True, "sep_nach": False,
"hz": 0.0, "sep_vor": True, "sep_nach": False,
"hoehe": 1800.0, "winkel": 3.0, "ende": "nein"}]},
"Linie-GF, Steigend + Endpunkt": {
"start": _start(),
@@ -350,6 +350,12 @@ LISP_FAELLE = {
{"glied": "Linie-GF", "laenge_modus": "steigend",
"steigend_modus": "endpunkt",
"dl": 800.0, "hz": 0.0, "winkel": 2.0, "ende": "nein"}]},
"Linie-GF, Steigend + Zielhoehe": {
"start": _start(),
"sektionen": [
{"glied": "Linie-GF", "laenge_modus": "steigend",
"steigend_modus": "hoehe",
"hz": 0.0, "hoehe": 1810.0, "winkel": 1.5, "ende": "nein"}]},
"Horizontal-VF + Motorstation + ES": {
"start": _start(),
"sektionen": [
@@ -453,8 +459,8 @@ class TestLispErwartungen:
def test_alle_faelle_gefunden(self):
erwartungen = _lisp_erwartungen()
assert len(erwartungen) == 9, \
f"9 tsp-journal-eq-Faelle erwartet, {len(erwartungen)} gefunden: " \
assert len(erwartungen) == 10, \
f"10 tsp-journal-eq-Faelle erwartet, {len(erwartungen)} gefunden: " \
f"{sorted(erwartungen)}"
@pytest.mark.parametrize("praefix", sorted(LISP_FAELLE))