[FIX] GEFAELLESTRECKE_LINIENZUG: ES-Element erhielt keinen Hoehenversatz bei flachem Endpunkt-Klick

Das ES-Element wurde ueber insert-block-mixed-to-ks so platziert, dass sein KS_EIN exakt auf (caddr endpunkt-ref) landet - die Z-Koordinate des zweiten Mausklicks (Kettenende waehlen). Geraden und Boegen davor waren korrekt geneigt (grade wird separat berechnet/bestaetigt und fliesst in gf-linienzug-einfuegen ein), aber die anschliessende ES-Platzierung zog die Hoehe wieder auf den Klick-Wert zurueck - bei einem Klick in einer 2D-Draufsicht ohne 3D-Objektfang liegt der meist auf derselben Z wie der Startpunkt, das ES-Element landete dann faelschlich wieder auf Starthoehe trotz korrekt gefallener Kette.

Fix: Ziel-Z fuer das ES-Element ist jetzt (caddr sep-endpunkt) - die tatsaechlich durch die Kette (Geraden/Boegen mit grade) aufgebaute Hoehe am Ende, nicht der Klick-Wert. endpunkt-ref dient weiterhin nur zur groben deltaH-Schaetzung fuer den Winkel-Vorschlag im Dialog (den der Nutzer ohnehin bestaetigt/ueberschreibt). Das Attribut HOEHE_BIS_mm wird aus demselben Grund jetzt ebenfalls aus der real gebauten Endhoehe (es-aus-frame) statt aus endpunkt-ref gelesen, damit es nicht von der sichtbaren Geometrie abweicht. Identischer Fix im neuen Rebuild-Pfad (gf-linienzug-rebuild) angewendet, der denselben Mechanismus nutzt.

Manuell in BricsCAD verifiziert: ES-Element hat jetzt korrekten Hoehenversatz.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-09 13:29:40 +02:00
parent 01fb2d29f2
commit 80e5e62160
+23 -9
View File
@@ -1180,13 +1180,19 @@
;; EIN-Element: KS_EIN bleibt in X/Y auf dem Ketten-Pfad (sep-frame), ;; EIN-Element: KS_EIN bleibt in X/Y auf dem Ketten-Pfad (sep-frame),
;; seine eigene Achse verlaeuft damit trivial durch diesen Punkt. ;; seine eigene Achse verlaeuft damit trivial durch diesen Punkt.
;; Die Z-Hoehe wird jedoch an KS_AUS gemessen, damit KS_AUS.Z exakt ;; Die Z-Hoehe wird an KS_EIN des ES-Elements auf die TATSAECHLICH
;; auf endpunkt-ref.Z landet (garantiert die gewuenschte DeltaH). ;; durch die Kette (Geraden/Boegen mit grade) aufgebaute Hoehe gesetzt
;; (caddr sep-endpunkt) - NICHT auf endpunkt-ref.Z (die Z-Koordinate
;; des zweiten Mausklicks). endpunkt-ref dient nur zur deltaH-Schaetzung
;; fuer die Winkelberechnung (gf-winkel-berechnen); klickt der Nutzer
;; beide Punkte auf derselben Hoehe (z.B. in einer 2D-Draufsicht ohne
;; 3D-Objektfang), landete das ES-Element bisher trotz korrekt
;; geneigter Kette wieder auf Starthoehe (realer Bug).
(princ (ssg-textf "gf-status-ein-element-detail" (princ (ssg-textf "gf-status-ein-element-detail"
(list es-block (rtos (caddr endpunkt-ref) 2 1)))) (list es-block (rtos (caddr sep-endpunkt) 2 1))))
(setq es-aus-frame (setq es-aus-frame
(insert-block-mixed-to-ks es-block sep-frame (insert-block-mixed-to-ks es-block sep-frame
(caddr endpunkt-ref) "KS_EIN" "KS_AUS")) (caddr sep-endpunkt) "KS_EIN" "KS_AUS"))
(princ (ssg-textf "gf-status-z-hoehe-ks-aus" (list (rtos (caddr (car es-aus-frame)) 2 1)))) (princ (ssg-textf "gf-status-z-hoehe-ks-aus" (list (rtos (caddr (car es-aus-frame)) 2 1))))
;; --- GF_N-Block erstellen --- ;; --- GF_N-Block erstellen ---
@@ -1226,14 +1232,18 @@
) )
;; delta-l-gf bereits vor der Zusammenfassung berechnet ;; delta-l-gf bereits vor der Zusammenfassung berechnet
;; Block mit allen Attributen erstellen. Geruest fuer Einzelmodul/ ;; Block mit allen Attributen erstellen. HOEHE_BIS_mm kommt aus der
;; Geruestoption sind in diesem Linienzug-Ablauf (Modus 3, keine DCL- ;; TATSAECHLICH gebauten Endhoehe (es-aus-frame), nicht aus der
;; Eingabe) nicht abfragbar - bleiben auf Schema-Default. ;; geklickten endpunkt-ref.Z - sonst wiche das Attribut von der
;; echten Geometrie ab (derselbe Bug wie bei der ES-Platzierung oben).
;; Geruest fuer Einzelmodul/Geruestoption sind in diesem Linienzug-
;; Ablauf (Modus 3, keine DCL-Eingabe) nicht abfragbar - bleiben auf
;; Schema-Default.
(setq gf-lz-insert (setq gf-lz-insert
(gf-block-erstellen (gf-block-erstellen
"gruppe" as-seite gf-nummer "gruppe" as-seite gf-nummer
(caddr startpunkt) (caddr startpunkt)
(caddr endpunkt-ref) (caddr (car es-aus-frame))
deltaH deltaH
delta-l-gf delta-l-gf
L-gf-str L-gf-str
@@ -1403,8 +1413,12 @@
(* (sin rad-h-es)(cos rad-v-es)) (* (sin rad-h-es)(cos rad-v-es))
(- (sin rad-v-es)))) (- (sin rad-v-es))))
(setq sep-frame (make-frame-from-dir sep-endpunkt xu-exit)) (setq sep-frame (make-frame-from-dir sep-endpunkt xu-exit))
;; Z-Ziel = tatsaechlich durch die Kette aufgebaute Hoehe (caddr
;; sep-endpunkt), NICHT die gespeicherte Soll-Endhoehe end-z - identischer
;; Fix wie in gf-linienzug-modus (end-z diente nur zur deltaH-Schaetzung
;; fuer die Winkelberechnung oben).
(setq es-aus-frame (setq es-aus-frame
(insert-block-mixed-to-ks es-block sep-frame end-z "KS_EIN" "KS_AUS")) (insert-block-mixed-to-ks es-block sep-frame (caddr sep-endpunkt) "KS_EIN" "KS_AUS"))
;; Echter Endpunkt (fuer DELTA_L-Attribut/Label) erst jetzt aus der ;; Echter Endpunkt (fuer DELTA_L-Attribut/Label) erst jetzt aus der
;; gebauten Geometrie bekannt - KS_AUS des ES-Elements. ;; gebauten Geometrie bekannt - KS_AUS des ES-Elements.