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
+80
View File
@@ -181,6 +181,80 @@ vflw_as : dialog {
}
}
// Wie vflw_as, aber ZUSAETZLICH mit der Zufuehrungsachse (2. Punkt) in
// DEMSELBEN Bildschirm - nur fuer das AS-Element am Kettenanfang von Modus 1
// (Nutzer-Vorgabe 2026-10-21: "Achse und links/rechts gehoeren in ein
// Fenster", beide zusammen legen AS-Lage UND Kettenrichtung fest: der 2.
// Punkt gibt die KS_EIN-Achse, links/rechts die AS-Variante und damit die
// KS_AUS-Richtung). Eigener Dialog statt einer dauerhaft ausgegrauten
// Punkt-Zeile in vflw_as - denselben Dialog nutzt auch das ES-Element am
// Kettenende, wo es gar keine Zufuehrungsachse gibt (gleiche Begruendung wie
// bei vflw_winkel_seite vs. vflw_winkel_seite_30_90).
// Punktwahl-Zeile nach dem Muster von vflw_punkt_zahl: der Button schliesst
// den Dialog (done_dialog 2), danach laeuft (getpoint) auf der
// Kommandozeile, danach wird der Dialog neu gezeigt - darum nutzt "back"
// hier Code 3.
vflw_as_achse : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: toggle {
key = "setzen";
label = "Ja, setzen";
}
: boxed_radio_column {
label = "Winkel:";
key = "winkel";
: radio_button { key = "winkel_90"; label = "90 Grad"; value = "1"; }
: radio_button { key = "winkel_30"; label = "30 Grad"; }
}
: boxed_radio_column {
label = "Seite (AS schleust nach):";
key = "seite";
: radio_button { key = "seite_links"; label = "Links"; value = "1"; }
: radio_button { key = "seite_rechts"; label = "Rechts"; }
}
: boxed_column {
label = "Zufuehrungsachse (Fahrtrichtung):";
// Startpunkt der Kette - er ist der Sitz des AS-Elements UND der
// Ausgangspunkt der Achse; waehrend der Punktwahl haengt das
// Gummiband an ihm (vfl-getpoint mit Basispunkt).
: text {
key = "start_anzeige";
label = "";
width = 46;
}
: row {
: button {
key = "pick";
label = "2. Punkt waehlen...";
fixed_width = true;
width = 20;
}
: text {
key = "pt_anzeige";
label = "(ohne Achse: Richtung aus dem naechsten Klick)";
width = 46;
}
}
}
}
: row {
alignment = centered;
: button { key = "back"; label = "Zurueck"; fixed_width = true; width = 12; }
spacer;
: button { key = "accept"; label = "Ok Weiter"; is_default = true; fixed_width = true; width = 12; }
spacer;
: button { key = "cancel"; label = "Abbrechen"; is_cancel = true; fixed_width = true; width = 12; }
}
}
// Winkel (30/60/90) + Seite - fuer GF-Bogen, wo alle drei Winkel geometrisch
// gueltig sind. Fuer AS-/ES-Element (wo 60 Grad NIE gueltig ist) stattdessen
// vflw_winkel_seite_30_90 verwenden (siehe vflw-gruppe-winkel-seite-impl/
@@ -402,6 +476,12 @@ vflw_gf_laenge_modus : dialog {
: radio_button { key = "modus_hoehe"; label = "Zielhoehe festlegen (Laenge wird berechnet)"; }
: radio_button { key = "modus_steigend"; label = "Steigende GF (Sonderfall, bis 3 Grad)"; }
: radio_button { key = "modus_qc"; label = "QC Linie mit GF (automatische Auf-Ab-Berechnung)"; }
// Nur am Kettenanfang mit AS-Element UND festgelegter Zufuehrungsachse
// waehlbar - sonst fehlt die Bezugsachse fuer den Abstand. Wird in
// vflw-gruppe-gf-laenge-modus-impl per mode_tile deaktiviert (anders
// als eine NIE waehlbare Kachel ist diese kontextabhaengig, siehe
// "sepnach" in vflw_sep_gf).
: radio_button { key = "modus_parallel"; label = "Parallel zum Kreisel weiterbauen (Abstand)"; }
}
}