feat: VF-Linienzug Modus 1 - steigende Gefaellestrecke (Sonderfall, bis 3 Grad) mit automatischen Uebergangsboegen
Neue dritte Option "Steigend" im Dialog "Wie soll die Laenge dieser Gefaellestrecke bestimmt werden?": erlaubt eine GF, die statt zu fallen bis zu 3 Grad steigt (Neigungswinkel 0..3 statt bisher nur 0..3 fallend). Neuer Helfer vfl-bogen-uebergang erkennt anhand der tatsaechlichen Frame-Neigung, ob 0/1/2 Uebergangsboegen (Vario_Bogen_auf_3/ab_3) noetig sind, und baut sie automatisch - fuer den Normalfall (fallend->fallend) bleibt das ein No-Op. Ausserdem in dieser Sitzung: - Modus 2: Separator VOR/NACH bei GF-Segmenten, Wahlfreiheit am Lauf-Anfang/-Ende (Umlenkstation/Motorstation optional), Stufe-1/2- Vereinheitlichung wie in Modus 1. - Stufe-1/Stufe-2-Entscheidungslogik (vfl-winkel-stufe-entscheidung): fehlenden Stufe-2-Fallback fuer "Auf" und "Ab, steiler als 3 Grad" ergaenzt; ungenauen "~3 Grad reine GF"-Kurzschluss in zwei Funktionen durch praezise Berechnung ersetzt (behebt reale Hoehenfehler). - Wizard-Dialoge: DCL-Text-Umbruch fuer lange Hinweise (vflw-umbruch-zeilen, 3 Groessenvarianten statt fester Zeilenzahl), Konsolen-Echo der Wizard-Antworten fuer Debug-Logs. - Neuer Regressionstest TEST_LINIENZUG_STUFE2 (linienzug_tests_stufe2.json) reproduziert den behobenen Stufe-2-Kettenende-Bug; bestehender LZ_Standard-Test an aktuelle Menue-Nummerierung angepasst (Kettenanfang- Menue ist inzwischen 6 statt 4 Optionen gross). - Neue Anleitung doc/vf_linienzug_modus1_anleitung.md: Modus 1 anhand des obigen Testfalls erklaert (Fragen-Bedeutung, Stufe-1/2-Logik, typische Stolperfallen: GF laengenhungrig bei 3 Grad, fester Motor+Separator+ES- Fussabdruck, 90-Grad-Element-Versatz). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -767,6 +767,9 @@
|
||||
|
||||
;; AUS-Element: 30/90 (vor Seite), dann Seite (vor Winkelberechnung, da die
|
||||
;; Laengenanpassung von der AS/ES-Masse abhaengt). Masse fuer Variante setzen.
|
||||
(princ (ssg-text "vf-winkel-aus-header"))
|
||||
(princ (ssg-text "vf-winkel-90"))
|
||||
(princ (ssg-text "vf-winkel-30"))
|
||||
(setq gf-as-winkel (vf-frage-element-winkel "vf-winkel-aus-header"))
|
||||
(princ (ssg-text "gf-seite-aus-header"))
|
||||
(princ (ssg-text "gf-seite-links"))
|
||||
@@ -776,6 +779,9 @@
|
||||
(vf-set-as-masse gf-as-winkel as-seite)
|
||||
|
||||
;; EIN-Element: 30/90 + Seite
|
||||
(princ (ssg-text "vf-winkel-ein-header"))
|
||||
(princ (ssg-text "vf-winkel-90"))
|
||||
(princ (ssg-text "vf-winkel-30"))
|
||||
(setq gf-es-winkel (vf-frage-element-winkel "vf-winkel-ein-header"))
|
||||
(princ (ssg-text "gf-seite-ein-header"))
|
||||
(princ (ssg-text "gf-seite-links"))
|
||||
@@ -1735,6 +1741,9 @@
|
||||
(setq winkel (float winkel))
|
||||
|
||||
;; AUS-Element: 30/90 + Seite
|
||||
(princ (ssg-text "vf-winkel-aus-header"))
|
||||
(princ (ssg-text "vf-winkel-90"))
|
||||
(princ (ssg-text "vf-winkel-30"))
|
||||
(setq gf-as-winkel (vf-frage-element-winkel "vf-winkel-aus-header"))
|
||||
(princ (ssg-text "gf-seite-aus-header"))
|
||||
(princ (ssg-text "gf-seite-links"))
|
||||
@@ -1743,6 +1752,9 @@
|
||||
(setq as-seite (if (= antwort "2") "rechts" "links"))
|
||||
|
||||
;; EIN-Element: 30/90 + Seite
|
||||
(princ (ssg-text "vf-winkel-ein-header"))
|
||||
(princ (ssg-text "vf-winkel-90"))
|
||||
(princ (ssg-text "vf-winkel-30"))
|
||||
(setq gf-es-winkel (vf-frage-element-winkel "vf-winkel-ein-header"))
|
||||
(princ (ssg-text "gf-seite-ein-header"))
|
||||
(princ (ssg-text "gf-seite-links"))
|
||||
|
||||
+173
-56
@@ -621,9 +621,14 @@
|
||||
;; "vf-winkel-ein-header"). Rueckgabe: "30" oder "90" (Default 90).
|
||||
;; Wizard: nutzt vflw-wahl (dcl/vf_linienzug_wizard.dcl, definiert in
|
||||
;; vf_linienzug.lsp) falls dieses Modul geladen und *vfl-wizard-mode* aktiv
|
||||
;; ist - sonst (oder bei jedem Fehler) unveraendert die Konsolen-Fragen
|
||||
;; (princ + getstring, de/en ueber ssg-text). Gemeinsam genutzt von
|
||||
;; Gefaellestrecke.lsp UND vf_linienzug.lsp.
|
||||
;; ist - sonst (oder bei jedem Fehler) unveraendert die Konsolen-Frage
|
||||
;; (getstring, de/en ueber ssg-text). Gemeinsam genutzt von Gefaellestrecke.lsp
|
||||
;; UND vf_linienzug.lsp. Druckt selbst KEINE Kopfzeile/Optionstexte mehr (das
|
||||
;; macht immer der AUFRUFER, unconditional, VOR diesem Aufruf) - sonst fehlt
|
||||
;; die Kopfzeile in der Konsole genau dann, wenn ein vfl-in-value-Wrapper den
|
||||
;; Wert bereits aus der Pending-Queue/dem Journal-Replay liest und diese
|
||||
;; Funktion dadurch gar nicht erst aufgerufen wird (Inkonsistenz Dialog vs.
|
||||
;; Konsole, siehe Aufrufer in vf_linienzug.lsp/Gefaellestrecke.lsp).
|
||||
(defun vf-frage-element-winkel (headerkey / antwort)
|
||||
;; Wizard-Dialog nur, wenn Wizard-Modus aktiv, vflw-wahl geladen UND die GUI
|
||||
;; global nicht abgeschaltet ist (Tests: (ssg-gui-aus)) - sonst Konsole/getstring.
|
||||
@@ -638,12 +643,7 @@
|
||||
(if (or (vl-catch-all-error-p antwort) (null antwort) (= antwort ""))
|
||||
(setq antwort "1"))
|
||||
)
|
||||
(progn
|
||||
(princ (ssg-text headerkey))
|
||||
(princ (ssg-text "vf-winkel-90"))
|
||||
(princ (ssg-text "vf-winkel-30"))
|
||||
(setq antwort (getstring (ssg-text "prompt-wahl-1-2")))
|
||||
)
|
||||
(setq antwort (getstring (ssg-text "prompt-wahl-1-2")))
|
||||
)
|
||||
(if (= antwort "2") "30" "90"))
|
||||
|
||||
@@ -967,7 +967,7 @@
|
||||
(setq horizontal-info nil)
|
||||
(if (and horizontal-p (= richtung "Ab"))
|
||||
(progn
|
||||
(setq horizontal-info (berechne-horizontale-mitte deltaL deltaH "Ab"))
|
||||
(setq horizontal-info (berechne-horizontale-mitte deltaL deltaH "Ab" nil))
|
||||
(if (and horizontal-info (caddr horizontal-info))
|
||||
(setq ergebnis-liste
|
||||
(append ergebnis-liste (list (list 0 (car horizontal-info) (cadr horizontal-info) T))))
|
||||
@@ -1067,6 +1067,94 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; ============================================================
|
||||
;; TEIL 11b: DIALOG-AUSWAHL FUER TYP/LINIENZUG-MODUS (Radio-Buttons)
|
||||
;; ============================================================
|
||||
;; Ersetzen die beiden Konsolen-Listen am Anfang von c:VarioFoerderer durch
|
||||
;; Radio-Button-Dialoge (dcl/variofoerderer.dcl, vfc_typ/vfc_linienzug_modus)
|
||||
;; - alle Optionen sofort sichtbar statt Dropdown. WICHTIG: Radio-Button-
|
||||
;; Labels sind im DCL fest auf Deutsch einprogrammiert (set_tile kann das
|
||||
;; Label eines radio_button nicht setzen, nur den Zustand - siehe DCL-
|
||||
;; Kommentar). Beide Funktionen geben deshalb nur dann etwas anderes als nil
|
||||
;; zurueck, wenn GUI erlaubt ist (Tests: ssg-gui-aus) UND Deutsch aktiv ist -
|
||||
;; sonst faellt der Aufrufer automatisch auf die alte, vollstaendig
|
||||
;; uebersetzte Konsolen-Liste zurueck (unveraendert im Code stehen
|
||||
;; geblieben). Rueckgabe jeweils: Ergebnis bei OK, 'ABBRUCH bei Cancel, nil
|
||||
;; wenn der Dialog gar nicht erst gezeigt werden konnte/durfte.
|
||||
;; "Zurueck" hat an dieser allerersten Frage der ganzen Anlage nichts, wohin es
|
||||
;; zurueckspringen koennte - wird daher lokal aufgeloest: der Dialog wird
|
||||
;; einfach erneut gezeigt (kein Sonderfall fuer den Aufrufer noetig).
|
||||
(defun vfc-dialog-typ-waehlen ( / dcl-pfad dat gtyp ergebnis fertig)
|
||||
(if (and (or (not (car (atoms-family 1 '("SSG-GUI-P")))) (ssg-gui-p))
|
||||
(= *ssg-lang* "de_DE")
|
||||
(equal (mapcar 'car *vf-typ-registry*) '("standard" "etage" "linienzug")))
|
||||
(progn
|
||||
(setq fertig nil)
|
||||
(while (not fertig)
|
||||
(setq fertig t)
|
||||
(setq dcl-pfad (strcat (getenv "DXFM_DCL") "/variofoerderer.dcl"))
|
||||
(setq dat (load_dialog dcl-pfad))
|
||||
(if (not (new_dialog "vfc_typ" dat))
|
||||
(progn (if (and dat (>= dat 0)) (unload_dialog dat)) (setq ergebnis nil))
|
||||
(progn
|
||||
(set_tile "typ_standard" "1")
|
||||
(action_tile "accept"
|
||||
"(setq gtyp (cond ((= (get_tile \"typ_etage\") \"1\") \"etage\")
|
||||
((= (get_tile \"typ_linienzug\") \"1\") \"linienzug\")
|
||||
(t \"standard\")))
|
||||
(done_dialog 1)")
|
||||
(action_tile "cancel" "(done_dialog 0)")
|
||||
(action_tile "back" "(done_dialog 2)")
|
||||
(setq ergebnis (start_dialog))
|
||||
(unload_dialog dat)
|
||||
(cond
|
||||
((= ergebnis 1) (setq ergebnis gtyp))
|
||||
((= ergebnis 2) (setq fertig nil)) ;; Zurueck: Dialog erneut zeigen
|
||||
(t (setq ergebnis 'ABBRUCH))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
ergebnis
|
||||
)
|
||||
nil
|
||||
)
|
||||
)
|
||||
|
||||
;; "Zurueck" springt zur Anlagen-Typ-Frage zurueck - Rueckgabe 'ZURUECK, vom
|
||||
;; Aufrufer (c:VarioFoerderer) ausgewertet (dort erneuter Aufruf von
|
||||
;; vfc-dialog-typ-waehlen statt hier lokal aufzuloesen).
|
||||
(defun vfc-dialog-linienzug-modus-waehlen ( / dcl-pfad dat gmodus ergebnis)
|
||||
(if (and (or (not (car (atoms-family 1 '("SSG-GUI-P")))) (ssg-gui-p))
|
||||
(= *ssg-lang* "de_DE"))
|
||||
(progn
|
||||
(setq dcl-pfad (strcat (getenv "DXFM_DCL") "/variofoerderer.dcl"))
|
||||
(setq dat (load_dialog dcl-pfad))
|
||||
(if (not (new_dialog "vfc_linienzug_modus" dat))
|
||||
(progn (if (and dat (>= dat 0)) (unload_dialog dat)) nil)
|
||||
(progn
|
||||
(set_tile "modus_1" "1")
|
||||
(action_tile "accept"
|
||||
"(setq gmodus (cond ((= (get_tile \"modus_2\") \"1\") 2)
|
||||
((= (get_tile \"modus_3\") \"1\") 3)
|
||||
(t 1)))
|
||||
(done_dialog 1)")
|
||||
(action_tile "cancel" "(done_dialog 0)")
|
||||
(action_tile "back" "(done_dialog 2)")
|
||||
(setq ergebnis (start_dialog))
|
||||
(unload_dialog dat)
|
||||
(cond
|
||||
((= ergebnis 1) gmodus)
|
||||
((= ergebnis 2) 'ZURUECK)
|
||||
(t 'ABBRUCH)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
nil
|
||||
)
|
||||
)
|
||||
|
||||
;; ============================================================
|
||||
;; TEIL 12: DISPATCHER c:VarioFoerderer
|
||||
;; ============================================================
|
||||
@@ -1077,7 +1165,7 @@
|
||||
best-winkel L_GF L_GF1 L_GF2 L_VF
|
||||
idx eintrag wahl antwort verteilung-modus
|
||||
n-scanner vf-nummer hoehe-von hoehe-bis lastEnt
|
||||
staustrecke-basis vf-insert)
|
||||
staustrecke-basis vf-insert dlg-typ dlg-modus zurueck-zu-typ)
|
||||
|
||||
(princ "\n=========================================")
|
||||
(princ (ssg-text "vfc-banner-titel"))
|
||||
@@ -1091,53 +1179,82 @@
|
||||
)
|
||||
)
|
||||
|
||||
(if (and *vf-vorauswahl-typ* (assoc *vf-vorauswahl-typ* *vf-typ-registry*))
|
||||
(progn
|
||||
(setq typ-eintr (assoc *vf-vorauswahl-typ* *vf-typ-registry*))
|
||||
(princ (ssg-textf "vfc-typ-vorgewaehlt" (list *vf-vorauswahl-typ*)))
|
||||
(setq *vf-vorauswahl-typ* nil)
|
||||
)
|
||||
(progn
|
||||
(setq *vf-vorauswahl-typ* nil)
|
||||
(princ (ssg-text "vfc-anlagen-typ-header"))
|
||||
(setq idx 1)
|
||||
(foreach eintr *vf-typ-registry*
|
||||
(princ (ssg-textf "vfc-typ-option" (list idx (nth 3 eintr))))
|
||||
(setq idx (1+ idx))
|
||||
;; Aeussere Schleife nur wegen "Zurueck" bei der Linienzug-Modus-Frage
|
||||
;; (springt zurueck zur Anlagen-Typ-Frage) - fuer Standard/Etage bleibt
|
||||
;; zurueck-zu-typ immer nil, die Schleife laeuft dann genau einmal.
|
||||
(setq zurueck-zu-typ t)
|
||||
(while zurueck-zu-typ
|
||||
(setq zurueck-zu-typ nil)
|
||||
(if (and *vf-vorauswahl-typ* (assoc *vf-vorauswahl-typ* *vf-typ-registry*))
|
||||
(progn
|
||||
(setq typ-eintr (assoc *vf-vorauswahl-typ* *vf-typ-registry*))
|
||||
(princ (ssg-textf "vfc-typ-vorgewaehlt" (list *vf-vorauswahl-typ*)))
|
||||
(setq *vf-vorauswahl-typ* nil)
|
||||
)
|
||||
(progn
|
||||
(setq *vf-vorauswahl-typ* nil)
|
||||
(setq dlg-typ (vfc-dialog-typ-waehlen))
|
||||
(cond
|
||||
((eq dlg-typ 'ABBRUCH) (exit))
|
||||
(dlg-typ (setq typ-eintr (assoc dlg-typ *vf-typ-registry*)))
|
||||
(t
|
||||
;; Dialog nicht verfuegbar/nicht erlaubt (GUI aus, andere Sprache,
|
||||
;; abweichende Registry) - alte Konsolen-Liste unveraendert.
|
||||
(princ (ssg-text "vfc-anlagen-typ-header"))
|
||||
(setq idx 1)
|
||||
(foreach eintr *vf-typ-registry*
|
||||
(princ (ssg-textf "vfc-typ-option" (list idx (nth 3 eintr))))
|
||||
(setq idx (1+ idx))
|
||||
)
|
||||
(setq wahl (getint (ssg-textf "vfc-prompt-wahl-1-n"
|
||||
(list (length *vf-typ-registry*)))))
|
||||
(if (or (null wahl) (< wahl 1) (> wahl (length *vf-typ-registry*)))
|
||||
(setq wahl 1))
|
||||
(setq typ-eintr (nth (1- wahl) *vf-typ-registry*))
|
||||
)
|
||||
)
|
||||
)
|
||||
(setq wahl (getint (ssg-textf "vfc-prompt-wahl-1-n"
|
||||
(list (length *vf-typ-registry*)))))
|
||||
(if (or (null wahl) (< wahl 1) (> wahl (length *vf-typ-registry*)))
|
||||
(setq wahl 1))
|
||||
(setq typ-eintr (nth (1- wahl) *vf-typ-registry*))
|
||||
)
|
||||
)
|
||||
(setq anlage-typ (nth 0 typ-eintr))
|
||||
(setq berechne-fn (nth 1 typ-eintr))
|
||||
(setq einfuege-fn (nth 2 typ-eintr))
|
||||
(princ (ssg-textf "vfc-typ-gewaehlt" (list anlage-typ)))
|
||||
(setq anlage-typ (nth 0 typ-eintr))
|
||||
(setq berechne-fn (nth 1 typ-eintr))
|
||||
(setq einfuege-fn (nth 2 typ-eintr))
|
||||
(princ (ssg-textf "vfc-typ-gewaehlt" (list anlage-typ)))
|
||||
|
||||
;; Sonderfall "linienzug": eigener Befehlsablauf (interaktive Mehrsegment-
|
||||
;; Kette mit gemischten GF/VF-Segmenten), passt nicht in das berechne-fn/
|
||||
;; einfuege-fn-Schema fuer ein einzelnes durchgehendes Segment - siehe
|
||||
;; vf_linienzug.lsp. Dispatcht hier direkt und beendet den Standard-Ablauf.
|
||||
(if (= anlage-typ "linienzug")
|
||||
(progn
|
||||
(princ (ssg-text "vfc-linienzug-modus-header"))
|
||||
(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")))
|
||||
;; Konsolen-Nummer -> interne Funktion:
|
||||
;; 2 = fertiger Ziel-Hoehe-Modus (intern vf-linienzug-modus2)
|
||||
;; 3 = alter Vorwaerts-Nachbau (intern vf-linienzug-modus3, wird umgebaut)
|
||||
;; 1/Default = frische manuelle Eingabe (Journal vorher zuruecksetzen). Ein
|
||||
;; abgebrochener Bau bleibt als VF_n-Block stehen und wird per Doppelklick
|
||||
;; fortgesetzt/editiert (vfl-edit-ent), kein separater Menuepunkt noetig.
|
||||
(cond ((= wahl 2) (vf-linienzug-modus2))
|
||||
((= wahl 3) (vf-linienzug-modus3))
|
||||
(t (vfl-journal-reset) (vf-linienzug-modus)))
|
||||
(exit)
|
||||
;; Sonderfall "linienzug": eigener Befehlsablauf (interaktive Mehrsegment-
|
||||
;; Kette mit gemischten GF/VF-Segmenten), passt nicht in das berechne-fn/
|
||||
;; einfuege-fn-Schema fuer ein einzelnes durchgehendes Segment - siehe
|
||||
;; vf_linienzug.lsp. Dispatcht hier direkt und beendet den Standard-Ablauf.
|
||||
(if (= anlage-typ "linienzug")
|
||||
(progn
|
||||
(setq dlg-modus (vfc-dialog-linienzug-modus-waehlen))
|
||||
(cond
|
||||
((eq dlg-modus 'ABBRUCH) (exit))
|
||||
((eq dlg-modus 'ZURUECK) (setq zurueck-zu-typ t))
|
||||
(dlg-modus (setq wahl dlg-modus))
|
||||
(t
|
||||
;; Dialog nicht verfuegbar/nicht erlaubt - alte Konsolen-Liste.
|
||||
(princ (ssg-text "vfc-linienzug-modus-header"))
|
||||
(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")))
|
||||
)
|
||||
)
|
||||
(if (not zurueck-zu-typ)
|
||||
(progn
|
||||
;; Konsolen-Nummer -> interne Funktion:
|
||||
;; 2 = fertiger Ziel-Hoehe-Modus (intern vf-linienzug-modus2)
|
||||
;; 3 = alter Vorwaerts-Nachbau (intern vf-linienzug-modus3, wird umgebaut)
|
||||
;; 1/Default = frische manuelle Eingabe (Journal vorher zuruecksetzen). Ein
|
||||
;; abgebrochener Bau bleibt als VF_n-Block stehen und wird per Doppelklick
|
||||
;; fortgesetzt/editiert (vfl-edit-ent), kein separater Menuepunkt noetig.
|
||||
(cond ((= wahl 2) (vf-linienzug-modus2))
|
||||
((= wahl 3) (vf-linienzug-modus3))
|
||||
(t (vfl-journal-reset) (vf-linienzug-modus)))
|
||||
(exit)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1198,7 +1315,7 @@
|
||||
;; Bibliothek ist durch den berechne-fn-Aufruf oben bereits initialisiert.
|
||||
(if (and (= anlage-typ "standard") (= richtung "Ab"))
|
||||
(progn
|
||||
(setq horizontal-info (berechne-horizontale-mitte deltaL deltaH "Ab"))
|
||||
(setq horizontal-info (berechne-horizontale-mitte deltaL deltaH "Ab" nil))
|
||||
(if (and horizontal-info (caddr horizontal-info))
|
||||
(progn
|
||||
(setq ergebnis-liste
|
||||
|
||||
@@ -271,6 +271,11 @@
|
||||
;; Wert geometrisch herleiten laesst statt empirisch fixiert zu bleiben.
|
||||
(if (null *vfk-bruecke-korrektur*) (setq *vfk-bruecke-korrektur* 10.48))
|
||||
|
||||
;; Konstruktions-Obergrenze (mm) fuer die Gesamtlaenge eines zusammen-
|
||||
;; haengenden VF-Laufs (Modus 2, vf-linienzug-modus2) - reiner Hinweis beim
|
||||
;; Ueberschreiten, kein Abbruch. Aktiv referenziert.
|
||||
(if (null *vfk-vf-laenge-max*) (setq *vfk-vf-laenge-max* 25000.0))
|
||||
|
||||
(setq *vfk-konstanten-geladen* t)
|
||||
(princ "\nvf_konstanten geladen.")
|
||||
(princ)
|
||||
|
||||
+2864
-711
File diff suppressed because it is too large
Load Diff
+34
-14
@@ -337,20 +337,32 @@
|
||||
;; erreichbar (im Rahmen von deltaL), GF1+GF2 werden einfach laenger.
|
||||
;; - "Auf": wirkt der gewuenschten Steigung entgegen -> nur fuer SEHR
|
||||
;; KLEINE deltaH ueberhaupt gueltig (wenige cm).
|
||||
;; schon-flach: T => KEIN Bogen1 (auf_3) am Eintritt - der Aufrufer ist
|
||||
;; bereits flach (0 Grad) angekommen und wird KEINEN Uebergangsbogen bauen
|
||||
;; (vermeidet ein ueberfluessiges auf_3/ab_3-Paar, wenn eine bereits flache
|
||||
;; Kette ohnehin ein horizontales Mittelstueck braucht - siehe
|
||||
;; vfl-body-abschluss). Default nil (unveraendertes Verhalten fuer alle
|
||||
;; anderen Aufrufer, die immer von der 3-Grad-Basis starten).
|
||||
;; Rueckgabe: (GF_total L_VF gueltig) oder nil falls Boegen nicht messbar.
|
||||
(defun berechne-horizontale-mitte (deltaL deltaH richtung /
|
||||
(defun berechne-horizontale-mitte (deltaL deltaH richtung schon-flach /
|
||||
mass1 mass2 rad3 bogen-x1 bogen-z1
|
||||
bogen-x2 bogen-z2 deltaH-signiert
|
||||
A-hz B-hz GF_total L_VF-hz gueltig)
|
||||
(setq mass1 (get-bogen-mass bogen-auf (fix *vfk-gefaelle-winkel*)))
|
||||
(setq mass1 (if schon-flach t (get-bogen-mass bogen-auf (fix *vfk-gefaelle-winkel*))))
|
||||
(setq mass2 (get-bogen-mass bogen-ab (fix *vfk-gefaelle-winkel*)))
|
||||
(if (or (null mass1) (null mass2))
|
||||
nil
|
||||
(progn
|
||||
(setq rad3 (* *vfk-gefaelle-winkel* (/ pi 180.0)))
|
||||
;; Bogen1 (immer auf_3): Eintritt bei 3 Grad (von Umlenkstation), biegt auf 0 Grad
|
||||
(setq bogen-x1 (+ (* (car mass1) (cos rad3)) (* (caddr mass1) (sin rad3))))
|
||||
(setq bogen-z1 (+ (* (- (car mass1)) (sin rad3)) (* (caddr mass1) (cos rad3))))
|
||||
;; Bogen1 (immer auf_3): Eintritt bei 3 Grad (von Umlenkstation), biegt
|
||||
;; auf 0 Grad - entfaellt bei schon-flach (kein Eintrittsbogen noetig).
|
||||
(if schon-flach
|
||||
(setq bogen-x1 0.0 bogen-z1 0.0)
|
||||
(progn
|
||||
(setq bogen-x1 (+ (* (car mass1) (cos rad3)) (* (caddr mass1) (sin rad3))))
|
||||
(setq bogen-z1 (+ (* (- (car mass1)) (sin rad3)) (* (caddr mass1) (cos rad3))))
|
||||
)
|
||||
)
|
||||
;; Bogen2 (immer ab_3): Eintritt bei 0 Grad (von der horizontalen Mitte), biegt auf 3 Grad
|
||||
(setq bogen-x2 (car mass2))
|
||||
(setq bogen-z2 (caddr mass2))
|
||||
@@ -412,7 +424,11 @@
|
||||
;; Beginnt eine reine VF-Einheit: bringt die Kette von der (3-Grad-geneigten)
|
||||
;; AS-Seite ueber GF1 + Separator bis zur Umlenkstation. Wird pro VF-Einheit
|
||||
;; GENAU EINMAL aufgerufen (auch wenn danach mehrere Sub-Segmente folgen).
|
||||
(defun vfs-vf-entry (aktueller-punkt L_GF1 hz)
|
||||
;; ohne-separator: T => der Separator entfaellt (das vorherige Kettenglied
|
||||
;; IST bereits ein Separator, siehe letzter-typ in vf-linienzug-modus - eine
|
||||
;; gueltige Trennstelle braucht nur einen Separator, nicht zwei hintereinander).
|
||||
;; L_GF1 sollte in diesem Fall vom Aufrufer bereits auf 0 gesetzt sein.
|
||||
(defun vfs-vf-entry (aktueller-punkt L_GF1 hz ohne-separator)
|
||||
(if (null hz) (setq hz 0.0))
|
||||
(setq hz (float hz))
|
||||
;; 1. Gefaellestrecke GF1 (verbindet AS-Neigung mit Umlenkstation)
|
||||
@@ -425,13 +441,17 @@
|
||||
)
|
||||
(princ (ssg-text "vfs-vf-eingang-gf1-skip"))
|
||||
)
|
||||
;; 2. Separator (am GF1-Ende / vor Umlenkstation)
|
||||
(princ (ssg-text "vfs-vf-eingang-separator"))
|
||||
(setq aktueller-punkt
|
||||
(insert-rotated-block-with-ks "Staustrecke_Separator_SP_300_mm" aktueller-punkt
|
||||
(ssg-cfg-or "vario" "gefaelle_winkel" 3)
|
||||
(ssg-cfg-or "vario" "separator_block_dx" 300)
|
||||
(ssg-cfg-or "vario" "separator_block_dz" 0) hz))
|
||||
;; 2. Separator (am GF1-Ende / vor Umlenkstation) - entfaellt bei ohne-separator
|
||||
(if (not ohne-separator)
|
||||
(progn
|
||||
(princ (ssg-text "vfs-vf-eingang-separator"))
|
||||
(setq aktueller-punkt
|
||||
(insert-rotated-block-with-ks "Staustrecke_Separator_SP_300_mm" aktueller-punkt
|
||||
(ssg-cfg-or "vario" "gefaelle_winkel" 3)
|
||||
(ssg-cfg-or "vario" "separator_block_dx" 300)
|
||||
(ssg-cfg-or "vario" "separator_block_dz" 0) hz))
|
||||
)
|
||||
)
|
||||
;; 3. Umlenkstation
|
||||
(princ (ssg-text "vfs-vf-eingang-umlenk"))
|
||||
(setq aktueller-punkt
|
||||
@@ -604,7 +624,7 @@
|
||||
(defun vfs-mitte-teil (aktueller-punkt richtung best-winkel L_GF1 L_GF2 L_VF hz)
|
||||
(if (null hz) (setq hz 0.0))
|
||||
(setq hz (float hz))
|
||||
(setq aktueller-punkt (vfs-vf-entry aktueller-punkt L_GF1 hz))
|
||||
(setq aktueller-punkt (vfs-vf-entry aktueller-punkt L_GF1 hz nil))
|
||||
(setq aktueller-punkt (vfs-vf-koerper aktueller-punkt richtung best-winkel L_VF hz))
|
||||
(setq aktueller-punkt (vfs-vf-exit aktueller-punkt L_GF2 hz t))
|
||||
aktueller-punkt
|
||||
|
||||
+92
-10
@@ -1,16 +1,98 @@
|
||||
// ============================================================
|
||||
// variofoerderer.dcl - Standard-VarioFoerderer Parameter-Eingabe
|
||||
// Zwei Dialoge fuer den Standardfall (anlage-typ "standard") von
|
||||
// c:VarioFoerderer, ersetzen die interaktive Werteingabe (Modus
|
||||
// "Werteingabe") aus vf-eingabe-abfragen / vf_core.lsp:
|
||||
// Dialog 1 (variofoerderer_basis): deltaL, deltaH, Foerderrichtung,
|
||||
// Einfuegehoehe, Fahrtrichtung, Seite.
|
||||
// Dialog 2 (variofoerderer_winkel): Winkel (dynamisch berechnete
|
||||
// gueltige Varianten), Verteilung der Gefaellestrecken vorne/hinten.
|
||||
// Die 3D-Linie-Eingabe (Modus "3D-Linie") und andere Anlagen-Typen
|
||||
// (Etage, Linienzug) bleiben interaktiv (Kommandozeile).
|
||||
// variofoerderer.dcl - VarioFoerderer Parameter-Eingabe
|
||||
// Dialoge fuer c:VarioFoerderer (vf_core.lsp):
|
||||
// vfc_typ: Anlagen-Typ waehlen (Standard/Etage/Linienzug) - ersetzt die
|
||||
// Konsolen-Liste am Befehlsanfang. Radio-Buttons statt Dropdown, daher
|
||||
// Labels FEST auf Deutsch (siehe Kommentar bei vfc_linienzug_modus).
|
||||
// vfc_linienzug_modus: NUR bei Typ "Linienzug" - Modus 1/2/3 waehlen.
|
||||
// variofoerderer_basis/variofoerderer_winkel: Werteingabe fuer den
|
||||
// Standardfall (anlage-typ "standard"): deltaL, deltaH, Foerderrichtung,
|
||||
// Einfuegehoehe, Fahrtrichtung, Seite, Winkel, GF-Verteilung.
|
||||
// Die 3D-Linie-Eingabe (Modus "3D-Linie"), der Etage-Typ und die
|
||||
// Linienzug-Kette selbst (nach der Modus-Wahl) bleiben interaktiv
|
||||
// (Kommandozeile bzw. eigener Wizard in vf_linienzug_wizard.dcl).
|
||||
// ============================================================
|
||||
|
||||
// Anlagen-Typ waehlen (Standard/Etage/Linienzug). Radio-Buttons statt
|
||||
// Dropdown - alle Optionen sofort sichtbar. WICHTIG: Labels sind hier FEST
|
||||
// einprogrammiert (Deutsch) und NICHT wie bei popup_list zur Laufzeit aus
|
||||
// ssg-text befuellbar (set_tile kann das Label eines radio_button nicht
|
||||
// setzen, nur den Zustand - siehe auch dcl/vfl_edit_modus.dcl). Bei
|
||||
// aktivem Englisch (DXFM_LANG=en_GB) faellt vfc-dialog-typ-waehlen in
|
||||
// vf_core.lsp automatisch auf die alte, vollstaendig uebersetzte
|
||||
// Konsolen-Liste zurueck (siehe dortiger Kommentar).
|
||||
vfc_typ : dialog {
|
||||
label = "VarioFoerderer - Anlagen-Typ";
|
||||
|
||||
: boxed_radio_column {
|
||||
label = "Anlagen-Typ waehlen:";
|
||||
key = "typ";
|
||||
|
||||
: radio_button {
|
||||
key = "typ_standard";
|
||||
label = "Standard VarioFoerderer (AS/ES 90 Grad, horizontal versetzt)";
|
||||
value = "1";
|
||||
}
|
||||
: radio_button {
|
||||
key = "typ_etage";
|
||||
label = "Etage VarioFoerderer (AS/ES 30 Grad, direkt uebereinander)";
|
||||
}
|
||||
: radio_button {
|
||||
key = "typ_linienzug";
|
||||
label = "3D-Linienzug (gemischte GF/VF-Kette)";
|
||||
}
|
||||
}
|
||||
|
||||
// 3-Button-Zeile wie im Linienzug-Wizard (dcl/vf_linienzug_wizard.dcl):
|
||||
// Zurueck(2)/Ok Weiter(1)/Abbrechen(0). "Zurueck" hat hier nichts, wohin es
|
||||
// zurueckspringen koennte (erste Frage der gesamten Anlage) - vf_core.lsp
|
||||
// zeigt in diesem Fall einfach denselben Dialog erneut.
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// Linienzug-Modus waehlen (nur wenn Anlagen-Typ = Linienzug). Radio-Buttons,
|
||||
// gleicher Deutsch-fest-Grund wie bei vfc_typ oben.
|
||||
vfc_linienzug_modus : dialog {
|
||||
label = "VarioFoerderer - Linienzug Modus";
|
||||
|
||||
: boxed_radio_column {
|
||||
label = "Linienzug-Modus waehlen:";
|
||||
key = "modus";
|
||||
|
||||
: radio_button {
|
||||
key = "modus_1";
|
||||
label = "Manuelle Eingabe (Punkte klicken)";
|
||||
value = "1";
|
||||
}
|
||||
: radio_button {
|
||||
key = "modus_2";
|
||||
label = "3D-Objekte + Ziel-Hoehe (Randwert-Solver, fertig)";
|
||||
}
|
||||
: radio_button {
|
||||
key = "modus_3";
|
||||
label = "3D-Objekte stueckweise (Vorwaerts-Nachbau, in Arbeit)";
|
||||
}
|
||||
}
|
||||
|
||||
// "Zurueck" springt hier sinnvoll zur Anlagen-Typ-Frage zurueck (siehe
|
||||
// vfc-dialog-linienzug-modus-waehlen/c:VarioFoerderer).
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
variofoerderer_basis : dialog {
|
||||
label = "VarioFoerderer (Standard) - Eingabe";
|
||||
|
||||
|
||||
+713
-62
@@ -31,7 +31,14 @@ vflw_zahl : dialog {
|
||||
}
|
||||
}
|
||||
|
||||
ok_cancel;
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// Mehrfachauswahl (ersetzt eine princ-Menue-Liste + getstring/getint).
|
||||
@@ -55,7 +62,14 @@ vflw_wahl : dialog {
|
||||
}
|
||||
}
|
||||
|
||||
ok_cancel;
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
@@ -112,14 +126,24 @@ vflw_punkt_zahl : dialog {
|
||||
}
|
||||
}
|
||||
|
||||
ok_cancel;
|
||||
// "back" nutzt hier done_dialog 3 statt 2 - Code 2 ist bereits durch den
|
||||
// "Punkt waehlen..."-Button oben belegt (siehe vflw-gruppe-punkt-hoehe-impl).
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// 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.
|
||||
// aus ist. Radio-Buttons statt Dropdown, Labels daher fest auf Deutsch
|
||||
// (siehe Kommentar bei vfc_typ in variofoerderer.dcl).
|
||||
vflw_as : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
@@ -133,24 +157,34 @@ vflw_as : dialog {
|
||||
key = "setzen";
|
||||
label = "Ja, setzen";
|
||||
}
|
||||
: popup_list {
|
||||
key = "winkel";
|
||||
: boxed_radio_column {
|
||||
label = "Winkel:";
|
||||
width = 20;
|
||||
key = "winkel";
|
||||
: radio_button { key = "winkel_90"; label = "90 Grad"; value = "1"; }
|
||||
: radio_button { key = "winkel_30"; label = "30 Grad"; }
|
||||
}
|
||||
: popup_list {
|
||||
key = "seite";
|
||||
: boxed_radio_column {
|
||||
label = "Seite:";
|
||||
width = 20;
|
||||
key = "seite";
|
||||
: radio_button { key = "seite_links"; label = "Links"; value = "1"; }
|
||||
: radio_button { key = "seite_rechts"; label = "Rechts"; }
|
||||
}
|
||||
}
|
||||
|
||||
ok_cancel;
|
||||
: 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 + 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.
|
||||
// Winkel + Seite. Wiederverwendet fuer GF-Bogen (3 Winkel-Optionen: 30/60/90)
|
||||
// UND ES-Element am Kettenende (2 Winkel-Optionen: 90/30 - dort wird
|
||||
// "winkel_60" per mode_tile deaktiviert, siehe vflw-gruppe-winkel-seite-impl/
|
||||
// vfl-glied-as-es-dialog). Radio-Buttons statt Dropdown, Labels fest deutsch.
|
||||
vflw_winkel_seite : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
@@ -160,22 +194,33 @@ vflw_winkel_seite : dialog {
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: popup_list {
|
||||
key = "winkel";
|
||||
: boxed_radio_column {
|
||||
label = "Winkel:";
|
||||
width = 20;
|
||||
key = "winkel";
|
||||
: radio_button { key = "winkel_30"; label = "30 Grad"; }
|
||||
: radio_button { key = "winkel_60"; label = "60 Grad"; }
|
||||
: radio_button { key = "winkel_90"; label = "90 Grad"; value = "1"; }
|
||||
}
|
||||
: popup_list {
|
||||
key = "seite";
|
||||
: boxed_radio_column {
|
||||
label = "Seite:";
|
||||
width = 20;
|
||||
key = "seite";
|
||||
: radio_button { key = "seite_links"; label = "Links"; value = "1"; }
|
||||
: radio_button { key = "seite_rechts"; label = "Rechts"; }
|
||||
}
|
||||
}
|
||||
|
||||
ok_cancel;
|
||||
: 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 {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
@@ -185,30 +230,41 @@ vflw_variokurve : dialog {
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: popup_list {
|
||||
key = "winkel";
|
||||
: boxed_radio_column {
|
||||
label = "Winkel:";
|
||||
width = 20;
|
||||
key = "winkel";
|
||||
: radio_button { key = "winkel_30"; label = "30 Grad"; }
|
||||
: radio_button { key = "winkel_60"; label = "60 Grad"; }
|
||||
: radio_button { key = "winkel_90"; label = "90 Grad"; value = "1"; }
|
||||
}
|
||||
: popup_list {
|
||||
key = "seite";
|
||||
: boxed_radio_column {
|
||||
label = "Seite:";
|
||||
width = 20;
|
||||
key = "seite";
|
||||
: radio_button { key = "seite_links"; label = "Links"; value = "1"; }
|
||||
: radio_button { key = "seite_rechts"; label = "Rechts"; }
|
||||
}
|
||||
: popup_list {
|
||||
key = "variante";
|
||||
: boxed_radio_column {
|
||||
label = "Variante:";
|
||||
width = 20;
|
||||
key = "variante";
|
||||
: radio_button { key = "variante_aussen"; label = "Aussen"; value = "1"; }
|
||||
: radio_button { key = "variante_innen"; label = "Innen"; }
|
||||
}
|
||||
}
|
||||
|
||||
ok_cancel;
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// 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.
|
||||
// Kopfkommentar oben. Radio-Buttons statt Dropdown, Labels fest deutsch.
|
||||
vflw_gefaelle : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
@@ -218,10 +274,11 @@ vflw_gefaelle : dialog {
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: popup_list {
|
||||
key = "modus";
|
||||
: boxed_radio_column {
|
||||
label = "Eingabe als:";
|
||||
width = 40;
|
||||
key = "modus";
|
||||
: radio_button { key = "modus_winkel"; label = "Neigungswinkel eingeben"; value = "1"; }
|
||||
: radio_button { key = "modus_hoehe"; label = "Gegebene Hoehe (Zielhoehe)"; }
|
||||
}
|
||||
: text {
|
||||
key = "wlabel";
|
||||
@@ -232,15 +289,64 @@ vflw_gefaelle : dialog {
|
||||
label = "";
|
||||
edit_width = 10;
|
||||
}
|
||||
// Nur befuellt/sichtbar relevant, wenn vflw-gruppe-gefaelle-impl mit
|
||||
// nur-winkel=T aufgerufen wird (Zweig "Zielhoehe zuerst festlegen" bei
|
||||
// "Neue Linie: GF") - zeigt dann den Hinweis, dass deltaL daraus
|
||||
// berechnet wird, statt der sonst hier stehenden Hoehe-Option.
|
||||
: text {
|
||||
key = "hinweis";
|
||||
label = "";
|
||||
}
|
||||
}
|
||||
|
||||
ok_cancel;
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// Horizontales Stueck: Separator-vor + Separator-nach + "Foerderer-Ende?"
|
||||
// (3 Optionen) in einem Bildschirm. Kein Punkt-Feld - siehe Kopfkommentar
|
||||
// oben.
|
||||
vflw_horizontal : dialog {
|
||||
// "Wie soll die Laenge dieser Gefaellestrecke bestimmt werden?" (Neue Linie:
|
||||
// GF) - Endpunkt-Pick (heutiges Verhalten) ODER Zielhoehe zuerst festlegen
|
||||
// (Laenge wird dann aus Zielhoehe+Winkel berechnet, siehe
|
||||
// vflw-gruppe-gf-laenge-modus-impl). Nur gezeigt, wenn bereits ein Frame
|
||||
// existiert (Kettenanfang braucht weiterhin zwingend den Pick fuer die
|
||||
// Richtung). Radio-Buttons statt Dropdown, Labels fest deutsch.
|
||||
vflw_gf_laenge_modus : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
: column {
|
||||
: text {
|
||||
key = "kopf";
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: boxed_radio_column {
|
||||
key = "modus";
|
||||
label = "";
|
||||
: 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)"; }
|
||||
}
|
||||
}
|
||||
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// Separator VOR/NACH bei "Neue Linie: GF": beide Ja/Nein-Fragen in einem
|
||||
// Bildschirm (Toggles, da echte Ja/Nein-Fragen - kein Radio-Cluster noetig).
|
||||
// Siehe vflw-gruppe-sep-gf-impl in vf_linienzug.lsp.
|
||||
vflw_sep_gf : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
: column {
|
||||
@@ -251,20 +357,502 @@ vflw_horizontal : dialog {
|
||||
}
|
||||
: toggle {
|
||||
key = "sepvor";
|
||||
label = "Separator VOR dem Stueck";
|
||||
label = "Separator VOR dieser Gefaellestrecke";
|
||||
}
|
||||
: toggle {
|
||||
key = "sepnach";
|
||||
label = "Separator NACH dem Stueck";
|
||||
}
|
||||
: popup_list {
|
||||
key = "istende";
|
||||
label = "Foerderer-Ende:";
|
||||
width = 45;
|
||||
label = "Separator NACH dieser Gefaellestrecke";
|
||||
}
|
||||
}
|
||||
|
||||
ok_cancel;
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// Horizontales Stueck: nur noch "Foerderer-Ende?" (3 Optionen) - kein
|
||||
// Separator mehr (siehe vfl-baue-horizontal-koerper). Kein Punkt-Feld -
|
||||
// siehe Kopfkommentar oben. Radio-Buttons statt Dropdown, Labels daher fest
|
||||
// auf Deutsch (siehe Kommentar bei vfc_typ in variofoerderer.dcl).
|
||||
vflw_horizontal : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
: column {
|
||||
: text {
|
||||
key = "kopf";
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: boxed_radio_column {
|
||||
label = "Foerderer-Ende:";
|
||||
key = "istende";
|
||||
|
||||
: radio_button {
|
||||
key = "istende_0";
|
||||
label = "Ja (nur Motorstation setzen)";
|
||||
value = "1";
|
||||
}
|
||||
: radio_button {
|
||||
key = "istende_1";
|
||||
label = "Nein (weiterbauen)";
|
||||
}
|
||||
: radio_button {
|
||||
key = "istende_2";
|
||||
label = "Ja (Motorstation setzen, Kettenende definieren)";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// "Naechstes Element waehlen" - Hauptmenue des Linienzug-Aufbaus (Modus 1).
|
||||
// IMMER alle 6 Optionen im Dialog vorhanden (stabile Keys) - "Vario-Kurve"
|
||||
// wird per mode_tile deaktiviert, wenn kein echter Kettenanfang vorliegt
|
||||
// (siehe vflw-gruppe-naechstes-element-impl, das dort auch die Positions-
|
||||
// Nummerierung passend umrechnet). Radio-Buttons statt Dropdown, Labels fest
|
||||
// deutsch, OHNE Nummern-Prefix (anders als die Konsolen-Variante - hier
|
||||
// braucht es keine Zifferneingabe).
|
||||
vflw_naechstes_element : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
: column {
|
||||
: text {
|
||||
key = "kopf";
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: boxed_radio_column {
|
||||
key = "wahl";
|
||||
label = "";
|
||||
: radio_button { key = "wahl_gfbogen"; label = "GF-Bogen (horizontale Kurve)"; }
|
||||
: radio_button { key = "wahl_variokurve"; label = "Vario-Kurve (horizontale Kurve, 30/60/90 Grad)"; }
|
||||
: radio_button { key = "wahl_liniegf"; label = "Neue Linie: GF (Gefaellestrecke)"; value = "1"; }
|
||||
: radio_button { key = "wahl_linievf"; label = "Neue Linie: Ab/Auf VF (VarioFoerderer-Einheit)"; }
|
||||
: radio_button { key = "wahl_horizontalvf"; label = "Neue VF mit horizontalem Anfang (Horizontal-Stueck)"; }
|
||||
: radio_button { key = "wahl_linieende"; label = "Neue Linie BIS Kettenende (danach Separator + ES-Element)"; }
|
||||
}
|
||||
}
|
||||
|
||||
// PROTOTYP "Zurueck"-Button (siehe Plan curious-prancing-parasol.md): ersetzt
|
||||
// ok_cancel durch eine eigene 3-Button-Zeile. done_dialog-Codes: 0=Abbrechen
|
||||
// (unveraendert, is_cancel -> ESC/Leertaste wirkt weiterhin), 1=Weiter
|
||||
// (unveraendert, is_default), NEU 2=Zurueck (verwirft das zuletzt gebaute
|
||||
// Kettenglied und fragt es neu ab, siehe vflw-gruppe-naechstes-element-impl/
|
||||
// vfl-modus-abbruch-sichern).
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// "Ist das das Kettenende?" (Linie-GF-Segment-Schleife) - 3 feste Optionen.
|
||||
// Radio-Buttons statt Dropdown, Labels fest deutsch.
|
||||
vflw_kettenende : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
: column {
|
||||
: text {
|
||||
key = "kopf";
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: boxed_radio_column {
|
||||
key = "wahl";
|
||||
label = "";
|
||||
: radio_button { key = "wahl_ja_es"; label = "Ja (ES-Element setzen)"; }
|
||||
: radio_button { key = "wahl_ja_ohne_es"; label = "Ja (ohne ES-Element setzen)"; }
|
||||
: radio_button { key = "wahl_nein"; label = "Nein (weiterbauen)"; 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// "Ist das Kettenende?" (2-Optionen-Variante - Ja/Nein statt der 3-Optionen-
|
||||
// Variante vflw_kettenende oben). Radio-Buttons statt Dropdown, Labels fest
|
||||
// deutsch.
|
||||
vflw_ist_kettenende_2opt : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
: column {
|
||||
: text {
|
||||
key = "kopf";
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: boxed_radio_column {
|
||||
key = "wahl";
|
||||
label = "";
|
||||
: radio_button { key = "wahl_ja"; label = "Ja (Separator + ES-Element setzen)"; }
|
||||
: radio_button { key = "wahl_nein"; label = "Nein (weiterbauen)"; 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// GF-Verteilung (halbe Staustrecke am Ausgang GF2 oder alles am Einlauf
|
||||
// GF1) - wiederverwendet fuer Modus 1 (vfl-vf-einheit-abschluss) UND Modus 3
|
||||
// (Segment-Loop, br-gf-mode). Radio-Buttons statt Dropdown, Labels fest
|
||||
// deutsch.
|
||||
vflw_gf_verteilung : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
: column {
|
||||
: text {
|
||||
key = "kopf";
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: boxed_radio_column {
|
||||
key = "wahl";
|
||||
label = "";
|
||||
: radio_button { key = "wahl_haelfte"; label = "Haelfte am Einlauf (GF1) + Haelfte am Ausgang (GF2)"; }
|
||||
: radio_button { key = "wahl_einlauf"; label = "Alles am Einlauf (GF1), kein GF2"; 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// "Naechstes im VF" (innerhalb einer laufenden VF-Einheit weiterbauen):
|
||||
// Horizontaler Foerderer / Vario-Kurve / Auf-Ab-Foerderer. Radio-Buttons
|
||||
// statt Dropdown, Labels fest deutsch.
|
||||
vflw_naechstes_im_vf : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
: column {
|
||||
: text {
|
||||
key = "kopf";
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: boxed_radio_column {
|
||||
key = "wahl";
|
||||
label = "";
|
||||
: radio_button { key = "wahl_horizontal"; label = "Horizontaler Foerderer (Linie ohne Hoehendifferenz)"; }
|
||||
: radio_button { key = "wahl_variokurve"; label = "Vario-Kurve (30/60/90 Grad)"; }
|
||||
: radio_button { key = "wahl_aufab"; label = "Auf/Ab-Foerderer (Linie mit Hoehendifferenz)"; 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// Punkt-7-Winkel/Hoehen-Tabelle (vfl-waehle-winkel-hoehen-tabelle): 12 feste
|
||||
// Radio-Slots (einer je Standard-Winkel 3-51 Grad), nicht baubare per
|
||||
// mode_tile deaktiviert. WICHTIG: die radio_button-Tiles muessen DIREKTE
|
||||
// Kinder eines radio_column/radio_row/boxed_radio_column-Clusters sein - eine
|
||||
// Verschachtelung ueber : row {} INNERHALB des Clusters (fruehere Version)
|
||||
// hebt die gegenseitige Ausschliesslichkeit auf (per Test bestaetigt: mehrere
|
||||
// Radios gleichzeitig waehlbar, keins abwaehlbar)! Die Endhoehe steht daher
|
||||
// NICHT im selben row-Tile, sondern in einer PARALLELEN Text-Spalte rechts
|
||||
// daneben (eigene column AUSSERHALB des Radio-Clusters, per aeusserem : row
|
||||
// nebeneinandergestellt, gleiche Zeilenreihenfolge) - dynamisch befuellt via
|
||||
// vflw-gruppe-winkel-hoehen-impl (zeigt auch bei nicht baubaren Winkeln den
|
||||
// Grund, siehe dortige Kommentare).
|
||||
vflw_winkel_hoehen : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
: column {
|
||||
: text {
|
||||
key = "kopf";
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: text { label = "Winkel waehlen:"; }
|
||||
: row {
|
||||
: radio_column {
|
||||
key = "wahl";
|
||||
: radio_button { key = "w_3"; label = "3 Grad"; }
|
||||
: radio_button { key = "w_6"; label = "6 Grad"; }
|
||||
: radio_button { key = "w_9"; label = "9 Grad"; }
|
||||
: radio_button { key = "w_12"; label = "12 Grad"; }
|
||||
: radio_button { key = "w_15"; label = "15 Grad"; }
|
||||
: radio_button { key = "w_18"; label = "18 Grad"; }
|
||||
: radio_button { key = "w_21"; label = "21 Grad"; }
|
||||
: radio_button { key = "w_27"; label = "27 Grad"; }
|
||||
: radio_button { key = "w_33"; label = "33 Grad"; }
|
||||
: radio_button { key = "w_39"; label = "39 Grad"; }
|
||||
: radio_button { key = "w_45"; label = "45 Grad"; }
|
||||
: radio_button { key = "w_51"; label = "51 Grad"; }
|
||||
}
|
||||
: column {
|
||||
: text { key = "h_3"; label = ""; width = 48; }
|
||||
: text { key = "h_6"; label = ""; width = 48; }
|
||||
: text { key = "h_9"; label = ""; width = 48; }
|
||||
: text { key = "h_12"; label = ""; width = 48; }
|
||||
: text { key = "h_15"; label = ""; width = 48; }
|
||||
: text { key = "h_18"; label = ""; width = 48; }
|
||||
: text { key = "h_21"; label = ""; width = 48; }
|
||||
: text { key = "h_27"; label = ""; width = 48; }
|
||||
: text { key = "h_33"; label = ""; width = 48; }
|
||||
: text { key = "h_39"; label = ""; width = 48; }
|
||||
: text { key = "h_45"; label = ""; width = 48; }
|
||||
: text { key = "h_51"; label = ""; width = 48; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
: 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-Wahl aus berechne-alle-winkel (Zielhoehe-basierter Solve, mehrere
|
||||
// gueltige Winkel): wie vflw_winkel_hoehen (radio_column direkt, Text-Spalte
|
||||
// parallel daneben), aber die Text-Spalte zeigt L_GF+L_VF statt Endhoehe
|
||||
// (dynamisch befuellt, siehe vflw-gruppe-winkel-wahl-impl).
|
||||
vflw_winkel_wahl : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
: column {
|
||||
: text {
|
||||
key = "kopf";
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: text { label = "Winkel waehlen:"; }
|
||||
: row {
|
||||
: radio_column {
|
||||
key = "wahl";
|
||||
: radio_button { key = "w_3"; label = "3 Grad"; }
|
||||
: radio_button { key = "w_6"; label = "6 Grad"; }
|
||||
: radio_button { key = "w_9"; label = "9 Grad"; }
|
||||
: radio_button { key = "w_12"; label = "12 Grad"; }
|
||||
: radio_button { key = "w_15"; label = "15 Grad"; }
|
||||
: radio_button { key = "w_18"; label = "18 Grad"; }
|
||||
: radio_button { key = "w_21"; label = "21 Grad"; }
|
||||
: radio_button { key = "w_27"; label = "27 Grad"; }
|
||||
: radio_button { key = "w_33"; label = "33 Grad"; }
|
||||
: radio_button { key = "w_39"; label = "39 Grad"; }
|
||||
: radio_button { key = "w_45"; label = "45 Grad"; }
|
||||
: radio_button { key = "w_51"; label = "51 Grad"; }
|
||||
}
|
||||
: column {
|
||||
: text { key = "h_3"; label = ""; width = 48; }
|
||||
: text { key = "h_6"; label = ""; width = 48; }
|
||||
: text { key = "h_9"; label = ""; width = 48; }
|
||||
: text { key = "h_12"; label = ""; width = 48; }
|
||||
: text { key = "h_15"; label = ""; width = 48; }
|
||||
: text { key = "h_18"; label = ""; width = 48; }
|
||||
: text { key = "h_21"; label = ""; width = 48; }
|
||||
: text { key = "h_27"; label = ""; width = 48; }
|
||||
: text { key = "h_33"; label = ""; width = 48; }
|
||||
: text { key = "h_39"; label = ""; width = 48; }
|
||||
: text { key = "h_45"; label = ""; width = 48; }
|
||||
: text { key = "h_51"; label = ""; width = 48; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// Generische Ja/Nein-Rueckfrage (2 Radio-Buttons, dynamischer Kopftext) -
|
||||
// wiederverwendet z.B. fuer "trotzdem mit Mindestlaenge bauen?" (Zu-kurz-
|
||||
// Nachfrage in vfl-baue-horizontal-koerper). Radio-Buttons statt Dropdown,
|
||||
// Labels fest deutsch (nur "kopf" wird je Aufruf per set_tile befuellt).
|
||||
// Drei Groessenvarianten (1/3/6 Kopf-Zeilen) statt EINER Variante mit immer 6
|
||||
// Zeilen: DCL kann Tiles nicht dynamisch ausblenden/schrumpfen - ein leeres
|
||||
// text-Tile belegt trotzdem seine volle Zeilenhoehe (grosse Luecke bei kurzen
|
||||
// Hinweisen wie "Zusaetzlichen Separator einfuegen?"). vflw-gruppe-ja-nein-impl
|
||||
// waehlt anhand der per vflw-umbruch-zeilen ermittelten Zeilenzahl die
|
||||
// passende Variante (1/3/6). Alle drei teilen dieselben Tile-Keys "kopf1".."kopfN"
|
||||
// plus "wahl"/"wahl_ja"/"wahl_nein"/"back"/"accept"/"cancel" - der Aufrufer
|
||||
// muss dadurch NICHT zwischen ihnen unterscheiden, ausser bei new_dialog/
|
||||
// set_tile fuer die (in der kleineren Variante gar nicht vorhandenen) hoeheren
|
||||
// kopfN-Tiles.
|
||||
vflw_ja_nein_1 : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
: column {
|
||||
: text { key = "kopf1"; label = ""; width = 70; }
|
||||
: boxed_radio_column {
|
||||
key = "wahl";
|
||||
label = "";
|
||||
: radio_button { key = "wahl_ja"; label = "Ja"; value = "1"; }
|
||||
: radio_button { key = "wahl_nein"; label = "Nein"; }
|
||||
}
|
||||
}
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
vflw_ja_nein_3 : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
: column {
|
||||
: text { key = "kopf1"; label = ""; width = 70; }
|
||||
: text { key = "kopf2"; label = ""; width = 70; }
|
||||
: text { key = "kopf3"; label = ""; width = 70; }
|
||||
: boxed_radio_column {
|
||||
key = "wahl";
|
||||
label = "";
|
||||
: radio_button { key = "wahl_ja"; label = "Ja"; value = "1"; }
|
||||
: radio_button { key = "wahl_nein"; label = "Nein"; }
|
||||
}
|
||||
}
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
vflw_ja_nein_6 : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
: column {
|
||||
: text { key = "kopf1"; label = ""; width = 70; }
|
||||
: text { key = "kopf2"; label = ""; width = 70; }
|
||||
: text { key = "kopf3"; label = ""; width = 70; }
|
||||
: text { key = "kopf4"; label = ""; width = 70; }
|
||||
: text { key = "kopf5"; label = ""; width = 70; }
|
||||
: text { key = "kopf6"; label = ""; width = 70; }
|
||||
: boxed_radio_column {
|
||||
key = "wahl";
|
||||
label = "";
|
||||
: radio_button { key = "wahl_ja"; label = "Ja"; value = "1"; }
|
||||
: radio_button { key = "wahl_nein"; label = "Nein"; }
|
||||
}
|
||||
}
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// Generische Auf/Ab-Richtungsfrage (2 Radio-Buttons, dynamischer Kopftext) -
|
||||
// wiederverwendet fuer Punkt 7 (Kletter-Teilstrecke ohne Zielhoehe, sowohl
|
||||
// "Naechstes im VF" als auch "Neue Linie: Ab/Auf VF" mit reduziertem
|
||||
// Eingang). Radio-Buttons statt Dropdown, Labels fest deutsch.
|
||||
vflw_richtung : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
: column {
|
||||
: text {
|
||||
key = "kopf";
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: boxed_radio_column {
|
||||
key = "richtung";
|
||||
label = "";
|
||||
: radio_button { key = "richtung_auf"; label = "Auf"; value = "1"; }
|
||||
: radio_button { key = "richtung_ab"; label = "Ab"; }
|
||||
}
|
||||
}
|
||||
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// Startpunkt-Typ (kein eindeutiger GF-/VF-Baustein per KS_AUS-Scan erkannt,
|
||||
// siehe vfl-eingang-modus-bestimmen): EINE flache 3-Optionen-Frage statt
|
||||
// verschachtelter Zwei-Schritt-Abfrage - ist der Vorgaenger unklar, sind alle
|
||||
// drei Ergebnisse gleichwertig direkt waehlbar. Radio-Buttons statt Dropdown,
|
||||
// Labels fest deutsch (GF-Stumpf-Laenge als Default-Wert 400mm statisch im
|
||||
// Label, siehe *vfl-gf-min-laenge*).
|
||||
vflw_startpunkt_typ : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
: column {
|
||||
: text {
|
||||
key = "kopf";
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: boxed_radio_column {
|
||||
label = "Eingang:";
|
||||
key = "eingang";
|
||||
: radio_button { key = "eingang_direkt"; label = "Direkt Umlenkstation (kein GF-Stueck)"; value = "1"; }
|
||||
: radio_button { key = "eingang_stumpf"; label = "GF-Stueck (min. 400mm) + Umlenkstation"; }
|
||||
: radio_button { key = "eingang_ohne"; label = "Ohne Umlenkstation (VF-Fortsetzung)"; }
|
||||
}
|
||||
}
|
||||
|
||||
: 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; }
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
@@ -278,6 +866,7 @@ vflw_horizontal : dialog {
|
||||
|
||||
// Modus 2, Segment "Gerade": Typ (GF/VF) + [nur bei GF aktiv] GF-Neigung.
|
||||
// Das Neigungsfeld wird per action_tile auf "typ" aktiviert/deaktiviert.
|
||||
// Radio-Buttons statt Dropdown, Labels fest deutsch.
|
||||
vflw_seg_linie_m2 : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
@@ -287,10 +876,11 @@ vflw_seg_linie_m2 : dialog {
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: popup_list {
|
||||
key = "typ";
|
||||
: boxed_radio_column {
|
||||
label = "Typ:";
|
||||
width = 40;
|
||||
key = "typ";
|
||||
: radio_button { key = "typ_gf"; label = "GF (Neigungswinkel)"; value = "1"; }
|
||||
: radio_button { key = "typ_vf"; label = "VF (Bruecke)"; }
|
||||
}
|
||||
: text {
|
||||
key = "wlabel";
|
||||
@@ -301,6 +891,11 @@ vflw_seg_linie_m2 : dialog {
|
||||
label = "";
|
||||
edit_width = 10;
|
||||
}
|
||||
: boxed_column {
|
||||
label = "Separator (nur bei GF):";
|
||||
: toggle { key = "sep_vor"; label = "Separator VOR diesem GF-Stueck"; }
|
||||
: toggle { key = "sep_nach"; label = "Separator NACH diesem GF-Stueck"; }
|
||||
}
|
||||
}
|
||||
|
||||
ok_cancel;
|
||||
@@ -309,7 +904,8 @@ vflw_seg_linie_m2 : dialog {
|
||||
// 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).
|
||||
// per action_tile auf "typ" (siehe vflw-seg-linie-m3-impl). Radio-Buttons
|
||||
// statt Dropdown, Labels fest deutsch.
|
||||
vflw_seg_linie_m3 : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
@@ -319,10 +915,13 @@ vflw_seg_linie_m3 : dialog {
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: popup_list {
|
||||
key = "typ";
|
||||
: boxed_radio_column {
|
||||
label = "Typ:";
|
||||
width = 45;
|
||||
key = "typ";
|
||||
: radio_button { key = "typ_gf"; label = "GF (Neigungswinkel)"; value = "1"; }
|
||||
: radio_button { key = "typ_vfab"; label = "VF-Ab"; }
|
||||
: radio_button { key = "typ_vfauf"; label = "VF-Auf"; }
|
||||
: radio_button { key = "typ_vfhor"; label = "VF-Horizontal"; }
|
||||
}
|
||||
: text {
|
||||
key = "wlabel";
|
||||
@@ -340,7 +939,9 @@ vflw_seg_linie_m3 : dialog {
|
||||
|
||||
// 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.
|
||||
// Variante-Gruppe wird per action_tile auf "typ" aktiviert/deaktiviert, die
|
||||
// Vario-Kurve-Option selbst ggf. ueber "vario-erlaubt" (mode_tile), siehe
|
||||
// vflw-seg-bogen-impl. Radio-Buttons statt Dropdown, Labels fest deutsch.
|
||||
vflw_seg_bogen : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
@@ -350,15 +951,65 @@ vflw_seg_bogen : dialog {
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: popup_list {
|
||||
key = "typ";
|
||||
: boxed_radio_column {
|
||||
label = "Typ:";
|
||||
width = 40;
|
||||
key = "typ";
|
||||
: radio_button { key = "typ_gfbogen"; label = "GF-Bogen"; value = "1"; }
|
||||
: radio_button { key = "typ_vario"; label = "Vario-Kurve"; }
|
||||
}
|
||||
: popup_list {
|
||||
key = "variante";
|
||||
: boxed_radio_column {
|
||||
label = "Variante:";
|
||||
width = 30;
|
||||
key = "variante";
|
||||
: radio_button { key = "variante_aussen"; label = "Aussen"; value = "1"; }
|
||||
: radio_button { key = "variante_innen"; label = "Innen"; }
|
||||
}
|
||||
}
|
||||
|
||||
ok_cancel;
|
||||
}
|
||||
|
||||
// Modus 2: Lauf-Abschluss, NUR wenn der VF-Lauf das Ende des gewaehlten Pfads
|
||||
// ist (kein Back-Lauf danach) - siehe vflw-m2-lauf-abschluss-impl. Radio-
|
||||
// Buttons, Labels fest deutsch.
|
||||
vflw_m2_lauf_abschluss : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
: column {
|
||||
: text {
|
||||
key = "kopf";
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: boxed_radio_column {
|
||||
label = "Lauf beenden mit:";
|
||||
key = "abschluss";
|
||||
: radio_button { key = "abschluss_offen"; label = "Ohne Motorstation (offenes Ende, spaeter fortsetzen)"; }
|
||||
: radio_button { key = "abschluss_motor"; label = "Motorstation setzen"; value = "1"; }
|
||||
: radio_button { key = "abschluss_motor_es"; label = "Motorstation + ES-Element setzen (Kettenende)"; }
|
||||
}
|
||||
}
|
||||
|
||||
ok_cancel;
|
||||
}
|
||||
|
||||
// Modus 2: Lauf-Anfang, NUR wenn der VF-Lauf der Anfang des gewaehlten Pfads
|
||||
// ist (kein Front-Lauf davor) - siehe vflw-m2-lauf-anfang-impl. Radio-Buttons,
|
||||
// Labels fest deutsch.
|
||||
vflw_m2_lauf_anfang : dialog {
|
||||
label = "VarioFoerderer Assistent";
|
||||
|
||||
: column {
|
||||
: text {
|
||||
key = "kopf";
|
||||
label = "";
|
||||
width = 60;
|
||||
}
|
||||
: boxed_radio_column {
|
||||
label = "Lauf beginnen mit:";
|
||||
key = "anfang";
|
||||
: radio_button { key = "anfang_offen"; label = "Ohne Umlenkstation (offener Anfang, spaeter fortsetzen)"; }
|
||||
: radio_button { key = "anfang_umlenk"; label = "Umlenkstation direkt (kein GF1/Separator)"; }
|
||||
: radio_button { key = "anfang_umlenk_gf1"; label = "Umlenkstation mit GF1 + Separator"; value = "1"; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,194 @@
|
||||
# VF-Linienzug Modus 1 - Anleitung anhand eines realen Beispiels
|
||||
|
||||
Diese Anleitung erklaert Modus 1 des VF-Linienzugs ("Manuelle Eingabe",
|
||||
`vf-linienzug-modus` in `Lisp/vf_linienzug.lsp`) nicht abstrakt, sondern
|
||||
Schritt fuer Schritt anhand eines echten, in BricsCAD gebauten und
|
||||
verifizierten Beispiels. Dasselbe Beispiel ist als automatisierter
|
||||
Regressionstest hinterlegt: `tests/testdata/linienzug_tests_stufe2.json`,
|
||||
aufrufbar in BricsCAD ueber `TEST_LINIENZUG_STUFE2` (siehe
|
||||
`tests/test_linienzug.lsp`). Wer die Zahlen selbst nachvollziehen will, kann
|
||||
diesen Testlauf jederzeit wiederholen.
|
||||
|
||||
Fuer die Architektur-Details (Frame-Kette, Journal/XDATA, Wizard-Dialoge)
|
||||
siehe `doc/variofoerderer.md` und `doc/VarioFoerderer_Linienzug_Prinzipien.md`.
|
||||
Diese Anleitung konzentriert sich auf die Bedienung und die typischen
|
||||
Stolperfallen.
|
||||
|
||||
## 1. Was ist Modus 1?
|
||||
|
||||
Modus 1 baut eine VF-Linienzug-Kette **interaktiv, Element fuer Element**:
|
||||
Sie klicken/geben nacheinander Punkte, Laengen, Winkel und Ja/Nein-
|
||||
Entscheidungen ein, und jede Antwort erzeugt sofort ein Stueck Geometrie
|
||||
(Umlenkstation, Gefaellestrecke, VF-Einheit, Vario-Kurve, ...). Das
|
||||
unterscheidet Modus 1 von:
|
||||
|
||||
- **Modus 2** (Ziel-Hoehe-Modus): Sie zeichnen vorher einen Pfad (LINE/ARC-
|
||||
Kette) und eine Zielhoehe, das Programm loest die Kette automatisch.
|
||||
- **Modus 3** (Vorwaerts-Nachbau): rekonstruiert eine Kette aus einer
|
||||
bestehenden Zeichnung (Legacy, wird umgebaut).
|
||||
|
||||
**Aufruf:** Befehl `FOERDERANLAGE` (bzw. `VarioFoerderer`) -> Anlagen-Typ
|
||||
"Linienzug" waehlen -> Modus "1" (Manuelle Eingabe).
|
||||
|
||||
Jede Eingabe wird in einem Journal mitgeschrieben und als XDATA auf den
|
||||
fertigen `VF_n`-Block geschrieben. Ein Abbruch (ESC) loescht dadurch nichts -
|
||||
die bis dahin gebaute Teilkette bleibt als Block stehen und ist per
|
||||
Doppelklick weiter bearbeitbar.
|
||||
|
||||
## 2. Das Beispiel im Ueberblick
|
||||
|
||||
Die Kette aus `linienzug_tests_stufe2.json` sieht so aus (Grundriss, von
|
||||
oben betrachtet):
|
||||
|
||||
```
|
||||
Start (Z=2154) --AS 90 links--> Horizontal-VF --Vario 90 rechts innen-->
|
||||
--Horizontal-VF--> --Vario 90 rechts innen--> Linie-GF (3 Grad, Separator
|
||||
vor+nach) --> Horizontal-VF --Vario 30 rechts innen--> Auf 27 Grad
|
||||
--Vario 30 links aussen--> Kettenende (Motorstation + ES 90 links)
|
||||
```
|
||||
|
||||
Kurz gesagt: die Kette startet auf Z=2154, macht zwei 90-Grad-Schwenks im
|
||||
Grundriss, faellt ueber ein eigenstaendiges GF-Stueck (3 Grad) etwas ab,
|
||||
steigt dann in einer zweiten VF-Einheit um 27 Grad wieder an, und muss am
|
||||
Ende exakt auf die Starthoehe (2154mm) zurueckkommen. Genau dieser letzte
|
||||
Schritt - der Rest-Hoehenausgleich passt zu keinem der Standard-Winkel mehr -
|
||||
ist der interessante Teil (siehe Abschnitt 4, Stufe 1/Stufe 2).
|
||||
|
||||
## 3. Die Fragen der Reihe nach
|
||||
|
||||
Diese Tabelle zitiert die tatsaechlichen Konsolen-Fragen aus dem Testfall
|
||||
(Kommentar-Spalte = `kommentar`-Feld im JSON) und erklaert, was jede Frage
|
||||
bedeutet.
|
||||
|
||||
| # | Frage (sinngemaess) | Antwort im Beispiel | Bedeutung |
|
||||
|---|---|---|---|
|
||||
| 1 | Startpunkt der Kette | Klick (X/Y) | Beliebiger Punkt in der Zeichnung |
|
||||
| 2 | Hoehe (Z) Startpunkt | 2154 | Absolute Einbauhoehe des Kettenanfangs |
|
||||
| 3 | AS-Element setzen? | Ja | Umlenkstation am Anfang - "AS" = Ausgangs-/Anfangs-Element |
|
||||
| 4 | AS-Element Winkel | 90 Grad | Baugroesse des Umlenkstations-Blocks (90 oder 30 Grad Kurvenradius) |
|
||||
| 5 | AS-Seite | links | Auf welcher Seite die Umlenkstation seitlich ausschwenkt |
|
||||
| 6 | Naechstes Element | Horizontal-VF | Kettenanfang-Menue hat 6 Optionen (GF-Bogen, Vario-Kurve, Linie-GF, Linie-VF, Horizontal-VF, Linienende) |
|
||||
| 7 | Endpunkt Horizontal-VF | Klick | Laenge/Richtung der ersten VF-Einheit |
|
||||
| 8 | Ziel-Hoehe Eingang GF1 | 1980 | Hoehe, auf die der Eingangs-GF-Anteil der VF-Einheit einregelt |
|
||||
| 9 | Ist der Endpunkt der Foerderer? | Nein | Innerhalb der VF-Einheit: "geht die Kette hier zu Ende?" |
|
||||
| 10-13 | Naechstes im VarioFoerderer -> Vario-Kurve 90 rechts innen | - | Grundriss-Schwenk INNERHALB der laufenden VF-Einheit |
|
||||
| 14 | Ist der Endpunkt der Foerderer? | Nein | s.o. |
|
||||
| 15-16 | Horizontaler Foerderer, Endpunkt | Klick | Weiteres gerades VF-Sub-Segment |
|
||||
| 17 | Ist der Endpunkt der Foerderer? | Nein | s.o. |
|
||||
| 18-21 | Vario-Kurve 90 rechts innen | - | Zweiter Grundriss-Schwenk |
|
||||
| 22 | Ist der Endpunkt der Foerderer? | Ja, nur Motorstation | Schliesst die 1. VF-Einheit ab (Motorstation, kein ES) |
|
||||
| 23 | Ist das Kettenende (ES-Element)? | Nein, weiterbauen | Nach der Motorstation: geht die Kette weiter? |
|
||||
| 24 | Zusaetzlichen Separator hier? | Nein | Optionaler Separator direkt an der Motorstation |
|
||||
| 25 | Naechstes Element | Neue Linie: GF | Jetzt folgt ein reines Gefaellestrecke-Element (kein VF) |
|
||||
| 26 | Laenge bestimmen ueber | Endpunkt waehlen | Alternativ: Zielhoehe zuerst festlegen (siehe `vfl-gf-laenge-modus`) |
|
||||
| 27 | Endpunkt Gefaellestrecke | Klick | Bestimmt deltaL der GF-Geraden |
|
||||
| 28-29 | Separator VOR / NACH? | Ja / Ja | GF-Stuecke werden ueber Separatoren mechanisch begrenzt |
|
||||
| 30-31 | Gefaelle festlegen -> Neigungswinkel | 3 Grad | Direkter Winkel (Alternative: Zielhoehe -> Winkel wird berechnet) |
|
||||
| 32 | Ist das Kettenende? | Nein, weiterbauen | 3-Optionen-Menue: Ja+ES / Ja ohne ES / Nein |
|
||||
| 33 | Naechstes Element | Horizontal-VF (2. Einheit) | Neue VF-Einheit beginnt direkt am GF-Ausgang (Separator als Eingang) |
|
||||
| 34-49 | (wie oben: Vario-Kurven, Auf/Ab-Foerderer 27 Grad) | - | s.o. |
|
||||
| 50 | Ist der Endpunkt der Foerderer? | Ja, Motorstation + Kettenende | Startet den automatischen Kettenende-Abschluss |
|
||||
| 51-53 | ES-Element setzen? / Winkel / Seite | Ja / 90 / links | Ausgangs-Element, spiegelbildlich zum AS-Element |
|
||||
| 54 | Endpunkt Kettenende | Klick | Letzter gewuenschter Punkt der Kette |
|
||||
| 55 | Ziel-Hoehe Kettenende | 2154 | Muss wieder exakt die Starthoehe sein |
|
||||
| 56 | (automatisch, keine Eingabe) | - | Stufe-1/Stufe-2-Loeser rechnet, siehe Abschnitt 4 |
|
||||
| 57 | GF2=86mm unter Mindestlaenge - trotzdem bauen? | Ja | Sicherheitsfrage, siehe Abschnitt 4 |
|
||||
|
||||
**Wichtig zu Frage 9/14/17 ("Ist der Endpunkt der Foerderer?"):** Diese Frage
|
||||
kommt IMMER, wenn Sie innerhalb einer laufenden VF-Einheit einen Punkt
|
||||
gepickt haben. "Nein" heisst: der gepickte Punkt ist nur eine
|
||||
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).
|
||||
|
||||
## 4. Stufe 1 / Stufe 2 - wie die letzte Strecke berechnet wird
|
||||
|
||||
Am Kettenende (Frage 55/56) ist die Aufgabe: von der aktuellen Position/
|
||||
Hoehe zur gewuenschten Ziel-Hoehe kommen, UND dabei die feste Baugruppe
|
||||
Motorstation + Separator (+ ES-Element, falls gewaehlt) unterbringen. Das
|
||||
Programm versucht das in zwei Stufen (`vfl-winkel-stufe-entscheidung`,
|
||||
`Lisp/vf_linienzug.lsp`):
|
||||
|
||||
- **Stufe 1 - Winkeltabelle:** Es probiert der Reihe nach die festen
|
||||
Vario-Kurven-Winkel 3/6/9/12/15/18/21/27/33/39/45/51 Grad durch
|
||||
(`berechne-alle-winkel`) und prueft, ob einer davon eine PASSENDE,
|
||||
positive VF-Laenge ergibt. Das ist der Normalfall (siehe die Zeilen
|
||||
"34-49" in der Tabelle: der Auf/Ab-Foerderer in der 2. VF-Einheit findet
|
||||
so einen passenden Winkel, Auswahl-Index 8 = 27 Grad).
|
||||
- **Stufe 2 - Horizontale Mitte + GF-Ausgleich:** Wenn KEIN Tabellenwinkel
|
||||
passt (wie im Beispiel: alle 12 Kandidaten ergeben eine negative
|
||||
VF-Laenge, die Reststrecke ist einfach zu kurz fuer einen echten
|
||||
Vertikalbogen), rechnet `berechne-horizontale-mitte` eine andere Loesung:
|
||||
ein HORIZONTALES VF-Stueck (winkel=0) plus eine kurze Gefaellestrecke
|
||||
(GF2), die exakt den fehlenden Hoehenunterschied ausgleicht. Im Beispiel:
|
||||
GF2=86mm, VF=286mm.
|
||||
|
||||
Die Formel dahinter ist simpel und lohnt sich zu verinnerlichen: bei einem
|
||||
FESTEN Neigungswinkel von 3 Grad braucht ein Hoehenausgleich von `H`
|
||||
Millimetern eine GF-Laenge von `H / tan(3 Grad) ~= H * 19`. Ein winziger
|
||||
Hoehenrest von z.B. 49mm braucht demnach bereits ~935mm GF-Laenge - siehe
|
||||
Abschnitt 5.a. GF2 im Beispiel (86mm) ist kuerzer als die uebliche
|
||||
Mindestlaenge (400mm, `*vfl-gf-min-laenge*`) - deshalb die Rueckfrage in
|
||||
Schritt 57 ("trotzdem mit 86mm bauen?"). "Ja" baut trotzdem exakt mit dem
|
||||
berechneten Wert; "Nein" wuerde den bis dahin gebauten Teil verwerfen (siehe
|
||||
`vfl-loesche-seit`/`vfl-modus-abbruch-sichern`).
|
||||
|
||||
**Merksatz:** Stufe 1 sucht einen "sauberen" Standard-Winkel; Stufe 2 ist
|
||||
der Rettungsanker, wenn dafuer schlicht nicht genug Platz ist - er tauscht
|
||||
einen Vertikalbogen gegen "flach + minimaler GF-Ausgleich".
|
||||
|
||||
## 5. Typische Stolperfallen
|
||||
|
||||
### a) Gefaellestrecke (GF) ist "laengenhungrig" bei 3 Grad
|
||||
|
||||
3 Grad ist ein SEHR flacher Winkel. `tan(3 Grad) ~= 0.0524`, also braucht
|
||||
jeder Millimeter Hoehenunterschied ungefaehr **19mm** Laenge:
|
||||
|
||||
```
|
||||
Laenge = Hoehendifferenz / tan(3 Grad) ~= Hoehendifferenz * 19
|
||||
```
|
||||
|
||||
Wer nur wenige mm bis cm Hoehenunterschied ausgleichen will, bekommt damit
|
||||
schnell GF-Laengen im halben bis ganzen Meterbereich. Das ist die haeufigste
|
||||
Ursache fuer "die Reststrecke ist zu kurz"-Meldungen und fuer den
|
||||
Stufe-2-Fallback aus Abschnitt 4. Falls eine GF partout nicht passt: entweder
|
||||
mehr Grundriss-Laenge einplanen, oder pruefen, ob ein Vertikalbogen
|
||||
(Vario-Kurve mit groesserem Winkel, siehe Stufe 1) die bessere Wahl ist.
|
||||
|
||||
### b) Motorstation + Separator + ES-Element haben einen FESTEN Fussabdruck
|
||||
|
||||
Am Kettenende ist nicht die ganze gepickte Reststrecke frei verfuegbar -
|
||||
ein fester Anteil ist fuer Motorstation und Separator reserviert
|
||||
(`*vfk-feste-horizontal-kettenende*` = 800mm = 500mm Motorstation + 300mm
|
||||
Separator), und falls zusaetzlich ein ES-Element gewaehlt wird, kommt dessen
|
||||
eigener Fussabdruck (abhaengig von 30/90 Grad Bauform) noch oben drauf. Wer
|
||||
diese festen 800mm (+ ES) nicht einplant, landet schnell bei einer negativen
|
||||
"freien" Reststrecke - genau der Fall, der in Abschnitt 4 den Stufe-2-
|
||||
Fallback ausloest.
|
||||
|
||||
### c) Seitlicher Versatz bei 90-Grad-AS/ES-Elementen ist NORMAL
|
||||
|
||||
Ein AS- oder ES-Element mit 90 Grad Bauform dreht die Fahrtrichtung nicht
|
||||
einfach "auf der Stelle" - sein Block hat eine reale Baugroesse mit einem
|
||||
seitlichen (quer zur Fahrtrichtung liegenden) Versatz. Im Standard-Testfall
|
||||
(`linienzug_tests.json`) betraegt dieser Versatz ca. 637mm (`dY`), im
|
||||
Stufe-2-Testfall ca. 638mm (`dX`, da die Fahrtrichtung dort anders liegt).
|
||||
**Das ist kein Baufehler** - es ist die tatsaechliche Geometrie des
|
||||
90-Grad-ES/AS-Blocks. Ein "Ist-Ziel-Report" mit einer Restabweichung von
|
||||
ca. 638mm quer zur letzten Fahrtrichtung, aber ~0mm in Laengs-/Hoehenrichtung,
|
||||
ist ein KORREKTES Ergebnis, keine Abweichung, die weiter untersucht werden
|
||||
muss.
|
||||
|
||||
## 6. Nachvollziehen / Nachbauen
|
||||
|
||||
- Live in BricsCAD: `FOERDERANLAGE` -> Linienzug -> Modus 1, und die
|
||||
Eingaben aus der Tabelle in Abschnitt 3 der Reihe nach eintippen/klicken.
|
||||
- Automatisiert (ohne Klicks): Befehl `TEST_LINIENZUG_STUFE2` (nach Laden
|
||||
von `tests/test_linienzug.lsp`) spielt exakt dieselbe Sequenz aus
|
||||
`tests/testdata/linienzug_tests_stufe2.json` ab und meldet das
|
||||
Ist-Ziel-Ergebnis in der Konsole.
|
||||
- Debug-Log: mit `dbgopen`/dem zentralen Debug-Schalter (siehe
|
||||
`Lisp/ssg_dbg.lsp`) lassen sich alle `GEOMETRIE:`/`GEOMETRIE ERFOLG:`-
|
||||
Zeilen in eine `.dbg`-Datei im Log-Verzeichnis mitschreiben - hilfreich,
|
||||
um genau wie in diesem Beispiel eine reale Sitzung nachtraeglich in
|
||||
einen Testfall zu verwandeln.
|
||||
+88
-4
@@ -2,6 +2,7 @@
|
||||
"texts": {
|
||||
"vfl-alert-gf-modul-fehlt": "Gefaellestrecke-Modul nicht geladen!\nDer Linienzug-Typ benoetigt Gefaellestrecke.lsp\n(GF-Segmente und GF-Boegen). Bitte Menue laden.",
|
||||
"vfl-prompt-startpunkt-kette": "\n\nStartpunkt der Kette waehlen: ",
|
||||
"vfl-prompt-richtung-waehlen": "\n\nFahrtrichtung waehlen (Punkt in gewuenschter Richtung klicken - der Abstand wird ignoriert): ",
|
||||
"vfl-prompt-hoehe-startpunkt-kette": "\nHoehe (Z) des Startpunkts [%1]: ",
|
||||
"vfl-abgebrochen": "\nAbgebrochen.",
|
||||
"vfl-as-setzen-frage": "\n\nAS-Element setzen?",
|
||||
@@ -19,24 +20,53 @@
|
||||
"vfl-menu-horizontal-vf-3": "\n 3 - Neue VF mit horizontalem Anfang (Horizontal-Stueck)",
|
||||
"vfl-menu-linie-ende-4": "\n 4 - Neue Linie BIS Kettenende (danach Separator + ES-Element)",
|
||||
"vfl-prompt-wahl-1-4-def1": "\nIhre Wahl (1-4) [1]: ",
|
||||
"vfl-fehler-horizontal-vf-kurz": "\nFEHLER: Horizontaler VF braucht >= 1000 mm (Umlenk + Motor) - laenger zeichnen.",
|
||||
"vfl-menu-gf-bogen-ka-1": "\n 1 - GF-Bogen (horizontale Kurve)",
|
||||
"vfl-menu-variokurve-ka-2": "\n 2 - Vario-Kurve (horizontale Kurve, 30/60/90 Grad)",
|
||||
"vfl-menu-linie-gf-ka-3": "\n 3 - Neue Linie: GF (Gefaellestrecke)",
|
||||
"vfl-menu-linie-vf-ka-4": "\n 4 - Neue Linie: Ab/Auf VF (VarioFoerderer-Einheit)",
|
||||
"vfl-menu-horizontal-vf-ka-5": "\n 5 - Neue VF mit horizontalem Anfang (Horizontal-Stueck)",
|
||||
"vfl-menu-linie-ende-ka-6": "\n 6 - Neue Linie BIS Kettenende (danach Separator + ES-Element)",
|
||||
"vfl-prompt-wahl-1-6-def3": "\nIhre Wahl (1-6) [3]: ",
|
||||
"vfl-fehler-horizontal-fussabdruck-zu-kurz": "\nFEHLER: Fussabdruck passt nicht in die gewaehlte Strecke (Rest waere nur %1 mm) - kuerzer/weniger Zusatzelemente waehlen oder laenger zeichnen.",
|
||||
"vfl-hinweis-horizontal-fussabdruck-zu-kurz": "\n\nHinweis: gewaehlte Reststrecke war %1 mm, nach dem 3-Grad-Uebergangsbogen blieben nur %2 mm (Minimum: %3 mm). Trotzdem mit der Mindestlaenge weiterbauen (Kettenpunkt landet dann entsprechend weiter als angeklickt)?",
|
||||
"vfl-fehler-linie-zu-kurz": "\nFEHLER: Linie zu kurz (oder entgegen der Fahrtrichtung) - bitte erneut waehlen.",
|
||||
"vfl-fehler-vf-kurz": "\nFEHLER: VarioFoerderer braucht >= 1000 mm (Umlenk + Motor) - laenger zeichnen oder \"GF\" waehlen.",
|
||||
"vfl-gefaelle-festlegen-header": "\nGefaelle festlegen:",
|
||||
"vfl-gefaelle-opt-hoehe": "\n 1 - Gegebene Hoehe (Zielhoehe)",
|
||||
"vfl-gefaelle-opt-winkel": "\n 2 - Neigungswinkel eingeben",
|
||||
"vfl-gefaelle-opt-hoehe": "\n 2 - Gegebene Hoehe (Zielhoehe)",
|
||||
"vfl-gefaelle-opt-winkel": "\n 1 - Neigungswinkel eingeben",
|
||||
"vfl-prompt-neigungswinkel": "\nNeigungswinkel (Grad, 0 < Winkel <= %1) [%1]: ",
|
||||
"vfl-prompt-neigungswinkel-laenge-berechnet": "\nNeigungswinkel (Grad, 0 < Winkel <= %1) [%1] (deltaL wird berechnet und eingefuegt): ",
|
||||
"vfl-gf-hinweis-laenge-berechnet": "(deltaL wird berechnet und eingefuegt)",
|
||||
"vfl-gf-laenge-modus-header": "\nWie soll die Laenge dieser Gefaellestrecke bestimmt werden?",
|
||||
"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-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.",
|
||||
"vfl-alert-gf-steigend-falsche-richtung": "Steigende Gefaellestrecke: die gewaehlte Zielhoehe liegt unter der aktuellen Hoehe - bitte hoehere Zielhoehe waehlen oder den normalen (fallenden) Modus benutzen.",
|
||||
"vfl-alert-winkel-ungueltig": "Neigungswinkel ungueltig: %1 Grad. Erlaubt: 0 < Winkel <= %2 Grad.",
|
||||
"vfl-prompt-hoehe-linienendpunkt": "\nHoehe (Z) des Linienendpunkts [%1]: ",
|
||||
"vfl-prompt-hoehe-linienendpunkt-2": "\nHoehe (Z) des Linienendpunkts (Ab: %1 | Auf: %2) [%1]: ",
|
||||
"vfl-hinweis-hoehe-vorschlag-fehlt": "\n(Hinweis: In diese Richtung ist bei dieser Segmentlaenge kein baubarer Vorschlag gefunden - bitte Wert manuell pruefen.)",
|
||||
"vfl-alert-gf-kann-nicht-steigen": "Gefaellestrecke (GF) kann nicht steigen - bitte tiefere Zielhoehe waehlen oder Ab/Auf VF benutzen.",
|
||||
"vfl-alert-gefaelle-zu-steil": "Gefaelle zu steil fuer GF: %1 Grad (erlaubt max %2 Grad).\nBitte kleinere Hoehendifferenz waehlen oder Ab/Auf VF benutzen.",
|
||||
"vfl-prompt-hoehe-eingang-gf1": "\nZielhoehe (Z) am Uebergang zur horizontalen Strecke [%1]: ",
|
||||
"vfl-alert-eingang-kann-nicht-steigen": "Diese VF-Einheit (horizontaler Anfang) kann nicht steigen - bitte 'Neue Linie: Ab/Auf VF' verwenden.",
|
||||
"vfl-alert-eingang-hoehe-zu-klein": "Zielhoehe zu klein: mindestens %1 mm Hoehenabsenkung noetig (Separator+Umlenkstation+Uebergangsbogen allein erreichen schon so viel). Bitte tiefere Zielhoehe eingeben.",
|
||||
"vfl-alert-eingang-hoehe-zu-gross": "Zielhoehe zu weit entfernt fuer diese Streckenlaenge - maximal erreichbare Zielhoehe waere ca. %1 mm. Bitte 'Neue Linie: Ab/Auf VF' verwenden.",
|
||||
"vfl-ist-kettenende-header": "\nIst das das Kettenende?",
|
||||
"vfl-kettenende-opt-ja-es": "\n 1 - Ja (ES-Element setzen)",
|
||||
"vfl-kettenende-opt-ja-ohne-es": "\n 2 - Ja (ohne ES-Element setzen)",
|
||||
"vfl-kettenende-opt-nein": "\n 3 - Nein (weiterbauen)",
|
||||
"vfl-alert-vf-nicht-baubar": "VF-Einheit geometrisch nicht baubar!\ndeltaL=%1 mm, deltaH=%2 mm, Richtung=%3\nBitte anderen Endpunkt/Hoehe waehlen.",
|
||||
"vfl-alert-kettenende-p1": "1. Ziel △L=%1 mm, △H=%2 mm (%3): Auf/Ab-Foerderer (Winkel-Tabelle) nicht baubar.",
|
||||
"vfl-alert-kettenende-p2-beide": "\n\n2. Horizontal+GF nicht baubar - noetig waeren mindestens △L=%1 mm ODER mindestens △H=%2 mm.",
|
||||
"vfl-alert-kettenende-p2-nur-minh": "\n\n2. Horizontal+GF nicht baubar - noetig waere mindestens △H=%1 mm Hoehenaenderung.",
|
||||
"vfl-alert-kettenende-p2-nur-minl": "\n\n2. Horizontal+GF nicht baubar - noetig waere mindestens △L=%1 mm Streckenlaenge.",
|
||||
"vfl-alert-vf-entscheidung-p1": "1. Ziel △L=%1 mm, △H=%2 mm (%3): Winkel-Tabelle nicht baubar.",
|
||||
"vfl-alert-vf-entscheidung-p2-beide": "\n\n2. Mindestens noetig waeren: △L=%1 mm ODER △H=%2 mm.",
|
||||
"vfl-alert-vf-entscheidung-p2-nur-minh": "\n\n2. Mindestens noetig waere: △H=%1 mm Hoehenaenderung.",
|
||||
"vfl-alert-vf-entscheidung-p2-nur-minl": "\n\n2. Mindestens noetig waere: △L=%1 mm Streckenlaenge.",
|
||||
"vfl-alert-segment-nicht-baubar": "Segment geometrisch nicht baubar!\ndeltaL=%1 mm, deltaH=%2 mm, Richtung=%3\nBitte anderen Endpunkt/Hoehe waehlen.",
|
||||
"vfl-info-kurzes-segment": "\n>>> Kurzes Segment (deltaL=%1 mm < 1000): automatisch 3-Grad-Gefaellestrecke (keine Hoehenabfrage, deltaH=%2 mm).",
|
||||
"vfl-info-kettenende-footprint": "\n>>> Kettenende-Modus: Footprint fuer Separator + ES reserviert -> baubar deltaL=%1 mm, deltaH=%2 mm.",
|
||||
@@ -69,9 +99,14 @@
|
||||
"vfc-block-eingefuegt-xyzref-ksaus": "\n '%1' eingefuegt (XY:%2 Z:%3)\n KS_AUS: X=%4 Y=%5 Z=%6",
|
||||
"vfl-ja": "\n 1 - Ja",
|
||||
"vfl-nein": "\n 2 - Nein",
|
||||
"vfl-antwort-ja": "Ja",
|
||||
"vfl-antwort-nein": "Nein",
|
||||
"vfl-wizard-antwort-echo": "\n -> Auswahl im Dialog: %1",
|
||||
"vfl-sep-vor-frage": "\n\nZusaetzlichen Separator VOR dem horizontalen Stueck?",
|
||||
"vfl-sep-nach-frage": "\n\nZusaetzlichen Separator NACH dem horizontalen Stueck?",
|
||||
"vfl-sep-an-stelle-frage": "\n\nZusaetzlichen Separator an dieser Stelle einfuegen?",
|
||||
"vfl-sep-vor-gf-frage": "\n\nSeparator VOR dieser Gefaellestrecke einfuegen?",
|
||||
"vfl-sep-nach-gf-frage": "\n\nSeparator NACH dieser Gefaellestrecke einfuegen?",
|
||||
"vf-winkel-aus-header": "\n\nAUS-Element (AS_Element) - Winkel waehlen:",
|
||||
"vf-winkel-ein-header": "\n\nEIN-Element (ES_Element) - Winkel waehlen:",
|
||||
"vf-winkel-90": "\n 1 - 90 Grad",
|
||||
@@ -137,6 +172,17 @@
|
||||
"vfl-m3-warnung-zu-steil": "\n WARNUNG: ~Neigung > 51 Grad -> zu steil fuer Vario (Magnitude infeasibel).",
|
||||
"vfl-m3-vario-bereich-ok": "\n -> innerhalb Vario-Bereich (3..51 Grad), grobe Orientierung.",
|
||||
"vfl-m3-anker-hinweis": "\n (Anker oben = grobe Vorschau; exakte Werte werden beim Bau GEMESSEN)",
|
||||
"vfl-m3-lauf-abschluss-header": "\n\nDer VF-Lauf ist das Ende des gewaehlten Pfads. Lauf beenden mit:",
|
||||
"vfl-m3-lauf-abschluss-opt-offen": "\n 1 - Ohne Motorstation (offenes Ende, spaeter fortsetzen/verschmelzen)",
|
||||
"vfl-m3-lauf-abschluss-opt-motor": "\n 2 - Motorstation setzen (kein ES-Element)",
|
||||
"vfl-m3-lauf-abschluss-opt-motor-es": "\n 3 - Motorstation + ES-Element setzen (Kettenende)",
|
||||
"vfl-m3-lauf-abschluss-offen-hinweis": "\n Lauf bleibt bewusst offen - keine Motorstation/Separator/ES gebaut, spaeter fortsetzen oder per Vario_Kette_Merge verbinden.",
|
||||
"vfl-m3-lauf-anfang-header": "\n\nDer VF-Lauf ist der Anfang des gewaehlten Pfads. Lauf beginnen mit:",
|
||||
"vfl-m3-lauf-anfang-opt-offen": "\n 1 - Ohne Umlenkstation (offener Anfang, spaeter fortsetzen/verschmelzen)",
|
||||
"vfl-m3-lauf-anfang-opt-umlenk": "\n 2 - Umlenkstation direkt (kein GF1/Separator)",
|
||||
"vfl-m3-lauf-anfang-opt-umlenk-gf1": "\n 3 - Umlenkstation mit GF1 + Separator",
|
||||
"vfl-m3-lauf-anfang-offen-hinweis": "\n Anfang bleibt bewusst offen - keine Umlenkstation/GF1/Separator gebaut, spaeter fortsetzen oder per Vario_Kette_Merge verbinden.",
|
||||
"vfl-m3-alert-vf-zu-lang": "VF-Lauf ist %1 m lang (Grenze %2 m) - bitte neu planen (z.B. Zwischen-Motorstation einfuegen).",
|
||||
"vfl-m3-phase-b1": "\n\n>>> Phase B1: Front-Lauf (AS + GF) bauen ...",
|
||||
"vfl-m3-alert-beginnt-bogen": "Kette beginnt mit einem Bogen - bitte erst eine Gerade.",
|
||||
"vfl-m3-kurve-front-uebersprungen": "\n >>> [M3a] Vario-Kurve im Front-Lauf - uebersprungen.",
|
||||
@@ -145,9 +191,15 @@
|
||||
"vfl-m3-junction-exakt": "\n Junction (exakt): %1 mm",
|
||||
"vfl-m3-kletter-info": "\n Kletterhoehe %1 mm | Kletterer %2 | Kurven %3 | kurze VF %4",
|
||||
"vfl-m3-kein-winkel": "\n KEIN passender Vario-Winkel -> infeasibel (Front bereits gebaut).",
|
||||
"vfl-m3-kletter-zu-kurz-flach": "\n Kein Kletter-Winkel passt (Segment zu kurz) -> Lauf wird komplett flach gebaut, Hoehe wandert in GF1.",
|
||||
"vfl-m3-kletter-flach-gf": "\n Flache Zone: GF-Kompensation (GF1) = %1 mm",
|
||||
"vfl-m3-warnung-fueller-eingang-zu-kurz": "\n WARNUNG: Fueller direkt nach der Umlenkstation zu kurz (%1 mm < Minimum %2 mm) - nur Minimalabstand gebaut, Zielposition nicht exakt erreicht.",
|
||||
"vfl-m3-warnung-fueller-ausgang-zu-kurz": "\n WARNUNG: Fueller direkt vor der Motorstation zu kurz (%1 mm < Minimum %2 mm) - nur Minimalabstand gebaut, Zielposition nicht exakt erreicht.",
|
||||
"vfl-m3-gf-verteilung": "\n\n GF-Verteilung: 1 - alles am Einlauf (GF1) 2 - 1/2 GF1 + 1/2 GF2",
|
||||
"vfl-m3-gf-verteilung-alles-auslauf": "\n Kein GF1-Platz am Einlauf gewaehlt - komplette Kompensation wandert nach GF2 (Auslauf).",
|
||||
"vfl-m3-vert-halb": "1/2 GF1 + 1/2 GF2",
|
||||
"vfl-m3-vert-ganz": "alles GF1",
|
||||
"vfl-m3-vert-auslauf": "alles GF2 (Auslauf)",
|
||||
"vfl-m3-vario-ergebnis": "\n -> Vario %1 (%2), L_VF %3 mm, GF gesamt %4 mm, Verteilung %5 (GF2-Rest = Mess-Feinkorrektur)",
|
||||
"vfl-m3-warnung-gf2-negativ": "\n WARNUNG: Koerper klettert zu wenig - GF2<0 (fehlen %1 mm). Winkel zu flach; dZ nicht exakt.",
|
||||
"vfl-m3-gf2-ausgleich": "\n GF2 (gemessener Ausgleich): L=%1 mm",
|
||||
@@ -285,15 +337,46 @@
|
||||
"vfl-20m-hinweis": "\n >>> HINWEIS: Foerderer laenger als 20 m (%1 m) - Motorstation empfohlen!",
|
||||
"vfl-block-erstellt": "\n>>> Block '%1' (%2) erstellt und eingefuegt.",
|
||||
"vfl-fehler-rest-nicht-baubar": "\n FEHLER: Rest nicht baubar (zu steil/zu kurz fuer Schwanz Motor+GF2+Separator+ES). Bitte weiter zeichnen oder flacher planen.",
|
||||
"vfl-fehler-rest-nicht-baubar-mit-vorschlag": "\n FEHLER: Bei Zielhoehe %1 mm (Strecke dL=%2 mm, Hoehendifferenz dH=%3 mm, %4) nicht baubar (zu steil/zu kurz fuer Schwanz Motor+GF2+Separator+ES). Baubare Zielhoehe waere ungefaehr:%5",
|
||||
"vfl-fehler-rest-nicht-baubar-ohne-vorschlag": "\n FEHLER: Bei Zielhoehe %1 mm (Strecke dL=%2 mm, Hoehendifferenz dH=%3 mm, %4) nicht baubar - bei dieser Streckenlaenge wurde auch keine alternative Zielhoehe gefunden. Bitte laenger zeichnen oder flacher planen.",
|
||||
"vfl-vorschlag-ab-auf": " Ab %1 mm oder Auf %2 mm",
|
||||
"vfl-vorschlag-nur-ab": " Ab %1 mm (Auf ist bei dieser Streckenlaenge nicht baubar)",
|
||||
"vfl-vorschlag-nur-auf": " Auf %1 mm (Ab ist bei dieser Streckenlaenge nicht baubar)",
|
||||
"vfl-stufe1-start": "\n\n[Diagnose Stufe 1 - VF-Winkel-Suche]",
|
||||
"vfl-stufe2-diagnose": "\n\n[Diagnose Stufe 2 - horizontal+GF] deltaL=%1 mm deltaH=%2 mm -> GF_total=%3 mm L_VF=%4 mm (%5)",
|
||||
"vfl-stufe2-diagnose-details": "\n [Details] schon-flach=%1 | aus-dx=%2 mm (Einlauf, sollte 0 sein) | ein-dx=%3 mm ein-dz=%4 mm (ES-Element) | bogen-x1=%5 mm bogen-z1=%6 mm (Eintrittsbogen 3->0 Grad, nur falls nicht schon-flach) | bogen-x2=%7 mm bogen-z2=%8 mm (Austrittsbogen 0->3 Grad, immer) | FESTE_HORIZONTAL=%9 mm (Separator+Motorstation)",
|
||||
"vfl-stufe2-fest-kettenende": "\n Motorstation+Separator+ES benoetigen: Laenge=%1 mm, Hoehenabsenkung=%2 mm (fest, unabhaengig vom Winkel)",
|
||||
"vfl-stufe2-fest-eingang": "\n Umlenkstation+Separator+Motorstation+ES benoetigen: Laenge=%1 mm, Hoehenabsenkung=%2 mm (fest, unabhaengig vom Winkel)",
|
||||
"vfl-stufe2-minl": "\n [Mindestwert 1] Ohne geraden VF-Anteil (GF nach Zielhoehe dimensioniert): mindestens %1 mm Streckenlaenge noetig (vorhanden: %2 mm)",
|
||||
"vfl-stufe2-minl-unmoeglich": "\n [Mindestwert 1] Nicht per Streckenlaenge loesbar: schon ohne GF-Bogen aendert sich die Hoehe um %1 mm - die Zielhoehe verlangt aber nur %2 mm (zu wenig Hoehenunterschied fuer die feste Neigung)",
|
||||
"vfl-stufe2-minh": "\n [Mindestwert 2] Ohne GF-Bogen (Rest als gerader VF-Anteil, der die Hoehe nicht aendert): mindestens %1 mm Hoehenaenderung noetig (vorhanden: %2 mm)",
|
||||
"vfl-stufe2-minh-unmoeglich": "\n [Mindestwert 2] Nicht per Zielhoehe loesbar: schon ohne geraden VF-Anteil und ohne GF-Bogen betraegt der feste Fussabdruck %1 mm - die Strecke bietet aber nur %2 mm",
|
||||
"vfl-stufe2-ungueltig": "\n Stufe 2 (horizontal+GF) war ungueltig - es wurde stattdessen Stufe 1 (VF-Winkel-Suche) versucht (siehe Tabelle oben).",
|
||||
"vfl-fuege-block-ein": "\n Fuege %1 ein ...",
|
||||
"vfl-hinweis-gf2-minimum": "\n HINWEIS: berechnetes GF2=%1 mm < Minimum %2 mm -> auf Minimum angehoben (ES endet dadurch etwas weiter; siehe Ist-Ziel-Report).",
|
||||
"vfl-frage-gf2-minimum": "\n Berechnetes GF2=%1 mm liegt unter der ueblichen Mindestlaenge (%2 mm).\n Ja = mit den exakt berechneten %1 mm bauen (Zielpunkt wird exakt getroffen).\n Nein = auf %2 mm auffuellen (Zielpunkt verschiebt sich entsprechend weiter).",
|
||||
"vfl-horizontale-zwischenstrecke": "\n\nHorizontale Zwischenstrecke (0 Grad, L=%1 mm)",
|
||||
"vfl-kettenende-modus-ziel": "\n>>> Kettenende-Modus: Ziel dL=%1 mm, dH=%2 mm (%3). GF2 variiert mit dem Winkel.",
|
||||
"vfl-prompt-hoehe-endpunkt": "\nHoehe (Z) des Endpunkts [%1]: ",
|
||||
"vfl-prompt-hoehe-endpunkt-2": "\nHoehe (Z) des Endpunkts (Ab: %1 | Auf: %2) [%1]: ",
|
||||
"vfl-prompt-hoehe-kettenende": "\nHoehe (Z) des Kettenendes (ES-Element) [%1]: ",
|
||||
"vfl-prompt-hoehe-kettenende-2": "\nHoehe (Z) des Kettenendes (ES-Element) (Ab: %1 | Auf: %2) [%1]: ",
|
||||
"vfl-prompt-wahl-1-2": "\nIhre Wahl (1-2) [1]: ",
|
||||
"vfl-prompt-wahl-bis-n": "\nIhre Wahl (1-%1) [1]: ",
|
||||
"vfl-frage-auf-ab-richtung": "\n\nKette kommt flach an - keine Zielhoehe verfuegbar. Richtung waehlen:",
|
||||
"vfl-frage-startpunkt-typ": "\n\nAm Startpunkt konnte kein eindeutiger GF-/VF-Baustein erkannt werden (GF-Stueck und VF-Horizontalstueck sehen baulich identisch aus). Wie soll der Eingang gebaut werden?",
|
||||
"vfl-opt-eingang-direkt": "\n 1 - Direkt Umlenkstation bauen (kein GF-Stueck)",
|
||||
"vfl-opt-eingang-mit-stumpf": "\n 2 - GF (%1 mm) + Umlenkstation",
|
||||
"vfl-opt-eingang-ohne-umlenk": "\n 3 - Ohne Umlenkstation (VF-Fortsetzung)",
|
||||
"vfl-opt-richtung-auf": "\n 1 - Auf",
|
||||
"vfl-opt-richtung-ab": "\n 2 - Ab",
|
||||
"vfl-winkel-hoehen-header": "\n\nVerfuegbare Winkel und die damit erreichte Endhoehe - bitte waehlen:",
|
||||
"vfl-winkel-hoehen-option": "\n %1 - %2 Grad (Endhoehe: %3 mm)",
|
||||
"vfl-winkel-hoehen-zeile": "\n %1 Grad - Endhoehe: %2 mm",
|
||||
"vfl-winkel-hoehen-zeile-tile": "Endhoehe: %1 mm",
|
||||
"vfl-winkel-wahl-zeile-tile": "L_GF=%1 mm L_VF=%2 mm",
|
||||
"vfl-winkel-zeile-tile-ungueltig": "nicht baubar (Bogen passt nicht in die gewaehlte Strecke)",
|
||||
"vfl-winkel-hoehen-zeile-ungueltig": "\n %1 Grad - nicht baubar (Bogen passt nicht in die gewaehlte Strecke)",
|
||||
"vfl-winkel-hoehen-abweichung": "\n [Hinweis] Ist-Ziel-Vergleich: vorhergesagte Endhoehe %1 mm, tatsaechlich erreicht %2 mm.",
|
||||
"vfl-segment-gf-nicht-erlaubt": "\n Segment waere GF (zu steil) oder nicht baubar - innerhalb einer VF-Einheit nicht erlaubt.\n Bitte flacher/steigend zeichnen oder Foerderer beenden.",
|
||||
"vfl-winkel-option": "\n %1 - %2 Grad (L_GF=%3 mm L_VF=%4 mm)",
|
||||
"vfs-as90-mass": "\n AS_90: dx=%1 dz=%2",
|
||||
@@ -767,6 +850,7 @@
|
||||
"vfl-abbruch-gesichert": "\n>>> Linienzug abgebrochen: %1 Objekt(e) als Block gesichert (per Doppelklick editierbar/fortsetzbar).",
|
||||
"vfl-abbruch-nichts-gebaut": "\n>>> Abgebrochen - es wurde noch keine Geometrie erzeugt.",
|
||||
"vfl-abbruch-wickeln-fehler": "\n>>> FEHLER beim Sichern der Teil-Geometrie als Block: %1",
|
||||
"vfl-zurueck-glied-verworfen": "\n>>> Zurueck: letztes Kettenglied wird verworfen - bitte neu beantworten.",
|
||||
"vfl-edit-dialog-fehlt": "Dialog nicht gefunden: %1",
|
||||
"vfl-edit-abgebrochen": "\nEditieren abgebrochen - keine Aenderung.",
|
||||
"vfl-dlg-kopf-sektionen": "Sektionen: %1",
|
||||
|
||||
+88
-4
@@ -2,6 +2,7 @@
|
||||
"texts": {
|
||||
"vfl-alert-gf-modul-fehlt": "Slope-section module not loaded!\nThe chain type requires Gefaellestrecke.lsp\n(GF segments and GF arcs). Please load the menu.",
|
||||
"vfl-prompt-startpunkt-kette": "\n\nSelect chain start point: ",
|
||||
"vfl-prompt-richtung-waehlen": "\n\nChoose direction (click a point in the desired direction - the distance is ignored): ",
|
||||
"vfl-prompt-hoehe-startpunkt-kette": "\nHeight (Z) of the start point [%1]: ",
|
||||
"vfl-abgebrochen": "\nCancelled.",
|
||||
"vfl-as-setzen-frage": "\n\nPlace AS element?",
|
||||
@@ -19,24 +20,53 @@
|
||||
"vfl-menu-horizontal-vf-3": "\n 3 - New VF with horizontal start (horizontal piece)",
|
||||
"vfl-menu-linie-ende-4": "\n 4 - New line TO chain end (then separator + ES element)",
|
||||
"vfl-prompt-wahl-1-4-def1": "\nYour choice (1-4) [1]: ",
|
||||
"vfl-fehler-horizontal-vf-kurz": "\nERROR: Horizontal VF needs >= 1000 mm (deflection + motor) - draw it longer.",
|
||||
"vfl-menu-gf-bogen-ka-1": "\n 1 - GF arc (horizontal curve)",
|
||||
"vfl-menu-variokurve-ka-2": "\n 2 - Vario curve (horizontal curve, 30/60/90 degrees)",
|
||||
"vfl-menu-linie-gf-ka-3": "\n 3 - New line: GF (gravity section)",
|
||||
"vfl-menu-linie-vf-ka-4": "\n 4 - New line: down/up VF (VarioFoerderer unit)",
|
||||
"vfl-menu-horizontal-vf-ka-5": "\n 5 - New VF with horizontal start (horizontal piece)",
|
||||
"vfl-menu-linie-ende-ka-6": "\n 6 - New line TO chain end (then separator + ES element)",
|
||||
"vfl-prompt-wahl-1-6-def3": "\nYour choice (1-6) [3]: ",
|
||||
"vfl-fehler-horizontal-fussabdruck-zu-kurz": "\nERROR: Footprint does not fit into the chosen distance (remainder would be only %1 mm) - choose fewer/shorter extras or draw it longer.",
|
||||
"vfl-hinweis-horizontal-fussabdruck-zu-kurz": "\n\nNote: the chosen remaining length was %1 mm, after the 3-degree transition bend only %2 mm remained (minimum: %3 mm). Continue building with the minimum length anyway (the chain point will then end up further along than clicked)?",
|
||||
"vfl-fehler-linie-zu-kurz": "\nERROR: Line too short (or against travel direction) - please pick again.",
|
||||
"vfl-fehler-vf-kurz": "\nERROR: VarioFoerderer needs >= 1000 mm (deflection + motor) - draw it longer or choose \"GF\".",
|
||||
"vfl-gefaelle-festlegen-header": "\nDefine slope:",
|
||||
"vfl-gefaelle-opt-hoehe": "\n 1 - Given height (target height)",
|
||||
"vfl-gefaelle-opt-winkel": "\n 2 - Enter incline angle",
|
||||
"vfl-gefaelle-opt-hoehe": "\n 2 - Given height (target height)",
|
||||
"vfl-gefaelle-opt-winkel": "\n 1 - Enter incline angle",
|
||||
"vfl-prompt-neigungswinkel": "\nIncline angle (degrees, 0 < angle <= %1) [%1]: ",
|
||||
"vfl-prompt-neigungswinkel-laenge-berechnet": "\nIncline angle (degrees, 0 < angle <= %1) [%1] (deltaL will be calculated and inserted): ",
|
||||
"vfl-gf-hinweis-laenge-berechnet": "(deltaL will be calculated and inserted)",
|
||||
"vfl-gf-laenge-modus-header": "\nHow should the length of this gravity section be determined?",
|
||||
"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-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.",
|
||||
"vfl-alert-gf-steigend-falsche-richtung": "Rising gravity conveyor: the chosen target height is below the current height - please choose a higher target height or use the normal (falling) mode.",
|
||||
"vfl-alert-winkel-ungueltig": "Incline angle invalid: %1 degrees. Allowed: 0 < angle <= %2 degrees.",
|
||||
"vfl-prompt-hoehe-linienendpunkt": "\nHeight (Z) of the line end point [%1]: ",
|
||||
"vfl-prompt-hoehe-linienendpunkt-2": "\nHeight (Z) of the line end point (down: %1 | up: %2) [%1]: ",
|
||||
"vfl-hinweis-hoehe-vorschlag-fehlt": "\n(Note: no buildable suggestion found for that direction at this segment length - please check the value manually.)",
|
||||
"vfl-alert-gf-kann-nicht-steigen": "Gravity section (GF) cannot rise - please pick a lower target height or use down/up VF.",
|
||||
"vfl-alert-gefaelle-zu-steil": "Slope too steep for GF: %1 degrees (max allowed %2 degrees).\nPlease pick a smaller height difference or use down/up VF.",
|
||||
"vfl-prompt-hoehe-eingang-gf1": "\nTarget height (Z) at the transition to the horizontal section [%1]: ",
|
||||
"vfl-alert-eingang-kann-nicht-steigen": "This VF unit (horizontal start) cannot rise - please use 'New line: up/down VF' instead.",
|
||||
"vfl-alert-eingang-hoehe-zu-klein": "Target height too small: at least %1 mm of drop is needed (separator+deflection station+transition bend alone already reach that much). Please enter a lower target height.",
|
||||
"vfl-alert-eingang-hoehe-zu-gross": "Target height too far away for this distance - the maximum reachable target height would be about %1 mm. Please use 'New line: up/down VF' instead.",
|
||||
"vfl-ist-kettenende-header": "\nIs this the chain end?",
|
||||
"vfl-kettenende-opt-ja-es": "\n 1 - Yes (place ES element)",
|
||||
"vfl-kettenende-opt-ja-ohne-es": "\n 2 - Yes (without placing ES element)",
|
||||
"vfl-kettenende-opt-nein": "\n 3 - No (keep building)",
|
||||
"vfl-alert-vf-nicht-baubar": "VF unit geometrically not buildable!\ndeltaL=%1 mm, deltaH=%2 mm, direction=%3\nPlease pick another end point/height.",
|
||||
"vfl-alert-kettenende-p1": "1. Target ΔL=%1 mm, ΔH=%2 mm (%3): angled Vario (angle table) not buildable.",
|
||||
"vfl-alert-kettenende-p2-beide": "\n\n2. Horizontal+GF not buildable - would need at least ΔL=%1 mm OR at least ΔH=%2 mm.",
|
||||
"vfl-alert-kettenende-p2-nur-minh": "\n\n2. Horizontal+GF not buildable - would need at least ΔH=%1 mm of height change.",
|
||||
"vfl-alert-kettenende-p2-nur-minl": "\n\n2. Horizontal+GF not buildable - would need at least ΔL=%1 mm of distance.",
|
||||
"vfl-alert-vf-entscheidung-p1": "1. Target ΔL=%1 mm, ΔH=%2 mm (%3): angle table not buildable.",
|
||||
"vfl-alert-vf-entscheidung-p2-beide": "\n\n2. At least needed: ΔL=%1 mm OR ΔH=%2 mm.",
|
||||
"vfl-alert-vf-entscheidung-p2-nur-minh": "\n\n2. At least needed: ΔH=%1 mm of height change.",
|
||||
"vfl-alert-vf-entscheidung-p2-nur-minl": "\n\n2. At least needed: ΔL=%1 mm of distance.",
|
||||
"vfl-alert-segment-nicht-baubar": "Segment geometrically not buildable!\ndeltaL=%1 mm, deltaH=%2 mm, direction=%3\nPlease pick another end point/height.",
|
||||
"vfl-info-kurzes-segment": "\n>>> Short segment (deltaL=%1 mm < 1000): automatic 3-degree gravity section (no height query, deltaH=%2 mm).",
|
||||
"vfl-info-kettenende-footprint": "\n>>> Chain-end mode: footprint for separator + ES reserved -> buildable deltaL=%1 mm, deltaH=%2 mm.",
|
||||
@@ -69,9 +99,14 @@
|
||||
"vfc-block-eingefuegt-xyzref-ksaus": "\n '%1' inserted (XY:%2 Z:%3)\n KS_AUS: X=%4 Y=%5 Z=%6",
|
||||
"vfl-ja": "\n 1 - Yes",
|
||||
"vfl-nein": "\n 2 - No",
|
||||
"vfl-antwort-ja": "Yes",
|
||||
"vfl-antwort-nein": "No",
|
||||
"vfl-wizard-antwort-echo": "\n -> Dialog selection: %1",
|
||||
"vfl-sep-vor-frage": "\n\nInsert additional separator BEFORE the horizontal section?",
|
||||
"vfl-sep-nach-frage": "\n\nInsert additional separator AFTER the horizontal section?",
|
||||
"vfl-sep-an-stelle-frage": "\n\nInsert additional separator at this point?",
|
||||
"vfl-sep-vor-gf-frage": "\n\nInsert separator BEFORE this slope section (GF)?",
|
||||
"vfl-sep-nach-gf-frage": "\n\nInsert separator AFTER this slope section (GF)?",
|
||||
"vf-winkel-aus-header": "\n\nOutput element (AS_Element) - choose angle:",
|
||||
"vf-winkel-ein-header": "\n\nInput element (ES_Element) - choose angle:",
|
||||
"vf-winkel-90": "\n 1 - 90 deg",
|
||||
@@ -137,6 +172,17 @@
|
||||
"vfl-m3-warnung-zu-steil": "\n WARNING: ~slope > 51 deg -> too steep for Vario (magnitude infeasible).",
|
||||
"vfl-m3-vario-bereich-ok": "\n -> within Vario range (3..51 deg), rough orientation.",
|
||||
"vfl-m3-anker-hinweis": "\n (anchors above = rough preview; exact values are MEASURED during build)",
|
||||
"vfl-m3-lauf-abschluss-header": "\n\nThe VF run is the end of the selected path. End the run with:",
|
||||
"vfl-m3-lauf-abschluss-opt-offen": "\n 1 - No motor station (open end, continue/merge later)",
|
||||
"vfl-m3-lauf-abschluss-opt-motor": "\n 2 - Set motor station (no ES element)",
|
||||
"vfl-m3-lauf-abschluss-opt-motor-es": "\n 3 - Motor station + ES element (chain end)",
|
||||
"vfl-m3-lauf-abschluss-offen-hinweis": "\n Run deliberately left open - no motor station/separator/ES built; continue later or join with Vario_Kette_Merge.",
|
||||
"vfl-m3-lauf-anfang-header": "\n\nThe VF run is the start of the selected path. Start the run with:",
|
||||
"vfl-m3-lauf-anfang-opt-offen": "\n 1 - No reversing station (open start, continue/merge later)",
|
||||
"vfl-m3-lauf-anfang-opt-umlenk": "\n 2 - Reversing station directly (no GF1/separator)",
|
||||
"vfl-m3-lauf-anfang-opt-umlenk-gf1": "\n 3 - Reversing station with GF1 + separator",
|
||||
"vfl-m3-lauf-anfang-offen-hinweis": "\n Start deliberately left open - no reversing station/GF1/separator built; continue later or join with Vario_Kette_Merge.",
|
||||
"vfl-m3-alert-vf-zu-lang": "VF run is %1 m long (limit %2 m) - please re-plan (e.g. insert an intermediate motor station).",
|
||||
"vfl-m3-phase-b1": "\n\n>>> Phase B1: building front run (AS + GF) ...",
|
||||
"vfl-m3-alert-beginnt-bogen": "Chain starts with an arc - please begin with a straight.",
|
||||
"vfl-m3-kurve-front-uebersprungen": "\n >>> [M3a] Vario curve in front run - skipped.",
|
||||
@@ -145,9 +191,15 @@
|
||||
"vfl-m3-junction-exakt": "\n Junction (exact): %1 mm",
|
||||
"vfl-m3-kletter-info": "\n Climb height %1 mm | climbers %2 | curves %3 | short VF %4",
|
||||
"vfl-m3-kein-winkel": "\n NO matching Vario angle -> infeasible (front already built).",
|
||||
"vfl-m3-kletter-zu-kurz-flach": "\n No climb angle fits (segment too short) -> run is built entirely flat, height is absorbed by GF1.",
|
||||
"vfl-m3-kletter-flach-gf": "\n Flat zone: GF compensation (GF1) = %1 mm",
|
||||
"vfl-m3-warnung-fueller-eingang-zu-kurz": "\n WARNING: filler right after the reversing station is too short (%1 mm < minimum %2 mm) - only the minimum clearance was built, target position not reached exactly.",
|
||||
"vfl-m3-warnung-fueller-ausgang-zu-kurz": "\n WARNING: filler right before the motor station is too short (%1 mm < minimum %2 mm) - only the minimum clearance was built, target position not reached exactly.",
|
||||
"vfl-m3-gf-verteilung": "\n\n GF distribution: 1 - all at inlet (GF1) 2 - 1/2 GF1 + 1/2 GF2",
|
||||
"vfl-m3-gf-verteilung-alles-auslauf": "\n No GF1 room at the inlet chosen - full compensation moves to GF2 (outlet).",
|
||||
"vfl-m3-vert-halb": "1/2 GF1 + 1/2 GF2",
|
||||
"vfl-m3-vert-ganz": "all GF1",
|
||||
"vfl-m3-vert-auslauf": "all GF2 (outlet)",
|
||||
"vfl-m3-vario-ergebnis": "\n -> Vario %1 (%2), L_VF %3 mm, GF total %4 mm, distribution %5 (GF2 remainder = measured fine correction)",
|
||||
"vfl-m3-warnung-gf2-negativ": "\n WARNING: body climbs too little - GF2<0 (missing %1 mm). Angle too shallow; dZ not exact.",
|
||||
"vfl-m3-gf2-ausgleich": "\n GF2 (measured compensation): L=%1 mm",
|
||||
@@ -285,15 +337,46 @@
|
||||
"vfl-20m-hinweis": "\n >>> NOTE: conveyor longer than 20 m (%1 m) - motor station recommended!",
|
||||
"vfl-block-erstellt": "\n>>> Block '%1' (%2) created and inserted.",
|
||||
"vfl-fehler-rest-nicht-baubar": "\n ERROR: remainder cannot be built (too steep/too short for tail motor+GF2+separator+ES). Please continue drawing or plan flatter.",
|
||||
"vfl-fehler-rest-nicht-baubar-mit-vorschlag": "\n ERROR: not buildable at target height %1 mm (distance dL=%2 mm, height difference dH=%3 mm, %4) - too steep/too short for tail motor+GF2+separator+ES. An approximately buildable target height would be:%5",
|
||||
"vfl-fehler-rest-nicht-baubar-ohne-vorschlag": "\n ERROR: not buildable at target height %1 mm (distance dL=%2 mm, height difference dH=%3 mm, %4) - no alternative target height was found for this distance either. Please draw a longer distance or plan flatter.",
|
||||
"vfl-vorschlag-ab-auf": " down to %1 mm or up to %2 mm",
|
||||
"vfl-vorschlag-nur-ab": " down to %1 mm (up is not buildable at this distance)",
|
||||
"vfl-vorschlag-nur-auf": " up to %1 mm (down is not buildable at this distance)",
|
||||
"vfl-stufe1-start": "\n\n[Diagnosis stage 1 - VF angle search]",
|
||||
"vfl-stufe2-diagnose": "\n\n[Diagnosis stage 2 - horizontal+GF] deltaL=%1 mm deltaH=%2 mm -> GF_total=%3 mm L_VF=%4 mm (%5)",
|
||||
"vfl-stufe2-diagnose-details": "\n [Details] already-flat=%1 | aus-dx=%2 mm (entry, should be 0) | ein-dx=%3 mm ein-dz=%4 mm (ES element) | bogen-x1=%5 mm bogen-z1=%6 mm (entry bend 3->0 deg, only if not already-flat) | bogen-x2=%7 mm bogen-z2=%8 mm (exit bend 0->3 deg, always) | FESTE_HORIZONTAL=%9 mm (separator+motor station)",
|
||||
"vfl-stufe2-fest-kettenende": "\n Motor station+separator+ES require: length=%1 mm, height drop=%2 mm (fixed, independent of angle)",
|
||||
"vfl-stufe2-fest-eingang": "\n Reversing station+separator+motor station+ES require: length=%1 mm, height drop=%2 mm (fixed, independent of angle)",
|
||||
"vfl-stufe2-minl": "\n [Minimum 1] Without a straight VF section (GF sized to the target height): at least %1 mm of distance needed (available: %2 mm)",
|
||||
"vfl-stufe2-minl-unmoeglich": "\n [Minimum 1] Not solvable via distance: even without a GF bend the height already changes by %1 mm - the target only calls for %2 mm (not enough height difference for the fixed incline)",
|
||||
"vfl-stufe2-minh": "\n [Minimum 2] Without a GF bend (remainder as a straight VF section, which does not change height): at least %1 mm of height change needed (available: %2 mm)",
|
||||
"vfl-stufe2-minh-unmoeglich": "\n [Minimum 2] Not solvable via target height: even without a straight VF section and without a GF bend, the fixed footprint is already %1 mm - the distance only offers %2 mm",
|
||||
"vfl-stufe2-ungueltig": "\n Stage 2 (horizontal+GF) was invalid - stage 1 (VF angle search) was tried instead (see table above).",
|
||||
"vfl-fuege-block-ein": "\n Inserting %1 ...",
|
||||
"vfl-hinweis-gf2-minimum": "\n NOTE: calculated GF2=%1 mm < minimum %2 mm -> raised to minimum (ES therefore ends a bit further on; see actual-vs-target report).",
|
||||
"vfl-frage-gf2-minimum": "\n Calculated GF2=%1 mm is below the usual minimum length (%2 mm).\n Yes = build with the exact calculated %1 mm (hits the target point exactly).\n No = pad up to %2 mm (target point shifts further accordingly).",
|
||||
"vfl-horizontale-zwischenstrecke": "\n\nHorizontal intermediate section (0 deg, L=%1 mm)",
|
||||
"vfl-kettenende-modus-ziel": "\n>>> Chain-end mode: target dL=%1 mm, dH=%2 mm (%3). GF2 varies with the angle.",
|
||||
"vfl-prompt-hoehe-endpunkt": "\nHeight (Z) of the end point [%1]: ",
|
||||
"vfl-prompt-hoehe-endpunkt-2": "\nHeight (Z) of the end point (down: %1 | up: %2) [%1]: ",
|
||||
"vfl-prompt-hoehe-kettenende": "\nHeight (Z) of the chain end (ES element) [%1]: ",
|
||||
"vfl-prompt-hoehe-kettenende-2": "\nHeight (Z) of the chain end (ES element) (down: %1 | up: %2) [%1]: ",
|
||||
"vfl-prompt-wahl-1-2": "\nYour choice (1-2) [1]: ",
|
||||
"vfl-prompt-wahl-bis-n": "\nYour choice (1-%1) [1]: ",
|
||||
"vfl-frage-auf-ab-richtung": "\n\nChain arrives flat - no target height available. Choose direction:",
|
||||
"vfl-frage-startpunkt-typ": "\n\nNo clear GF/VF component was recognized at the starting point (a GF stretch and a VF horizontal stretch look structurally identical). How should the entry be built?",
|
||||
"vfl-opt-eingang-direkt": "\n 1 - Build idler station directly (no GF stretch)",
|
||||
"vfl-opt-eingang-mit-stumpf": "\n 2 - GF (%1 mm) + idler station",
|
||||
"vfl-opt-eingang-ohne-umlenk": "\n 3 - No idler station (VF continuation)",
|
||||
"vfl-opt-richtung-auf": "\n 1 - Up",
|
||||
"vfl-opt-richtung-ab": "\n 2 - Down",
|
||||
"vfl-winkel-hoehen-header": "\n\nAvailable angles and the resulting end height - please choose:",
|
||||
"vfl-winkel-hoehen-option": "\n %1 - %2 deg (end height: %3 mm)",
|
||||
"vfl-winkel-hoehen-zeile": "\n %1 deg - end height: %2 mm",
|
||||
"vfl-winkel-hoehen-zeile-tile": "end height: %1 mm",
|
||||
"vfl-winkel-wahl-zeile-tile": "L_GF=%1 mm L_VF=%2 mm",
|
||||
"vfl-winkel-zeile-tile-ungueltig": "not buildable (bend does not fit into the chosen distance)",
|
||||
"vfl-winkel-hoehen-zeile-ungueltig": "\n %1 deg - not buildable (bend does not fit into the chosen distance)",
|
||||
"vfl-winkel-hoehen-abweichung": "\n [Note] Target-vs-actual check: predicted end height %1 mm, actually reached %2 mm.",
|
||||
"vfl-segment-gf-nicht-erlaubt": "\n Segment would be GF (too steep) or not buildable - not allowed within a VF unit.\n Please draw flatter/rising or end the conveyor.",
|
||||
"vfl-winkel-option": "\n %1 - %2 deg (L_GF=%3 mm L_VF=%4 mm)",
|
||||
"vfs-as90-mass": "\n AS_90: dx=%1 dz=%2",
|
||||
@@ -767,6 +850,7 @@
|
||||
"vfl-abbruch-gesichert": "\n>>> Chain cancelled: %1 object(s) saved as a block (editable/resumable via double-click).",
|
||||
"vfl-abbruch-nichts-gebaut": "\n>>> Cancelled - no geometry was created yet.",
|
||||
"vfl-abbruch-wickeln-fehler": "\n>>> ERROR saving the partial geometry as a block: %1",
|
||||
"vfl-zurueck-glied-verworfen": "\n>>> Back: discarding the last chain element - please answer it again.",
|
||||
"vfl-edit-dialog-fehlt": "Dialog not found: %1",
|
||||
"vfl-edit-abgebrochen": "\nEdit cancelled - no change.",
|
||||
"vfl-dlg-kopf-sektionen": "Sections: %1",
|
||||
|
||||
+42
-10
@@ -33,7 +33,10 @@
|
||||
;;
|
||||
;; Aufruf in BricsCAD:
|
||||
;; (load (strcat (getenv "DXFMAKRO") "/tests/test_linienzug.lsp"))
|
||||
;; TEST_LINIENZUG
|
||||
;; TEST_LINIENZUG (Standard-Szenario, linienzug_tests.json, in
|
||||
;; alltests.json/SSG_RUN_ALL_TESTS registriert)
|
||||
;; TEST_LINIENZUG_STUFE2 (Stufe-2-Fallback-Regressionstest Kettenende,
|
||||
;; linienzug_tests_stufe2.json, manueller Aufruf)
|
||||
;; ============================================================
|
||||
|
||||
;; Naechste Skript-Antwort liefern (FIFO). Bei leerer Queue Warnung + "".
|
||||
@@ -126,8 +129,17 @@
|
||||
)
|
||||
)
|
||||
|
||||
(defun c:TEST_LINIENZUG ( / json-datei daten meta schritte-anz rest-anz status
|
||||
old-vgp old-gs old-gi old-gr err)
|
||||
;; --- Gemeinsamer Replay-Kern, von allen c:TEST_LINIENZUG*-Befehlen genutzt ---
|
||||
;; befehl-anzeige: nur fuer die Konsolen-Ueberschrift/ssg-start (String).
|
||||
;; test-id: Bezeichner fuer das *linienzug-test-results*-JSON (run-all-
|
||||
;; Konvention, siehe linienzug:export-results).
|
||||
;; Rueckgabe: (status schritte-anz rest-anz) - status ist "OK"/"ABWEICHUNG"/
|
||||
;; "FEHLER". Setzt zusaetzlich *linienzug-test-results* (letzter Aufruf
|
||||
;; gewinnt - identisch zum bisherigen Verhalten von c:TEST_LINIENZUG, das
|
||||
;; ebenfalls nur einen einzigen Testfall pro Lauf kennt).
|
||||
(defun tlz-run-datei (json-datei test-id befehl-anzeige /
|
||||
daten meta schritte-anz rest-anz status
|
||||
old-vgp old-gs old-gi old-gr err)
|
||||
(if (or (not *lib-initialized*) (null bogen-auf)) (init-bibliothek))
|
||||
(if (null (car (atoms-family 1 '("VF-LINIENZUG-MODUS"))))
|
||||
(progn
|
||||
@@ -138,12 +150,10 @@
|
||||
)
|
||||
|
||||
(princ "\n================================================================")
|
||||
(princ "\n TEST_LINIENZUG - VF-Linienzug Replay-Test")
|
||||
(princ (strcat "\n " befehl-anzeige " - VF-Linienzug Replay-Test"))
|
||||
(princ "\n================================================================")
|
||||
|
||||
;; --- Eingabe-Skript aus JSON laden ---
|
||||
(setq json-datei
|
||||
(strcat (getenv "DXFMAKRO") "\\tests\\testdata\\linienzug_tests.json"))
|
||||
(setq daten (ssg-load-json json-datei))
|
||||
(if (null daten)
|
||||
(progn
|
||||
@@ -158,7 +168,7 @@
|
||||
(princ (strcat "\n Eingabe-Schritte: " (itoa schritte-anz)))
|
||||
(if meta (princ (strcat "\n Szenario: " (ssg-val meta "beschreibung"))))
|
||||
|
||||
(ssg-start "TEST_LINIENZUG" '(("OSMODE") ("ATTREQ") ("ATTDIA")))
|
||||
(ssg-start befehl-anzeige '(("OSMODE") ("ATTREQ") ("ATTDIA")))
|
||||
(setvar "OSMODE" 0)
|
||||
(setvar "ATTREQ" 0)
|
||||
(setvar "ATTDIA" 0)
|
||||
@@ -192,11 +202,11 @@
|
||||
(if (vl-catch-all-error-p err)
|
||||
(progn
|
||||
(setq status "FEHLER")
|
||||
(princ (strcat "\n TEST_LINIENZUG: FEHLER -> "
|
||||
(princ (strcat "\n " befehl-anzeige ": FEHLER -> "
|
||||
(vl-catch-all-error-message err))))
|
||||
(progn
|
||||
(setq status (if (= rest-anz 0) "OK" "ABWEICHUNG"))
|
||||
(princ "\n TEST_LINIENZUG: Kette gebaut.")
|
||||
(princ (strcat "\n " befehl-anzeige ": Kette gebaut."))
|
||||
(if (> rest-anz 0)
|
||||
(princ (strcat "\n WARNUNG: " (itoa rest-anz)
|
||||
" Skript-Eintraege NICHT verbraucht (Ablauf weicht ab)."))
|
||||
@@ -214,12 +224,34 @@
|
||||
;; --- Ergebnis fuer run-all als JSON-String ablegen ---
|
||||
(setq *linienzug-test-results*
|
||||
(strcat " {\n"
|
||||
" \"test_id\": \"LZ_Standard\",\n"
|
||||
" \"test_id\": \"" test-id "\",\n"
|
||||
" \"status\": \"" status "\",\n"
|
||||
" \"schritte_gesamt\": " (itoa schritte-anz) ",\n"
|
||||
" \"schritte_offen\": " (itoa rest-anz) "\n"
|
||||
" }"))
|
||||
|
||||
(ssg-end)
|
||||
(list status schritte-anz rest-anz)
|
||||
)
|
||||
|
||||
(defun c:TEST_LINIENZUG ( / json-datei)
|
||||
(setq json-datei
|
||||
(strcat (getenv "DXFMAKRO") "\\tests\\testdata\\linienzug_tests.json"))
|
||||
(tlz-run-datei json-datei "LZ_Standard" "TEST_LINIENZUG")
|
||||
(princ)
|
||||
)
|
||||
|
||||
;; Zweiter Testfall (Regressionstest, in dieser Session neu aufgenommen):
|
||||
;; Stufe-2-Fallback beim Kettenende (typ=VF winkel=0, horizontales VF + GF-
|
||||
;; Ausgleich), siehe Beschreibung/Kommentare in linienzug_tests_stufe2.json.
|
||||
;; Eigenstaendiger Befehl statt zweitem Array-Eintrag in linienzug_tests.json,
|
||||
;; damit LZ_Standard unangetastet bleibt (jede JSON-Datei bleibt ein
|
||||
;; einzelnes Szenario, wie von tlz-daten->queue/-meta erwartet). NICHT in
|
||||
;; tests/alltests.json registriert - manueller Einzelaufruf, bei Bedarf
|
||||
;; spaeter dort ergaenzen.
|
||||
(defun c:TEST_LINIENZUG_STUFE2 ( / json-datei)
|
||||
(setq json-datei
|
||||
(strcat (getenv "DXFMAKRO") "\\tests\\testdata\\linienzug_tests_stufe2.json"))
|
||||
(tlz-run-datei json-datei "LZ_Stufe2_Kettenende" "TEST_LINIENZUG_STUFE2")
|
||||
(princ)
|
||||
)
|
||||
|
||||
Vendored
+4
-24
@@ -1,6 +1,6 @@
|
||||
[
|
||||
{
|
||||
"beschreibung": "Standard-Linienzug (Modus 1): Start Z4500 AS rechts -> Neue Linie Ab Z1800 45deg (GF am Einlauf) -> Horizontal 900 mit Separator VOR+NACH -> Vario-Kurve 90 links aussen -> Horizontal 250 -> Vario-Kurve 90 links aussen -> Kettenende (Option 3) Z4500 45deg ES rechts",
|
||||
"beschreibung": "Standard-Linienzug (Modus 1): Start Z4500 AS rechts -> Neue Linie Ab Z1800 45deg (GF am Einlauf) -> Horizontal 900 -> Vario-Kurve 90 links aussen -> Horizontal 250 -> Vario-Kurve 90 links aussen -> Kettenende (Option 3) Z4500 45deg ES rechts",
|
||||
"erwartung_dx_mm": 0,
|
||||
"erwartung_dy_mm": 637,
|
||||
"erwartung_dz_mm": 0,
|
||||
@@ -33,8 +33,8 @@
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
"kommentar": "getstring Naechstes Element (2 = Neue Linie: Ab/Auf VF - Gefaelle hier 26 Grad > GF-Maximalwinkel, daher NICHT Option 1/GF)"
|
||||
"wert": "4",
|
||||
"kommentar": "getstring Naechstes Element (4 = Neue Linie: Ab/Auf VF - Kettenanfang-Menue hat seit GF-Bogen/Vario-Kurve-Erweiterung 6 statt 4 Optionen, Linie-VF ist jetzt Option 4 statt 2; Gefaelle hier 26 Grad > GF-Maximalwinkel, daher NICHT Option 3/GF)"
|
||||
},
|
||||
{
|
||||
"typ": "point_rel",
|
||||
@@ -73,20 +73,10 @@
|
||||
"hz": 0,
|
||||
"kommentar": "getpoint Horizontal-Endpunkt (dL=900, hz=0)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring Separator VOR? (Ja)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring Separator NACH? (Ja)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
"kommentar": "getstring Ist Endpunkt? (Nein)"
|
||||
"kommentar": "getstring Ist Endpunkt? (Nein) - kein Separator mehr innerhalb der VF-Einheit (5-Punkte-Umbau)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
@@ -124,16 +114,6 @@
|
||||
"hz": 90,
|
||||
"kommentar": "getpoint Horizontal-Endpunkt (dL=250, hz=90)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
"kommentar": "getstring Separator VOR? (Nein)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
"kommentar": "getstring Separator NACH? (Nein)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
|
||||
+295
@@ -0,0 +1,295 @@
|
||||
[
|
||||
{
|
||||
"beschreibung": "Stufe-2-Fallback-Regressionstest (Kettenende): Start Z2154 AS 90 Grad links -> Horizontal-VF (2x Vario-Kurve 90 rechts innen) -> Linie-GF 3 Grad (Sep vor+nach) -> Horizontal-VF (Vario-Kurve 30 rechts innen -> Auf 27 Grad -> Vario-Kurve 30 links aussen) -> Kettenende ueber 'Ist der Endpunkt der Foerderer?'-Option 3 mit ES 90 Grad links; GF2 (86mm) liegt unter der Mindestlaenge (400mm), Stufe 1 (Winkeltabelle) scheitert komplett (alle Kandidaten negative Laenge) -> Stufe 2 (vfl-winkel-stufe-entscheidung) liefert typ=VF winkel=0 (horizontales VF + GF-Ausgleich). Reproduziert den in dieser Session gefixten Bug (Stufe-2-Fallback griff im Kettenende-Zweig 'Ab, steiler als 3 Grad' bisher nicht, wenn Stufe 1 scheiterte) - erster erfolgreicher Stufe-2-Bau der Session, live in BricsCAD verifiziert.",
|
||||
"erwartung_dx_mm": 638,
|
||||
"erwartung_dy_mm": 0,
|
||||
"erwartung_dz_mm": 0,
|
||||
"erwartung_hinweis": "dX~638 = seitlicher Fussabdruck ES_Element_90 quer zur letzten Fahrtrichtung (Bauform des 90-Grad-ES-Elements, kein Baufehler). Kernzweck des Testfalls: Stufe-2-Fallback beim Kettenende (typ=VF winkel=0 im Kettenende-Abschluss, GF2=86mm unter Mindestlaenge -> 'trotzdem mit 86mm bauen?'=Ja)."
|
||||
},
|
||||
{
|
||||
"typ": "point_abs",
|
||||
"wert": [24377.817458, -10300, 2067],
|
||||
"kommentar": "getpoint Startpunkt der Kette (Rohwert aus dem realen BricsCAD-Testlauf)"
|
||||
},
|
||||
{
|
||||
"typ": "real",
|
||||
"wert": 2154.0,
|
||||
"kommentar": "getreal Hoehe (Z) Startpunkt"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring AS-Element setzen? (Ja)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring AS-Element Winkel - Menu-Index 1=90 Grad/2=30 Grad (vf-frage-element-winkel mappt den rohen Index auf den Winkel-STRING '90'/'30'; im Debug-Journal erscheint bereits der gemappte Wert '90', die Konsolen-/Mock-Eingabe selbst bleibt der Index)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring AS-Seite (links)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "5",
|
||||
"kommentar": "getstring Naechstes Element (Kettenanfang-Menue, 6 Optionen: 5 = Horizontal-VF)"
|
||||
},
|
||||
{
|
||||
"typ": "point_rel",
|
||||
"dL": 6082.461,
|
||||
"hz": 90,
|
||||
"kommentar": "getpoint Endpunkt Horizontal-VF (freie Richtung am Kettenanfang, hz-vorgabe=nil - hz=90 ist die vom Code gesnappte Richtung, direkt aus dem Debug-Journal (REAL-Eintrag unmittelbar nach dem DL-Eintrag) uebernommen; dieser REAL-Eintrag ist ein reiner Journal-Nebeneffekt von vfl-in-abstand und KEIN eigener Eingabe-Schritt, siehe Lisp/vf_linienzug.lsp vfl-in-abstand"
|
||||
},
|
||||
{
|
||||
"typ": "real",
|
||||
"wert": 1980.0,
|
||||
"kommentar": "getreal Ziel-Hoehe Eingang GF1 (eingang-modus=voll/nil, vollstaendiger Neuaufbau des VF-Eingangs)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
"kommentar": "getstring Ist der Endpunkt der Foerderer? (Nein) - erste Frage innerhalb vfl-baue-horizontal-koerper (ziel-modus)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
"kommentar": "getstring Naechstes im VarioFoerderer (Vario-Kurve)"
|
||||
},
|
||||
{
|
||||
"typ": "int",
|
||||
"wert": 90,
|
||||
"kommentar": "getint Vario-Kurve Winkel (90 Grad, roher Winkelwert - KEIN Auswahl-Index, siehe vfl-menu-winkel)"
|
||||
},
|
||||
{
|
||||
"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 im VarioFoerderer (Horizontaler Foerderer)"
|
||||
},
|
||||
{
|
||||
"typ": "point_rel",
|
||||
"dL": 1300,
|
||||
"hz": 0,
|
||||
"kommentar": "getpoint Horizontal-Endpunkt innerhalb der VF-Einheit. hz=0 ANNAHME (NICHT direkt im Debug-/Konsolen-Auszug als 'hz=' ausgewiesen, sondern aus der Turn-Arithmetik hergeleitet: Start-hz=90, davor bereits eine 90-Grad-rechts-Vario-Kurve (-90) -> 90-90=0; dieselbe Turn-Konvention [rechts=-Winkel/links=+Winkel] ist an ZWEI anderen Stellen dieses Testfalls unabhaengig durch explizite 'hz='-Werte im Konsolen-Auszug bestaetigt, siehe die Vario_Bogen_ab_3/ab_27-Eintraege). BITTE in BricsCAD live gegenpruefen (einzige nicht direkt beleg-bestaetigte hz-Rekonstruktion dieses Testfalls)."
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
"kommentar": "getstring Ist der Endpunkt der Foerderer? (Nein) - innerhalb vfl-baue-horizontal-koerper (ziel-modus)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
"kommentar": "getstring Naechstes im VarioFoerderer (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": "1",
|
||||
"kommentar": "getstring Ist der Endpunkt der Foerderer? (Ja, nur Motorstation) - schliesst die 1. Horizontal-VF-Einheit ab"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
"kommentar": "getstring Ist das Kettenende (ES-Element)? (Nein, weiterbauen) - vfl-vf-einheit-abschluss"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
"kommentar": "getstring Zusaetzlichen Separator an dieser Stelle einfuegen? (Nein)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
"kommentar": "getstring Naechstes Element (Hauptmenue, 5 Optionen, Frame vorhanden: 2 = Neue Linie: GF)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring Wie soll die Laenge dieser Gefaellestrecke bestimmt werden? (1 = Endpunkt waehlen)"
|
||||
},
|
||||
{
|
||||
"typ": "point_rel",
|
||||
"dL": 978.394396,
|
||||
"hz": -90,
|
||||
"kommentar": "getpoint Endpunkt Gefaellestrecke. hz=-90 DIREKT aus dem Debug-Journal bestaetigt (GEOMETRIE-Zeile 'vfl-insert-gf-segment (deltaL=379 hz=-90 winkel=3)')"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring Separator VOR dieser Gefaellestrecke einfuegen? (Ja)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring Separator NACH dieser Gefaellestrecke einfuegen? (Ja)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring Gefaelle festlegen (1 = Neigungswinkel eingeben)"
|
||||
},
|
||||
{
|
||||
"typ": "real",
|
||||
"wert": 3.0,
|
||||
"kommentar": "getreal Neigungswinkel (3 Grad)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "3",
|
||||
"kommentar": "getstring Ist das Kettenende? (3 = Nein, weiterbauen - 3-Optionen-Menue: 1=Ja+ES, 2=Ja ohne ES, 3=Nein)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "4",
|
||||
"kommentar": "getstring Naechstes Element (5 Optionen: 4 = Neue VF mit horizontalem Anfang/Horizontal-VF)"
|
||||
},
|
||||
{
|
||||
"typ": "point_rel",
|
||||
"dL": 888.101488,
|
||||
"hz": -90,
|
||||
"kommentar": "getpoint Endpunkt Horizontal-VF (2. Einheit). hz=-90 unveraendert gegenueber dem vorigen GF-Segment (keine Richtungsaenderung dazwischen); eingang-modus=separator (letztes Glied war der Separator NACH der Gefaellestrecke) -> KEINE Ziel-Hoehe-Frage fuer GF1 (im Unterschied zur 1. Horizontal-VF-Einheit)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
"kommentar": "getstring Ist der Endpunkt der Foerderer? (Nein) - innerhalb vfl-baue-horizontal-koerper (ziel-modus)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
"kommentar": "getstring Naechstes im VarioFoerderer (Vario-Kurve)"
|
||||
},
|
||||
{
|
||||
"typ": "int",
|
||||
"wert": 30,
|
||||
"kommentar": "getint Vario-Kurve Winkel (30 Grad)"
|
||||
},
|
||||
{
|
||||
"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": "3",
|
||||
"kommentar": "getstring Naechstes im VarioFoerderer (Auf/Ab-Foerderer)"
|
||||
},
|
||||
{
|
||||
"typ": "point_rel",
|
||||
"dL": 1614.972606,
|
||||
"hz": -120,
|
||||
"kommentar": "getpoint Endpunkt Auf/Ab-Foerderer. hz=-120 DIREKT bestaetigt (Konsolen-Auszug zeigt fuer den anschliessenden Vario_Bogen_ab_3_TEF_rechts explizit 'hz=-120 Grad' bei derselben Fahrtrichtung)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring Kette kommt flach an - Richtung waehlen (1 = Auf)"
|
||||
},
|
||||
{
|
||||
"typ": "int",
|
||||
"wert": 8,
|
||||
"kommentar": "getint Winkel-/Hoehen-Tabelle: Auswahl-Index (NICHT der Winkel selbst) unter den GUELTIGEN Kandidaten - gueltig sind hier 3/6/9/12/15/18/21/27 Grad (8 Werte), Index 8 = letzter gueltiger Kandidat = 27 Grad (siehe Konsolen-Auszug '5/11: Vario_Bogen_auf_27_TEF_rechts')"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
"kommentar": "getstring Ist der Endpunkt der Foerderer? (Nein)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "2",
|
||||
"kommentar": "getstring Naechstes im VarioFoerderer (Vario-Kurve)"
|
||||
},
|
||||
{
|
||||
"typ": "int",
|
||||
"wert": 30,
|
||||
"kommentar": "getint Vario-Kurve Winkel (30 Grad)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring Vario-Kurve Seite (links)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring Vario-Kurve Variante (aussen) - Konsolen-Auszug bestaetigt 'Vario_Kurve_links_30_TEF_aussen'"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "3",
|
||||
"kommentar": "getstring Ist der Endpunkt der Foerderer? (3 = Ja, Motorstation setzen + Kettenende definieren) - startet den Stufe-1/Stufe-2-Kettenende-Zweig (vfl-body-abschluss/vfl-body-zerlegung)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring ES-Element setzen? (Ja)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring ES-Element Winkel - Menu-Index 1=90 Grad/2=30 Grad (wie AS-Winkel oben, gleiches Mapping ueber vf-frage-element-winkel)"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring ES-Seite (links)"
|
||||
},
|
||||
{
|
||||
"typ": "point_rel",
|
||||
"dL": 1802.808856,
|
||||
"hz": -90,
|
||||
"kommentar": "getpoint Endpunkt Kettenende (vfl-body-abschluss). hz=-90 DIREKT bestaetigt: die im Debug-Log erreichte Position (25544.710135 -8783.275914 2270.287821) hat exakt dieselbe X- und Z-Koordinate wie die KS_AUS-Position der vorigen Vario-Kurve (25544.71 / 2270.29 lt. Konsolen-Auszug) - nur Y aendert sich, das ist ausschliesslich mit hz=-90 (reine Y-Richtung) vereinbar"
|
||||
},
|
||||
{
|
||||
"typ": "real",
|
||||
"wert": 2154.0,
|
||||
"kommentar": "getreal Ziel-Hoehe Kettenende. Ab hier laeuft vfl-body-zerlegung AUTOMATISCH: Stufe 1 (Winkeltabelle 3/6/9/.../51 Grad) scheitert komplett (alle Kandidaten ergeben negative L_VF), Stufe 2 (vfl-winkel-stufe-entscheidung/berechne-horizontale-mitte) liefert typ=VF winkel=0 L_GF=86 L_VF=286 - KEINE weitere Eingabe fuer diese Entscheidung noetig"
|
||||
},
|
||||
{
|
||||
"typ": "string",
|
||||
"wert": "1",
|
||||
"kommentar": "getstring Berechnetes GF2=86mm liegt unter der ueblichen Mindestlaenge (400mm) - trotzdem mit den exakt berechneten 86mm bauen? (Ja) - schliesst die Kette ab (VF_n mit GF=1 VF=5)"
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user