feat: AS-Zufuehrungsachse fuer beide Winkel + GF-Option "Parallel zum Kreisel"

Die AS-Praeambel in Modus 1 fragt jetzt Winkel, Seite UND eine optionale
Zufuehrungsachse (2. Punkt) - im Assistenten alles in einem Fenster
(vflw_as_achse). Beide Angaben zusammen legen das AS vollstaendig fest: der
2. Punkt gibt die KS_EIN-Achse (Zufuehrung/Fahrtrichtung), links/rechts die
AS-Variante und damit die KS_AUS-Richtung der Kette. Bisher galt die Achse
nur beim 30-Grad-Element und ERSETZTE dort die Seitenfrage.

Darauf setzt die neue 5. Option der gf-laenge-modus-Frage auf, intern
"parallel" (vfl-gf-parallel-kreisel): AS -> GF-Stueck -> GF-Bogen aus EINEM
Abstandswert, gemessen senkrecht zur Zufuehrungsachse von AS-KS_EIN bis
Bogen-KS_AUS. Kein Separator dazwischen, damit der Abstand exakt getroffen
wird; die Kettenende-Frage stellt der Zweig selbst NACH dem Bau. Waehlbar
nur am Kettenanfang mit AS UND Achse.

Der Bogen ist nicht verdrahtet: gewaehlt wird der, der den gemessenen
Grundriss-Schwenk des AS-Blocks aufhebt (vf-element-plan-turn) - mit den
vorhandenen Bausteinen AS 30 -> 30-Grad-Bogen, AS 90 -> 90-Grad-Bogen,
immer zur Gegenseite. Querversatz von AS und Bogen wird gemessen statt
gerechnet; die Bogen-Probe laeuft dabei auf dem IDEALISIERTEN 3-Grad-Rahmen,
auf dem der echte Bogen spaeter sitzt (auf dem AS-Rahmen gemessen lag der
Abstand im BricsCAD-Test um 0.5 mm daneben).

Journal: [STR winkel][STR seite][PT p2 | NIL]. Welche Fragen gestellt wurden,
wird nicht journalisiert, sondern beim Replay an der Eintragsart erkannt -
alte Ketten bleiben ohne Sonderbehandlung editierbar. Die Journal-Werkzeuge
(vf_linienzug_grammatik.py, vf_spec_export.py, vf_journal_export.py,
vf_spec.lsp, test_hm_recformat.lsp) kennen das optionale Achsen-Token.

Tests: 11 neue Unit-Tests fuer die reinen Kerne vfl-par-bogen-waehlen und
vfl-par-gf-laenge (tu-tests-vfl-parallel), TEST_UNIT 701/701 gruen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-22 11:04:16 +02:00
parent cccd362bba
commit 1cc163dc11
12 changed files with 815 additions and 150 deletions
+57
View File
@@ -105,6 +105,63 @@ Zwischen-Etappe, es geht in derselben VF-Einheit weiter (Vario-Kurve,
weiteres gerades Stueck, Auf/Ab). "Ja" beendet die VF-Einheit mit einer
Motorstation - optional zusaetzlich mit ES-Element (echtes Kettenende).
### 3a. Neu seit 2026-10-21: Zufuehrungsachse und "Parallel zum Kreisel"
Die Tabelle oben zitiert eine aeltere Aufzeichnung. Zwei Dinge sind seitdem
dazugekommen (aeltere Ketten bleiben unveraendert editierbar - das Journal
erkennt am Eintragstyp, welche Fragen damals gestellt wurden):
**Zufuehrungsachse (2. Punkt) - jetzt bei BEIDEN AS-Winkeln.** Nach Winkel
und Seite (Eintrag 4/5) fragt der AS-Dialog zusaetzlich einen zweiten Punkt
ab; im Assistenten stehen alle drei Angaben in EINEM Fenster
(`vflw_as_achse`). Die beiden Angaben beschreiben verschiedene Dinge und
legen das AS erst zusammen vollstaendig fest:
| Angabe | legt fest |
|---|---|
| 2. Punkt | Richtung der KS_EIN-Achse = die Zufuehrung, z.B. die Kreisel-Laufrichtung. Der Startpunkt bleibt der Sitz des AS-Elements, der zweite Punkt gibt nur die Richtung. |
| links/rechts | AS-Variante und damit die KS_AUS-Richtung, also wohin die Kette nach dem Ausschleusen laeuft. |
Der Dialog zeigt den Startpunkt mit an (er ist der Sitz des AS-Elements UND
der Ausgangspunkt der Achse); waehrend der Punktwahl haengt das Gummiband an
ihm. Mit dem gesetzten Punkt ist der Dialog fertig und schliesst direkt - die
ermittelte Achsrichtung meldet die Konsole. Nur ein mit ESC abgebrochener
Pick zeigt den Dialog noch einmal (mit den vorher gewaehlten Werten), damit
nach einem Fehlklick nichts verloren geht.
Die Achse ist **optional**: ohne Punkt laeuft alles wie frueher ueber die
Richtung des naechsten Klicks. Frueher ersetzte die Achse beim 30-Grad-
Element die Seitenfrage (die Seite wurde aus der Lage des naechsten Punkts
erraten); das gilt nur noch beim Nachbau alter Ketten.
**"Parallel zum Kreisel weiterbauen"** - 5. Option der Frage "Wie soll die
Laenge dieser Gefaellestrecke bestimmt werden?" (Eintrag 30). Sie erscheint
nur am Kettenanfang mit AS-Element UND festgelegter Zufuehrungsachse, weil
sie beides als Bezug braucht. Gebaut wird AS -> kurzes GF-Stueck -> GF-Bogen,
sodass die Kette danach parallel zur Zufuehrungsachse weiterlaeuft. Einzige
Eingabe ist der **Abstand**, gemessen senkrecht zur Zufuehrungsachse von
KS_EIN des AS bis KS_AUS des Bogens; die Laenge des GF-Stuecks dazwischen
wird daraus berechnet. Ein Separator zwischen GF-Stueck und Bogen wird
bewusst NICHT gesetzt, damit der Abstand exakt getroffen wird. Der Bogen wird
nicht geraten, sondern so gewaehlt, dass er den gemessenen Grundriss-Schwenk
des AS-Blocks genau aufhebt - immer zur Gegenseite der AS-Seite:
| AS | Bogen |
|---|---|
| 30 Grad links | 30 Grad rechts |
| 30 Grad rechts | 30 Grad links |
| 90 Grad links | 90 Grad rechts |
| 90 Grad rechts | 90 Grad links |
Diese Tabelle ist das ERGEBNIS der Messung, keine gepflegte Zuordnung im
Code - sie bleibt auch dann richtig, wenn ein Element anders vermessen ist
als hier erwartet.
Direkt nach dem Bogen kommt die gewohnte Frage "Ist das das Kettenende?"
(Ja mit ES / Ja ohne ES / Nein, weiterbauen) - hier ausnahmsweise NACH dem
Bau, weil es keine gepickte Laenge gibt, von der ein ES-Fussabdruck
abzuziehen waere.
## 4. Stufe 1 / Stufe 2 - wie die letzte Strecke berechnet wird
Am Kettenende (Eintrag 61/62) ist die Aufgabe: von der aktuellen Position/