refactor: Segment-Antworten als Werte, Modus-Dispatch im Spec-Pfad, Python liest Modus 2/3
Drei herausgeloeste Teile aus doc/todo/spec-modus2-3.md. Der Rest (volle
Spec-Grammatik fuer Modus 2/3, Schritte 3-5 und 7) bleibt bewusst liegen:
Modus-2/3-Journale sind durch ihren SEGS-Eintrag bereits selbst-enthalten
und ohne Zeichnung abspielbar, der Mehrwert einer Spec ist dort also klein.
1. lib/vf_journal_export.py trennt nach Marker. Modus 1 laeuft wie bisher
durch die Grammatik; "linienzug2"/"linienzug3" werden als Rohtokens
ausgegeben, im Format, das tests/test_linienzug.lsp einliest. Vorher lief
die Modus-1-Grammatik auch ueber sie (der startswith-Filter laesst sie
durch) und brach mit "Token 6: STEP erwartet" ab. Gegen die echte
Zeichnung geprueft: die Ausgabe ist identisch mit der bisher von Hand
erzeugten Testdatei.
2. vsp-bau-journal waehlt die Bau-Funktion jetzt anhand des Journals
(vsp-bau-fn-fuer-journal): kein SEGS = Modus 1, SEGS + Formatmarke
"m2v2" = Modus 2, SEGS ohne = Modus 3. Bewusst abgeleitet statt als
zusaetzliches Argument - die Funktion hat zwei Aufrufer, und AutoLISP
verlangt exakte Argumentzahl. Die Ableitung kann der Datenlage auch nicht
widersprechen, weil sie genau das Journal liest, das abgespielt wird.
3. Die Segment-Klassifizierung in Modus 2 journalisiert WERTE statt
Menue-Ziffern: Geradentyp "gf"/"vf", Bogentyp "gf-bogen"/"vario-kurve",
Variante "aussen"/"innen". Konsole UND Wizard-Dialoge legen dieselben
Werte ab. Damit deutet ein Umsortieren der Optionen keine gespeicherte
Kette mehr um - dasselbe Risiko, das beim Lauf-Anfang (833a4b6) real
wurde. Bestandsketten laufen ueber Alt-Tabellen weiter, ein unbekannter
Wert bricht mit Segmentnummer ab statt zu raten.
Statt dreier fast gleicher Normalisierer gibt es einen gemeinsamen
vfl-wert-norm; vfl-m2-anfang-norm delegiert jetzt dorthin.
Nebeneffekt: Bogentyp und Variante benutzten BEIDE "1"/"2" und waren im
Journal nicht zu unterscheiden - deshalb brauchte es die Formatmarke zur
Erkennung von Alt-Journalen. Mit eigenen Wertevorraeten ist das erledigt;
ein Test prueft, dass die Mengen disjunkt bleiben.
Geprueft: TEST_UNIT 883/883 (17 neue Tests). TEST_LINIENZUG_MODUS2 beide
Varianten OK - und zwar mit den AUFGEZEICHNETEN Journalen, die bei den
Segment-Fragen noch die alten Ziffern tragen. Genau darum wurden sie nicht
auf die neuen Werte umgeschrieben: sie sind der Nachweis der
Abwaertskompatibilitaet.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -552,6 +552,64 @@
|
||||
(tu-eqf "vfl-projiziere-neigung/waagerecht" 500.0
|
||||
(car (vfl-projiziere-neigung 500.0 -28.6 0.0)))
|
||||
|
||||
;; --- Bau-Funktion aus dem Journal ableiten (vf_spec.lsp) ---
|
||||
;; vsp-bau-journal waehlt die Modus-Funktion anhand des Journals, statt sie
|
||||
;; als zusaetzliches Argument zu bekommen (exakte Argumentzahl, siehe
|
||||
;; CLAUDE.md). Kein SEGS = Modus 1; SEGS mit der Formatmarke "m2v2" =
|
||||
;; Modus 2 (nur vf-linienzug-modus2 schreibt sie); SEGS ohne = Modus 3.
|
||||
(tu-true "vsp-bau-fn/ohne-segs-ist-modus1"
|
||||
(eq (vsp-bau-fn-fuer-journal
|
||||
(list (cons "PT" '(0.0 0.0 0.0)) (cons "STR" "1")))
|
||||
'vf-linienzug-modus))
|
||||
(tu-true "vsp-bau-fn/segs-mit-marke-ist-modus2"
|
||||
(eq (vsp-bau-fn-fuer-journal
|
||||
(list (cons "PT" '(0.0 0.0 0.0)) (cons "SEGS" '(("Linie")))
|
||||
(cons "STR" "m2v2") (cons "STR" "2")))
|
||||
'vf-linienzug-modus2))
|
||||
(tu-true "vsp-bau-fn/segs-ohne-marke-ist-modus3"
|
||||
(eq (vsp-bau-fn-fuer-journal
|
||||
(list (cons "PT" '(0.0 0.0 0.0)) (cons "SEGS" '(("Linie")))
|
||||
(cons "STR" "2")))
|
||||
'vf-linienzug-modus3))
|
||||
;; Die Marke zaehlt nur als STR-Eintrag - ein gleichlautender Wert in einem
|
||||
;; anderen Eintragstyp darf nicht faelschlich auf Modus 2 schliessen lassen.
|
||||
(tu-true "vsp-bau-fn/marke-nur-als-str"
|
||||
(eq (vsp-bau-fn-fuer-journal
|
||||
(list (cons "SEGS" '(("Linie"))) (cons "INT" "m2v2")))
|
||||
'vf-linienzug-modus3))
|
||||
|
||||
;; --- Segment-Klassifizierung: Wert statt Menue-Ziffer ---
|
||||
;; Gemeinsamer Normalisierer fuer alle selbstbeschreibenden Antworten.
|
||||
;; Bestandsketten tragen die Alt-Ziffer, neue Ketten den Wert; beide Mengen
|
||||
;; sind disjunkt. Unbekanntes gibt nil - der Aufrufer bricht dann ab.
|
||||
(foreach _p *vfl-m2-linie-alt*
|
||||
(tu-eq (strcat "vfl-wert-norm/linie-alt-" (car _p)) (cdr _p)
|
||||
(vfl-wert-norm (car _p) *vfl-m2-linie-werte* *vfl-m2-linie-alt*)))
|
||||
(foreach _p *vfl-m2-bogen-alt*
|
||||
(tu-eq (strcat "vfl-wert-norm/bogen-alt-" (car _p)) (cdr _p)
|
||||
(vfl-wert-norm (car _p) *vfl-m2-bogen-werte* *vfl-m2-bogen-alt*)))
|
||||
(foreach _p *vfl-m2-variante-alt*
|
||||
(tu-eq (strcat "vfl-wert-norm/variante-alt-" (car _p)) (cdr _p)
|
||||
(vfl-wert-norm (car _p) *vfl-m2-variante-werte* *vfl-m2-variante-alt*)))
|
||||
;; Neue Werte gehen unveraendert durch.
|
||||
(foreach _w *vfl-m2-bogen-werte*
|
||||
(tu-eq (strcat "vfl-wert-norm/bogen-neu-" _w) _w
|
||||
(vfl-wert-norm _w *vfl-m2-bogen-werte* *vfl-m2-bogen-alt*)))
|
||||
;; Jeder Alt-Zielwert muss ein gueltiger heutiger Wert sein, sonst laeuft
|
||||
;; eine Bestandskette in den Unbekannt-Abbruch.
|
||||
(foreach _p *vfl-m2-linie-alt*
|
||||
(tu-true (strcat "vfl-wert-norm/linie-ziel-gueltig-" (car _p))
|
||||
(and (member (cdr _p) *vfl-m2-linie-werte*) t)))
|
||||
;; Typ und Variante benutzten frueher BEIDE "1"/"2" und waren im Journal
|
||||
;; nicht zu unterscheiden - die neuen Wertevorraete muessen disjunkt sein.
|
||||
(tu-nil "vfl-wert-norm/bogen-und-variante-disjunkt"
|
||||
(vl-some (function (lambda (w) (if (member w *vfl-m2-variante-werte*) w)))
|
||||
*vfl-m2-bogen-werte*))
|
||||
(tu-nil "vfl-wert-norm/unbekannt-gibt-nil"
|
||||
(vfl-wert-norm "3" *vfl-m2-linie-werte* *vfl-m2-linie-alt*))
|
||||
(tu-nil "vfl-wert-norm/kein-string"
|
||||
(vfl-wert-norm 1 *vfl-m2-linie-werte* *vfl-m2-linie-alt*))
|
||||
|
||||
;; --- ES-Reservierung auf die KS_AUS-Achse ---
|
||||
;; Vorgabe: quer zur KS_AUS-Achse MUSS 0 sein, laengs darf abweichen.
|
||||
;; Der reine Laengsanteil reicht dafuer NICHT - er laesst den bauteileigenen
|
||||
|
||||
Reference in New Issue
Block a user