[ADD] Kreisel-Split (links/rechts) bei Kollisionspruefung + Separator/Scanner-Zuordnung

- export_neighbors.py: kreisel_half_bboxes() teilt die Kreisel-BBox entlang
  der Achse durch Antriebs-/Spannstation (AN8/SP8) in eine linke und eine
  rechte Haelfte (je ca. 400mm breit, siehe [Kreisel] durchmesser_mm in
  cfg/export.cfg, gespiegelt von component_defaults.json). compute_neighbor_ids
  ersetzt jeden Kreisel-Eintrag in der Kollisionsgruppe durch dieses Paar
  (TeileId-L/-R) statt einer einzelnen BBox - Nachbarn einer Gefaellestrecke/
  eines Foerderers zeigen jetzt, welche Haelfte tatsaechlich beruehrt.
- compute_sensor_zuordnung(): ordnet jeden Separator/Scanner per BBox-
  Ueberschneidung seiner Gefaellestrecke, seinem Foerderer oder einer
  Kreiselhaelfte zu (Prioritaet in dieser Reihenfolge), ersetzt die
  ZUORDNUNG-Attribut-Merkmale im CSV-Export bei Treffer.
- compute_scanner_nearest_separator(): sucht zusaetzlich, unabhaengig von der
  Zuordnung, zu jedem Scanner den raeumlich naechstgelegenen Separator.
- ssg_id.lsp: ssg-id-collect-blocks erfasst jetzt auch Separator_SP/S-LP/
  Scanner-Bloecke, damit ssg-id-check-all ihr (neues) ID-Attribut vor jedem
  Export befuellt; export_csv.py bevorzugt dieses echte ID-Attribut als
  TeileId und faellt nur bei leerem Attribut auf eine laufende SEP-/SCN-
  Ersatznummer zurueck.
- data/ils/Scanner_2D.dwg, Scanner_3D.dwg, Separator_SP_2D.dwg: ID-ATTDEF
  ergaenzt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-29 11:21:16 +02:00
parent 88e0aace42
commit f6461aab0f
7 changed files with 361 additions and 26 deletions
+7 -1
View File
@@ -28,7 +28,12 @@
;; --- Alle exportierbaren INSERT-Entities sammeln ---
;; Gleiche Filterlogik wie csv:collect-export-blocks
;; Gleiche Filterlogik wie csv:collect-export-blocks (siehe dort auch
;; pattern_separator/pattern_scanner in cfg/export.cfg - Separator_SP/S-LP/
;; Scanner sind eigenstaendige Sensor-Bloecke, die inzwischen ein eigenes
;; ID-ATTDEF haben und daher hier ebenfalls erfasst werden muessen, sonst
;; bleibt ihr ID-Attribut trotz ATTDEF für immer leer - ssg-attrib-set-on
;; kann nur einen Wert SETZEN, wenn der Block ueberhaupt erst hier landet).
(defun ssg-id-collect-blocks ( / ss-all ss-out i ename ed bname)
(setq ss-all (ssget "X" (list (cons 0 "INSERT"))))
(if (null ss-all)
@@ -43,6 +48,7 @@
(wcmatch bname "KR_*,KREISEL_*,ECKRAD_*")
(wcmatch (strcase bname) "AP110*,AP_110*,AP60*,AP_60*,APG110*")
(wcmatch bname "Vario*,Staustrecke*,AUS_Element*,EIN_Element*,VF_*,GF_*")
(wcmatch bname "Separator_SP*,S-LP*,Scanner*")
(wcmatch bname "#*")
)
(ssadd ename ss-out)