From 80e5e621607edc6bf54feed12a83526f4463be98 Mon Sep 17 00:00:00 2001 From: Michael Stangl Date: Fri, 9 Oct 2026 13:29:40 +0200 Subject: [PATCH] [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 --- Lisp/Gefaellestrecke.lsp | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/Lisp/Gefaellestrecke.lsp b/Lisp/Gefaellestrecke.lsp index 83a7871..afa655f 100644 --- a/Lisp/Gefaellestrecke.lsp +++ b/Lisp/Gefaellestrecke.lsp @@ -1180,13 +1180,19 @@ ;; EIN-Element: KS_EIN bleibt in X/Y auf dem Ketten-Pfad (sep-frame), ;; seine eigene Achse verlaeuft damit trivial durch diesen Punkt. - ;; Die Z-Hoehe wird jedoch an KS_AUS gemessen, damit KS_AUS.Z exakt - ;; auf endpunkt-ref.Z landet (garantiert die gewuenschte DeltaH). + ;; Die Z-Hoehe wird an KS_EIN des ES-Elements auf die TATSAECHLICH + ;; 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" - (list es-block (rtos (caddr endpunkt-ref) 2 1)))) + (list es-block (rtos (caddr sep-endpunkt) 2 1)))) (setq es-aus-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)))) ;; --- GF_N-Block erstellen --- @@ -1226,14 +1232,18 @@ ) ;; delta-l-gf bereits vor der Zusammenfassung berechnet - ;; Block mit allen Attributen erstellen. Geruest fuer Einzelmodul/ - ;; Geruestoption sind in diesem Linienzug-Ablauf (Modus 3, keine DCL- - ;; Eingabe) nicht abfragbar - bleiben auf Schema-Default. + ;; Block mit allen Attributen erstellen. HOEHE_BIS_mm kommt aus der + ;; TATSAECHLICH gebauten Endhoehe (es-aus-frame), nicht aus der + ;; 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 (gf-block-erstellen "gruppe" as-seite gf-nummer (caddr startpunkt) - (caddr endpunkt-ref) + (caddr (car es-aus-frame)) deltaH delta-l-gf L-gf-str @@ -1403,8 +1413,12 @@ (* (sin rad-h-es)(cos rad-v-es)) (- (sin rad-v-es)))) (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 - (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 ;; gebauten Geometrie bekannt - KS_AUS des ES-Elements.