feat: VF-Linienzug Linie-GF - Separator VOR/NACH, Endpunkt/Zielhoehe-Vorwahl, steigende GF (Sonderfall bis 3 Grad)

Auf der neuen Kollegen-Architektur (Stufe 0-2: Spec/Journal/Replay-System
in vf_spec.lsp, Frage-Schale/Bauteil-Trennung) neu aufgebaut, nachdem der
urspruengliche Stand (Commit e76e24e) auf einer aelteren Basis beruhte und
per Rebase-Analyse als eigenstaendige, unabhaengige Erweiterung erkannt
wurde (der Kollege hat nichts entfernt - diese Features existierten vorher
nur lokal uncommitted).

Drei Erweiterungen fuer "Neue Linie: GF" in vf-linienzug-modus:
- Separator VOR/NACH direkt vor bzw. nach der Gefaellestrecke einfuegbar.
- Aeussere Vorwahl "Wie soll die Laenge bestimmt werden?": Endpunkt waehlen
  (bisheriges Verhalten) oder Zielhoehe zuerst festlegen (Winkel wird
  daraus berechnet).
- Dritte Option "Steigende GF" (Sonderfall, 0 bis 3 Grad): erlaubt eine GF,
  die statt zu fallen steigt. Neuer Helfer vfl-bogen-uebergang erkennt
  anhand der tatsaechlichen Frame-Neigung, ob 0/1/2 Uebergangsboegen
  (Vario_Bogen_auf_3/ab_3) noetig sind, und baut sie automatisch - im
  Normalfall (fallend->fallend) ein No-Op.

Lisp/vf_spec.lsp (Kollegen-Spec/Headless-Bau-System) um die drei neuen
Felder (laenge_modus/sep_vor/sep_nach/steigend_modus) erweitert, mit
Defaults, die alte Specs unveraendert lassen - haelt die "Spec-Pfad ==
interaktiver Pfad"-Invariante seines Systems (TEST_HUNDM05/VF_SPEC_BAU)
intakt. tests/test_vf_spec.lsp entsprechend mit neuen Testfaellen ergaenzt.

Neuer Regressionstest TEST_LINIENZUG_STUFE2 (linienzug_tests_stufe2.json)
sowie Anleitung doc/vf_linienzug_modus1_anleitung.md aus dem urspruenglichen
Commit uebernommen; die Gefaelle-Hoehe/Winkel-Optionsreihenfolge im
Testdatensatz an die jetzt geltende (Kollegen-)Konvention angepasst.

Offen (bewusst zurueckgestellt): lib/vf_spec_export.py (Python-Vorwaerts-
Emitter, Pendant zu vf_spec.lsp) noch nicht nachgezogen - siehe Folge-Commit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Yuelin Wang
2026-09-11 14:18:31 +02:00
co-authored by Claude Sonnet 5
parent f4edb7339d
commit 23d653c4b3
8 changed files with 1092 additions and 148 deletions
+50 -4
View File
@@ -125,20 +125,63 @@
(defun tsp-tests-glieder ( / spec)
;; --- Linie-GF, Kettenende mit ES ---
;; Erste Sektion: Menue-Code "1" (4 Optionen, ohne Frame).
;; Erste Sektion: Menue-Code "1" (4 Optionen, ohne Frame). laenge_modus
;; "endpunkt" (Default, Zweig A): DL(+hz), dann Separator vor/nach, dann
;; die Gefaelle-Wahl (Hoehe/Winkel) wie bisher.
(setq spec (tsp-spec T (list
(tsp-sek (list (cons "glied" "Linie-GF") (cons "dl" 5500.0)
(cons "hz" 0.0) (cons "gefaelle" "winkel")
(tsp-sek (list (cons "glied" "Linie-GF") (cons "laenge_modus" "endpunkt")
(cons "dl" 5500.0) (cons "hz" 0.0)
(cons "sep_vor" 0) (cons "sep_nach" 0)
(cons "gefaelle" "winkel")
(cons "winkel" 3.0) (cons "ende" "ja-mit-es")) nil)
(tsp-es "90" "rechts"))))
(tsp-journal-eq "Linie-GF + ES"
(append (tsp-pre-mit-as)
(list (cons "STEP" "Linie-GF") (cons "STR" "1")
(cons "STR" "1") ; laenge_modus: endpunkt
(cons "DL" 5500.0) (cons "REAL" 0.0)
(cons "STR" "2") (cons "STR" "2") ; Separator vor / nach
(cons "STR" "2") (cons "REAL" 3.0) (cons "STR" "1")
(cons "STEP" "ES") (cons "STR" "90") (cons "STR" "2")))
(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).
(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 "sep_vor" 1) (cons "sep_nach" 0)
(cons "hoehe" 1800.0) (cons "winkel" 3.0)
(cons "ende" "nein")) nil))))
(tsp-journal-eq "Linie-GF, Zielhoehe zuerst"
(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 "STR" "1") (cons "STR" "2") ; Separator vor(ja)/nach(nein)
(cons "REAL" 1800.0) (cons "REAL" 3.0)
(cons "STR" "3")))
(vsp-journal spec))
;; --- Linie-GF, Sonderfall Steigend, Endpunkt-Unterwahl ---
;; KEIN Separator-Feld (die steigende GF kennt keine Separator-Frage).
(setq spec (tsp-spec T (list
(tsp-sek (list (cons "glied" "Linie-GF") (cons "laenge_modus" "steigend")
(cons "steigend_modus" "endpunkt")
(cons "dl" 800.0) (cons "hz" 0.0)
(cons "winkel" 2.0) (cons "ende" "nein")) nil))))
(tsp-journal-eq "Linie-GF, Steigend + Endpunkt"
(append (tsp-pre-mit-as)
(list (cons "STEP" "Linie-GF") (cons "STR" "1")
(cons "STR" "3") ; laenge_modus: steigend
(cons "STR" "1") ; steigend_modus: endpunkt
(cons "DL" 800.0) (cons "REAL" 0.0)
(cons "REAL" 2.0)
(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).
@@ -187,7 +230,8 @@
;; --- GF-Bogen als ZWEITE Sektion ---
;; Ab der zweiten Sektion gilt die 5-Optionen-Tabelle: Linie-GF ist dort
;; "2" (nicht mehr "1"), GF-Bogen ist "1".
;; "2" (nicht mehr "1"), GF-Bogen ist "1". laenge_modus/sep_vor/sep_nach
;; fehlen absichtlich (Default "endpunkt"/nein/nein, deckt alte Specs ab).
(setq spec (tsp-spec T (list
(tsp-sek (list (cons "glied" "Linie-GF") (cons "dl" 3000.0)
(cons "hz" 180.0) (cons "gefaelle" "hoehe")
@@ -197,7 +241,9 @@
(tsp-journal-eq "GF-Bogen als zweite Sektion (Menue-Codes am Frame)"
(append (tsp-pre-mit-as)
(list (cons "STEP" "Linie-GF") (cons "STR" "1")
(cons "STR" "1") ; laenge_modus: endpunkt (Default)
(cons "DL" 3000.0) (cons "REAL" 180.0)
(cons "STR" "2") (cons "STR" "2") ; Separator vor/nach (Default: nein)
(cons "STR" "1") (cons "REAL" 2500.0) (cons "STR" "3")
(cons "STEP" "GF-Bogen") (cons "STR" "1")
(cons "INT" 60) (cons "STR" "2")))