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:
@@ -105,15 +105,37 @@ def wrapper_aus_export_raw(export_raw):
|
||||
return wrapper
|
||||
|
||||
|
||||
def sepliste_zusammenfassung(wrapper_block):
|
||||
def bauteile_nach_id(export_raw):
|
||||
"""Lookup ID-Attribut -> Bauteil-Record. Die sepliste selbst traegt seit
|
||||
2026-09-25 kein x/y mehr (die dortigen Koordinaten waren der rohe,
|
||||
teils gespiegelte/verschobene Gruppencode-10-Punkt des Bau-Primitivs,
|
||||
siehe export.lsp-Kommentar bei sepliste-teile) - die verlaessliche
|
||||
Position steht an der eigenen Export-Zeile des Bauteils (x/y/z dort
|
||||
kommen aus der echten Proxy-Kopie)."""
|
||||
out = {}
|
||||
for b in export_raw:
|
||||
bid = b.get("attribs", {}).get("ID")
|
||||
if bid:
|
||||
out[bid] = b
|
||||
return out
|
||||
|
||||
|
||||
def sepliste_zusammenfassung(wrapper_block, bauteile):
|
||||
sepliste = wrapper_block.get("sepliste", [])
|
||||
if not sepliste:
|
||||
return " (keine sepliste-XDATA am Wrapper - Altbestand oder Fehler)"
|
||||
zeilen = []
|
||||
for s in sepliste:
|
||||
teil = bauteile.get(s.get("id"))
|
||||
if teil:
|
||||
pos = f"x={teil['x']:10.2f} y={teil['y']:10.2f}"
|
||||
typ = teil.get("strecke_typ")
|
||||
if typ:
|
||||
pos += f" strecke_typ={typ}"
|
||||
else:
|
||||
pos = "(kein Bauteil mit dieser ID gefunden)"
|
||||
zeilen.append(
|
||||
f" lfdnr={s['lfdnr']:2d} typ={s['typ']:3s} id={s.get('id','?'):6s} "
|
||||
f"x={s['x']:10.2f} y={s['y']:10.2f}"
|
||||
f" lfdnr={s['lfdnr']:2d} typ={s['typ']:3s} id={s.get('id','?'):6s} {pos}"
|
||||
)
|
||||
return "\n".join(zeilen)
|
||||
|
||||
@@ -128,9 +150,11 @@ def main():
|
||||
|
||||
export_raw = None
|
||||
wrapper_liste = []
|
||||
bauteile = {}
|
||||
if len(sys.argv) == 3:
|
||||
export_raw = lade_json(sys.argv[2])
|
||||
wrapper_liste = wrapper_aus_export_raw(export_raw)
|
||||
bauteile = bauteile_nach_id(export_raw)
|
||||
if len(wrapper_liste) != len(ketten):
|
||||
print(
|
||||
f"[WARNUNG] {len(ketten)} Ketten in der Spec, aber "
|
||||
@@ -150,7 +174,7 @@ def main():
|
||||
print(kette_zusammenfassung(kette))
|
||||
if i < len(wrapper_liste):
|
||||
print("--- sepliste (tatsaechlich exportierte Separator-Reihenfolge) ---")
|
||||
print(sepliste_zusammenfassung(wrapper_liste[i]))
|
||||
print(sepliste_zusammenfassung(wrapper_liste[i], bauteile))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user