From aa71d463cb9de9b9ee225d4b089e40a97afc30cf Mon Sep 17 00:00:00 2001 From: Michael Stangl Date: Sat, 29 Aug 2026 07:55:00 +0200 Subject: [PATCH] [REFACTOR] Rz(hz)*Ry(vert)-Rotationsmatrix zentralisiert (ssg-rot-matrix-zy) Die 4x4-Matrix Rz(hz)*Ry(vert) stand woertlich 11x: vf_core (2x), vf_etage (4x), Gefaellestrecke (4x), TEFInsert (1x). Neuer dependency-freier Helper ssg-rot-matrix-zy in ssg_core.lsp (immer zuerst geladen), damit alle drei Cluster ihn ohne Cross-Modul-Kopplung teilen. - vf-rot-matrix bleibt als duenner Alias in vf_core (VF-Aufrufstellen unveraendert) - Reine 2D-Rz-Matrizen (insert-block-by-ks, nur horizontal) bleiben unangetastet (andere Form, kein Vertikalanteil) Werte identisch - reine Extraktion. Paren-Balance geprueft. Co-Authored-By: Claude Opus 4.8 (1M context) --- Lisp/Gefaellestrecke.lsp | 24 ++++-------------------- Lisp/TEFInsert.lsp | 6 +----- Lisp/ssg_core.lsp | 20 ++++++++++++++++++++ Lisp/vf_core.lsp | 19 +++++++------------ Lisp/vf_etage.lsp | 26 ++++---------------------- 5 files changed, 36 insertions(+), 59 deletions(-) diff --git a/Lisp/Gefaellestrecke.lsp b/Lisp/Gefaellestrecke.lsp index 641a91b..40d764d 100644 --- a/Lisp/Gefaellestrecke.lsp +++ b/Lisp/Gefaellestrecke.lsp @@ -316,11 +316,7 @@ (vla-InsertBlock modelspace (vlax-3D-point '(0 0 0)) blockname scale 1.0 1.0 0)) - (vla-TransformBy block-obj (vlax-tmatrix - (list (list (* chv cvv) (- shv) (* chv svv) 0) - (list (* shv cvv) chv (* shv svv) 0) - (list (- svv) 0 cvv 0) - (list 0 0 0 1)))) + (vla-TransformBy block-obj (vlax-tmatrix (ssg-rot-matrix-zy chv shv cvv svv))) (vla-Move block-obj (vlax-3D-point '(0 0 0)) (vlax-3D-point startpunkt)) @@ -381,11 +377,7 @@ (vla-InsertBlock modelspace (vlax-3D-point '(0 0 0)) blockname 1.0 1.0 1.0 0)) - (vla-TransformBy block-obj (vlax-tmatrix - (list (list (* chv cvv) (- shv) (* chv svv) 0) - (list (* shv cvv) chv (* shv svv) 0) - (list (- svv) 0 cvv 0) - (list 0 0 0 1)))) + (vla-TransformBy block-obj (vlax-tmatrix (ssg-rot-matrix-zy chv shv cvv svv))) (setq ins-pt (list (- (car startpunkt) (+ (* ein-x chv cvv) (* ein-y (- shv)) (* ein-z chv svv))) (- (cadr startpunkt) (+ (* ein-x shv cvv) (* ein-y chv) (* ein-z shv svv))) @@ -531,11 +523,7 @@ (setq block-obj (vla-InsertBlock modelspace (vlax-3D-point '(0 0 0)) blockname scale 1.0 1.0 0)) - (vla-TransformBy block-obj (vlax-tmatrix - (list (list (* chz cv) (- shz) (* chz sv) 0) - (list (* shz cv) chz (* shz sv) 0) - (list (- sv) 0 cv 0) - (list 0 0 0 1)))) + (vla-TransformBy block-obj (vlax-tmatrix (ssg-rot-matrix-zy chz shz cv sv))) (vla-Move block-obj (vlax-3D-point '(0 0 0)) (vlax-3D-point pt)) (setq endpunkt (list (+ (car pt) (* laenge chz cv)) @@ -562,11 +550,7 @@ (setq block-obj (vla-InsertBlock modelspace (vlax-3D-point '(0 0 0)) blockname 1.0 1.0 1.0 0)) - (vla-TransformBy block-obj (vlax-tmatrix - (list (list (* chz cv) (- shz) (* chz sv) 0) - (list (* shz cv) chz (* shz sv) 0) - (list (- sv) 0 cv 0) - (list 0 0 0 1)))) + (vla-TransformBy block-obj (vlax-tmatrix (ssg-rot-matrix-zy chz shz cv sv))) (vla-Move block-obj (vlax-3D-point '(0 0 0)) (vlax-3D-point pt)) (setq endpunkt (list (+ (car pt) (+ (* dx chz cv) (* dz chz sv))) diff --git a/Lisp/TEFInsert.lsp b/Lisp/TEFInsert.lsp index b8ff6e3..62b590a 100644 --- a/Lisp/TEFInsert.lsp +++ b/Lisp/TEFInsert.lsp @@ -94,11 +94,7 @@ (setq chv (cos rad-h) shv (sin rad-h) cvv (cos rad-v) svv (sin rad-v)) (setq block-obj (vla-InsertBlock modelspace (vlax-3D-point '(0.0 0.0 0.0)) *tefl-blockname* 1.0 1.0 1.0 0)) - (setq matrix (list - (list (* chv cvv) (- shv) (* chv svv) 0) - (list (* shv cvv) chv (* shv svv) 0) - (list (- svv) 0 cvv 0) - (list 0 0 0 1))) + (setq matrix (ssg-rot-matrix-zy chv shv cvv svv)) (vla-TransformBy block-obj (vlax-tmatrix matrix)) (vla-Move block-obj (vlax-3D-point '(0.0 0.0 0.0)) (vlax-3D-point pt)) diff --git a/Lisp/ssg_core.lsp b/Lisp/ssg_core.lsp index ed12b07..6d3fcec 100644 --- a/Lisp/ssg_core.lsp +++ b/Lisp/ssg_core.lsp @@ -168,6 +168,26 @@ ) +;; ------------------------------------------------------------ +;; 3D-ROTATIONSMATRIX +;; ------------------------------------------------------------ +;; 4x4-Rotationsmatrix Rz(hz)*Ry(vert) fuer vla-TransformBy (vlax-tmatrix). +;; Argumente sind die BEREITS berechneten Winkelfunktionen: +;; chz = cos(hz), shz = sin(hz) (horizontale Fahrtrichtung) +;; cv = cos(vert), sv = sin(vert) (vertikale Neigung, positiv = abwaerts) +;; Diese Matrix stand zuvor woertlich in insert-*-Funktionen von vf_core, +;; vf_etage, Gefaellestrecke und TEFInsert. Zentral hier, weil dependency-frei +;; und clusteruebergreifend genutzt. Werte unveraendert - reine Extraktion. +(defun ssg-rot-matrix-zy (chz shz cv sv) + (list + (list (* chz cv) (- shz) (* chz sv) 0) + (list (* shz cv) chz (* shz sv) 0) + (list (- sv) 0 cv 0) + (list 0 0 0 1) + ) +) + + ;; ------------------------------------------------------------ ;; BENUTZER-ABFRAGEN ;; ------------------------------------------------------------ diff --git a/Lisp/vf_core.lsp b/Lisp/vf_core.lsp index 0fe2659..412b6a8 100644 --- a/Lisp/vf_core.lsp +++ b/Lisp/vf_core.lsp @@ -242,6 +242,11 @@ (- (sin rad-v))) ) +;; Hinweis: Die Rz(hz)*Ry(vert)-Rotationsmatrix (vf-rot-matrix) liegt zentral +;; in ssg_core.lsp (ssg-rot-matrix-zy), da sie dependency-frei ist und auch von +;; Gefaellestrecke/TEF genutzt wird. Duenner Alias fuer die VF-Aufrufstellen: +(defun vf-rot-matrix (chz shz cv sv) (ssg-rot-matrix-zy chz shz cv sv)) + (defun punkt-hz-winkel->frame (punkt hz winkel) (make-frame-from-dir punkt (hz-winkel->xu hz winkel)) ) @@ -826,12 +831,7 @@ (vlax-3D-point '(0 0 0)) blockname scale 1.0 1.0 0)) (ssg-ils-block-auf-ebene block-obj blockname) - (setq matrix (list - (list (* chv cvv) (- shv) (* chv svv) 0) - (list (* shv cvv) chv (* shv svv) 0) - (list (- svv) 0 cvv 0) - (list 0 0 0 1) - )) + (setq matrix (vf-rot-matrix chv shv cvv svv)) (vla-TransformBy block-obj (vlax-tmatrix matrix)) (vla-Move block-obj (vlax-3D-point '(0 0 0)) @@ -918,12 +918,7 @@ (vlax-3D-point '(0 0 0)) blockname 1.0 1.0 1.0 0)) (ssg-ils-block-auf-ebene block-obj blockname) - (setq matrix (list - (list (* chv cvv) (- shv) (* chv svv) 0) - (list (* shv cvv) chv (* shv svv) 0) - (list (- svv) 0 cvv 0) - (list 0 0 0 1) - )) + (setq matrix (vf-rot-matrix chv shv cvv svv)) (vla-TransformBy block-obj (vlax-tmatrix matrix)) ;; Block-Ursprung so verschieben, dass das ROTIERTE KS_EIN exakt auf ;; startpunkt liegt: Ursprung = startpunkt - Rz(hz)*Ry(winkel)*ks_ein_lokal diff --git a/Lisp/vf_etage.lsp b/Lisp/vf_etage.lsp index c6ba1a7..8889bf8 100644 --- a/Lisp/vf_etage.lsp +++ b/Lisp/vf_etage.lsp @@ -229,12 +229,7 @@ ) (setq block-obj (vla-InsertBlock modelspace (vlax-3D-point '(0 0 0)) blockname scale 1.0 1.0 0)) - (setq matrix (list - (list (* chz cv) (- shz) (* chz sv) 0) - (list (* shz cv) chz (* shz sv) 0) - (list (- sv) 0 cv 0) - (list 0 0 0 1) - )) + (setq matrix (vf-rot-matrix chz shz cv sv)) (vla-TransformBy block-obj (vlax-tmatrix matrix)) (vla-Move block-obj (vlax-3D-point '(0 0 0)) (vlax-3D-point startpunkt)) (setq endpunkt (list @@ -265,12 +260,7 @@ ) (setq block-obj (vla-InsertBlock modelspace (vlax-3D-point '(0 0 0)) blockname 1.0 1.0 1.0 0)) - (setq matrix (list - (list (* chz cv) (- shz) (* chz sv) 0) - (list (* shz cv) chz (* shz sv) 0) - (list (- sv) 0 cv 0) - (list 0 0 0 1) - )) + (setq matrix (vf-rot-matrix chz shz cv sv)) (vla-TransformBy block-obj (vlax-tmatrix matrix)) (vla-Move block-obj (vlax-3D-point '(0 0 0)) (vlax-3D-point startpunkt)) (setq endpunkt (list @@ -309,11 +299,7 @@ (setq ks-aus (cadr (assoc "KS_AUS" ks-data))) ;; Block einfuegen und rotieren (setq block-obj (vla-InsertBlock modelspace (vlax-3D-point '(0 0 0)) blockname 1.0 1.0 1.0 0)) - (vla-TransformBy block-obj (vlax-tmatrix - (list (list (* chz cv) (- shz) (* chz sv) 0) - (list (* shz cv) chz (* shz sv) 0) - (list (- sv) 0 cv 0) - (list 0 0 0 1)))) + (vla-TransformBy block-obj (vlax-tmatrix (vf-rot-matrix chz shz cv sv))) (if (and ks-ein ks-aus) (progn (setq p-ein (car ks-ein)) @@ -375,11 +361,7 @@ (setq ks-aus (cadr (assoc "KS_AUS" ks-data))) ;; Block mit XScale einfuegen und rotieren (setq block-obj (vla-InsertBlock modelspace (vlax-3D-point '(0 0 0)) blockname scale 1.0 1.0 0)) - (vla-TransformBy block-obj (vlax-tmatrix - (list (list (* chz cv) (- shz) (* chz sv) 0) - (list (* shz cv) chz (* shz sv) 0) - (list (- sv) 0 cv 0) - (list 0 0 0 1)))) + (vla-TransformBy block-obj (vlax-tmatrix (vf-rot-matrix chz shz cv sv))) (if (and ks-ein ks-aus) (progn (setq p-ein (car ks-ein))