export_csv: Separator-TYP-XDATA vom aeusseren Trennsteg statt vom geteilten Symbol lesen

Der letzte Fix markierte bauzeitig korrekt den aeusseren
Staustrecke_Separator_SP_300_mm-Trennsteg, csv:sep-proxies-erzeugen las den
Marker aber vom inneren Separator_SP-Symbol - das ist als Teil EINER
gemeinsamen DWG-Blockdefinition zwischen ALLEN Separatoren der Zeichnung
geteilt und kann keinen individuellen Marker tragen. Export sucht jetzt
zusaetzlich den aeusseren Trennsteg (eigene Instanz je Separator) und
ordnet ihn dem Symbol ueber die naechstliegende Weltposition zu.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Michael Stangl
2026-09-24 09:27:57 +02:00
co-authored by Claude Sonnet 5
parent 2f56729308
commit 42309c77d2
+45 -8
View File
@@ -1036,6 +1036,38 @@
erg erg
) )
;; --- Muster des AEUSSEREN Trennsteg-Blocks, der das Separator_SP-Symbol
;; und den Streckentyp-Marker traegt ---
;; ssg-sep-typ-xdata-schreiben (ssg_ks_insert.lsp) markiert bauzeitig NICHT
;; das Separator_SP-Symbol selbst, sondern seinen Verpacker
;; Staustrecke_Separator_SP_300_mm - der Grund: Separator_SP steckt als EIN
;; einziges, von der DWG-Blockdefinition geteiltes Sub-INSERT in JEDER
;; Staustrecke_Separator_SP_300_mm-Instanz (Block-Referenzen teilen sich ihre
;; Definition), eine XDATA-Markierung dort waere also fuer JEDEN Separator
;; der ganzen Zeichnung identisch. Staustrecke_Separator_SP_300_mm selbst ist
;; dagegen pro Einfuegung eine EIGENE Instanz mit eigenem Handle - genau dort
;; setzt der Bau seine Markierung.
(defun csv:pattern-nested-separator-aussen ()
"Staustrecke_Separator_SP_300_mm*"
)
;; --- Naechstliegenden Record aus einer csv:nested-welt-records-Liste zu
;; einem Weltpunkt finden --- (planare Distanz x/y reicht: die Symbole
;; sitzen praktisch am selben Punkt wie ihr Verpacker, siehe
;; csv:pattern-nested-separator-aussen)
(defun csv:nested-record-naechster (pt records / best best-d rec dx dy d)
(setq best nil best-d nil)
(foreach rec records
(setq dx (- (car (nth 3 rec)) (car pt)))
(setq dy (- (cadr (nth 3 rec)) (cadr pt)))
(setq d (+ (* dx dx) (* dy dy)))
(if (or (null best-d) (< d best-d))
(progn (setq best rec) (setq best-d d))
)
)
best
)
;; --- Temporaere Kopie je verpacktem Separator_SP-Symbol --- ;; --- Temporaere Kopie je verpacktem Separator_SP-Symbol ---
;; Setzt csv:nested-welt-records + csv:block-einfuegen-welt zusammen: fuer ;; Setzt csv:nested-welt-records + csv:block-einfuegen-welt zusammen: fuer
;; jeden Fund eine ECHTE Kopie DESSELBEN Blocks an derselben Weltlage. ;; jeden Fund eine ECHTE Kopie DESSELBEN Blocks an derselben Weltlage.
@@ -1044,25 +1076,30 @@
;; ;;
;; proxy-liste-Eintrag: (proxy-ename wrapper-ename typ (x y z) strecke-typ). ;; proxy-liste-Eintrag: (proxy-ename wrapper-ename typ (x y z) strecke-typ).
;; strecke-typ = "VF"/"GF"/nil, gelesen von ssg-sep-typ-xdata-lesen AM ;; strecke-typ = "VF"/"GF"/nil, gelesen von ssg-sep-typ-xdata-lesen AM
;; VERPACKTEN ORIGINAL (nested-ent, nth 1 rec) - NICHT vom Wrapper-Blocknamen ;; AEUSSEREN Trennsteg-Insert (csv:pattern-nested-separator-aussen), NICHT am
;; abgeleitet (fruehere Fehlannahme, siehe lib/dump_vf_kette_inhalt.py): ein ;; Separator_SP-Symbol selbst (das ist Block-Definitions-geteilt, siehe dort)
;; einzelner VF_n/GF_n-Wrapper kann intern mehrfach zwischen Foerderer- und ;; und NICHT vom Wrapper-Blocknamen abgeleitet (fruehere Fehlannahme, siehe
;; Gefaellestrecke-Abschnitten wechseln, der Marker sitzt daher direkt am ;; lib/dump_vf_kette_inhalt.py): ein einzelner VF_n/GF_n-Wrapper kann intern
;; Separator-Insert (gesetzt bauzeitig in vf_linienzug.lsp/Gefaellestrecke.lsp/ ;; mehrfach zwischen Foerderer- und Gefaellestrecke-Abschnitten wechseln, der
;; vf_standard.lsp/vf_etage.lsp, direkt nach dessen Einfuegung). ;; Marker sitzt daher direkt am jeweiligen Separator-Insert (gesetzt bauzeitig
(defun csv:sep-proxies-erzeugen ( / ms recs rec proxy proxy-liste) ;; in vf_linienzug.lsp/Gefaellestrecke.lsp/vf_standard.lsp/vf_etage.lsp,
;; direkt nach dessen Einfuegung). Zuordnung Symbol<->Trennsteg ueber die
;; naechstliegende Weltposition (beide sitzen praktisch am selben Punkt).
(defun csv:sep-proxies-erzeugen ( / ms recs recs-aussen rec aussen-rec proxy proxy-liste)
(setq recs (csv:nested-welt-records (csv:pattern-nested-separator))) (setq recs (csv:nested-welt-records (csv:pattern-nested-separator)))
(setq recs-aussen (csv:nested-welt-records (csv:pattern-nested-separator-aussen)))
(if recs (if recs
(progn (progn
(setq ms (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))) (setq ms (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))))
(foreach rec recs (foreach rec recs
(setq aussen-rec (csv:nested-record-naechster (nth 3 rec) recs-aussen))
(setq proxy (csv:block-einfuegen-welt ms (nth 2 rec) (nth 3 rec) (nth 4 rec) (setq proxy (csv:block-einfuegen-welt ms (nth 2 rec) (nth 3 rec) (nth 4 rec)
(nth 5 rec) (nth 6 rec) (nth 7 rec) (nth 5 rec) (nth 6 rec) (nth 7 rec)
(cdr (assoc 2 (entget (nth 0 rec)))))) (cdr (assoc 2 (entget (nth 0 rec))))))
(if proxy (if proxy
(setq proxy-liste (setq proxy-liste
(cons (list proxy (nth 0 rec) (csv:proxy-typ (nth 2 rec)) (nth 3 rec) (cons (list proxy (nth 0 rec) (csv:proxy-typ (nth 2 rec)) (nth 3 rec)
(ssg-sep-typ-xdata-lesen (nth 1 rec))) (if aussen-rec (ssg-sep-typ-xdata-lesen (nth 1 aussen-rec))))
proxy-liste))) proxy-liste)))
) )
) )