Sivas-Export: Geruestoption fuer Einzelmodul in allen ILS-Elementen ergaenzt
Kreisel, Eckrad, Gefaellestrecke und VarioFoerderer schreiben jetzt neben "Geruest fuer Einzelmodul" auch die gewaehlte Geruestoption (GERUEST_TYP) in die Merkmale. Eckrad bekommt dafuer erstmals eine eigene Gruppierung nach Geruest-Signatur (bisher immer eine gemeinsame Zeile ohne Details); Kreisel/Gefaellestrecke gruppieren nun ebenfalls nach Geruestoption, damit unterschiedliche Optionen nicht mehr in einer Zeile verschwinden.
This commit is contained in:
+51
-13
@@ -109,14 +109,17 @@ def build_gefaellestrecke_details(block):
|
||||
"Anzahl der Separatoren": attribs.get("ANZAHL_SEPARATOR", "0"),
|
||||
"Anzahl der Scanner": attribs.get("ANZAHL_SCANNER", "0"),
|
||||
"Typ": attribs.get("TYP", "Gefaellestrecke"),
|
||||
"Geruest fuer Einzelmodul": attribs.get("GERUEST_EINZELMODUL", "0") == "1",
|
||||
"Geruestoption fuer Einzelmodul": attribs.get("GERUEST_TYP", "Schoenenberger Geruest"),
|
||||
}
|
||||
|
||||
|
||||
def kreisel_signature(block):
|
||||
"""
|
||||
Schluessel zur Gruppierung gleichartiger Kreisel: Kreiselart, Abstand,
|
||||
Anzahl der Separatoren, Anzahl der Scanner und Anzahl der Rampen
|
||||
entscheiden, ob Kreisel in derselben Sivas-Zeile summiert werden.
|
||||
Anzahl der Separatoren, Anzahl der Scanner, Anzahl der Rampen sowie
|
||||
Geruest fuer Einzelmodul/Geruestoption entscheiden, ob Kreisel in
|
||||
derselben Sivas-Zeile summiert werden.
|
||||
"""
|
||||
attribs = block.get("attribs", {})
|
||||
return (
|
||||
@@ -126,14 +129,29 @@ def kreisel_signature(block):
|
||||
attribs.get("ANZAHL_SCANNER", attribs.get("N_SCANNER", "0")),
|
||||
attribs.get("ANZAHL_RAMPEN", attribs.get("N_RAMPEN", "0")),
|
||||
attribs.get("GERUEST_EINZELMODUL", "0"),
|
||||
attribs.get("GERUEST_TYP", "Schoenenberger Geruest"),
|
||||
)
|
||||
|
||||
|
||||
def eckrad_signature(block):
|
||||
"""
|
||||
Schluessel zur Gruppierung gleichartiger Eckraeder: Geruest fuer
|
||||
Einzelmodul/Geruestoption entscheiden, ob Eckraeder in derselben
|
||||
Sivas-Zeile summiert werden.
|
||||
"""
|
||||
attribs = block.get("attribs", {})
|
||||
return (
|
||||
attribs.get("GERUEST_EINZELMODUL", "0"),
|
||||
attribs.get("GERUEST_TYP", "Schoenenberger Geruest"),
|
||||
)
|
||||
|
||||
|
||||
def gefaellestrecke_signature(block):
|
||||
"""
|
||||
Schluessel zur Gruppierung gleichartiger Gefaellestrecken: Bloecke mit
|
||||
identischen Massen (Hoehe, Laenge, Winkel, Separatoren, Scanner, Typ)
|
||||
landen in derselben Sivas-Zeile - nur IDs/Bezeichnung unterscheiden sich.
|
||||
identischen Massen (Hoehe, Laenge, Winkel, Separatoren, Scanner, Typ,
|
||||
Geruest fuer Einzelmodul/Geruestoption) landen in derselben Sivas-Zeile -
|
||||
nur IDs/Bezeichnung unterscheiden sich.
|
||||
"""
|
||||
attribs = block.get("attribs", {})
|
||||
return (
|
||||
@@ -144,6 +162,8 @@ def gefaellestrecke_signature(block):
|
||||
attribs.get("ANZAHL_SEPARATOR", "0"),
|
||||
attribs.get("ANZAHL_SCANNER", "0"),
|
||||
attribs.get("TYP", "Gefaellestrecke"),
|
||||
attribs.get("GERUEST_EINZELMODUL", "0"),
|
||||
attribs.get("GERUEST_TYP", "Schoenenberger Geruest"),
|
||||
)
|
||||
|
||||
|
||||
@@ -206,6 +226,8 @@ def build_variofoerderer_details(block):
|
||||
},
|
||||
"Anzahl der Separatoren": to_int("ANZAHL_SEPARATOR"),
|
||||
"Anzahl der Scanner": to_int("ANZAHL_SCANNER"),
|
||||
"Geruest fuer Einzelmodul": attribs.get("GERUEST_EINZELMODUL", "0") == "1",
|
||||
"Geruestoption fuer Einzelmodul": attribs.get("GERUEST_TYP", "Schoenenberger Geruest"),
|
||||
}
|
||||
|
||||
|
||||
@@ -222,6 +244,16 @@ def build_kreisel_details(block):
|
||||
"Anzahl der Scanner": attribs.get("ANZAHL_SCANNER", attribs.get("N_SCANNER", "0")),
|
||||
"Anzahl der Rampen": attribs.get("ANZAHL_RAMPEN", attribs.get("N_RAMPEN", "0")),
|
||||
"Geruest fuer Einzelmodul": attribs.get("GERUEST_EINZELMODUL", "0") == "1",
|
||||
"Geruestoption fuer Einzelmodul": attribs.get("GERUEST_TYP", "Schoenenberger Geruest"),
|
||||
}
|
||||
|
||||
|
||||
def build_eckrad_details(block):
|
||||
"""Merkmale-Dict fuer ein ILS Eckrad."""
|
||||
attribs = block.get("attribs", {})
|
||||
return {
|
||||
"Geruest fuer Einzelmodul": attribs.get("GERUEST_EINZELMODUL", "0") == "1",
|
||||
"Geruestoption fuer Einzelmodul": attribs.get("GERUEST_TYP", "Schoenenberger Geruest"),
|
||||
}
|
||||
|
||||
|
||||
@@ -260,8 +292,7 @@ def process_blocks(blocks, lookup):
|
||||
# Gerade: artinr_str -> {anzahl, laenge_mm_total, ids}
|
||||
gerade_groups = {}
|
||||
kreisel_list = [] # Liste von blocks
|
||||
eckrad_ids = [] # IDs aller Eckrad-Bloecke
|
||||
eckrad_bezeichnungen = [] # Bezeichnung-Attribut aller Eckrad-Bloecke
|
||||
eckrad_groups = {} # eckrad_signature(block) -> {"ids", "bezeichnungen", "block"}
|
||||
strecke_ids = [] # IDs loser Strecke-Elemente (Vario/Staustrecke ausserhalb VF_N)
|
||||
strecke_bezeichnungen = [] # Bezeichnung-Attribut loser Strecke-Elemente
|
||||
vario_list = [] # Liste von VarioFoerderer-Compound-Bloecken (VF_N), je einer Zeile
|
||||
@@ -356,8 +387,12 @@ def process_blocks(blocks, lookup):
|
||||
# ECKRAD_* mit ein, pattern_eckrad ist die praezisere Teilmenge) ---
|
||||
if matches_any(bname, BLOCKPATTERNS.get("pattern_eckrad", [])):
|
||||
counters["anzahl_eckraeder"] += 1
|
||||
eckrad_ids.append(get_id(block))
|
||||
eckrad_bezeichnungen.append(block.get("attribs", {}).get("Bezeichnung", ""))
|
||||
sig = eckrad_signature(block)
|
||||
if sig not in eckrad_groups:
|
||||
eckrad_groups[sig] = {"ids": [], "bezeichnungen": [], "block": block}
|
||||
eckrad_groups[sig]["ids"].append(get_id(block))
|
||||
eckrad_groups[sig]["bezeichnungen"].append(
|
||||
block.get("attribs", {}).get("Bezeichnung", ""))
|
||||
continue
|
||||
|
||||
# --- ILS Kreisel ---
|
||||
@@ -489,19 +524,22 @@ def process_blocks(blocks, lookup):
|
||||
})
|
||||
nr += 1
|
||||
|
||||
if counters["anzahl_eckraeder"] > 0:
|
||||
# Gleichartige Eckraeder (gleiches Geruest fuer Einzelmodul/Geruestoption)
|
||||
# zu einer Zeile zusammenfassen - nur IDs/Bezeichnung bleiben je Block
|
||||
# unterschiedlich.
|
||||
for group in eckrad_groups.values():
|
||||
sivasnr, teileart = ILS_SIVASNR["eckrad"]
|
||||
items.append({
|
||||
"nr": nr,
|
||||
"teileart": teileart,
|
||||
"sivasnr": sivasnr,
|
||||
"sivasnr_quoted": True,
|
||||
"bezeichnung": ", ".join(b for b in eckrad_bezeichnungen if b),
|
||||
"bezeichnung": ", ".join(b for b in group["bezeichnungen"] if b),
|
||||
"dispgruppe": 20,
|
||||
"anzahl": counters["anzahl_eckraeder"],
|
||||
"anzahl": len(group["ids"]),
|
||||
"laenge_mm": "",
|
||||
"ids": eckrad_ids,
|
||||
"details": {},
|
||||
"ids": group["ids"],
|
||||
"details": build_eckrad_details(group["block"]),
|
||||
})
|
||||
nr += 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user