feat: VF-Linienzug Modus 1 - steigende Gefaellestrecke (Sonderfall, bis 3 Grad) mit automatischen Uebergangsboegen
Neue dritte Option "Steigend" im Dialog "Wie soll die Laenge dieser Gefaellestrecke bestimmt werden?": erlaubt eine GF, die statt zu fallen bis zu 3 Grad steigt (Neigungswinkel 0..3 statt bisher nur 0..3 fallend). 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 - fuer den Normalfall (fallend->fallend) bleibt das ein No-Op. Ausserdem in dieser Sitzung: - Modus 2: Separator VOR/NACH bei GF-Segmenten, Wahlfreiheit am Lauf-Anfang/-Ende (Umlenkstation/Motorstation optional), Stufe-1/2- Vereinheitlichung wie in Modus 1. - Stufe-1/Stufe-2-Entscheidungslogik (vfl-winkel-stufe-entscheidung): fehlenden Stufe-2-Fallback fuer "Auf" und "Ab, steiler als 3 Grad" ergaenzt; ungenauen "~3 Grad reine GF"-Kurzschluss in zwei Funktionen durch praezise Berechnung ersetzt (behebt reale Hoehenfehler). - Wizard-Dialoge: DCL-Text-Umbruch fuer lange Hinweise (vflw-umbruch-zeilen, 3 Groessenvarianten statt fester Zeilenzahl), Konsolen-Echo der Wizard-Antworten fuer Debug-Logs. - Neuer Regressionstest TEST_LINIENZUG_STUFE2 (linienzug_tests_stufe2.json) reproduziert den behobenen Stufe-2-Kettenende-Bug; bestehender LZ_Standard-Test an aktuelle Menue-Nummerierung angepasst (Kettenanfang- Menue ist inzwischen 6 statt 4 Optionen gross). - Neue Anleitung doc/vf_linienzug_modus1_anleitung.md: Modus 1 anhand des obigen Testfalls erklaert (Fragen-Bedeutung, Stufe-1/2-Logik, typische Stolperfallen: GF laengenhungrig bei 3 Grad, fester Motor+Separator+ES- Fussabdruck, 90-Grad-Element-Versatz). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+42
-10
@@ -33,7 +33,10 @@
|
||||
;;
|
||||
;; Aufruf in BricsCAD:
|
||||
;; (load (strcat (getenv "DXFMAKRO") "/tests/test_linienzug.lsp"))
|
||||
;; TEST_LINIENZUG
|
||||
;; TEST_LINIENZUG (Standard-Szenario, linienzug_tests.json, in
|
||||
;; alltests.json/SSG_RUN_ALL_TESTS registriert)
|
||||
;; TEST_LINIENZUG_STUFE2 (Stufe-2-Fallback-Regressionstest Kettenende,
|
||||
;; linienzug_tests_stufe2.json, manueller Aufruf)
|
||||
;; ============================================================
|
||||
|
||||
;; Naechste Skript-Antwort liefern (FIFO). Bei leerer Queue Warnung + "".
|
||||
@@ -126,8 +129,17 @@
|
||||
)
|
||||
)
|
||||
|
||||
(defun c:TEST_LINIENZUG ( / json-datei daten meta schritte-anz rest-anz status
|
||||
old-vgp old-gs old-gi old-gr err)
|
||||
;; --- Gemeinsamer Replay-Kern, von allen c:TEST_LINIENZUG*-Befehlen genutzt ---
|
||||
;; befehl-anzeige: nur fuer die Konsolen-Ueberschrift/ssg-start (String).
|
||||
;; test-id: Bezeichner fuer das *linienzug-test-results*-JSON (run-all-
|
||||
;; Konvention, siehe linienzug:export-results).
|
||||
;; Rueckgabe: (status schritte-anz rest-anz) - status ist "OK"/"ABWEICHUNG"/
|
||||
;; "FEHLER". Setzt zusaetzlich *linienzug-test-results* (letzter Aufruf
|
||||
;; gewinnt - identisch zum bisherigen Verhalten von c:TEST_LINIENZUG, das
|
||||
;; ebenfalls nur einen einzigen Testfall pro Lauf kennt).
|
||||
(defun tlz-run-datei (json-datei test-id befehl-anzeige /
|
||||
daten meta schritte-anz rest-anz status
|
||||
old-vgp old-gs old-gi old-gr err)
|
||||
(if (or (not *lib-initialized*) (null bogen-auf)) (init-bibliothek))
|
||||
(if (null (car (atoms-family 1 '("VF-LINIENZUG-MODUS"))))
|
||||
(progn
|
||||
@@ -138,12 +150,10 @@
|
||||
)
|
||||
|
||||
(princ "\n================================================================")
|
||||
(princ "\n TEST_LINIENZUG - VF-Linienzug Replay-Test")
|
||||
(princ (strcat "\n " befehl-anzeige " - VF-Linienzug Replay-Test"))
|
||||
(princ "\n================================================================")
|
||||
|
||||
;; --- Eingabe-Skript aus JSON laden ---
|
||||
(setq json-datei
|
||||
(strcat (getenv "DXFMAKRO") "\\tests\\testdata\\linienzug_tests.json"))
|
||||
(setq daten (ssg-load-json json-datei))
|
||||
(if (null daten)
|
||||
(progn
|
||||
@@ -158,7 +168,7 @@
|
||||
(princ (strcat "\n Eingabe-Schritte: " (itoa schritte-anz)))
|
||||
(if meta (princ (strcat "\n Szenario: " (ssg-val meta "beschreibung"))))
|
||||
|
||||
(ssg-start "TEST_LINIENZUG" '(("OSMODE") ("ATTREQ") ("ATTDIA")))
|
||||
(ssg-start befehl-anzeige '(("OSMODE") ("ATTREQ") ("ATTDIA")))
|
||||
(setvar "OSMODE" 0)
|
||||
(setvar "ATTREQ" 0)
|
||||
(setvar "ATTDIA" 0)
|
||||
@@ -192,11 +202,11 @@
|
||||
(if (vl-catch-all-error-p err)
|
||||
(progn
|
||||
(setq status "FEHLER")
|
||||
(princ (strcat "\n TEST_LINIENZUG: FEHLER -> "
|
||||
(princ (strcat "\n " befehl-anzeige ": FEHLER -> "
|
||||
(vl-catch-all-error-message err))))
|
||||
(progn
|
||||
(setq status (if (= rest-anz 0) "OK" "ABWEICHUNG"))
|
||||
(princ "\n TEST_LINIENZUG: Kette gebaut.")
|
||||
(princ (strcat "\n " befehl-anzeige ": Kette gebaut."))
|
||||
(if (> rest-anz 0)
|
||||
(princ (strcat "\n WARNUNG: " (itoa rest-anz)
|
||||
" Skript-Eintraege NICHT verbraucht (Ablauf weicht ab)."))
|
||||
@@ -214,12 +224,34 @@
|
||||
;; --- Ergebnis fuer run-all als JSON-String ablegen ---
|
||||
(setq *linienzug-test-results*
|
||||
(strcat " {\n"
|
||||
" \"test_id\": \"LZ_Standard\",\n"
|
||||
" \"test_id\": \"" test-id "\",\n"
|
||||
" \"status\": \"" status "\",\n"
|
||||
" \"schritte_gesamt\": " (itoa schritte-anz) ",\n"
|
||||
" \"schritte_offen\": " (itoa rest-anz) "\n"
|
||||
" }"))
|
||||
|
||||
(ssg-end)
|
||||
(list status schritte-anz rest-anz)
|
||||
)
|
||||
|
||||
(defun c:TEST_LINIENZUG ( / json-datei)
|
||||
(setq json-datei
|
||||
(strcat (getenv "DXFMAKRO") "\\tests\\testdata\\linienzug_tests.json"))
|
||||
(tlz-run-datei json-datei "LZ_Standard" "TEST_LINIENZUG")
|
||||
(princ)
|
||||
)
|
||||
|
||||
;; Zweiter Testfall (Regressionstest, in dieser Session neu aufgenommen):
|
||||
;; Stufe-2-Fallback beim Kettenende (typ=VF winkel=0, horizontales VF + GF-
|
||||
;; Ausgleich), siehe Beschreibung/Kommentare in linienzug_tests_stufe2.json.
|
||||
;; Eigenstaendiger Befehl statt zweitem Array-Eintrag in linienzug_tests.json,
|
||||
;; damit LZ_Standard unangetastet bleibt (jede JSON-Datei bleibt ein
|
||||
;; einzelnes Szenario, wie von tlz-daten->queue/-meta erwartet). NICHT in
|
||||
;; tests/alltests.json registriert - manueller Einzelaufruf, bei Bedarf
|
||||
;; spaeter dort ergaenzen.
|
||||
(defun c:TEST_LINIENZUG_STUFE2 ( / json-datei)
|
||||
(setq json-datei
|
||||
(strcat (getenv "DXFMAKRO") "\\tests\\testdata\\linienzug_tests_stufe2.json"))
|
||||
(tlz-run-datei json-datei "LZ_Stufe2_Kettenende" "TEST_LINIENZUG_STUFE2")
|
||||
(princ)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user