Fix K1/K2-Weltposition fuer gekippte Sub-INSERTs im CSV-Export
csv:get-k-kos-strings rechnete die Gruppe-10-Position eines K1-K4/ KS_EIN/KS_AUS-Sub-INSERTs ueber eine reine Z-Drehung des Elternblocks um, ohne die EIGENE Extrusion (Gruppe 210) des Sub-INSERTs zu beruecksichtigen. Bei schraeg sitzenden Anschlusspunkten wie KS_AUS von SC_Entladung (BTMT-Entladung) landete K2 dadurch weit ausserhalb der Bounding Box statt am tatsaechlichen Punkt - sichtbar als K2 unterhalb statt oberhalb des Elements in der Materialfluss-Draufsicht (sps_skel HundM05_bbs.svg). Behoben ueber mat3-ocs-matrix/mat3-mul- vec3 (Arbitrary Axis Algorithm, bereits in ssg_core.lsp vorhanden), analog zum frueheren Fix in ssg-collect-nested-inserts-rel. Zusaetzlich einen fuehrenden entnext entfernt, der aus demselben Grund ein K1/ KS_EIN als erstes Entity der Blockdefinition uebersprungen haette.
This commit is contained in:
+25
-3
@@ -325,15 +325,33 @@
|
||||
;; Vorrang: sie werden vorne angehaengt, csv:k-kos liest per assoc den ersten).
|
||||
;; Rueckgabe: Assoc-Liste (("K1" . "<pos-string>") ("K2" . ...) ...), nur
|
||||
;; fuer tatsaechlich vorhandene K-Bloecke (nicht jedes Element hat alle 4).
|
||||
;;
|
||||
;; Gruppe-10 eines Sub-INSERTs ist OCS-lokal zu SEINER EIGENEN Extrusion
|
||||
;; (Gruppe 210), nicht zwingend zur flachen XY-Ebene der Elterndefinition -
|
||||
;; z.B. KS_AUS von SC_Entladung (BTMT-Entladung), das schraeg in 3D sitzt.
|
||||
;; mat3-ocs-matrix/mat3-mul-vec3 (ssg_core.lsp, Arbitrary Axis Algorithm)
|
||||
;; wandeln das erst in echte lokale Koordinaten um, bevor csv:local-to-world
|
||||
;; mit der Eltern-Rotation weiterrechnet - derselbe Fix wie bereits in
|
||||
;; ssg-collect-nested-inserts-rel (dort ausfuehrlich begruendet). Ohne diese
|
||||
;; Umrechnung landete K2 tief unterhalb statt oberhalb des Elements (realer
|
||||
;; Bug, sichtbar in der Materialfluss-Draufsicht sps_skel/HundM05_bbs.svg).
|
||||
;; Fuer Extrusion=(0 0 1) (Normalfall, z.B. KS_EIN) reduziert sich das exakt
|
||||
;; auf die alte reine Uebernahme - unveraendertes Verhalten dort.
|
||||
(defun csv:get-k-kos-strings (ename pt rot-rad / ed bname blk-tbl sub-ent sub-ed
|
||||
sub-bname sub-pt world-pt target is-real result)
|
||||
sub-bname sub-pt sub-extrusion sub-pt-real world-pt
|
||||
target is-real result)
|
||||
(setq ed (entget ename))
|
||||
(setq bname (cdr (assoc 2 ed)))
|
||||
(setq blk-tbl (tblsearch "BLOCK" bname))
|
||||
(setq result nil)
|
||||
(if blk-tbl
|
||||
(progn
|
||||
(setq sub-ent (entnext (cdr (assoc -2 blk-tbl))))
|
||||
;; (assoc -2) ist bereits das ERSTE Entity der Blockdefinition, NICHT
|
||||
;; der BLOCK-Header - direkt hier starten, kein entnext davor (das
|
||||
;; uebersprang sonst ein K1/KS_EIN, das zufaellig als erstes Entity in
|
||||
;; der Blockdefinition steht - derselbe Bug wie frueher in
|
||||
;; ssg-collect-nested-inserts-rel, siehe dortiger Kommentar).
|
||||
(setq sub-ent (cdr (assoc -2 blk-tbl)))
|
||||
(while sub-ent
|
||||
(setq sub-ed (entget sub-ent))
|
||||
(if (= (cdr (assoc 0 sub-ed)) "INSERT")
|
||||
@@ -352,7 +370,11 @@
|
||||
(if (and target (or is-real (not (assoc target result))))
|
||||
(progn
|
||||
(setq sub-pt (cdr (assoc 10 sub-ed)))
|
||||
(setq world-pt (csv:local-to-world pt rot-rad sub-pt))
|
||||
(if (null (caddr sub-pt))
|
||||
(setq sub-pt (list (car sub-pt) (cadr sub-pt) 0.0)))
|
||||
(setq sub-extrusion (cond ((cdr (assoc 210 sub-ed))) ('(0.0 0.0 1.0))))
|
||||
(setq sub-pt-real (mat3-mul-vec3 (mat3-ocs-matrix sub-extrusion) sub-pt))
|
||||
(setq world-pt (csv:local-to-world pt rot-rad sub-pt-real))
|
||||
(setq result (cons
|
||||
(cons target
|
||||
(csv:trans-encode
|
||||
|
||||
Reference in New Issue
Block a user