[CHANGE] VF-Standard-Dialog: Geometrie-Reihenfolge angepasst (deltaL+Foerderrichtung, Einfuegehoehe+deltaH), Seite/Motorseite nebeneinander; nur Seite/Motorseite/Geruestoption bleiben Radio-Buttons, Rest wieder Combobox; Winkel/Verteilung-Dialog komplett auf Combobox zurueckgebaut (keine Radio-Variante mehr noetig)
[CHANGE] VF-Linienzug-Wizard: horizontale Kurve (GF-Bogen/Vario-Kurve) direkt nach explizit eingefuegtem AS-Element ausgegraut, da dort zuerst ein gerades Segment folgen muss [ADD] doc/faq.md: Antworten zu VF/GF-Kombinationsfragen ergaenzt (Puffer-Umschleusung, Zielhoehe, Etagenfoerderer, Streckenueberbrueckung) + Screenshot gf-vf-kombination.png Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+22
-2
@@ -1543,11 +1543,19 @@
|
||||
;; VF-Kette) macht "GF-Bogen"/"Neue Linie: GF" als DIREKTE Fortsetzung keinen
|
||||
;; Sinn (kein GF-Baustein wird an dieser Stelle einfach an ein VF-Teil
|
||||
;; angeflanscht) - diese beiden Optionen werden dann ausgegraut.
|
||||
;; as-eben-eingefuegt: T, wenn der Anwender die AS-Frage ("AS-Element
|
||||
;; setzen?") explizit mit Ja beantwortet hat (as-vorhanden in
|
||||
;; vf-linienzug-modus) - das AS-Element braucht danach zuerst ein GERADES
|
||||
;; Segment (Linie-GF/Linie-VF/Horizontal-VF), eine horizontale Kurve direkt
|
||||
;; im Anschluss (GF-Bogen/Vario-Kurve) ergibt keinen Sinn und wird ebenfalls
|
||||
;; ausgegraut. Greift nur, wenn familie nicht schon "VF" ist (dort ist
|
||||
;; wahl_gfbogen bereits deaktiviert); nil, wenn der Startpunkt automatisch
|
||||
;; auf einer bestehenden Kette erkannt wurde (as-vorhanden dann ohnehin nil).
|
||||
;; "Neue Linie BIS Kettenende" ist kein Radio mehr, sondern der eigene Button
|
||||
;; "abschliessen" (done_dialog 3) - er setzt slot direkt auf 6 und ignoriert
|
||||
;; die aktuelle Radio-Auswahl (hat ihre eigene GF/VF-Erkennung, bleibt daher
|
||||
;; immer waehlbar, auch wenn GF-Bogen/Neue Linie: GF ausgegraut sind).
|
||||
(defun vflw-gruppe-naechstes-element-impl (kettenanfang familie / dat ergebnis slot gwahl)
|
||||
(defun vflw-gruppe-naechstes-element-impl (kettenanfang familie as-eben-eingefuegt / dat ergebnis slot gwahl)
|
||||
(setq dat (load_dialog (vflw-dcl-pfad)))
|
||||
(if (not (new_dialog "vflw_naechstes_element" dat))
|
||||
(if (and dat (>= dat 0)) (unload_dialog dat))
|
||||
@@ -1560,6 +1568,17 @@
|
||||
(mode_tile "wahl_gfbogen" 1)
|
||||
(mode_tile "wahl_liniegf" 1)
|
||||
(set_tile "wahl_variokurve" "1")))
|
||||
;; Unmittelbar nach einem explizit eingefuegten AS-Element ergibt eine
|
||||
;; horizontale Kurve (GF-Bogen/Vario-Kurve) als DIREKTE Fortsetzung
|
||||
;; keinen Sinn - das AS-Element braucht zuerst ein gerades Segment
|
||||
;; (Linie-GF/Linie-VF/Horizontal-VF). Nur relevant am Kettenanfang und
|
||||
;; nur, wenn nicht schon durch familie="VF" abgedeckt (dort ist
|
||||
;; wahl_gfbogen bereits deaktiviert).
|
||||
(if (and kettenanfang as-eben-eingefuegt (not (equal familie "VF")))
|
||||
(progn
|
||||
(mode_tile "wahl_gfbogen" 1)
|
||||
(mode_tile "wahl_variokurve" 1)
|
||||
(set_tile "wahl_liniegf" "1")))
|
||||
(action_tile "accept"
|
||||
"(setq slot (cond ((= (get_tile \"wahl_gfbogen\") \"1\") 1)
|
||||
((= (get_tile \"wahl_variokurve\") \"1\") 2)
|
||||
@@ -6608,7 +6627,8 @@
|
||||
(progn
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-naechstes-element-impl
|
||||
(list (null frame) (if (null frame) startpunkt-familie nil))))
|
||||
(list (null frame) (if (null frame) startpunkt-familie nil)
|
||||
(if (null frame) as-vorhanden nil))))
|
||||
(if frame
|
||||
(progn
|
||||
(princ (ssg-text "vfl-menu-gf-bogen-1"))
|
||||
|
||||
+54
-151
@@ -863,8 +863,8 @@
|
||||
;; Eintrag in "labels" (Tile-Keys "<prefix>_0".."<prefix>_(n-1)"). labels
|
||||
;; sind bereits fertige, uebersetzte Strings (ssg-text/ssg-textf) - werden
|
||||
;; hier nur noch fuer die DCL-Syntax escaped (ssg-dcl-label-escape).
|
||||
;; Gemeinsam genutzt von vfs-dialog-eingabe-basis-radio UND
|
||||
;; vfs-dialog-winkel-verteilung-radio.
|
||||
;; Genutzt von vfs-dialog-eingabe-basis-radio fuer die drei verbleibenden
|
||||
;; Radio-Gruppen (Seite, Motorseite, Geruestoption).
|
||||
(defun vfs-dcl-radio-gruppe-zeilen (prefix box-label labels / zeilen i)
|
||||
(setq zeilen (list
|
||||
": boxed_radio_column {"
|
||||
@@ -1048,9 +1048,13 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; Basis-Eingabe (Dialog 1, Radio-Button-Variante) - siehe Kopfkommentar
|
||||
;; des DCL-DIALOG-Abschnitts. Gleiche prefill-Struktur/Rueckgabe wie
|
||||
;; -popup; 'FEHLER bei technischem Fehler (Dispatcher faellt dann zurueck).
|
||||
;; Basis-Eingabe (Dialog 1, dynamische Variante) - siehe Kopfkommentar
|
||||
;; des DCL-DIALOG-Abschnitts. Nur "Seite", "Motorseite" und "Geruestoption"
|
||||
;; bleiben als Radio-Button-Gruppen (alle Optionen sofort sichtbar); alle
|
||||
;; anderen Felder (Foerderrichtung, Fahrtrichtung, Darstellung 2D/3D) sind
|
||||
;; wieder Comboboxen (popup_list), wie der uebrige Dialog. Gleiche
|
||||
;; prefill-Struktur/Rueckgabe wie -popup; 'FEHLER bei technischem Fehler
|
||||
;; (Dispatcher faellt dann zurueck).
|
||||
(defun vfs-dialog-eingabe-basis-radio (prefill / zeilen dcl-pfad dat ergebnis
|
||||
dlg-deltal dlg-deltah dlg-hoehe
|
||||
dlg-richtung-idx dlg-fahrt-idx dlg-seite-idx
|
||||
@@ -1089,31 +1093,26 @@
|
||||
" label = \"Geometrie\";"
|
||||
" : row {"
|
||||
" : edit_box { key = \"deltal\"; label = \"Horizontale Distanz deltaL (mm):\"; edit_width = 10; }"
|
||||
" : popup_list { key = \"richtung\"; label = \"Foerderrichtung:\"; width = 16; }"
|
||||
" }"
|
||||
" : row {"
|
||||
" : edit_box { key = \"einfuegehoehe\"; label = \"Einfuegehoehe (mm):\"; edit_width = 10; }"
|
||||
" : edit_box { key = \"deltah\"; label = \"Hoehenunterschied deltaH (mm):\"; edit_width = 10; }"
|
||||
" }"))
|
||||
(setq zeilen (append zeilen
|
||||
(vfs-dcl-radio-gruppe-zeilen "richtung" "Foerderrichtung:"
|
||||
(list (ssg-text "vfs-dlg-richtung-auf") (ssg-text "vfs-dlg-richtung-ab")))))
|
||||
(setq zeilen (append zeilen (list
|
||||
" : edit_box { key = \"einfuegehoehe\"; label = \"Einfuegehoehe (mm):\"; edit_width = 10; }"
|
||||
" }"
|
||||
" }"
|
||||
" : boxed_column {"
|
||||
" label = \"Ausrichtung\";")))
|
||||
(setq zeilen (append zeilen
|
||||
(vfs-dcl-radio-gruppe-zeilen "fahrtrichtung" "Fahrtrichtung:"
|
||||
(list (ssg-textf "gf-dlg-richtung-0" (list grad-zeichen))
|
||||
(ssg-textf "gf-dlg-richtung-90" (list grad-zeichen))
|
||||
(ssg-textf "gf-dlg-richtung-180" (list grad-zeichen))
|
||||
(ssg-textf "gf-dlg-richtung-270" (list grad-zeichen))))))
|
||||
" label = \"Ausrichtung\";"
|
||||
" : popup_list { key = \"fahrtrichtung\"; label = \"Fahrtrichtung:\"; width = 30; }"
|
||||
" : row {"))
|
||||
(setq zeilen (append zeilen
|
||||
(vfs-dcl-radio-gruppe-zeilen "seite" "Seite:"
|
||||
(list (ssg-text "gf-dlg-rechts") (ssg-text "gf-dlg-links")))))
|
||||
(setq zeilen (append zeilen
|
||||
(vfs-dcl-radio-gruppe-zeilen "motorseite" "Motorseite:"
|
||||
(list (ssg-text "gf-dlg-rechts") (ssg-text "gf-dlg-links")))))
|
||||
(setq zeilen (append zeilen
|
||||
(vfs-dcl-radio-gruppe-zeilen "dimension" "Darstellung (2D/3D):" (list "3D" "2D"))))
|
||||
(setq zeilen (append zeilen (list
|
||||
" }"
|
||||
" : popup_list { key = \"dimension\"; label = \"Darstellung (2D/3D):\"; width = 20; }"
|
||||
" }"
|
||||
" : boxed_column {"
|
||||
" label = \"Geruest\";"
|
||||
@@ -1141,11 +1140,30 @@
|
||||
(set_tile "deltal" (if prefill (rtos (cdr (assoc "deltaL" prefill)) 2 0) "15000"))
|
||||
(set_tile "deltah" (if prefill (rtos (cdr (assoc "deltaH" prefill)) 2 0) "3000"))
|
||||
(set_tile "einfuegehoehe" (if prefill (rtos (cdr (assoc "einfuegehoehe" prefill)) 2 1) "0"))
|
||||
(set_tile (strcat "richtung_" (itoa sel-richtung)) "1")
|
||||
(set_tile (strcat "fahrtrichtung_" (itoa sel-fahrt)) "1")
|
||||
|
||||
(start_list "richtung")
|
||||
(add_list (ssg-text "vfs-dlg-richtung-auf"))
|
||||
(add_list (ssg-text "vfs-dlg-richtung-ab"))
|
||||
(end_list)
|
||||
(set_tile "richtung" (itoa sel-richtung))
|
||||
|
||||
(start_list "fahrtrichtung")
|
||||
(add_list (ssg-textf "gf-dlg-richtung-0" (list grad-zeichen)))
|
||||
(add_list (ssg-textf "gf-dlg-richtung-90" (list grad-zeichen)))
|
||||
(add_list (ssg-textf "gf-dlg-richtung-180" (list grad-zeichen)))
|
||||
(add_list (ssg-textf "gf-dlg-richtung-270" (list grad-zeichen)))
|
||||
(end_list)
|
||||
(set_tile "fahrtrichtung" (itoa sel-fahrt))
|
||||
|
||||
(set_tile (strcat "seite_" (itoa sel-seite)) "1")
|
||||
(set_tile (strcat "motorseite_" (itoa sel-motorseite)) "1")
|
||||
(set_tile (strcat "dimension_" (itoa sel-dim)) "1")
|
||||
|
||||
(start_list "dimension")
|
||||
(add_list "3D")
|
||||
(add_list "2D")
|
||||
(end_list)
|
||||
(set_tile "dimension" (itoa sel-dim))
|
||||
|
||||
(set_tile "geruest_einzelmodul"
|
||||
(if (or (null prefill) (equal (cdr (assoc "geruest-einzelmodul" prefill)) "1")) "1" "0"))
|
||||
(set_tile (strcat "geruest_typ_" (itoa sel-geruest-typ)) "1")
|
||||
@@ -1155,11 +1173,11 @@
|
||||
"(setq dlg-deltal (get_tile \"deltal\"))"
|
||||
"(setq dlg-deltah (get_tile \"deltah\"))"
|
||||
"(setq dlg-hoehe (get_tile \"einfuegehoehe\"))"
|
||||
"(setq dlg-richtung-idx " (vfs-dcl-radio-idx-cond "richtung" 2) ")"
|
||||
"(setq dlg-fahrt-idx " (vfs-dcl-radio-idx-cond "fahrtrichtung" 4) ")"
|
||||
"(setq dlg-richtung-idx (atoi (get_tile \"richtung\")))"
|
||||
"(setq dlg-fahrt-idx (atoi (get_tile \"fahrtrichtung\")))"
|
||||
"(setq dlg-seite-idx " (vfs-dcl-radio-idx-cond "seite" 2) ")"
|
||||
"(setq dlg-motorseite-idx " (vfs-dcl-radio-idx-cond "motorseite" 2) ")"
|
||||
"(setq dlg-dim-idx " (vfs-dcl-radio-idx-cond "dimension" 2) ")"
|
||||
"(setq dlg-dim-idx (atoi (get_tile \"dimension\")))"
|
||||
"(setq dlg-geruest-einzelmodul (get_tile \"geruest_einzelmodul\"))"
|
||||
"(setq dlg-geruest-typ-idx " (vfs-dcl-radio-idx-cond "geruest_typ" n-geruest-typ) ")"
|
||||
"(done_dialog 1)"
|
||||
@@ -1193,8 +1211,10 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; Dispatcher: bevorzugt die Radio-Button-Variante (siehe Kopfkommentar des
|
||||
;; DCL-DIALOG-Abschnitts), Rueckfall auf -popup nur bei technischem Fehler.
|
||||
;; Dispatcher: bevorzugt die dynamisch generierte Variante (Seite/
|
||||
;; Motorseite/Geruestoption als Radio, Rest als Combobox - siehe
|
||||
;; Kopfkommentar des DCL-DIALOG-Abschnitts), Rueckfall auf die reine
|
||||
;; Popup-Variante nur bei technischem Fehler.
|
||||
(defun vfs-dialog-eingabe-basis (prefill / ergebnis)
|
||||
(setq ergebnis (vfs-dialog-eingabe-basis-radio prefill))
|
||||
(if (eq ergebnis 'FEHLER) (vfs-dialog-eingabe-basis-popup prefill) ergebnis)
|
||||
@@ -1289,129 +1309,12 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; Winkel/Verteilung-Eingabe (Dialog 2, Radio-Button-Variante) - siehe
|
||||
;; Kopfkommentar des DCL-DIALOG-Abschnitts. Gleiche prefill-Struktur/
|
||||
;; Rueckgabe wie -popup; 'FEHLER bei technischem Fehler.
|
||||
(defun vfs-dialog-winkel-verteilung-radio (gueltige-winkel ergebnis-liste staustrecke-basis prefill /
|
||||
zeilen dcl-pfad dat ergebnis w eintrag labels
|
||||
sel-winkel sel-verteilung idx toggle-zeile i
|
||||
dlg-winkel-idx dlg-verteilung-idx dlg-lgf1
|
||||
best-winkel L_GF L_VF verteilung-modus L_GF1 L_GF2 lgf-paar)
|
||||
;; Winkel-Labels vorab aufloesen - gleiche Texte wie im Popup.
|
||||
(setq labels nil)
|
||||
(foreach w gueltige-winkel
|
||||
(setq eintrag (assoc w ergebnis-liste))
|
||||
(setq labels (append labels (list
|
||||
(if (= w 0)
|
||||
(ssg-textf "vfs-dlg-winkel-horizontal"
|
||||
(list (rtos (nth 1 eintrag) 2 1) (rtos (nth 2 eintrag) 2 1)))
|
||||
(ssg-textf "vfs-dlg-winkel-option"
|
||||
(list (itoa w) grad-zeichen (rtos (nth 1 eintrag) 2 1) (rtos (nth 2 eintrag) 2 1)))
|
||||
)))
|
||||
)
|
||||
)
|
||||
|
||||
;; Vorbelegung: Winkel aus prefill (falls noch gueltig), sonst erster
|
||||
;; (kleinster) gueltiger Winkel - analog der automatischen Konsolen-Wahl.
|
||||
(setq sel-winkel 0 idx 0)
|
||||
(if prefill
|
||||
(foreach w gueltige-winkel
|
||||
(if (equal w (cdr (assoc "winkel" prefill))) (setq sel-winkel idx))
|
||||
(setq idx (1+ idx))
|
||||
)
|
||||
)
|
||||
(setq sel-verteilung
|
||||
(if prefill (atoi (cdr (assoc "verteilung-idx" prefill))) 0))
|
||||
|
||||
(setq zeilen (list
|
||||
"vfs_winkel_dyn : dialog {"
|
||||
" label = \"VarioFoerderer (Standard) - Winkel / Verteilung\";"
|
||||
" : column {"))
|
||||
(setq zeilen (append zeilen (vfs-dcl-radio-gruppe-zeilen "winkel" "Winkel:" labels)))
|
||||
(setq zeilen (append zeilen (list
|
||||
" : boxed_column {"
|
||||
" label = \"Verteilung Gefaellestrecken (vorne/hinten)\";")))
|
||||
(setq zeilen (append zeilen
|
||||
(vfs-dcl-radio-gruppe-zeilen "verteilung" "Modus:"
|
||||
(list (ssg-text "vfs-dlg-verteilung-1") (ssg-text "vfs-dlg-verteilung-2")
|
||||
(ssg-text "vfs-dlg-verteilung-3") (ssg-text "vfs-dlg-verteilung-4")))))
|
||||
(setq zeilen (append zeilen (list
|
||||
" : edit_box { key = \"lgf1_manuell\"; label = \"L_GF1 vorne (mm):\"; edit_width = 10; }"
|
||||
" }"
|
||||
" }"
|
||||
" ok_cancel;"
|
||||
"}")))
|
||||
|
||||
(setq dcl-pfad (ssg-dcl-temp-schreiben "vfswinkel" zeilen))
|
||||
(if (null dcl-pfad)
|
||||
'FEHLER
|
||||
(progn
|
||||
(setq dat (load_dialog dcl-pfad))
|
||||
(if (not (new_dialog "vfs_winkel_dyn" dat))
|
||||
(progn
|
||||
(if (and dat (>= dat 0)) (unload_dialog dat))
|
||||
(vl-file-delete dcl-pfad)
|
||||
'FEHLER
|
||||
)
|
||||
(progn
|
||||
(set_tile (strcat "winkel_" (itoa sel-winkel)) "1")
|
||||
(set_tile (strcat "verteilung_" (itoa sel-verteilung)) "1")
|
||||
(set_tile "lgf1_manuell"
|
||||
(if (and prefill (cdr (assoc "lgf1" prefill)))
|
||||
(rtos (cdr (assoc "lgf1" prefill)) 2 1) "0"))
|
||||
(mode_tile "lgf1_manuell" (if (= sel-verteilung 3) 0 1))
|
||||
|
||||
;; Jedes der 4 Verteilung-Radio-Tiles braucht sein EIGENES
|
||||
;; action_tile (haengt bei Radio-Buttons nicht am Gruppen-Key wie
|
||||
;; bisher am popup_list-Key "verteilung").
|
||||
(setq toggle-zeile
|
||||
"(mode_tile \"lgf1_manuell\" (if (= (get_tile \"verteilung_3\") \"1\") 0 1))")
|
||||
(setq i 0)
|
||||
(while (< i 4)
|
||||
(action_tile (strcat "verteilung_" (itoa i)) toggle-zeile)
|
||||
(setq i (1+ i))
|
||||
)
|
||||
|
||||
(action_tile "accept"
|
||||
(strcat
|
||||
"(setq dlg-winkel-idx " (vfs-dcl-radio-idx-cond "winkel" (length gueltige-winkel)) ")"
|
||||
"(setq dlg-verteilung-idx " (vfs-dcl-radio-idx-cond "verteilung" 4) ")"
|
||||
"(setq dlg-lgf1 (get_tile \"lgf1_manuell\"))"
|
||||
"(done_dialog 1)"
|
||||
)
|
||||
)
|
||||
(action_tile "cancel" "(done_dialog 0)")
|
||||
|
||||
(setq ergebnis (start_dialog))
|
||||
(unload_dialog dat)
|
||||
(vl-file-delete dcl-pfad)
|
||||
|
||||
(if (= ergebnis 1)
|
||||
(progn
|
||||
(setq best-winkel (nth dlg-winkel-idx gueltige-winkel))
|
||||
(setq eintrag (assoc best-winkel ergebnis-liste))
|
||||
(setq L_GF (nth 1 eintrag) L_VF (nth 2 eintrag))
|
||||
(setq verteilung-modus (itoa dlg-verteilung-idx))
|
||||
(setq lgf-paar (vfs-verteilung-berechnen verteilung-modus L_GF staustrecke-basis dlg-lgf1))
|
||||
(setq L_GF1 (car lgf-paar) L_GF2 (cadr lgf-paar))
|
||||
(list best-winkel L_GF L_VF L_GF1 L_GF2 verteilung-modus)
|
||||
)
|
||||
nil
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; Dispatcher: bevorzugt die Radio-Button-Variante (siehe Kopfkommentar des
|
||||
;; DCL-DIALOG-Abschnitts), Rueckfall auf -popup nur bei technischem Fehler.
|
||||
(defun vfs-dialog-winkel-verteilung (gueltige-winkel ergebnis-liste staustrecke-basis prefill / ergebnis)
|
||||
(setq ergebnis (vfs-dialog-winkel-verteilung-radio gueltige-winkel ergebnis-liste staustrecke-basis prefill))
|
||||
(if (eq ergebnis 'FEHLER)
|
||||
(vfs-dialog-winkel-verteilung-popup gueltige-winkel ergebnis-liste staustrecke-basis prefill)
|
||||
ergebnis
|
||||
)
|
||||
;; Winkel/Verteilung-Eingabe: Dialog nutzt durchgaengig Comboboxen
|
||||
;; (variofoerderer_winkel in dcl/variofoerderer.dcl) - keine Radio-Variante
|
||||
;; mehr noetig, da weder "winkel" noch "verteilung" als Radio bleiben
|
||||
;; (siehe Kopfkommentar des DCL-DIALOG-Abschnitts).
|
||||
(defun vfs-dialog-winkel-verteilung (gueltige-winkel ergebnis-liste staustrecke-basis prefill)
|
||||
(vfs-dialog-winkel-verteilung-popup gueltige-winkel ergebnis-liste staustrecke-basis prefill)
|
||||
)
|
||||
|
||||
;; ============================================================
|
||||
|
||||
Reference in New Issue
Block a user