export: Kettenbausteine ueber KS verketten, Einheiten neu gruppieren

K1/K2 und Boundingbox je Export-Zeile folgen jetzt dem echten
Kettenbaustein statt seinem Stellvertreter:
- Separator (all_elements): KS + bbox des 300-mm-Trennstegs statt des
  Sensor-Symbols; separator_track/group_vf_gf behalten das Symbol
- AS/ES (all_elements, group_vf_gf): KS + bbox des AS-/ES-Elements statt
  des 200x200-Markers ohne K
- gemeinsamer Kern csv:ks-welt-punkte; VF/GF-Wrapper-K1/K2 = K1 des AS
  bzw. K2 des ES

Gruppierter Export neu (sepliste-/XDATA-Algorithmus entfernt):
- Bausteine je Wrapper als Vektorkette K2 -> K1 ordnen (Start am AS)
- Foerdereinheit = Separator vor der Umlenkstation bis Motorstation,
  alles dazwischen Gefaelleeinheit (csv:kette-einheiten, Unit-Tests)
- je Einheit ein temporaerer Proxy mit 3D-Boundingbox, K1/K2, Laenge und
  Anzahl Boegen; wird nach dem Export geloescht (ausser csv_leave_proxies)
- IDs neuer Export-Objekte entlang der Kette AS -> ES aufsteigend

Weiteres:
- ssg-make-layer ohne _LAYER-Befehl fuer bestehende Layer (Konsole)
- einheitliche, zweisprachige Meldungen fuer behaltene Hilfskopien
- bin/show_exportcsv.bat: Export-CSV als Boundingbox-SVG (sps_skel)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Michael Stangl
2026-09-25 20:25:29 +02:00
co-authored by Claude Opus 5.5
parent bc481de901
commit 394d476d56
13 changed files with 1017 additions and 1037 deletions
+10 -4
View File
@@ -274,7 +274,7 @@ def build_element_merkmale(block):
def build_einheit_merkmale(block):
"""Merkmale-Dict fuer eine Foerdereinheit-/Gefaelleeinheit-Zeile (ZZ_UNIT_
MARKER, siehe csv:unitmark-aktualisieren in export.lsp und
MARKER, siehe csv:ketten-verarbeiten in export.lsp und
pattern_unit_marker in cfg/export.cfg).
LAENGE_m/ANZAHL_BOEGEN kommen direkt aus den ATTDEFs des Markers - dort
@@ -282,9 +282,15 @@ def build_einheit_merkmale(block):
zugeordneten Streckenelement-Mitglieder bzw. Anzahl der Bogen-Mitglieder).
Python hat im gruppierten Modus KEINEN Zugriff auf die Einzelteile selbst
(die werden dort gar nicht erst exportiert), daher keine eigene
Neuberechnung hier."""
Neuberechnung hier.
"Zuordnung" ist die ID des VF_n/GF_n-Wrappers, aus dem diese Einheit
stammt (ATTDEF ZUORDNUNG, von csv:ketten-verarbeiten gesetzt) -
dieselbe Bedeutung wie "Zuordnung" bei build_sensor_merkmale, nur eine
Ebene hoeher (Einheit -> Strecke statt Sensor -> Carrier)."""
attribs = block.get("attribs", {})
return {
"Zuordnung": attribs.get("ZUORDNUNG", ""),
"Laenge_m": attribs.get("LAENGE_m", ""),
"Anzahl_Boegen": attribs.get("ANZAHL_BOEGEN", ""),
}
@@ -1034,8 +1040,8 @@ def process_blocks(blocks, lookup, dbg=None):
continue
# ZZ_UNIT_MARKER (siehe cfg/export.cfg pattern_unit_marker sowie
# csv:unitmark-aktualisieren in Lisp/export.lsp): der persistente
# Marker, den Lisp je zusammenhaengendem Foerderer-/Gefaelle-Abschnitt
# csv:ketten-verarbeiten in Lisp/export.lsp): der temporaere
# Proxy, den Lisp je zusammenhaengendem Foerderer-/Gefaelle-Abschnitt
# einer VF_n/GF_n-Kette setzt (gruppierter Modus, Default). TYP
# entscheidet VF->Foerdereinheit / GF->Gefaelleeinheit, analog zur
# AS/ES-Klassifikation oben. K1/K2 brauchen keine Sonderbehandlung -
+1 -1
View File
@@ -416,7 +416,7 @@ SKIP_BLOCKS = set(BLOCKPATTERNS.get("pattern_ks_subblocks", ["K1", "K2", "K3", "
# siehe csv:element-proxies-erzeugen, export.lsp; nur im Rohdaten-Modus
# *csv-export-alle-elemente*=T ueberhaupt in export_raw.json vorhanden) sowie
# fuer die gruppierten Foerdereinheit-/Gefaelleeinheit-Marker (ZZ_UNIT_MARKER,
# csv:unitmark-aktualisieren, Default-Modus): ihre Stueckzahl steckt bereits
# csv:ketten-verarbeiten, Default-Modus): ihre Stueckzahl steckt bereits
# in den GF_Bogen_*/VF_Bogen_*/ANZAHL_VF/ANZAHL_GF-Attributen des Wrappers
# (*strecke-attr-gruppe*, ssg_core.lsp) - ein eigener Sivas-Eintrag wuerde
# ebenso doppelt zaehlen. Muss VOR der pattern_strecke_module-Pruefung unten