feat: Option 5 "QC Linie mit GF und U-Form" implementiert (Fa/S dynamisch, Kolinearitaet exakt)

Linienzug-Modus 5: AS(90 Grad) -> Richtung+E1 in einem Klick -> 90-Grad-
GF-U-Turn (Gegenseite von AS) -> Fa(fallend, unbekannt)+Sep -> Bogen-auf-6
-> S(steigend, dynamisch 3/6/9/...Grad, flachster passender Winkel wird
automatisch gewaehlt) -> Bogen-ab-6 -> ES, mit exakter Kolinearitaets-
Rueckkehr zur AS-Eintrittsachse (2x2-Gleichungssystem Hoehe+Lage, analog
zu Option 4's E2-Loesung). E1 nutzt AS's real gemessene KS_AUS-Neigung
(neue vf-element-plan-neigung) statt der angenommenen 3 Grad - das macht
Fa/S ueberhaupt erst ueber E1 steuerbar. Bei "nicht baubar" wird eine
exakte Mindest-E1-Laenge vorgeschlagen (wie Option 4's Mindest-
Gesamtlaenge). Zusaetzlich: Bogen-Seite = Gegenseite der AS-Seite (Option 4
und 5), Fehler in vf-element-plan-neigung-Vorzeichen behoben, fehlender
Separator-Fussabdruck in der Hoehen-/Lage-Bilanz ergaenzt.

Neue GF-eigene Vertikalbogen-Bloecke (Vario_Bogen_auf/ab_3/6_rechts, 2D+3D)
fuer die Uebergaenge.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Yuelin Wang
2026-09-14 08:36:17 +02:00
co-authored by Claude Sonnet 5
parent 0d9ec93623
commit 1b49bd3c3b
15 changed files with 1410 additions and 111 deletions
+49 -1
View File
@@ -546,6 +546,43 @@
(* (atan (cadr (cadr fe)) (car (cadr fe))) (/ 180.0 pi)))
90.0))))
;; Neigungs-Aenderung (Grad) eines Elements: Winkel von KS_EIN.xu nach
;; KS_AUS.xu ausserhalb der XY-Ebene (Steigung/Gefaelle), direkt aus dem Block
;; gemessen - Gegenstueck zu vf-element-plan-turn (das nur die XY-Ebene
;; misst). Genutzt fuer Faelle, in denen ein Element NICHT mit der
;; angenommenen *vfk-gefaelle-winkel*-Neigung weitergebaut werden soll,
;; sondern mit der REALEN, am Block gemessenen Neigung (Nutzer-Vorgabe
;; 2026-09-13, NUR fuer vfl-qc-linie-mit-gf-uform - siehe dortiger
;; Kommentar; alle anderen Aufrufer bleiben bei der angenommenen Neigung).
;; WICHTIG: dieselbe Vorzeichen-Konvention wie frame->hz-winkel (vf_core.lsp)
;; - "winkel" = atan(-xu.z, horiz), NICHT atan(xu.z, horiz) - positiv heisst
;; FALLEND (xu zeigt nach unten, negatives Welt-Z), damit der Rueckgabewert
;; direkt (ohne weiteres Vorzeichen-Umdenken) als winkel-Parameter fuer
;; vfl-insert-gf-segment/vfl-acc-gf-seg verwendet werden kann - ohne die
;; Negation kam beim BricsCAD-Test ein KLETTERNDES statt fallendes E1 heraus
;; (Nutzer-Befund 2026-09-13: reale Neigung maass -3 Grad, ergab ohne
;; Vorzeichen-Fix ein steigendes statt fallendes Element).
;; Fallback 0.0 (keine Neigungsaenderung), falls der Block fehlt.
(defun vf-element-plan-neigung (blockname / temp-obj ks-data fe fa xu-e xu-a horiz-e horiz-a)
(setq blockname (ensure-block-loaded blockname))
(if (not (tblsearch "BLOCK" blockname))
0.0
(progn
(setq temp-obj (vla-InsertBlock modelspace
(vlax-3D-point '(0 0 0)) blockname 1.0 1.0 1.0 0))
(setq ks-data (extract-ks-from-block temp-obj))
(if (not (vlax-erased-p temp-obj)) (vla-Delete temp-obj))
(setq fe (ks-frame-extract (cadr (assoc "KS_EIN" ks-data))))
(setq fa (ks-frame-extract (cadr (assoc "KS_AUS" ks-data))))
(if (and fe fa)
(progn
(setq xu-e (cadr fe) xu-a (cadr fa))
(setq horiz-e (sqrt (+ (* (car xu-e) (car xu-e)) (* (cadr xu-e) (cadr xu-e)))))
(setq horiz-a (sqrt (+ (* (car xu-a) (car xu-a)) (* (cadr xu-a) (cadr xu-a)))))
(- (* (atan (- (caddr xu-a)) horiz-a) (/ 180.0 pi))
(* (atan (- (caddr xu-e)) horiz-e) (/ 180.0 pi))))
0.0))))
;; KS-Info eines Elements (im Block, Einbau-Rotation 0):
;; Rueckgabe (ein-ang aus-ang vx vy)
;; ein-ang / aus-ang : Ebenen-Winkel (Grad) von KS_EIN.xu bzw. KS_AUS.xu
@@ -1148,6 +1185,8 @@
(action_tile "accept"
"(setq gmodus (cond ((= (get_tile \"modus_2\") \"1\") 2)
((= (get_tile \"modus_3\") \"1\") 3)
((= (get_tile \"modus_4\") \"1\") 4)
((= (get_tile \"modus_5\") \"1\") 5)
(t 1)))
(done_dialog 1)")
(action_tile "cancel" "(done_dialog 0)")
@@ -1169,6 +1208,12 @@
;; ============================================================
;; TEIL 12: DISPATCHER c:VarioFoerderer
;; ============================================================
;; Erzwungener QC-Modus (Linienzug-Modus 4/5, vfc-dialog-linienzug-modus-
;; waehlen/Konsolen-Fallback unten): "4"/"5" waehrend des naechsten
;; vf-linienzug-modus-Laufs, sonst nil. Von vf-linienzug-modus (vf_linienzug.
;; lsp, spaeter geladen) gelesen/geleert - globale Vorab-Deklaration hier,
;; damit sie unabhaengig von der Lade-Reihenfolge existiert.
(if (not (boundp '*vfl-forciere-qc-modus*)) (setq *vfl-forciere-qc-modus* nil))
(defun c:VarioFoerderer ( / typ-eintr anlage-typ berechne-fn einfuege-fn
eingabe deltaL deltaH richtung startpunkt seite hz
eingabe-modus ergebnis ergebnis-liste gueltige-winkel
@@ -1248,7 +1293,9 @@
(princ (ssg-text "vfc-linienzug-modus-1"))
(princ (ssg-text "vfc-linienzug-modus-2"))
(princ (ssg-text "vfc-linienzug-modus-3"))
(setq wahl (getint (ssg-text "prompt-wahl-1-2-3")))
(princ (ssg-text "vfc-linienzug-modus-4"))
(princ (ssg-text "vfc-linienzug-modus-5"))
(setq wahl (getint (ssg-text "prompt-wahl-1-5")))
)
)
(if (not zurueck-zu-typ)
@@ -1267,6 +1314,7 @@
;; Hochziehen ein reiner Bugfix. Setzt zugleich *vfl-seg-glied-letzte*
;; zurueck, das sonst vom Vorlauf stehenbleibt.
(vfl-journal-reset)
(setq *vfl-forciere-qc-modus* (cond ((= wahl 4) "4") ((= wahl 5) "5") (t nil)))
(cond ((= wahl 2) (vf-linienzug-modus2))
((= wahl 3) (vf-linienzug-modus3))
(t (vf-linienzug-modus)))
+8
View File
@@ -144,6 +144,14 @@
;; traegt den Wert weiterhin zusaetzlich im String - dort unangetastet).
(if (null *vfk-separator-laenge*) (setq *vfk-separator-laenge* 300.0))
;; "QC Linie mit GF" / "QC Linie mit GF und U-Form" (Lisp/vf_linienzug.lsp,
;; vfl-qc-linie-mit-gf/-uform): reine Vorschlagswerte fuer die Ein-/Auslauf-
;; Geradenstuecke bzw. die feste U-Form-Zwischenstrecke - alle drei bleiben
;; Nutzereingaben (getreal mit diesem Default), keine harten Konstanten.
(if (null *vfk-qc-einlauf-laenge*) (setq *vfk-qc-einlauf-laenge* 1000.0))
(if (null *vfk-qc-u-fest-laenge*) (setq *vfk-qc-u-fest-laenge* 400.0))
(if (null *vfk-qc-fallend-anteil-default*) (setq *vfk-qc-fallend-anteil-default* 0.5))
;; Mindestlaenge (mm) fuer eine VF-Einheit (Umlenk+Motor = 2x
;; *vfk-stations-laenge*). Aktiv referenziert in vf_linienzug.lsp
;; (vfl-vf-entscheidung, vfl-vf-machbar-p, vfl-segment-entscheidung,
+1236 -106
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+8
View File
@@ -79,6 +79,14 @@ vfc_linienzug_modus : dialog {
key = "modus_3";
label = "3D-Objekte stueckweise (Vorwaerts-Nachbau, in Arbeit)";
}
: radio_button {
key = "modus_4";
label = "QC Linie mit GF (automatische Auf-Ab-Berechnung)";
}
: radio_button {
key = "modus_5";
label = "QC Linie mit GF und U-Form";
}
}
// "Zurueck" springt hier sinnvoll zur Anlagen-Typ-Frage zurueck (siehe
+31
View File
@@ -219,6 +219,36 @@ vflw_winkel_seite : dialog {
}
}
// Nur Winkel (30/90 Grad), OHNE Seite - fuer "QC Linie mit GF" (Option 4),
// deren AS-/ES-Seite ausserhalb dieses Dialogs feststeht (ES-Seite = AS-
// Seite, keine eigene Frage). Radio-Buttons statt Dropdown.
vflw_qc_winkel : dialog {
label = "VarioFoerderer Assistent";
: column {
: text {
key = "kopf";
label = "";
width = 60;
}
: boxed_radio_column {
label = "Winkel:";
key = "winkel";
: radio_button { key = "winkel_30"; label = "30 Grad"; }
: radio_button { key = "winkel_90"; label = "90 Grad"; value = "1"; }
}
}
: 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; }
}
}
// Vario-Kurve: Winkel + Seite + Variante (aussen/innen) in einem Bildschirm.
// Radio-Buttons statt Dropdown, Labels fest deutsch.
vflw_variokurve : dialog {
@@ -330,6 +360,7 @@ vflw_gf_laenge_modus : dialog {
: radio_button { key = "modus_endpunkt"; label = "Endpunkt waehlen (Laenge ergibt sich)"; value = "1"; }
: 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)"; }
}
}
+39 -2
View File
@@ -6,6 +6,11 @@
"vfl-abgebrochen": "\nAbgebrochen.",
"vfl-as-setzen-frage": "\n\nAS-Element setzen?",
"vfl-as-nein": "\n 2 - Nein (Kette beginnt direkt mit GF/VF am Startpunkt)",
"vfl-as-auto-erkannt": "\n>>> Startpunkt liegt auf KS_AUS einer bestehenden %1-Kette - kein AS-Element noetig.",
"vfl-familie-neutral": "GF/VF",
"vfl-sep-nach-durch-es-ueberschrieben": "\n>>> Separator NACH ignoriert - das ES-Element bringt beim Kettenende bereits seinen eigenen Separator mit (sonst zwei Separatoren hintereinander).",
"vfl-echo-position": "\n>>> Position: X=%1 Y=%2 Z=%3",
"vfl-echo-wahl": "\n>>> Gewaehlt: %1",
"vfl-aus-seite-header": "\n\nAUS-Element (AS_Element_*) - Seite waehlen:",
"vfl-naechstes-element-header": "\n\nNaechstes Element waehlen:",
"vfl-menu-gf-bogen-1": "\n 1 - GF-Bogen (horizontale Kurve)",
@@ -48,6 +53,28 @@
"vfl-gf-laenge-modus-opt-endpunkt": "\n 1 - Endpunkt waehlen (Laenge ergibt sich)",
"vfl-gf-laenge-modus-opt-hoehe": "\n 2 - Zielhoehe festlegen (Laenge wird berechnet)",
"vfl-gf-laenge-modus-opt-steigend": "\n 3 - Steigende GF (Sonderfall, bis 3 Grad)",
"vfl-gf-laenge-modus-opt-qc": "\n 4 - QC Linie mit GF (automatische Auf-Ab-Berechnung)",
"vfl-qc-nur-kettenanfang": "\nFEHLER: 'QC Linie mit GF' ist nur am Kettenanfang moeglich (braucht eine eigene AS-Seite) - bitte anderen Modus waehlen.",
"vfl-qc-prompt-richtung": "\n\nRichtung waehlen (Gerade, auf der AS-Eintritt und ES-Austritt liegen sollen) - Punkt in Fahrtrichtung anklicken: ",
"vfl-qc-ks-ein-gemessen": "\n>>> AS KS_EIN (Referenzgerade) gemessen: X=%1 Y=%2 Z=%3",
"vfl-qc-ks-ein-nicht-gemessen": "\nWARNUNG: KS_EIN des AS-Elements konnte nicht gemessen werden - falle auf den Klickpunkt zurueck (Referenzgerade evtl. ungenau).",
"vfl-qc-prompt-e1": "\nFallend-GF Einlauf, inkl. Separator (mm) [%1]: ",
"vfl-qc-prompt-e2": "\nLaenge fallend-GF Auslauf nach dem zweiten 30-Grad-Bogen (mm) [%1]: ",
"vfl-qc-prompt-gesamtlaenge-mittelteil": "\nGesamtlaenge Mittelteil, ohne Ein-/Auslauf (mm): ",
"vfl-qc-prompt-anteil": "\nAnteil 1. Fallend-Stueck an F_total (0.0-1.0) [%1]: ",
"vfl-qc-nicht-baubar": "\nFEHLER: Diese Mittelteil-Laenge ist mit dieser Aufteilung nicht baubar (F_total=%1mm, S=%2mm - negativ). Bitte groessere Gesamtlaenge waehlen (mindestens ca. %3 mm).",
"vfl-qc-bogen-nicht-schliessbar": "\nFEHLER: Diese AS-/ES-Winkel-Kombination (AS-Schwenk=%1 Grad, ES-Schwenk=%2 Grad, benoetigter Bogen-Schwenk=%3 Grad) ist weder mit einem 30- noch mit einem 90-Grad-Bogen auf die Ausgangsgerade zurueckzufuehren. Bitte AS-/ES-Winkel anpassen (z.B. beide gleich waehlen).",
"vfl-qc-e2-negativ": "\nFEHLER: Die berechnete Laenge zwischen dem 2. Bogen und dem ES-Element ist nicht baubar (%1 mm). Bitte E1, Gesamtlaenge Mittelteil oder Anteil anpassen.",
"vfl-qc-erfolg": "\n>>> QC-Kette gebaut. Soll-Hoehe (AS-Austritt)=%1 Ist-Hoehe (ES-Austritt)=%2 Abweichung von der Ausgangsgeraden=%3mm",
"vfl-qc-uform-nur-kettenanfang": "\nFEHLER: 'QC Linie mit GF und U-Form' ist nur am Kettenanfang moeglich (braucht eine eigene AS-Seite) - bitte anderen Modus waehlen.",
"vfl-qc-uform-winkel-fix": "\nHinweis: AS-/ES-Winkel sind bei dieser Option fest auf 90 Grad (nur die Seite ist waehlbar).",
"vfl-qc-prompt-u-fest-laenge": "\nFeste Zwischenstrecke zwischen den beiden 90-Grad-Boegen (mm) [%1]: ",
"vfl-qc-uform-prompt-richtung-e1": "\n\nStartpunkt des 1. 90-Grad-Bogens anklicken (legt Fahrtrichtung UND Laenge des fallenden GF-Einlaufs inkl. Separator fest): ",
"vfl-qc-uform-e1-echo": "\n>>> E1 (inkl. Separator)=%1mm Richtung=%2 Grad",
"vfl-qc-uform-e1-neigung-echo": "\n>>> E1-Neigung (real an AS gemessen, KS_EIN->KS_AUS)=%1 Grad",
"vfl-qc-uform-fa-s-echo": "\n>>> Berechnet: Fa (fallend, 3 Grad, vor S)=%1mm S (steigend, %3 Grad, automatisch gewaehlt)=%2mm",
"vfl-qc-uform-fa-s-negativ": "\nFEHLER: Fa/S auch mit steileren S-Neigungswinkeln (bis 30 Grad probiert) nicht baubar (zuletzt Fa=%1mm S=%2mm). Bitte E1 oder die feste Zwischenstrecke anpassen.",
"vfl-qc-uform-fa-s-negativ-e1": "\nFEHLER: Fa/S auch mit steileren S-Neigungswinkeln (bis 30 Grad probiert) nicht baubar (zuletzt Fa=%1mm S=%2mm). Mindest-E1 (inkl. Separator) fuer den steilsten Winkel: ca. %3 mm.",
"vfl-prompt-neigungswinkel-laenge-berechnet": "\nNeigungswinkel (Grad, 0 < Winkel <= %1) [%1] (deltaL wird berechnet und eingefuegt): ",
"vfl-prompt-neigungswinkel-steigend": "\nSteigungswinkel (Grad, 0 <= Winkel <= %1, 0 = flach) [%1]: ",
"vfl-alert-winkel-ungueltig-steigend": "Steigungswinkel ungueltig: %1 Grad. Erlaubt: 0 <= Winkel <= %2 Grad.",
@@ -296,8 +323,8 @@
"vfc-block-einfuegepunkt": "\n Block-Einfuegepunkt: X=%1 Y=%2 Z=%3",
"vfc-block-eingefuegt-ksaus": "\n '%1' eingefuegt\n KS_AUS: X=%2 Y=%3 Z=%4",
"vfc-delta-l-h-richtung": "\n %1L=%2 mm %1H=%3 mm Fahrtrichtung=%4%5",
"vfc-endpunkt-xyz": "\n Endpunkt: X=%1 Y=%2 Z=%3",
"vfc-endpunkt-xyz-dxdz": "\n Endpunkt: X=%1 Y=%2 Z=%3 (dx=%4 dz=%5)",
"vfc-endpunkt-xyz": "\n KS_AUS: X=%1 Y=%2 Z=%3",
"vfc-endpunkt-xyz-dxdz": "\n KS_AUS: X=%1 Y=%2 Z=%3 (dx=%4 dz=%5)",
"vfc-fahrtrichtung-ergebnis": "\n>>> Fahrtrichtung: %1%2",
"vfc-fehler-block-datei-fehlt": "\n FEHLER: Block-Datei nicht gefunden: %1",
"vfc-fehler-block-nicht-in-bibliothek": "\n FEHLER: Block '%1' nicht in Bibliothek",
@@ -557,6 +584,12 @@
"vfl-abgebrochen-kein-ziel": "\n Abgebrochen - kein Zielpunkt gewaehlt.",
"vfl-bogen-ab3-uebergang": "\n\nVario_Bogen_ab_3 (Uebergang horizontal -> 3 Grad)",
"vfl-bogen-auf3-uebergang": "\n\nVario_Bogen_auf_3 (Uebergang 3 Grad -> horizontal)",
"vfl-gf-bogen-ab3-uebergang": "\n\nGF-Bogen Vario_Bogen_ab_3 (Uebergang horizontal -> 3 Grad, GF-eigen)",
"vfl-gf-bogen-auf3-uebergang": "\n\nGF-Bogen Vario_Bogen_auf_3 (Uebergang 3 Grad -> horizontal, GF-eigen)",
"vfl-gf-bogen-auf6-uebergang": "\n\nGF-Bogen Vario_Bogen_auf_6 (Uebergang fallend -> steigend, 6 Grad, GF-eigen)",
"vfl-gf-bogen-ab6-uebergang": "\n\nGF-Bogen Vario_Bogen_ab_6 (Uebergang steigend -> fallend, 6 Grad, GF-eigen)",
"vfl-gf-bogen-block-fehlt": "\n[GF-Bogen] Block '%1' nicht gefunden - siehe data/ils.",
"vfl-gf-bogen-ks-fehlt": "\n[GF-Bogen] KS_EIN/KS_AUS in '%1' fehlt oder unlesbar.",
"vfl-gf-verteilung-ganz-einlauf": "\n 2 - Gesamte Staustrecke am Einlauf (GF1), kein GF2",
"vfl-gf-verteilung-haelfte": "\n 1 - 1/2GF am Ausgang (GF2), 1/2GF am Einlauf (GF1)",
"vfl-gf-verteilung-header": "\n\nStaustrecke (GF) - Verteilung waehlen:",
@@ -885,6 +918,10 @@
"vfc-linienzug-modus-1": "\n 1 - Manuelle Eingabe (Punkte klicken)",
"vfc-linienzug-modus-2": "\n 2 - 3D-Objekte + Ziel-Hoehe (Randwert-Solver, fertig)",
"vfc-linienzug-modus-3": "\n 3 - 3D-Objekte stueckweise (Vorwaerts-Nachbau, in Arbeit)",
"vfc-linienzug-modus-4": "\n 4 - QC Linie mit GF (automatische Auf-Ab-Berechnung)",
"vfc-linienzug-modus-5": "\n 5 - QC Linie mit GF und U-Form",
"prompt-wahl-1-5": "\nIhre Wahl (1/2/3/4/5) [1]: ",
"vfl-qc-uform-nicht-implementiert": "\nFEHLER: 'QC Linie mit GF und U-Form' ist noch nicht implementiert - bitte Option 4 oder einen anderen Modus waehlen.",
"vfc-typ-standard-beschreibung": "Standard VarioFoerderer (AS/ES 90 Grad, horizontal versetzt)",
"vfc-typ-etage-beschreibung": "Etage VarioFoerderer (AS/ES 30 Grad, direkt uebereinander)",
"vfc-typ-linienzug-beschreibung": "3D-Linienzug (gemischte GF/VF-Kette; Modus 1 manuell / Modus 2 Ziel-Hoehe fertig / Modus 3 stueckweise in Arbeit)",
+39 -2
View File
@@ -6,6 +6,11 @@
"vfl-abgebrochen": "\nCancelled.",
"vfl-as-setzen-frage": "\n\nPlace AS element?",
"vfl-as-nein": "\n 2 - No (chain starts directly with GF/VF at the start point)",
"vfl-as-auto-erkannt": "\n>>> Start point lies on the KS_AUS of an existing %1 chain - no AS element needed.",
"vfl-familie-neutral": "GF/VF",
"vfl-sep-nach-durch-es-ueberschrieben": "\n>>> Separator AFTER ignored - the ES element already brings its own separator at the chain end (otherwise two separators in a row).",
"vfl-echo-position": "\n>>> Position: X=%1 Y=%2 Z=%3",
"vfl-echo-wahl": "\n>>> Selected: %1",
"vfl-aus-seite-header": "\n\nOUT element (AS_Element_*) - select side:",
"vfl-naechstes-element-header": "\n\nSelect next element:",
"vfl-menu-gf-bogen-1": "\n 1 - GF arc (horizontal curve)",
@@ -48,6 +53,28 @@
"vfl-gf-laenge-modus-opt-endpunkt": "\n 1 - Pick end point (length results from it)",
"vfl-gf-laenge-modus-opt-hoehe": "\n 2 - Set target height (length will be calculated)",
"vfl-gf-laenge-modus-opt-steigend": "\n 3 - Rising GF (special case, up to 3 degrees)",
"vfl-gf-laenge-modus-opt-qc": "\n 4 - QC line with GF (automatic up/down calculation)",
"vfl-qc-nur-kettenanfang": "\nERROR: 'QC line with GF' is only possible at the chain start (needs its own AS side) - please choose a different mode.",
"vfl-qc-prompt-richtung": "\n\nChoose direction (line on which AS entry and ES exit shall lie) - click a point in the travel direction: ",
"vfl-qc-ks-ein-gemessen": "\n>>> AS KS_EIN (reference line) measured: X=%1 Y=%2 Z=%3",
"vfl-qc-ks-ein-nicht-gemessen": "\nWARNING: could not measure the AS element's KS_EIN - falling back to the clicked point (reference line may be inaccurate).",
"vfl-qc-prompt-e1": "\nDescending GF entry, incl. separator (mm) [%1]: ",
"vfl-qc-prompt-e2": "\nLength of descending GF exit after the second 30-degree bend (mm) [%1]: ",
"vfl-qc-prompt-gesamtlaenge-mittelteil": "\nTotal middle section length, w/o entry/exit (mm): ",
"vfl-qc-prompt-anteil": "\nShare of 1st descending piece of F_total (0.0-1.0) [%1]: ",
"vfl-qc-nicht-baubar": "\nERROR: This middle-section length cannot be built with this split (F_total=%1mm, S=%2mm - negative). Please choose a larger total length (at least approx. %3 mm).",
"vfl-qc-bogen-nicht-schliessbar": "\nERROR: This AS/ES angle combination (AS turn=%1 deg, ES turn=%2 deg, required bend turn=%3 deg) cannot be closed back onto the reference line with either a 30- or a 90-degree bend. Please adjust the AS/ES angles (e.g. choose the same for both).",
"vfl-qc-e2-negativ": "\nERROR: The computed length between the 2nd bend and the ES element is not buildable (%1 mm). Please adjust E1, the middle section total length, or the share.",
"vfl-qc-erfolg": "\n>>> QC chain built. Target height (AS exit)=%1 Actual height (ES exit)=%2 Deviation from reference line=%3mm",
"vfl-qc-uform-nur-kettenanfang": "\nERROR: 'QC line with GF and U-shape' is only possible at the chain start (needs its own AS side) - please choose a different mode.",
"vfl-qc-uform-winkel-fix": "\nNote: AS/ES angles are fixed at 90 degrees for this option (only the side is selectable).",
"vfl-qc-prompt-u-fest-laenge": "\nFixed section between the two 90-degree bends (mm) [%1]: ",
"vfl-qc-uform-prompt-richtung-e1": "\n\nClick the start point of the 1st 90-degree bend (sets travel direction AND the descending GF entry length incl. separator): ",
"vfl-qc-uform-e1-echo": "\n>>> E1 (incl. separator)=%1mm direction=%2 deg",
"vfl-qc-uform-e1-neigung-echo": "\n>>> E1 slope (measured on AS, KS_EIN->KS_AUS)=%1 deg",
"vfl-qc-uform-fa-s-echo": "\n>>> Computed: Fa (descending, 3 deg, before S)=%1mm S (rising, %3 deg, auto-selected)=%2mm",
"vfl-qc-uform-fa-s-negativ": "\nERROR: Fa/S not buildable even with steeper S angles (tried up to 30 degrees) - last try Fa=%1mm S=%2mm. Please adjust E1 or the fixed section.",
"vfl-qc-uform-fa-s-negativ-e1": "\nERROR: Fa/S not buildable even with steeper S angles (tried up to 30 degrees) - last try Fa=%1mm S=%2mm. Minimum E1 (incl. separator) for the steepest angle: approx. %3 mm.",
"vfl-prompt-neigungswinkel-laenge-berechnet": "\nIncline angle (degrees, 0 < angle <= %1) [%1] (deltaL will be calculated and inserted): ",
"vfl-prompt-neigungswinkel-steigend": "\nRising angle (degrees, 0 <= angle <= %1, 0 = level) [%1]: ",
"vfl-alert-winkel-ungueltig-steigend": "Rising angle invalid: %1 degrees. Allowed: 0 <= angle <= %2 degrees.",
@@ -296,8 +323,8 @@
"vfc-block-einfuegepunkt": "\n Block insertion point: X=%1 Y=%2 Z=%3",
"vfc-block-eingefuegt-ksaus": "\n '%1' inserted\n KS_AUS: X=%2 Y=%3 Z=%4",
"vfc-delta-l-h-richtung": "\n %1L=%2 mm %1H=%3 mm Travel direction=%4%5",
"vfc-endpunkt-xyz": "\n End point: X=%1 Y=%2 Z=%3",
"vfc-endpunkt-xyz-dxdz": "\n End point: X=%1 Y=%2 Z=%3 (dx=%4 dz=%5)",
"vfc-endpunkt-xyz": "\n KS_AUS: X=%1 Y=%2 Z=%3",
"vfc-endpunkt-xyz-dxdz": "\n KS_AUS: X=%1 Y=%2 Z=%3 (dx=%4 dz=%5)",
"vfc-fahrtrichtung-ergebnis": "\n>>> Travel direction: %1%2",
"vfc-fehler-block-datei-fehlt": "\n ERROR: block file not found: %1",
"vfc-fehler-block-nicht-in-bibliothek": "\n ERROR: block '%1' not in library",
@@ -557,6 +584,12 @@
"vfl-abgebrochen-kein-ziel": "\n Cancelled - no target point selected.",
"vfl-bogen-ab3-uebergang": "\n\nVario_Bogen_ab_3 (transition horizontal -> 3 degrees)",
"vfl-bogen-auf3-uebergang": "\n\nVario_Bogen_auf_3 (transition 3 degrees -> horizontal)",
"vfl-gf-bogen-ab3-uebergang": "\n\nGF bogen Vario_Bogen_ab_3 (transition horizontal -> 3 degrees, GF-only)",
"vfl-gf-bogen-auf3-uebergang": "\n\nGF bogen Vario_Bogen_auf_3 (transition 3 degrees -> horizontal, GF-only)",
"vfl-gf-bogen-auf6-uebergang": "\n\nGF bogen Vario_Bogen_auf_6 (transition falling -> rising, 6 degrees, GF-only)",
"vfl-gf-bogen-ab6-uebergang": "\n\nGF bogen Vario_Bogen_ab_6 (transition rising -> falling, 6 degrees, GF-only)",
"vfl-gf-bogen-block-fehlt": "\n[GF bogen] Block '%1' not found - see data/ils.",
"vfl-gf-bogen-ks-fehlt": "\n[GF bogen] KS_EIN/KS_AUS in '%1' missing or unreadable.",
"vfl-gf-verteilung-ganz-einlauf": "\n 2 - Entire buffer section at inlet (GF1), no GF2",
"vfl-gf-verteilung-haelfte": "\n 1 - 1/2 GF at outlet (GF2), 1/2 GF at inlet (GF1)",
"vfl-gf-verteilung-header": "\n\nBuffer section (GF) - choose distribution:",
@@ -885,6 +918,10 @@
"vfc-linienzug-modus-1": "\n 1 - Manual entry (click points)",
"vfc-linienzug-modus-2": "\n 2 - 3D objects + target height (boundary-value solver, finished)",
"vfc-linienzug-modus-3": "\n 3 - 3D objects step by step (forward reconstruction, work in progress)",
"vfc-linienzug-modus-4": "\n 4 - QC line with GF (automatic up/down calculation)",
"vfc-linienzug-modus-5": "\n 5 - QC line with GF and U-shape",
"prompt-wahl-1-5": "\nYour choice (1/2/3/4/5) [1]: ",
"vfl-qc-uform-nicht-implementiert": "\nERROR: 'QC line with GF and U-shape' is not yet implemented - please choose option 4 or a different mode.",
"vfc-typ-standard-beschreibung": "Standard VarioFoerderer (AS/ES 90 degrees, offset horizontally)",
"vfc-typ-etage-beschreibung": "Etage VarioFoerderer (AS/ES 30 degrees, directly stacked)",
"vfc-typ-linienzug-beschreibung": "3D line path (mixed GF/VF chain; mode 1 manual / mode 2 target height finished / mode 3 step by step work in progress)",