fix: Lauf-Anfang als selbstbeschreibender Wert, Dialog-Hinweise lesbar

Die Frage "Lauf beginnen mit" (Modus 2) journalisiert jetzt den WERT
("mit-gf1"/"direkt"/"ohne") statt der Auswahl-Ziffer. Anlass war die
Umstellung der Optionsreihenfolge auf Regelfall zuerst: mit einer Ziffer
haette dieselbe "3" vor und nach der Umstellung Verschiedenes bedeutet,
eine bestehende Kette waere beim Doppelklick still mit einer ANDEREN
Anfangsvariante neu gebaut worden. Alte Ketten laufen ueber die Tabelle
*vfl-m2-anfang-alt* weiter; ein Wert, der weder Alt-Ziffer noch gueltiger
Wert ist, bricht den Aufbau ab und nennt Kette und Wert, statt eine
Variante zu raten.

Weiter aus der Modus-2-Arbeit:
- Laengenbudget je VF-Einheit (max. 25 m, max. 2 Vario-Kurven,
  *vfk-vf-kurven-max*), bei Ueberschreitung automatischer Schnitt
- nach einer VF-Geraden ist der Bogentyp waehlbar (GF-Bogen/Vario-Kurve)
- Segmentnummer steht im Kopf jedes Dialogs
- "Separator NACH" ist am letzten GF-Stueck vor einem ES gesperrt, der
  automatische Separator wird dort erklaert
- "Ohne Umlenkstation" ist mit AS-Element gesperrt
- Fuellerlaenge nur noch dann aus dem Rueckanker, wenn der VF-Lauf das
  Pfadende ist

Dialoge: Hinweis steht in Klammern hinter dem Ankreuzfeld statt darunter,
Lauf-Anfang-Optionen tragen die Nummern der Konsolenliste, die
Begruendungszeile ist breit genug und wird nicht mehr abgeschnitten.

14 neue Unit-Tests zur Wert-Normierung (durchlaufen die Alt-Tabelle).
Sprachdateien 1205/1205 synchron.

Offen: der Fuellerlaengen-Fix ist in BricsCAD noch nicht nachgemessen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-23 15:39:57 +02:00
parent 45cb98c5b4
commit 833a4b60a6
6 changed files with 532 additions and 91 deletions
+82 -36
View File
@@ -409,7 +409,7 @@
;; vfl-par-gf-laenge - wie lang wird das GF-Stueck dazwischen?
;; Die Plan-Turn-Werte unten sind die Vorzeichen-Konvention aus
;; vf-element-plan-turn (KS_EIN -> KS_AUS in der XY-Ebene, links positiv).
(defun tu-tests-vfl-parallel ( / _b30 _b60 _b90 _kand _l)
(defun tu-tests-vfl-parallel ( / _b30 _b60 _b90 _kand _l _plan _plan3 _g _p _w)
(princ "\n[vf_linienzug Parallel zum Kreisel]")
;; --- Bogenwahl: der Bogen muss den AS-Schwenk GENAU aufheben ---
@@ -450,6 +450,28 @@
;; AS schwenkt gar nicht aus der Achse -> keine Loesung
(tu-nil "vfl-par-laenge/kein-versatz" (vfl-par-gf-laenge 2000.0 0.0 0.0 0.0))
;; --- Grenzen einer VF-Einheit (Modus 2) ---
;; Zwischen Umlenk- und Motorstation: hoechstens 2 Vario-Kurven und 25 m.
;; Plan-Eintraege: ("Linie" hz laenge ...) / ("Bogen" hz chord ...) - nur
;; Typ und Laenge (3. Feld) zaehlen hier.
(setq _plan (list '("Linie" 0.0 9000.0 "VF") '("Bogen" 0.0 500.0)
'("Linie" 0.0 8000.0 "VF") '("Bogen" 0.0 500.0)
'("Linie" 0.0 6000.0 "VF")))
;; 24000 mm, 2 Kurven -> alles im Rahmen
(setq _g (vfl-m2-lauf-grenzen _plan 0 4 25000.0 2))
(tu-eqf "vfl-m2-grenzen/laenge" 24000.0 (nth 0 _g))
(tu-eq "vfl-m2-grenzen/kurven" 2 (nth 1 _g))
(tu-nil "vfl-m2-grenzen/ok" (nth 2 _g))
;; Dritte Kurve -> an ihr (Index 5) teilen, obwohl die Laenge noch passt
(setq _plan3 (append _plan (list '("Bogen" 0.0 400.0) '("Linie" 0.0 300.0 "VF"))))
(tu-eq "vfl-m2-grenzen/dritte-kurve" 5 (nth 2 (vfl-m2-lauf-grenzen _plan3 0 6 25000.0 2)))
;; Zu lang -> am ersten Bogen teilen, nach dem die Grenze reisst (Index 3:
;; bis dahin sind 9000+500+8000 = 17500 drin, die Grenze liegt bei 15000).
(tu-eq "vfl-m2-grenzen/zu-lang" 3 (nth 2 (vfl-m2-lauf-grenzen _plan 0 4 15000.0 2)))
;; Eine einzige lange Gerade: zu lang, aber kein Bogen zum Teilen -> -1
(tu-eq "vfl-m2-grenzen/unteilbar" -1
(nth 2 (vfl-m2-lauf-grenzen (list '("Linie" 0.0 30000.0 "VF")) 0 0 25000.0 2)))
;; --- Vorgabewert aus einem Prompt ziehen (Dialog-Feld vorbelegen) ---
;; Die Konsolen-Prompts tragen ihre Vorgabe in Klammern; der Zahlen-Dialog
;; liest sie daraus. Gesucht ist die LETZTE Klammergruppe MIT Zahl - die
@@ -470,6 +492,30 @@
(tu-nil "vflw-vorgabe/keine-zahl"
(vflw-vorgabe-aus-prompt "Bitte Namen eingeben [frei]: "))
;; --- Modus-2-Lauf-Anfang: Journal-Wert normieren ---
;; Die Antwort wird als selbstbeschreibender Wert gefuehrt, damit ein
;; Umsortieren/Umnummerieren der Optionen bestehende Ketten nicht
;; umdeutet. Alte Ketten tragen dort noch die Ziffern der ALTEN Folge -
;; die Zuordnung dafuer steht als Tabelle in *vfl-m2-anfang-alt* und wird
;; hier komplett durchlaufen, statt einzelne Faelle abzuschreiben.
(foreach _p *vfl-m2-anfang-alt*
(tu-eq (strcat "vfl-m2-anfang/alt-" (car _p))
(cdr _p) (vfl-m2-anfang-norm (car _p))))
;; Jeder Tabellenwert muss auch ein gueltiger heutiger Wert sein - sonst
;; laeuft eine Alt-Kette in den Unbekannt-Abbruch.
(foreach _p *vfl-m2-anfang-alt*
(tu-true (strcat "vfl-m2-anfang/alt-ziel-gueltig-" (car _p))
(and (member (cdr _p) *vfl-m2-anfang-werte*) t)))
;; Neue Werte gehen unveraendert durch.
(foreach _w *vfl-m2-anfang-werte*
(tu-eq (strcat "vfl-m2-anfang/neu-" _w) _w (vfl-m2-anfang-norm _w)))
;; Unbekanntes wird NICHT geraten - nil heisst fuer den Aufrufer Abbruch.
(tu-nil "vfl-m2-anfang/unbekannte-ziffer" (vfl-m2-anfang-norm "4"))
(tu-nil "vfl-m2-anfang/leer" (vfl-m2-anfang-norm ""))
(tu-nil "vfl-m2-anfang/tippfehler" (vfl-m2-anfang-norm "mit_gf1"))
(tu-nil "vfl-m2-anfang/kein-string" (vfl-m2-anfang-norm 3))
(tu-nil "vfl-m2-anfang/nil" (vfl-m2-anfang-norm nil))
;; --- Rueckwaerts bauen: Punkt entgegen der Fahrtrichtung zuruecksetzen ---
;; vfl-rueck-punkt ist der Rechenkern des Rueckwaerts-Baus: zu einem
;; BEKANNTEN Endpunkt den Startpunkt eines Bausteins finden. Vorwaerts gilt
@@ -2452,41 +2498,6 @@
)
)
(defun c:TEST_UNIT ( / out-dir report)
(tu-reset)
(princ "\n================================================================")
(princ "\n TEST_UNIT - LISP-Standardfunktionen")
(princ "\n================================================================")
(foreach fn '("tu-tests-core" "tu-tests-lang" "tu-tests-id" "tu-tests-vfcore"
"tu-tests-etage" "tu-tests-vfl-es" "tu-tests-vfl-parallel"
"tu-tests-vfl-ziellinie"
"tu-tests-export" "tu-tests-hoehen" "tu-tests-gf" "tu-tests-omni" "tu-tests-kreisel" "tu-tests-kreisel-bp"
"tu-tests-sepliste" "tu-tests-json" "tu-tests-geruest"
"tu-tests-sepscan" "tu-tests-vfl-segs" "tu-tests-vfl-abbruch"
"tu-tests-werkzeuge" "tu-tests-kf")
(tu-run-block fn))
(princ "\n\n----------------------------------------------------------------")
(princ (strcat "\n Gesamt: " (itoa (+ *tu-pass* *tu-fail*))
" | PASS: " (itoa *tu-pass*)
" | FAIL: " (itoa *tu-fail*)))
(princ (if (= *tu-fail* 0) "\n ERGEBNIS: ALLE TESTS BESTANDEN" "\n ERGEBNIS: TESTS FEHLGESCHLAGEN"))
(princ "\n----------------------------------------------------------------")
;; Report-Datei schreiben (fuer run_tests.bat --lisp)
(setq out-dir (strcat (getenv "DXFMAKRO") "/tests/output"))
(vl-mkdir out-dir)
(setq report (strcat out-dir "/unit_results.txt"))
(if (tu-write-report report)
(princ (strcat "\n Report: " report))
(princ "\n WARNUNG: Report konnte nicht geschrieben werden.")
)
(princ)
)
(princ "\ntest_unit.lsp geladen. Befehl: TEST_UNIT")
(princ)
;; ------------------------------------------------------------
;; TESTS: KettenFoerderer.lsp + ssg_ks_insert.lsp (KS-Orientierung)
;; ------------------------------------------------------------
@@ -2739,3 +2750,38 @@
)
(defun c:TEST_UNIT ( / out-dir report)
(tu-reset)
(princ "\n================================================================")
(princ "\n TEST_UNIT - LISP-Standardfunktionen")
(princ "\n================================================================")
(foreach fn '("tu-tests-core" "tu-tests-lang" "tu-tests-id" "tu-tests-vfcore"
"tu-tests-etage" "tu-tests-vfl-es" "tu-tests-vfl-parallel"
"tu-tests-vfl-ziellinie"
"tu-tests-export" "tu-tests-hoehen" "tu-tests-gf" "tu-tests-omni" "tu-tests-kreisel" "tu-tests-kreisel-bp"
"tu-tests-sepliste" "tu-tests-json" "tu-tests-geruest"
"tu-tests-sepscan" "tu-tests-vfl-segs" "tu-tests-vfl-abbruch"
"tu-tests-werkzeuge" "tu-tests-kf")
(tu-run-block fn))
(princ "\n\n----------------------------------------------------------------")
(princ (strcat "\n Gesamt: " (itoa (+ *tu-pass* *tu-fail*))
" | PASS: " (itoa *tu-pass*)
" | FAIL: " (itoa *tu-fail*)))
(princ (if (= *tu-fail* 0) "\n ERGEBNIS: ALLE TESTS BESTANDEN" "\n ERGEBNIS: TESTS FEHLGESCHLAGEN"))
(princ "\n----------------------------------------------------------------")
;; Report-Datei schreiben (fuer run_tests.bat --lisp)
(setq out-dir (strcat (getenv "DXFMAKRO") "/tests/output"))
(vl-mkdir out-dir)
(setq report (strcat out-dir "/unit_results.txt"))
(if (tu-write-report report)
(princ (strcat "\n Report: " report))
(princ "\n WARNUNG: Report konnte nicht geschrieben werden.")
)
(princ)
)
(princ "\ntest_unit.lsp geladen. Befehl: TEST_UNIT")
(princ)