diff --git a/Lisp/export.lsp b/Lisp/export.lsp index c42cee3..1487e27 100644 --- a/Lisp/export.lsp +++ b/Lisp/export.lsp @@ -1036,6 +1036,38 @@ 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 --- ;; Setzt csv:nested-welt-records + csv:block-einfuegen-welt zusammen: fuer ;; 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). ;; strecke-typ = "VF"/"GF"/nil, gelesen von ssg-sep-typ-xdata-lesen AM -;; VERPACKTEN ORIGINAL (nested-ent, nth 1 rec) - NICHT vom Wrapper-Blocknamen -;; abgeleitet (fruehere Fehlannahme, siehe lib/dump_vf_kette_inhalt.py): ein -;; einzelner VF_n/GF_n-Wrapper kann intern mehrfach zwischen Foerderer- und -;; Gefaellestrecke-Abschnitten wechseln, der Marker sitzt daher direkt am -;; Separator-Insert (gesetzt bauzeitig in vf_linienzug.lsp/Gefaellestrecke.lsp/ -;; vf_standard.lsp/vf_etage.lsp, direkt nach dessen Einfuegung). -(defun csv:sep-proxies-erzeugen ( / ms recs rec proxy proxy-liste) +;; AEUSSEREN Trennsteg-Insert (csv:pattern-nested-separator-aussen), NICHT am +;; Separator_SP-Symbol selbst (das ist Block-Definitions-geteilt, siehe dort) +;; und NICHT vom Wrapper-Blocknamen abgeleitet (fruehere Fehlannahme, siehe +;; lib/dump_vf_kette_inhalt.py): ein einzelner VF_n/GF_n-Wrapper kann intern +;; mehrfach zwischen Foerderer- und Gefaellestrecke-Abschnitten wechseln, der +;; Marker sitzt daher direkt am jeweiligen Separator-Insert (gesetzt bauzeitig +;; 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-aussen (csv:nested-welt-records (csv:pattern-nested-separator-aussen))) (if recs (progn (setq ms (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))) (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) (nth 5 rec) (nth 6 rec) (nth 7 rec) (cdr (assoc 2 (entget (nth 0 rec)))))) (if proxy (setq proxy-liste (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))) ) )