Files
dxfmakros/dcl/vf_linienzug_wizard.dcl
m.stangl 1d19121679 [FEAT] VF-Linienzug Modus 2+3: Segment-Gruppen-Dialoge + Highlight
Modus 2 (Pfad+Zielhoehe) und Modus 3 (Vorwaerts-Nachbau) fassen die je
Segment unmittelbar aufeinanderfolgenden Fragen (Typ + ggf. Neigung/
Vario-Winkel/Variante) in EINEM Wizard-DCL-Dialog zusammen - analog zu
Modus 1. Der Dialogkopf zeigt "Segment i/n ..."; das aktuelle Pfad-Segment
(LINE/ARC) wird vorher per redraw-Highlight in der Zeichnung hervorgehoben.

- Neue DCL-Dialoge: vflw_seg_linie_m2, vflw_seg_linie_m3, vflw_seg_bogen
- Neue Helfer: vflw-seg-*-impl (fuellen *vflw-pending*), vfl-seg-highlight,
  vfl-seg-kopf
- Modus 3 zusaetzlich: Kettenstart- und AS-Element-Gruppen-Dialog; AS-Winkel
  jetzt pending-aware ueber vfl-in-value
- Bogen-Dialog: vario-erlaubt-Flag (Modus 3 nur im offenen VF-Lauf), sonst
  wuerde die unkonsumierte Variante-Antwort ins naechste Segment lecken

Alles hinter (vfl-wizard-aktiv) - bei GUI-aus (Tests) faellt alles
unveraendert auf Konsole/Replay zurueck.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-31 16:45:25 +02:00

367 lines
9.2 KiB
Plaintext

// ============================================================
// vf_linienzug_wizard.dcl - VF Linienzug Assistent (Modus 1)
// Zwei GENERISCHE Einzel-Dialoge (vflw_zahl/vflw_wahl) fuer alle Fragen, die
// im Ablauf isoliert stehen, PLUS mehrere GRUPPEN-Dialoge weiter unten, die
// Fragen zusammenfassen, die immer unmittelbar hintereinander kommen (z.B.
// Startpunkt+Starthoehe, AS-Element Ja/Nein+Winkel+Seite). Kopfzeilen/
// Optionslisten werden zur Laufzeit befuellt, siehe vf_linienzug.lsp,
// Abschnitte "WIZARD-EINGABE" und "GRUPPEN-DIALOGE".
// Die ORIGINALEN Konsolen-Fragen (princ + getstring/getreal/getint) bleiben
// im Code stehen (de/en ueber ssg-text/lang/*.json) - Umschalten zurueck auf
// reine Konsole: (setq *vfl-wizard-mode* nil) bzw. Befehl VF_WIZARD_AUS.
// Bricht der Nutzer einen Gruppen-Dialog ab, fallen die betroffenen Fragen
// automatisch auf die Einzel-Dialoge (vflw_zahl/vflw_wahl) zurueck.
// ============================================================
// Zahlen-Eingabe (ersetzt getreal/getint). "kopf" zeigt den kompletten
// Original-Prompt-Text (inkl. Default in eckigen Klammern) als Label.
vflw_zahl : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: edit_box {
key = "wert";
label = "";
edit_width = 16;
}
}
ok_cancel;
}
// Mehrfachauswahl (ersetzt eine princ-Menue-Liste + getstring/getint).
// "opts" wird zur Laufzeit per start_list/add_list mit den (bereits
// lokalisierten) Optionstexten befuellt - ein einziger Dialog fuer jede
// Options-Anzahl (2-5), analog zum bestehenden Muster in
// dcl/variofoerderer.dcl und dcl/vfl_edit.dcl.
vflw_wahl : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: popup_list {
key = "opts";
label = "";
width = 50;
}
}
ok_cancel;
}
// ============================================================
// GRUPPEN-DIALOGE - fassen mehrere Fragen, die im Ablauf IMMER
// unmittelbar hintereinander kommen, in EINEM Bildschirm zusammen (statt je
// einem vflw_zahl/vflw_wahl-Dialog pro Frage). Aufgerufen aus den
// vflw-gruppe-*-Funktionen in vf_linienzug.lsp (Abschnitt "GRUPPEN-DIALOGE").
// Punktwahl-Zeile (Button + Anzeige) NUR in vflw_punkt_zahl, wo tatsaechlich
// live gepickt wird: der Button schliesst den Dialog (done_dialog 2), DANACH
// laeuft (getpoint) auf der Kommandozeile - (getpoint) direkt aus einem
// action_tile-Callback heraus (Dialog bleibt offen) funktioniert in BricsCAD
// NICHT (kein Fokuswechsel zur Zeichnung, per Test bestaetigt). Die uebrigen
// Gruppen-Dialoge (Gefaelle, Ziel-Hoehe, Horizontal-Stueck) picken KEINEN
// Punkt - der Endpunkt ist an ihrer Aufrufstelle bereits ueber
// vfl-neue-linie-messen gemessen (nur X/Y, fuer die Segmentlaenge; die Hoehe
// dort ist ein unabhaengiger Zahlenwert) - sie zeigen deshalb bewusst KEINE
// Punkt-Zeile, die faelschlich eine hier moegliche Punktwahl suggerieren
// wuerde.
// ============================================================
// Punkt + EIN Zahlenfeld, mit Punktwahl-Button (siehe oben). Nur fuer
// "Kettenstart" (Startpunkt + Starthoehe, Modus 1) und Modus 2s
// Start-/Endpunkt - "kopf"/"wlabel" werden je Aufruf per set_tile passend
// beschriftet.
vflw_punkt_zahl : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: row {
: button {
key = "pick";
label = "Punkt waehlen...";
fixed_width = true;
width = 18;
}
: text {
key = "pt_anzeige";
label = "(kein Punkt gewaehlt)";
}
}
: text {
key = "wlabel";
label = "";
}
: edit_box {
key = "wert";
label = "";
edit_width = 10;
}
}
ok_cancel;
}
// AS-/ES-Element (Kettenanfang bzw. -ende): Ja/Nein-Toggle + Winkel + Seite
// in einem Bildschirm - "kopf" traegt die konkrete Frage (AS oder ES),
// "setzen" bleibt bewusst generisch beschriftet, damit derselbe Dialog fuer
// beide Faelle passt. Winkel/Seite werden deaktiviert, solange der Toggle
// aus ist.
vflw_as : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: toggle {
key = "setzen";
label = "Ja, setzen";
}
: popup_list {
key = "winkel";
label = "Winkel:";
width = 20;
}
: popup_list {
key = "seite";
label = "Seite:";
width = 20;
}
}
ok_cancel;
}
// Winkel + Seite. Wiederverwendet fuer GF-Bogen (3 Winkel-Optionen) UND
// ES-Element am Kettenende (2 Winkel-Optionen) - die Optionsliste wird pro
// Aufruf zur Laufzeit befuellt, die Feld-Anzahl ist in beiden Faellen gleich.
vflw_winkel_seite : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: popup_list {
key = "winkel";
label = "Winkel:";
width = 20;
}
: popup_list {
key = "seite";
label = "Seite:";
width = 20;
}
}
ok_cancel;
}
// Vario-Kurve: Winkel + Seite + Variante (aussen/innen) in einem Bildschirm.
vflw_variokurve : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: popup_list {
key = "winkel";
label = "Winkel:";
width = 20;
}
: popup_list {
key = "seite";
label = "Seite:";
width = 20;
}
: popup_list {
key = "variante";
label = "Variante:";
width = 20;
}
}
ok_cancel;
}
// Gefaelle festlegen (Linie GF): Modus (Hoehe/Winkel) + EIN Wertfeld, dessen
// Beschriftung sich je nach Modus umschaltet (Action-Tile auf "modus", siehe
// vflw-gruppe-gefaelle-impl in vf_linienzug.lsp). Kein Punkt-Feld - siehe
// Kopfkommentar oben.
vflw_gefaelle : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: popup_list {
key = "modus";
label = "Eingabe als:";
width = 40;
}
: text {
key = "wlabel";
label = "";
}
: edit_box {
key = "wert";
label = "";
edit_width = 10;
}
}
ok_cancel;
}
// Horizontales Stueck: Separator-vor + Separator-nach + "Foerderer-Ende?"
// (3 Optionen) in einem Bildschirm. Kein Punkt-Feld - siehe Kopfkommentar
// oben.
vflw_horizontal : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: toggle {
key = "sepvor";
label = "Separator VOR dem Stueck";
}
: toggle {
key = "sepnach";
label = "Separator NACH dem Stueck";
}
: popup_list {
key = "istende";
label = "Foerderer-Ende:";
width = 45;
}
}
ok_cancel;
}
// ============================================================
// SEGMENT-GRUPPEN-DIALOGE (Modus 2 + Modus 3) - fassen die pro Segment
// aufeinanderfolgenden Fragen in EINEM Bildschirm zusammen. "kopf" zeigt
// dabei immer "Segment i/n ..." (wie die Konsolen-Frage), das jeweils
// abgefragte Segment ist zusaetzlich in der Zeichnung hervorgehoben
// (redraw-Highlight, gesetzt von vfl-seg-highlight in vf_linienzug.lsp VOR
// dem Oeffnen des Dialogs). Aufgerufen aus den vflw-seg-*-impl-Funktionen.
// ============================================================
// Modus 2, Segment "Gerade": Typ (GF/VF) + [nur bei GF aktiv] GF-Neigung.
// Das Neigungsfeld wird per action_tile auf "typ" aktiviert/deaktiviert.
vflw_seg_linie_m2 : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: popup_list {
key = "typ";
label = "Typ:";
width = 40;
}
: text {
key = "wlabel";
label = "GF-Neigung (Grad):";
}
: edit_box {
key = "wert";
label = "";
edit_width = 10;
}
}
ok_cancel;
}
// Modus 3, Segment "Gerade": Typ (GF / VF-Ab / VF-Auf / VF-Horizontal) + EIN
// Wertfeld, dessen Beschriftung mit dem Typ umschaltet (GF -> Neigung,
// VF-Ab/Auf -> Vario-Winkel, VF-Horizontal -> Feld deaktiviert). Umschaltung
// per action_tile auf "typ" (siehe vflw-seg-linie-m3-impl).
vflw_seg_linie_m3 : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: popup_list {
key = "typ";
label = "Typ:";
width = 45;
}
: text {
key = "wlabel";
label = "";
}
: edit_box {
key = "wert";
label = "";
edit_width = 10;
}
}
ok_cancel;
}
// Segment "Eck/Bogen" (Modus 2 + Modus 3 identisch): Typ (GF-Bogen /
// Vario-Kurve) + [nur bei Vario-Kurve aktiv] Variante (aussen/innen). Die
// Variante-Liste wird per action_tile auf "typ" aktiviert/deaktiviert.
vflw_seg_bogen : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: popup_list {
key = "typ";
label = "Typ:";
width = 40;
}
: popup_list {
key = "variante";
label = "Variante:";
width = 30;
}
}
ok_cancel;
}