export_csv: sepliste-Koordinaten (x/y) entfernen, nur noch typ/lfdnr/id
Validiert (Nutzer-Befund): die sepliste-XDATA-Koordinaten sind der rohe Gruppencode-10-Punkt des jeweiligen Bau-Primitivs und teils gespiegelt/um mehrere 100mm verschoben (z.B. Separator 0037: x=-5070.1 statt 5070.1, ausserhalb der VF_1-Boundingbox). Die eigene Export-Zeile jedes Bauteils (x/y aus der echten Proxy-Kopie) ist dagegen verlaesslich und liegt korrekt in der Boundingbox. sepliste dient nur noch der ID-Zuordnung/Reihenfolge, nicht mehr als Koordinatenquelle. Der Python-Faellback in map_sepliste_kette_items (nur fuer SEP-Eintraege ohne aufloesbares "id"-Feld, Altbestand) matchte bisher per naechstem sepliste-Punkt - jetzt erster unverbrauchter Kandidat je Zuordnung, da keine Koordinate mehr vorliegt. lib/dump_vf_kette_inhalt.py zeigt Position/Typ jetzt ueber die ID-Verknuepfung zur eigenen Bauteil-Zeile statt ueber die entfernten sepliste-Felder. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
42309c77d2
commit
4f1a0e0b5b
+19
-12
@@ -21,7 +21,6 @@ von export_raw.json bis zur fertigen CSV-Zeile) siehe doc/csv-export.md.
|
||||
"""
|
||||
|
||||
import json
|
||||
import math
|
||||
import sys
|
||||
import os
|
||||
|
||||
@@ -567,19 +566,29 @@ def map_sepliste_kette_items(items, sep_kette, dbg=None):
|
||||
|
||||
Fallback (kein "id"-Feld - Altbestand-Export ohne Marker/Kopie-ID, oder
|
||||
deren Zuweisung ist in Lisp fehlgeschlagen): NUR fuer SEP-Eintraege
|
||||
weiterhin per naechstem INSERT-Punkt gegen die per Zuordnung
|
||||
vorgefilterten Separator-Items. AS/ES ohne "id" bleiben unaufgeloest -
|
||||
fuer sie existiert seit dem Wegfall der Kreisel<->Strecke-Kollisions-
|
||||
erzeugung (frueher compute_strecke_kreisel_schleus/
|
||||
build_strecke_schleus_items) ohnehin kein Item mehr, das sie vertreten
|
||||
koennte.
|
||||
weiterhin gegen die per Zuordnung vorgefilterten Separator-Items, je
|
||||
Strecke der erste noch nicht verbrauchte Kandidat (Baureihenfolge in
|
||||
items). AS/ES ohne "id" bleiben unaufgeloest - fuer sie existiert seit
|
||||
dem Wegfall der Kreisel<->Strecke-Kollisionserzeugung (frueher
|
||||
compute_strecke_kreisel_schleus/build_strecke_schleus_items) ohnehin
|
||||
kein Item mehr, das sie vertreten koennte.
|
||||
|
||||
Der Fallback matchte frueher per naechstem sepliste-Koordinatenpunkt
|
||||
(x/y) - die sepliste-XDATA traegt seit 2026-09-25 kein x/y mehr, weil
|
||||
diese Koordinaten der rohe, teils gespiegelte/verschobene Gruppencode-10-
|
||||
Punkt des jeweiligen Bau-Primitivs waren (siehe export.lsp-Kommentar bei
|
||||
sepliste-teile) und keine verlaessliche Zuordnungsgrundlage. Der
|
||||
ID-Abgleich oben deckt praktisch jeden aktuellen Export ab; dieser
|
||||
Fallback ist reine Altbestands-Kompatibilitaet.
|
||||
|
||||
Rueckgabe: sep_kette_by_key (neues dict).
|
||||
"""
|
||||
sep_kette_by_key = {}
|
||||
by_teileid = {it.get("teileid", ""): it for it in items if it.get("teileid", "")}
|
||||
|
||||
# Kandidatenpool nur noch fuer den Koordinaten-Fallback (SEP ohne "id").
|
||||
# Kandidatenpool nur noch fuer den Fallback (SEP ohne "id"); verbrauchte
|
||||
# Kandidaten werden entfernt, damit zwei Sepliste-Eintraege nicht auf
|
||||
# dasselbe Item fallen.
|
||||
sep_items_by_zuordnung = {}
|
||||
for it in items:
|
||||
if it.get("teileart", "") != "ILS 2.0 Separator":
|
||||
@@ -620,13 +629,11 @@ def map_sepliste_kette_items(items, sep_kette, dbg=None):
|
||||
dbg(f" {key}: kein Separator-Item mit Zuordnung "
|
||||
f"{eintrag['strecke_id']!r} gefunden - uebersprungen")
|
||||
continue
|
||||
sx, sy = eintrag.get("x", 0.0), eintrag.get("y", 0.0)
|
||||
best = min(kandidaten,
|
||||
key=lambda it: math.hypot(it.get("_x", 0.0) - sx, it.get("_y", 0.0) - sy))
|
||||
best = kandidaten.pop(0)
|
||||
sep_kette_by_key[key] = best
|
||||
per_fallback += 1
|
||||
if dbg:
|
||||
dbg(f" {key} (x={sx:.0f},y={sy:.0f}) -> Naehe-Fallback auf "
|
||||
dbg(f" {key} -> Fallback (erster unverbrauchter Kandidat) auf "
|
||||
f"Separator-Item TeileId {best.get('teileid', '')!r}")
|
||||
|
||||
if dbg:
|
||||
|
||||
Reference in New Issue
Block a user