diff --git a/Lisp/export.lsp b/Lisp/export.lsp index fa2e7d6..0cae115 100644 --- a/Lisp/export.lsp +++ b/Lisp/export.lsp @@ -325,15 +325,33 @@ ;; Vorrang: sie werden vorne angehaengt, csv:k-kos liest per assoc den ersten). ;; Rueckgabe: Assoc-Liste (("K1" . "") ("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