fix: VF-Linienzug Modus 1 GF+ES-Separator-Laenge/Hoehe korrigieren
Neue Linie: GF (Zweig A+B) zog bei Kettenende mit ES-Element nur den ES-eigenen Fussabdruck von deltaL/deltaH ab, nicht den zusaetzlichen automatischen 300mm-Separator, den vfl-insert-es-element immer selbst vor dem ES-Block einfuegt - die Kette baute dadurch zu lang/zu tief. Zusaetzlich: "Separator NACH" im Wizard-Dialog (vflw-gruppe-sep-gf-impl) wird jetzt ausgegraut statt gefragt+nachtraeglich verworfen, wenn das GF-Segment ohnehin mit einem ES-Element endet (der automatische Separator deckt das bereits ab). Pending-Queue-Anzahl bleibt dabei unveraendert (Dialog pusht weiterhin 2 Werte), um keinen Versatz mit den nachfolgenden Konsolen-Abfragen zu erzeugen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+71
-12
@@ -1033,7 +1033,17 @@
|
||||
|
||||
;; "Neue Linie: GF" - Separator VOR/NACH (2 Ja/Nein-Toggles in einem
|
||||
;; Bildschirm). Siehe dcl/vf_linienzug_wizard.dcl (vflw_sep_gf).
|
||||
(defun vflw-gruppe-sep-gf-impl ( / dat ergebnis gsepvor gsepnach)
|
||||
;; es-folgt-sep: T, wenn dieses GF-Stueck das Kettenende MIT ES-Element ist
|
||||
;; (gf-kettenende-antwort steht beim Aufruf schon fest, siehe Aufrufer) -
|
||||
;; dann baut vfl-insert-es-element ohnehin IMMER seinen eigenen Separator
|
||||
;; VOR dem ES-Block, ein zusaetzlicher "Separator NACH" waere ein zweiter,
|
||||
;; direkt anschliessender Separator. Statt die Frage zu stellen und die
|
||||
;; Antwort hinterher zu verwerfen (Nutzer-Feedback 2026-10-08: verwirrend),
|
||||
;; wird die Kachel hier direkt deaktiviert+abgehakt - der bestehende
|
||||
;; Konsolen-/Sicherheitsnetz-Pfad (siehe Aufrufer, "ueberschrieben"-Meldung)
|
||||
;; bleibt UNVERAENDERT bestehen (deckt weiterhin den reinen Konsolen-Fall ab,
|
||||
;; wo diese Dialog-Funktion gar nicht laeuft).
|
||||
(defun vflw-gruppe-sep-gf-impl (es-folgt-sep / dat ergebnis gsepvor gsepnach)
|
||||
(setq dat (load_dialog (vflw-dcl-pfad)))
|
||||
(if (not (new_dialog "vflw_sep_gf" dat))
|
||||
(if (and dat (>= dat 0)) (unload_dialog dat))
|
||||
@@ -1041,6 +1051,7 @@
|
||||
(set_tile "kopf" (vflw-clean (ssg-text "vfl-sep-gf-header")))
|
||||
(set_tile "sepvor" "0")
|
||||
(set_tile "sepnach" "0")
|
||||
(if es-folgt-sep (mode_tile "sepnach" 1))
|
||||
(action_tile "accept"
|
||||
"(setq gsepvor (get_tile \"sepvor\")) (setq gsepnach (get_tile \"sepnach\")) (done_dialog 1)")
|
||||
(action_tile "cancel" "(done_dialog 0)")
|
||||
@@ -7008,7 +7019,7 @@
|
||||
(setq hz-neu (car (frame->hz-winkel frame)))
|
||||
)
|
||||
(setq rad3 (* gf-max-winkel (/ pi 180.0)))
|
||||
(if (vfl-wizard-aktiv) (vl-catch-all-apply 'vflw-gruppe-sep-gf-impl nil))
|
||||
(if (vfl-wizard-aktiv) (vl-catch-all-apply 'vflw-gruppe-sep-gf-impl (list (= gf-kettenende-antwort "1"))))
|
||||
(princ (ssg-text "vfl-sep-vor-gf-frage"))
|
||||
(princ (ssg-text "vfl-ja"))
|
||||
(princ (ssg-text "vfl-nein"))
|
||||
@@ -7050,9 +7061,16 @@
|
||||
(if (> sep-anzahl 0)
|
||||
(setq deltaH (max 0.0 (- deltaH (* sep-anzahl *vfk-separator-laenge* (sin rad3))))))
|
||||
;; ES-Fussabdruck VORAB reservieren, siehe Kommentar bei
|
||||
;; gf-kettenende-antwort oben.
|
||||
;; gf-kettenende-antwort oben. ES bringt IMMER seinen eigenen
|
||||
;; Separator mit (vfl-insert-es-element, siehe Kommentar oben
|
||||
;; "bringt seinen eigenen Separator VOR dem ES-Block schon
|
||||
;; mit") - dessen Hoehenanteil fehlte hier bisher komplett
|
||||
;; (realer Bug, Nutzer-Meldung 2026-10-08: Kette baute zu lang/
|
||||
;; zu tief, weil der automatische Kettenende-Separator anders
|
||||
;; als die optionalen vor/nach-Separatoren oben NICHT reserviert
|
||||
;; wurde).
|
||||
(if (= gf-kettenende-antwort "1")
|
||||
(setq deltaH (max 0.0 (- deltaH (abs ein-dz)))))
|
||||
(setq deltaH (max 0.0 (- deltaH (* *vfk-separator-laenge* (sin rad3)) (abs ein-dz)))))
|
||||
(if (vfl-wizard-aktiv)
|
||||
(vl-catch-all-apply 'vflw-gruppe-gefaelle-impl
|
||||
(list (vfl-gf-hoehe-vorschlag (caddr p-aktuell)) t nil)))
|
||||
@@ -7116,7 +7134,7 @@
|
||||
;; gepickten deltaL abgezogen, damit die Kette exakt am
|
||||
;; gepickten Punkt endet statt danach ueberzustehen.
|
||||
(setq rad3 (* gf-max-winkel (/ pi 180.0)))
|
||||
(if (vfl-wizard-aktiv) (vl-catch-all-apply 'vflw-gruppe-sep-gf-impl nil))
|
||||
(if (vfl-wizard-aktiv) (vl-catch-all-apply 'vflw-gruppe-sep-gf-impl (list (= gf-kettenende-antwort "1"))))
|
||||
(princ (ssg-text "vfl-sep-vor-gf-frage"))
|
||||
(princ (ssg-text "vfl-ja"))
|
||||
(princ (ssg-text "vfl-nein"))
|
||||
@@ -7139,9 +7157,15 @@
|
||||
(if (> sep-anzahl 0)
|
||||
(setq deltaL (- deltaL (* sep-anzahl *vfk-separator-laenge* (cos rad3)))))
|
||||
;; ES-Fussabdruck VORAB reservieren, siehe Kommentar bei
|
||||
;; gf-kettenende-antwort oben.
|
||||
;; gf-kettenende-antwort oben. ES bringt IMMER seinen
|
||||
;; eigenen Separator mit (vfl-insert-es-element) - dessen
|
||||
;; Laenge fehlte hier bisher komplett (realer Bug,
|
||||
;; Nutzer-Meldung 2026-10-08: Kette baute ca. 300mm*cos(w)
|
||||
;; zu lang, weil der automatische Kettenende-Separator
|
||||
;; anders als die optionalen vor/nach-Separatoren oben
|
||||
;; NICHT reserviert wurde).
|
||||
(if (= gf-kettenende-antwort "1")
|
||||
(setq deltaL (- deltaL (abs ein-dx))))
|
||||
(setq deltaL (- deltaL (* *vfk-separator-laenge* (cos rad3)) (abs ein-dx))))
|
||||
(if (< deltaL 1.0)
|
||||
(progn (princ (ssg-text "vfl-fehler-linie-zu-kurz")) (setq gf-ok nil)))
|
||||
(if gf-ok
|
||||
@@ -8985,6 +9009,12 @@
|
||||
(princ (ssg-text "vfl-vwnb-titel"))
|
||||
(princ "\n=========================================")
|
||||
|
||||
;; "Zurueck"/"Abbrechen"-Flag ganz am Anfang zuruecksetzen - identischer Fix
|
||||
;; wie in vf-linienzug-modus/-modus2 (siehe dortiger Kommentar): sonst
|
||||
;; wuerde ein von einem VORHERIGEN Lauf noch gesetztes Flag den allerersten
|
||||
;; vfl-in-*-Aufruf dieses NEUEN Laufs sofort wieder abbrechen.
|
||||
(setq *vfl-wizard-abbruch-grund* nil)
|
||||
|
||||
;; --- Debug-Session (Schalter "vfl-modus3", DEFAULT AN) -------------------
|
||||
;; Bei Bedarf abschaltbar: (dbg-schalter-off "vfl-modus3") in der Konsole.
|
||||
;; Alle interaktiven Eingaben (Punkte, Hoehen, Seiten, Winkel, Menue-
|
||||
@@ -9503,6 +9533,7 @@
|
||||
nonclimber-cnt nkurve kurve-chords run-span
|
||||
hor-koerper-len hor-pairs flat-p flat-zone-erste fill-len wahl3
|
||||
rad3v feste-vf dH-adj dir-x dir-y fill-D end-hz
|
||||
laengs-wert quer-wert soll-korrigiert
|
||||
es-vek-fix es-along-fix
|
||||
gf-total br-gf-mode br-gf2-exp filler-A-len filler-a-done
|
||||
as-vorhanden es-vorhanden dbg-an dbg-old-error
|
||||
@@ -9512,6 +9543,16 @@
|
||||
(princ (ssg-text "vfl-m3-titel"))
|
||||
(princ "\n=========================================")
|
||||
|
||||
;; "Zurueck"/"Abbrechen"-Flag ganz am Anfang zuruecksetzen (auch schon vor
|
||||
;; der ersten Praeambel-Frage) - sonst wuerde ein von einem VORHERIGEN Lauf
|
||||
;; (egal ob Modus 1/2/3) noch gesetztes Flag (z.B. nach "Abbrechen") den
|
||||
;; allerersten vfl-in-*-Aufruf DIESES NEUEN Laufs sofort wieder abbrechen
|
||||
;; (siehe zentraler Check in vfl-in-value/-value-p) - identischer Fix wie in
|
||||
;; vf-linienzug-modus (Modus 1). Realer Bug: ein zweiter Modus-2-Aufruf in
|
||||
;; derselben Zeichnung/Session brach sofort mit "ABBRUCH-TRIGGER:
|
||||
;; *vfl-wizard-abbruch-grund*=abbrechen" ab, ohne ueberhaupt die
|
||||
;; Pfad-Auswahl anzuzeigen (Livetest 2026-09-21).
|
||||
(setq *vfl-wizard-abbruch-grund* nil)
|
||||
;; *vfl-journal* VOR dem allerersten vfl-in-*-Aufruf zuruecksetzen (nicht
|
||||
;; *vfl-replay-queue*, siehe Kommentar bei vfl-journal-reset-lauf und die
|
||||
;; analoge Korrektur in vf-linienzug-modus). Frueher stand dieser Reset erst
|
||||
@@ -10304,12 +10345,30 @@
|
||||
;; ~0 sein (Endpunkt liegt auf der KS_AUS-Achse), Laengs = ES-Ausladung.
|
||||
(setq end-hz (car (frame->hz-winkel frame))) ; KS_AUS-Achsrichtung
|
||||
(setq dir-x (cos (* end-hz (/ pi 180.0))) dir-y (sin (* end-hz (/ pi 180.0))))
|
||||
(princ (ssg-textf "vfl-m3-laengs-quer"
|
||||
(list (rtos (+ (* (- (car ist-ende) (car soll-ende)) dir-x)
|
||||
(* (- (cadr ist-ende) (cadr soll-ende)) dir-y)) 2 1)
|
||||
(rtos (+ (* (- (car ist-ende) (car soll-ende)) (- dir-y))
|
||||
(* (- (cadr ist-ende) (cadr soll-ende)) dir-x)) 2 1))))
|
||||
(setq laengs-wert (+ (* (- (car ist-ende) (car soll-ende)) dir-x)
|
||||
(* (- (cadr ist-ende) (cadr soll-ende)) dir-y)))
|
||||
(setq quer-wert (+ (* (- (car ist-ende) (car soll-ende)) (- dir-y))
|
||||
(* (- (cadr ist-ende) (cadr soll-ende)) dir-x)))
|
||||
(princ (ssg-textf "vfl-m3-laengs-quer" (list (rtos laengs-wert 2 1) (rtos quer-wert 2 1))))
|
||||
(princ (ssg-text "vfl-m3-achse-hinweis"))
|
||||
;; Soll (ES-korrigiert): der gepickte Zielpunkt, verschoben um den bereits
|
||||
;; oben gemessenen Laengs-Wert entlang der KS_AUS-Achse - zeigt, dass die
|
||||
;; Abweichung oben keine Unsicherheit ist, sondern GENAU der ES-eigene
|
||||
;; Fussabdruck (90/30-Grad-Schwenk, siehe doc/VarioFoerderer_Linienzug_
|
||||
;; Prinzipien.md Abschnitt 6/14.11: "seitliche ES-Ausladung, kein Fehler").
|
||||
;; Bewusst aus dem bereits gemessenen Laengs-Wert abgeleitet statt ueber
|
||||
;; eine zweite, eigenstaendige vf-element-ks-info-Neuberechnung - das waere
|
||||
;; ein zweiter Rechenweg fuer dieselbe Information mit eigenem Bug-Risiko,
|
||||
;; hier reicht die Umkehrung der bereits validierten Laengs/Quer-Zerlegung.
|
||||
(setq soll-korrigiert (list (+ (car soll-ende) (* laengs-wert dir-x))
|
||||
(+ (cadr soll-ende) (* laengs-wert dir-y))
|
||||
(caddr soll-ende)))
|
||||
(princ (ssg-textf "vfl-m3-ziel-soll-es-korrigiert"
|
||||
(list (rtos (car soll-korrigiert) 2 1) (rtos (cadr soll-korrigiert) 2 1) (rtos (caddr soll-korrigiert) 2 1))))
|
||||
(princ (ssg-textf "vfl-m3-abweichung-es-korrigiert"
|
||||
(list (rtos (- (car ist-ende) (car soll-korrigiert)) 2 1)
|
||||
(rtos (- (cadr ist-ende) (cadr soll-korrigiert)) 2 1)
|
||||
(rtos (- (caddr ist-ende) (caddr soll-korrigiert)) 2 1))))
|
||||
(princ "\n=========================================")
|
||||
|
||||
(if dbg-an
|
||||
|
||||
@@ -245,6 +245,8 @@
|
||||
"vfl-m3-abweichung": "\n Abweichung: dX=%1 dY=%2 dZ=%3 mm",
|
||||
"vfl-m3-laengs-quer": "\n Laengs KS_AUS-Achse: %1 mm | Quer zur Achse (soll ~0): %2 mm",
|
||||
"vfl-m3-achse-hinweis": "\n (dZ=Ziel-Hoehe; Quer zur KS_AUS-Achse ~0 => Endpunkt liegt auf der Achse)",
|
||||
"vfl-m3-ziel-soll-es-korrigiert": "\n Soll (ES-korrigiert): X=%1 Y=%2 Z=%3 (Ziel + bekannter ES-Laengsversatz)",
|
||||
"vfl-m3-abweichung-es-korrigiert": "\n Abweichung (ES-korrigiert): dX=%1 dY=%2 dZ=%3 mm",
|
||||
"gf-fehler-block-fehlt": "\n FEHLER: Block '%1' fehlt",
|
||||
"gf-fehler-block-fehlt-ausruf": "\n FEHLER: Block '%1' fehlt!",
|
||||
"gf-fehler-blockdatei-fehlt": "\n FEHLER: Block-Datei nicht gefunden: %1",
|
||||
@@ -500,6 +502,7 @@
|
||||
"vfc-alert-keine-gueltige-linie": "Keine gueltige Linie ausgewaehlt!",
|
||||
"vfc-bitte-3dlinie-foerderstrecke": "\nBitte 3D-Linie fuer die Foerderstrecke auswaehlen:",
|
||||
"vfc-bks-weltkoordinaten": "\n BKS auf Weltkoordinaten gesetzt.",
|
||||
"vfc-dlg-startpunkt-kopf": "Startpunkt der Anlage waehlen (X/Y):",
|
||||
"vfc-eingabemodus-3dlinie": "\n 1 - 3D-Linie auswaehlen (Start- und Endpunkt mit Hoehe)",
|
||||
"vfc-eingabemodus-header": "\n\nEingabemodus waehlen:",
|
||||
"vfc-eingabemodus-werte": "\n 2 - Werte manuell eingeben",
|
||||
@@ -526,6 +529,7 @@
|
||||
"vfc-objekt-block-waehlen": "\n >> Objekt (Block) waehlen: ",
|
||||
"vfc-prompt-delta-h": "\n%1H - Hoehenunterschied (mm): ",
|
||||
"vfc-prompt-delta-l": "\n%1L - Horizontale Distanz (mm): ",
|
||||
"vfc-prompt-einfuegehoehe-3dlinie": "\nEinfuegehoehe (mm) [%1 - Hoehe des Linien-Startpunkts]: ",
|
||||
"vfc-prompt-startpunkt-aus": "\nStartpunkt fuer AUS_Element waehlen: ",
|
||||
"vfc-prompt-wahl-1-2-ohne-default": "\nIhre Wahl (1/2): ",
|
||||
"vfc-status-ok": " OK",
|
||||
|
||||
@@ -245,6 +245,8 @@
|
||||
"vfl-m3-abweichung": "\n Deviation: dX=%1 dY=%2 dZ=%3 mm",
|
||||
"vfl-m3-laengs-quer": "\n Along KS_AUS axis: %1 mm | across axis (should be ~0): %2 mm",
|
||||
"vfl-m3-achse-hinweis": "\n (dZ=target height; across KS_AUS axis ~0 => end point lies on the axis)",
|
||||
"vfl-m3-ziel-soll-es-korrigiert": "\n Target (ES-corrected): X=%1 Y=%2 Z=%3 (target + known ES lateral offset)",
|
||||
"vfl-m3-abweichung-es-korrigiert": "\n Deviation (ES-corrected): dX=%1 dY=%2 dZ=%3 mm",
|
||||
"gf-fehler-block-fehlt": "\n ERROR: block '%1' missing",
|
||||
"gf-fehler-block-fehlt-ausruf": "\n ERROR: block '%1' missing!",
|
||||
"gf-fehler-blockdatei-fehlt": "\n ERROR: block file not found: %1",
|
||||
@@ -500,6 +502,7 @@
|
||||
"vfc-alert-keine-gueltige-linie": "No valid line selected!",
|
||||
"vfc-bitte-3dlinie-foerderstrecke": "\nPlease select a 3D line for the conveyor section:",
|
||||
"vfc-bks-weltkoordinaten": "\n UCS set to world coordinates.",
|
||||
"vfc-dlg-startpunkt-kopf": "Select start point of the system (X/Y):",
|
||||
"vfc-eingabemodus-3dlinie": "\n 1 - Select 3D line (start and end point with height)",
|
||||
"vfc-eingabemodus-header": "\n\nSelect input mode:",
|
||||
"vfc-eingabemodus-werte": "\n 2 - Enter values manually",
|
||||
@@ -526,6 +529,7 @@
|
||||
"vfc-objekt-block-waehlen": "\n >> Select object (block): ",
|
||||
"vfc-prompt-delta-h": "\n%1H - height difference (mm): ",
|
||||
"vfc-prompt-delta-l": "\n%1L - horizontal distance (mm): ",
|
||||
"vfc-prompt-einfuegehoehe-3dlinie": "\nInsertion height (mm) [%1 - height of the line start point]: ",
|
||||
"vfc-prompt-startpunkt-aus": "\nSelect start point for AUS_Element: ",
|
||||
"vfc-prompt-wahl-1-2-ohne-default": "\nYour choice (1/2): ",
|
||||
"vfc-status-ok": " OK",
|
||||
|
||||
Reference in New Issue
Block a user