CSV-Export: Nachbarschaft/bbox fuer Kreisel-Kreisel-Weichen, sepliste-Ketten und Separatoren repariert

Kreisel-Kreisel-Weichen fehlten bisher im Kreisel-Umlauf (compute_kreisel_umlauf),
wodurch angrenzende Separatoren auf falsche/fehlende Nachbarn zeigten. Die
kreisel_bounds-Matching-Box ignorierte ausserdem die tatsaechliche Kreiseldrehung
(faelschlich als achsparallel angenommen), was bei gedrehten langen Kreiseln
(Mubea Kreisel 0002) zu falschen Nachbarschaften fuehrte.

Die sepliste-XDATA (AS/SEP/ES-Reihenfolge je VF_n/GF_n) wurde nie ans Python-Item
durchgereicht - die gesamte Ketten-Nachbarschaftserkennung lief dadurch ins Leere.
Nach dem Beheben entstand eine Doppelzaehlung: die in einer Kette verpackten
Separatoren existieren bereits als echte Proxy-INSERTs (csv:sep-proxies-erzeugen);
build_separator_kette_items erzeugte zusaetzlich eigene Zeilen aus der sepliste.
Umgebaut zu map_separator_kette_items: ordnet die sepliste-Reihenfolge den
vorhandenen Proxy-Items zu (Match ueber Wrapper-ID + INSERT-Punkt) statt neue
Zeilen zu erzeugen - keine Doppelzaehlung mehr, Nachbarn korrekt gesetzt.

Ausserdem: vla-getboundingbox scheiterte in einem realen Export bei ALLEN
Bloecken (fehlende bbox ueberall), der Fehler wurde bisher still verschluckt.
REGENALL vor der Export-Schleife behebt das; eine neue Diagnose (exp-bbox-fail)
meldet kuenftige Ausfaelle statt sie zu verschlucken. Freie/eingebettete
Separatoren ohne bbox bekommen zusaetzlich einen Fallback aus einer konfigurierbaren
Symbol-Groesse (cfg/export.cfg [Boundingbox] separator_box_*).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-10 09:41:02 +02:00
parent e08b8b2b08
commit 27ae3df056
10 changed files with 1042 additions and 244 deletions
+18
View File
@@ -173,6 +173,24 @@ element_box_laenge_mm=250
element_box_breite_mm=100
element_box_hoehe_mm=30
# Feste Bounding-Box-Masse (mm) eines Separator-Symbols. Werden fuer die in
# einer VF_n/GF_n-Kette EINGEBETTETEN Separatoren gebraucht, die seit der
# Umstellung auf die "sepliste"-XDATA nicht mehr als eigene INSERT-Bloecke in
# der Zeichnung liegen (frueher wurden sie nur kurzzeitig als Kopie erzeugt,
# um sie zu nummerieren) - fuer sie kann vla-getboundingbox keine Box liefern,
# es gibt kein reales Objekt mehr. Ohne Box nehmen diese Separatoren an der
# Nachbarschafts-/Umlauf-Erkennung nicht teil (siehe lib/export_neighbors.py:
# compute_kreisel_umlauf/compute_sensor_zuordnung brauchen item["_bbox"]).
# Quelle der Masse: gemessenes Separator_SP-Symbol (Referenz-Export, achsen-
# paralleles Symbol ~210 x 150 mm Grundflaeche, 3D-Hoehe ~14 mm). LAENGE liegt
# laengs des Symbols (bei Drehung 0 entlang X), BREITE quer, HOEHE = Z. Die
# tatsaechliche Welt-AABB wird beim Export aus diesen Massen + der Symbol-
# Drehung berechnet (rotierte Box -> achsparallele Huelle). Defaults (falls
# nicht gesetzt): 210 / 150 / 14.
separator_box_laenge_mm=210
separator_box_breite_mm=150
separator_box_hoehe_mm=14
[Kreisel]
# Kreisel-Durchmesser (Antriebs-/Spannstation AN8/SP8) in mm. Quelle der
# Wahrheit ist data/json/component_defaults.json ("kreisel"."durchmesser",