Button -VF daneben bauen- im GF-Edit-Dialog - baut gegenläufigen, steigenden Standard-VF 2000mm parallel,Doppel-Bestaetigung in Modus 1 (DCL-Dialog) entfernt - OK-Klick fuegt direkt ein

This commit is contained in:
2026-07-20 21:40:41 +02:00
parent 41311f5fd3
commit 1ca3241a83
2 changed files with 89 additions and 12 deletions
+80 -12
View File
@@ -1491,7 +1491,8 @@
(ssg-attrib-set-on gf-insert
(list
(cons "Bezeichnung" gf-bname)
(cons "MONTAGEHOEHE_m" "0.000")
;; Montagehoehe = obere Hoehe / 1000 (mm->m); vom Benutzer editierbar
(cons "MONTAGEHOEHE_m" (rtos (/ (float hoehe-von) 1000.0) 2 3))
(cons "HOEHE_VON_mm" (itoa (fix hoehe-von)))
(cons "HOEHE_BIS_mm" (itoa (fix hoehe-bis)))
(cons "DELTA_H_mm" (itoa (fix (abs deltaH))))
@@ -1721,12 +1722,18 @@
)
)
(action_tile "cancel" "(done_dialog 0)")
;; Zusatz-Button: parallelen VarioFoerderer bauen (Signal-Code 2).
;; Der VF spiegelt die BESTEHENDE GF (Werte aus XDATA), daher werden die
;; Dialog-Felder hier nicht ausgelesen.
(action_tile "build_vf" "(done_dialog 2)")
(setq ergebnis (start_dialog))
(unload_dialog dat)
(if (= ergebnis 1)
(progn
(cond
;; Signal an GEFAELLESTRECKE_EDIT: parallelen VF bauen
((= ergebnis 2) "BUILD_VF")
((= ergebnis 1)
(setq hz-winkel
(cond ((= dlg-richtung "1") 90.0)
((= dlg-richtung "2") 180.0)
@@ -1746,7 +1753,7 @@
as-winkel
es-winkel)
)
nil
(t nil)
)
)
)
@@ -1756,8 +1763,11 @@
;; Zusammenfassung, Bestaetigung und Einfuegen.
;; startpunkt: Einfuegepunkt AUS-Element (inkl. Z aus Einfuegehoehe)
;; as-winkel/es-winkel: "30" oder "90" (Element-Variante)
;; dialog-bestaetigt: T, wenn die Einfuegung bereits per Dialog-OK bestaetigt
;; wurde (Modus 1) - dann entfaellt die zusaetzliche Konsolen-Rueckfrage.
;; Modus 2 (reine Konsoleneingabe, kein Dialog) uebergibt nil/weglassen.
(defun gf-modus12-abschluss (deltaL winkel hz-winkel as-seite es-seite startpunkt
as-winkel es-winkel /
as-winkel es-winkel dialog-bestaetigt /
rad sep-x L_stau antwort)
(if (null as-winkel) (setq as-winkel "90"))
(if (null es-winkel) (setq es-winkel "90"))
@@ -1792,8 +1802,8 @@
(princ (ssg-textf "gf-status-zus2-lstau" (list (rtos L_stau 2 2))))
(princ "\n=========================================")
;; Bestaetigung
(setq antwort (getstring (ssg-text "gf-prompt-einfuegen")))
;; Bestaetigung - entfaellt, wenn bereits per Dialog-OK bestaetigt (Modus 1)
(setq antwort (if dialog-bestaetigt "1" (getstring (ssg-text "gf-prompt-einfuegen"))))
(if (not (= antwort "2"))
(gefaellestrecke-einfuegen L_stau (fix winkel) startpunkt as-seite es-seite hz-winkel deltaL as-winkel es-winkel)
(princ (ssg-text "gf-status-abgebrochen"))
@@ -1981,8 +1991,9 @@
(setq deltaL (ssg-cfg-or "gefaelle" "default_delta_l" 5000.0)))
(if (or (null winkel) (<= winkel 0))
(setq winkel (ssg-cfg-or "gefaelle" "default_winkel" 3.0)))
;; Dialog-OK wurde bereits bestaetigt - keine zusaetzliche Rueckfrage
(gf-modus12-abschluss deltaL winkel hz-winkel as-seite es-seite
startpunkt-fuer-einfuegen gf-as-winkel gf-es-winkel)
startpunkt-fuer-einfuegen gf-as-winkel gf-es-winkel T)
)
)
)
@@ -1999,9 +2010,56 @@
;; zeigt sie vorbelegt im Dialog und baut die Strecke bei OK am selben
;; Startpunkt neu auf. Wird vom Doppelklick-Dispatcher SSG_BLOCKEDIT
;; fuer Blocknamen "GF_*" aufgerufen.
;; ============================================================
;; Parallelen Standard-VarioFoerderer neben eine bestehende Gefaellestrecke
;; bauen: gegenlaeufig (hz+180), steigend ("Auf"), 2000 mm seitlich versetzt,
;; gleiche DeltaL/DeltaH. Die GF bleibt unveraendert. Winkel + GF-Aufteilung
;; werden ueber den Standard-VF-Dialog abgefragt.
;;
;; Versatz-Seite haengt von der GF-AS-Seite ab:
;; GF-AS rechts -> VF links (hz+90), GF-AS links -> VF rechts (hz-90).
;;
;; gf-start: GF-Startpunkt (X Y Z), Z = obere Hoehe (HOEHE_VON)
;; hz: GF-Fahrtrichtung in Grad
;; deltaL: planare Gesamtlaenge der GF (= VF-DeltaL)
;; as-seite: GF-AS-Seite ("rechts"/"links")
;; hoehe-bis: untere GF-Hoehe (HOEHE_BIS) = VF-Einfuegehoehe (Kettenanfang)
;; ============================================================
(defun gf-baue-parallel-vf (gf-start hz deltaL as-seite hoehe-bis /
abstand rad hz-vf deltaH gf-end-x gf-end-y
perp-x perp-y vf-start vf-seite)
(if (null (car (atoms-family 1 '("VFS-STANDARD-DIALOG-BERECHNEN-EINFUEGEN"))))
(alert (ssg-text "gf-vf-modul-fehlt"))
(progn
(setq abstand 2000.0)
(setq rad (* hz (/ pi 180.0)))
(setq deltaH (- (caddr gf-start) hoehe-bis)) ; HOEHE_VON - HOEHE_BIS
;; GF-Endpunkt (X/Y) = GF-Start + deltaL entlang hz
(setq gf-end-x (+ (car gf-start) (* deltaL (cos rad)))
gf-end-y (+ (cadr gf-start) (* deltaL (sin rad))))
;; Versatz senkrecht zur Fahrtrichtung: VF auf DIESELBE benannte Seite wie
;; das GF-AS-Element (GF-AS links -> VF links der Fahrtrichtung; GF-AS
;; rechts -> VF rechts). links = (hz+90) = (-sin, cos); rechts = (sin, -cos).
(if (= as-seite "rechts")
(setq perp-x (sin rad) perp-y (- (cos rad))) ; rechts der Fahrtrichtung
(setq perp-x (- (sin rad)) perp-y (cos rad))) ; links der Fahrtrichtung
;; VF-Startpunkt = GF-Endpunkt + Versatz, Z = unteres GF-Ende (HOEHE_BIS).
;; Der VF baut "Auf" und erreicht am Ende wieder HOEHE_VON.
(setq vf-start (list (+ gf-end-x (* abstand perp-x))
(+ gf-end-y (* abstand perp-y))
hoehe-bis))
(setq hz-vf (rem (+ hz 180.0) 360.0))
(setq vf-seite as-seite) ; VF-AS/ES-Seite: Default = GF-AS-Seite
(vfs-standard-dialog-berechnen-einfuegen
(vf-next-number) deltaL deltaH "Auf" vf-start hz-vf vf-seite nil)
(princ (ssg-text "gf-vf-gebaut"))
)
)
)
(defun c:GEFAELLESTRECKE_EDIT ( / ss ent ed bname startpunkt attribs xd
hz winkel as-winkel es-winkel z-start deltaL
prefill dlg-werte)
as-seite hoehe-bis prefill dlg-werte)
;; Implied Selection VOR ssg-start pruefen (ssg-start hebt Selektion auf)
(setq ss (ssget "I"))
(if (and ss (= (sslength ss) 1)
@@ -2070,10 +2128,20 @@
(cons "as-winkel" as-winkel)
(cons "es-winkel" es-winkel)))
;; AS-Seite + untere Hoehe fuer den optionalen parallelen VF-Bau
(setq as-seite (cond ((cdr (assoc "SEITE_AS" attribs))) ("links")))
(setq hoehe-bis (atof (cond ((cdr (assoc "HOEHE_BIS_mm" attribs))) ("0"))))
(setq dlg-werte (gf-dialog-eingabe prefill))
(if (null dlg-werte)
(princ (ssg-text "gf-status-abgebrochen"))
(progn
(cond
((null dlg-werte)
(princ (ssg-text "gf-status-abgebrochen")))
;; Zusatz-Button: parallelen VarioFoerderer bauen, GF bleibt unveraendert.
((equal dlg-werte "BUILD_VF")
(gf-baue-parallel-vf
(list (car startpunkt) (cadr startpunkt) z-start)
hz deltaL as-seite hoehe-bis))
(t
;; Alten GF-Verbund loeschen und am selben Startpunkt (X/Y) mit der
;; im Dialog gewaehlten Einfuegehoehe (Z) neu aufbauen.
(entdel ent)
+9
View File
@@ -76,6 +76,15 @@ gefaellestrecke : dialog {
}
}
: boxed_column {
label = "VarioFoerderer (parallel, gegenlaeufig, steigend)";
: button {
key = "build_vf";
label = "VarioFoerderer daneben bauen (2000 mm)";
}
}
}
ok_cancel;