[CHANGE] Omniflo-Nachbarschaft: STRtree-Broad-Phase + KOS-Verfeinerung (10mm); Gerade-K1/K2 im CSV-Export
Die Omniflo-Nachbarschaftserkennung (export_neighbors.py, nur EXPORTCSV) wird zweistufig: - Broad-Phase ueber shapely-STRtree auf den Bounding-Boxen (Fallback: das bisherige Raster, falls shapely fehlt). - Narrow-Phase (KOS-Verfeinerung): zwei moegliche Nachbarn gelten nur dann als benachbart, wenn ein Anschluss-Koordinatensystem K1-K4 des einen naeher als omniflo_ks_toleranz_mm (neu, Default 10mm) an einem K-Punkt des anderen liegt. Das verwirft bloss ueberlappende BBoxen ohne echten Anschluss. Elemente ohne K1-K4 fallen auf reine BBox-Ueberschneidung zurueck. Geraden fuehren keine echten K-Bloecke in der Zeichnung; ihre K1 (Anfang) / K2 (Ende) werden beim Export aus Einfuegepunkt + Laenge + Rotation synthetisiert (csv:gerade-k-kos-strings in export.lsp) und stehen damit in den CSV-Spalten K1/K2 - wie echte KOS - und nehmen an der Kollisionspruefung teil. Verifiziert an results/test-omnicollision: gerichtete Nachbarschaften 20 -> 14. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+21
-4
@@ -104,13 +104,30 @@ format= {x}/{y}
|
||||
toleranz_mm=200
|
||||
|
||||
# Rastergroesse (mm) fuer die Omniflo-Nachbarschaftspruefung (Bogen/Weiche/
|
||||
# Gerade gegen Bogen/Weiche/Gerade). Omniflo-Elemente werden vor dem
|
||||
# Ueberschneidungstest nach x/y-Koordinate in Quadranten dieser Groesse
|
||||
# eingeteilt, geprueft wird dann nur innerhalb derselben und der 8
|
||||
# angrenzenden Zellen (statt jedes Element gegen jedes). Sollte groesser
|
||||
# Gerade gegen Bogen/Weiche/Gerade). Wird nur als FALLBACK verwendet, wenn
|
||||
# shapely (STRtree) nicht verfuegbar ist - dann werden Omniflo-Elemente vor
|
||||
# dem Ueberschneidungstest nach x/y-Koordinate in Quadranten dieser Groesse
|
||||
# eingeteilt und nur innerhalb derselben und der 8 angrenzenden Zellen
|
||||
# geprueft (statt jedes Element gegen jedes). Im Normalfall uebernimmt der
|
||||
# STRtree die Broad-Phase, dieser Wert bleibt dann ungenutzt. Sollte groesser
|
||||
# als die ueblichen Omniflo-Bauteile sein (AP110-Geraden ca. 2000mm).
|
||||
omniflo_zellgroesse_mm=3000
|
||||
|
||||
# Toleranz (mm) fuer die KOS-basierte VERFEINERUNG der Omniflo-Nachbarschaft.
|
||||
# Nachdem der STRtree zwei Omniflo-Elemente (Bogen/Weiche/Gerade) anhand ihrer
|
||||
# Bounding-Boxen als moegliche Nachbarn erkannt hat, wird zusaetzlich geprueft,
|
||||
# ob sich ihre Anschluss-Koordinatensysteme (K1-K4) tatsaechlich beruehren:
|
||||
# nur wenn ein K-Punkt des einen Elements naeher als dieser Wert an einem
|
||||
# K-Punkt des anderen liegt, gelten sie als echte Nachbarn. Das trennt
|
||||
# Elemente, deren Bounding-Boxen sich zwar ueberlappen, die aber nicht an
|
||||
# einem gemeinsamen Anschlusspunkt zusammenstossen. Bei Elementen ohne K1-K4
|
||||
# (z.B. Altbestand) faellt die Pruefung auf die reine BBox-Ueberschneidung
|
||||
# zurueck. 0 = Verfeinerung aus (nur BBox). Wert in mm. Siehe
|
||||
# lib/export_neighbors.py. Geraden fuehren KEINE echten K-Bloecke in der
|
||||
# Zeichnung; ihre K1 (Anfang) / K2 (Ende) werden beim Export aus der Geometrie
|
||||
# synthetisiert (siehe csv:gerade-k-kos-strings in Lisp/export.lsp).
|
||||
omniflo_ks_toleranz_mm=10
|
||||
|
||||
# Kollisions-/Nachbarschafts-Debugprotokoll: 0/leer = aus, 1 = schreibt eine
|
||||
# .dbg-Datei nach DXFM_LOG/export_collision.dbg (bzw. <repo>/logs/, falls
|
||||
# DXFM_LOG nicht gesetzt ist). Alternativ ein expliziter Dateipfad. Das Log
|
||||
|
||||
Reference in New Issue
Block a user