b709f89404
Drei neue Modus-2-Testfaelle aus echten Laeufen, ein Kriterium, das eine
heute eingebaute Fehlgeometrie gefunden haette, und ein aufgeraeumtes
Layout der Testketten.
1. Drei U-Form-Faelle (tests/testdata/linienzug_modus2_uform_*.json),
aufgezeichnet mit lib/vf_journal_export.py. Gefaltete Laeufe: der Pfad
wechselt ueber zwei 90-Grad-Vario-Kurven dreimal die Fahrtrichtung, die
Kletterstrecke liegt in einem ANDEREN Schenkel als der Lauf-Eingang -
genau der am 2026-10-29 korrigierte Fall. Variiert werden GF-Verteilung
(alles am Einlauf vs. 1/2+1/2) und Winkel; beides ist noetig, weil die
Verteilung entscheidet, ob ueberhaupt GF im fremden Schenkel steht, und
der Restfehler der alten Bilanz mit L_GF skalierte.
c:TEST_LINIENZUG_MODUS2 ist dafuer tabellengesteuert - ein weiterer Fall
ist jetzt eine Zeile in *tlz-m2-faelle*.
2. RUECKNAHME des Schluss-Solves (vfl-zsolve-schluss-ziel, heute frueh
eingebaut). Er loeste den letzten Fueller gegen Richtung UND Laenge und
traf den Zielpunkt dadurch in X und Y exakt - um den Preis, dass er die
letzte Gerade um 6.15 Grad verdrehte (hz-plan -90 -> -96.15), in der
Zeichnung als schiefer Schenkel sichtbar. Das widerspricht der
Entscheidung vom 2026-10-26: quer MUSS 0 sein, LAENGS DARF ABWEICHEN -
der Hauptstrang bleibt gerade, der seitliche Versatz des ES-Elements ist
dessen Bauform. Die Messwerte von heute (0.56 / 0.7 mm quer) stammen
nicht von dieser Aenderung, sondern von der Laengenbilanz des gefalteten
Laufs (35ebee1) - der Zweig blieb dort ungenutzt. Die Begruendung steht
jetzt an der Aufrufstelle, damit niemand den Solve erneut baut.
3. laengs wird geprueft - als FORM-, nicht als Genauigkeitskriterium
(erwartung_laengs_mm, Toleranz 5 mm). Der Wert ist die Ausladung des
ES-Elements und je Fall eine Konstante (104.68 bei ES_Element_30,
637.58 bei ES_Element_90). Punkt 2 war am Querwert NICHT erkennbar - die
Verdrehung macht ihn gerade null, der Test meldete OK, gefunden wurde sie
mit dem Auge. Ein verdrehter Hauptstrang zielt auf den Endpunkt und
drueckt laengs auf ~0; daran faellt er auf. Gegengeprueft: mit kuenstlich
auf 0.01 mm gesetzter Toleranz kippen alle fuenf Faelle auf ABWEICHUNG.
4. Alle sieben Ketten des Menueeintrags entstehen als Reihe auf Y=0, 20 m
Abstand, statt verstreut. Die Modus-1-Skripte brauchen dafuer nur ihren
EINEN point_abs (alles Weitere ist point_rel mit dL/hz); bei Modus 2
mussten PT-Eintraege UND die Pfadkoordinaten in SEGS (Felder 6..9)
mitwandern, sonst zeigt der Pfad woanders hin als Start und Ziel.
Reine Translation - Laengen, Winkel und die geprueften Abweichungen sind
davon unabhaengig; Z blieb stehen, weil die Starthoehe ein Eingabewert
des Solvers ist. Geprueft: erstes Segment beginnt exakt am Startpunkt,
letztes endet exakt am Zielpunkt, Messwerte unveraendert.
5. Die drei letzten Verweise auf doc/VarioFoerderer_Linienzug_Prinzipien.md
(bewusst unversioniert) tragen ihre Begruendung jetzt selbst: Entkopplung
Neigung/XY, warum es genau EINEN Kletterer je Lauf gibt, und warum ein
VF-Sub-Segment auf der 3-Grad-Basis beginnen und enden muss.
Geprueft: TEST_UNIT 897/897 (die 7 Tests der entfernten Funktion sind mit
ihr gegangen), TEST_LINIENZUG_MODUS2 5 von 5 OK, voller Menueablauf baut
sieben Ketten an den vorgesehenen Stellen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
182 lines
6.6 KiB
JSON
182 lines
6.6 KiB
JSON
[
|
|
{
|
|
"beschreibung": "VF-Linienzug Modus 1 (2026-09-12, nach ES-Nein/schon-flach-Solver-Fix + AS-Auto-Erkennung + Kettenende/ES-Vorfrage + immer-pruefen Uebergangsbogen): Start Z2154 AS 90 links -> Neue VF mit horizontalem Anfang (GF1 am Einlauf, voller Eingang) -> Horizontal-VF-Fortsetzung (Vario-Kurve 90 rechts innen, hz 90->0 -> Horizontaler Foerderer 457mm -> Vario-Kurve 90 rechts innen, hz 0->-90) -> Kettenende ueber 'Ist der Endpunkt der Foerderer?'-Option 3 mit ES 90 links. Stufe 1 (Winkeltabelle) liefert mehrere gueltige Kandidaten (12/15/18/21/27/33/39/45 Grad), Nutzer waehlt 18 Grad (Index 3 der gueltigen Liste). Ersetzt die alte, laengst nicht mehr zum aktuellen Menue passende Datei (Kettenanfang-Menuewert 'Neue Linie: Ab/Auf VF' bei einer 5-Optionen-Zuordnung, die es so nicht mehr gibt) - direkt aus einem echten, erfolgreichen BricsCAD-Lauf uebernommen (XDATA-Journal aus logs/vfl_modus1.dbg, siehe Kommentare je Schritt), keine Handrechnung.",
|
|
"erwartung_dx_mm": 638,
|
|
"erwartung_dy_mm": 0,
|
|
"erwartung_dz_mm": 0,
|
|
"erwartung_hinweis": "dX~638 = seitlicher Fussabdruck ES_Element_90 (Bauform, kein Baufehler) - Fahrtrichtung liegt hier auf der Y-Achse (hz=-90), daher zeigt sich der Versatz in X statt wie im urspruenglichen Test in Y."
|
|
},
|
|
{
|
|
"typ": "point_abs",
|
|
"wert": [0.0, 0.0, 2154],
|
|
"kommentar": "getpoint Startpunkt der Kette - fuer die Testreihe auf X=0/Y=0 versetzt, damit die Ketten aller Linienzug-Tests nebeneinander auf einer Grundlinie entstehen statt verstreut. Unkritisch, weil dies der EINZIGE absolute Punkt des Skripts ist: alle weiteren Punkte sind relativ (point_rel mit dL/hz), die Geometrie also unveraendert. Z bleibt stehen - das ist die Starthoehe und ein echter Eingabewert."
|
|
},
|
|
{
|
|
"typ": "real",
|
|
"wert": 2154.0,
|
|
"kommentar": "getreal Hoehe (Z) Startpunkt"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "1",
|
|
"kommentar": "getstring Bau-Richtung (1 = vorwaerts) - seit 2026-10-25 (Commit fb56794, Rueckwaerts-Bau). Die Frage steht VOR der AS-Praeambel. Fuer JOURNALE ist sie abwaertskompatibel (fehlt der Eintrag, gilt das Journal als Alt-Format), fuer dieses MOCK-Skript aber nicht: der Mock beantwortet jede getstring-Abfrage aus der Queue, eine fehlende Antwort verschiebt also alles Folgende um eine Position. Sichtbar wurde das als Abbruch in cdr mit dem String 5, weil die Achsen-Punktabfrage dann diesen String zog statt eines Punktes."
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "1",
|
|
"kommentar": "getstring AS-Element setzen? (Ja)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "90",
|
|
"kommentar": "getstring AS-Element Winkel (90 Grad - echter Winkelwert, kein Index)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "1",
|
|
"kommentar": "getstring AS-Seite (links)"
|
|
},
|
|
{
|
|
"typ": "point_none",
|
|
"kommentar": "getpoint AS-Zufuehrungsachse (2. Punkt, optional seit 2026-10-21) - Enter ohne Punkt, Kette laeuft wie frueher ueber den naechsten Klick"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "5",
|
|
"kommentar": "getstring Naechstes Element (Kettenanfang, 6 Optionen): 5 = Neue VF mit horizontalem Anfang"
|
|
},
|
|
{
|
|
"typ": "point_rel",
|
|
"dL": 5854.769733,
|
|
"hz": 90,
|
|
"kommentar": "getpoint Endpunkt der Linie (frei, hz=90 - Kettenanfang, keine Richtungsvorgabe)"
|
|
},
|
|
{
|
|
"typ": "real",
|
|
"wert": 1800.0,
|
|
"kommentar": "getreal Ziel-Hoehe fuer den horizontalen VF-Anfang"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "2",
|
|
"kommentar": "getstring Zusaetzlichen Separator VOR dem horizontalen Stueck? (Nein)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "2",
|
|
"kommentar": "getstring Zusaetzlichen Separator NACH dem horizontalen Stueck? (Nein)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "2",
|
|
"kommentar": "getstring Ist der Endpunkt der Foerderer? (Nein - im Ziel-Modus VOR dem Bau gefragt, vor-antwort wird von der Fortsetzungsschleife uebernommen)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "2",
|
|
"kommentar": "getstring Naechstes Element im VarioFoerderer (2 = Vario-Kurve)"
|
|
},
|
|
{
|
|
"typ": "int",
|
|
"wert": 90,
|
|
"kommentar": "getint Vario-Kurve Winkel (90 Grad, echter Wert)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "2",
|
|
"kommentar": "getstring Vario-Kurve Seite (rechts)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "2",
|
|
"kommentar": "getstring Vario-Kurve Variante (innen)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "2",
|
|
"kommentar": "getstring Ist der Endpunkt der Foerderer? (Nein)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "1",
|
|
"kommentar": "getstring Naechstes Element im VarioFoerderer (1 = Horizontaler Foerderer)"
|
|
},
|
|
{
|
|
"typ": "point_rel",
|
|
"dL": 457.481366,
|
|
"hz": 0,
|
|
"kommentar": "getpoint Horizontal-Endpunkt (dL=457.48, hz=0 - Richtung durch die erste Vario-Kurve auf 0 Grad gedreht)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "2",
|
|
"kommentar": "getstring Zusaetzlichen Separator VOR? (Nein)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "2",
|
|
"kommentar": "getstring Zusaetzlichen Separator NACH? (Nein)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "2",
|
|
"kommentar": "getstring Ist der Endpunkt der Foerderer? (Nein)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "2",
|
|
"kommentar": "getstring Naechstes Element im VarioFoerderer (2 = Vario-Kurve)"
|
|
},
|
|
{
|
|
"typ": "int",
|
|
"wert": 90,
|
|
"kommentar": "getint Vario-Kurve Winkel (90 Grad)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "2",
|
|
"kommentar": "getstring Vario-Kurve Seite (rechts)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "2",
|
|
"kommentar": "getstring Vario-Kurve Variante (innen)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "3",
|
|
"kommentar": "getstring Ist der Endpunkt der Foerderer? (3 = Ja, Motorstation setzen + Kettenende definieren)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "1",
|
|
"kommentar": "getstring ES-Element setzen? (Ja)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "90",
|
|
"kommentar": "getstring ES-Element Winkel (90 Grad - echter Winkelwert)"
|
|
},
|
|
{
|
|
"typ": "string",
|
|
"wert": "1",
|
|
"kommentar": "getstring ES-Seite (links)"
|
|
},
|
|
{
|
|
"typ": "point_rel",
|
|
"dL": 5854.769733,
|
|
"hz": -90,
|
|
"kommentar": "getpoint Endpunkt entlang Fahrtrichtung (Kettenende-Modus, hz=-90 - unveraendert nach der zweiten Vario-Kurve, 90 Grad rechts)"
|
|
},
|
|
{
|
|
"typ": "real",
|
|
"wert": 2154.0,
|
|
"kommentar": "getreal Ziel-Hoehe Kettenende (ES). Ab hier laeuft vfl-body-zerlegung AUTOMATISCH: Stufe 1 (Winkeltabelle) liefert 8 gueltige Kandidaten (12/15/18/21/27/33/39/45 Grad)"
|
|
},
|
|
{
|
|
"typ": "int",
|
|
"wert": 3,
|
|
"kommentar": "getint Winkel-Wahl: Index 3 unter den GUELTIGEN Kandidaten (= 18 Grad, siehe vfl-waehle-winkel - Index in die gefilterte Liste, kein Winkelwert)"
|
|
}
|
|
]
|