Separatorliste wird in jedes json Attribut der ILS Strecke geschrieben, um die Liste der Ids in der richtigen Reihenfolge aus Bricscad direkt zu erhalten
This commit is contained in:
@@ -233,6 +233,12 @@ def build_variofoerderer_merkmale(block):
|
||||
ohne Suffix werden per Fallback weiter gelesen, damit aeltere
|
||||
export_raw.json-Dateien (z.B. tests/reference/export_raw.json) und noch
|
||||
nicht neu aufgebaute Bloecke in der Zeichnung weiterhin Werte liefern.
|
||||
|
||||
Das Merkmal "Separatorlist" (Reihenfolge der Separator-TeileIds entlang
|
||||
der Strecke) steht hier NICHT drin - es kommt erst nach der sepliste-
|
||||
Aufloesung dazu (siehe write_separatorliste_merkmale in process_blocks),
|
||||
weil an dieser Stelle die x/y-Koordinaten aus der sepliste-XDATA noch
|
||||
nicht auf reale Separator-TeileIds aufgeloest sind.
|
||||
"""
|
||||
attribs = block.get("attribs", {})
|
||||
|
||||
@@ -819,6 +825,46 @@ def resolve_umlauf_und_sepliste_nachbarn(items, kreisel_umlauf, sep_kette,
|
||||
item["nachbarn"] = ", ".join(nachbarn)
|
||||
|
||||
|
||||
def write_separatorliste_merkmale(items, sep_kette_by_key, dbg=None):
|
||||
"""Traegt in jede Strecke (VF_n/GF_n mit "sepliste") das Merkmal
|
||||
"Separatorlist" ein: die TeileIds ihrer Separatoren in Baureihenfolge,
|
||||
kommagetrennt (analog zu "Zuordnung"/"Nachbarn"), z.B. "0052, 0053, 0054".
|
||||
|
||||
Quelle ist die rohe "sepliste" des Items (AS/SEP/ES mit x/y, bereits in
|
||||
Baureihenfolge - siehe compute_sep_kette) statt sep_kette selbst: dessen
|
||||
dict-Reihenfolge ist nicht garantiert, die sepliste-Liste dagegen schon.
|
||||
Nur "SEP"-Eintraege zaehlen als Separator, AS/ES sind die Schleus-Enden
|
||||
der Kette (siehe build_strecke_schleus_items), keine Separatoren.
|
||||
|
||||
Der eigentliche Separator wurde bereits von map_separator_kette_items ueber
|
||||
die sepliste-Koordinate (x/y) auf sein reales Separator-Item (TeileId)
|
||||
aufgeloest und unter demselben "<strecke_id>#<lfdnr>"-Schluessel in
|
||||
sep_kette_by_key eingetragen - hier wird dieser Schluessel nur noch je
|
||||
Strecke eingesammelt. Muss darum NACH map_separator_kette_items laufen.
|
||||
"""
|
||||
for item in items:
|
||||
if item.get("teileart", "") not in GF_VF_TEILEARTEN:
|
||||
continue
|
||||
sepliste = item.get("sepliste")
|
||||
if not sepliste:
|
||||
continue
|
||||
sid = item.get("teileid", "")
|
||||
separator_ids = []
|
||||
for entry in sepliste:
|
||||
if entry.get("typ") != "SEP":
|
||||
continue
|
||||
key = f"{sid}#{entry.get('lfdnr')}"
|
||||
sep_item = sep_kette_by_key.get(key)
|
||||
if sep_item is None:
|
||||
if dbg:
|
||||
dbg(f" Separatorlist {key}: kein aufgeloestes Separator-Item "
|
||||
f"- uebersprungen")
|
||||
continue
|
||||
separator_ids.append(sep_item.get("teileid", ""))
|
||||
if separator_ids:
|
||||
item["merkmale"]["Separatorlist"] = ", ".join(separator_ids)
|
||||
|
||||
|
||||
def process_blocks(blocks, lookup, dbg=None):
|
||||
# x_origin_mm/y_origin_mm einmalig fuer diesen Exportlauf aufloesen (siehe
|
||||
# export_planquadrat.resolve_origins): automatisch aus den Bloecken, falls
|
||||
@@ -1216,6 +1262,10 @@ def process_blocks(blocks, lookup, dbg=None):
|
||||
map_separator_kette_items(
|
||||
items, sep_kette, sep_kette_by_key=sep_kette_by_key, dbg=dbg)
|
||||
|
||||
# Merkmal "Separatorlist" je Strecke (Reihenfolge der SEP-TeileIds aus der
|
||||
# sepliste, x/y bereits oben auf das reale Separator-Item aufgeloest).
|
||||
write_separatorliste_merkmale(items, sep_kette_by_key, dbg=dbg)
|
||||
|
||||
resolve_umlauf_und_sepliste_nachbarn(
|
||||
items, kreisel_umlauf, sep_kette, sep_kette_by_key, weiche_by_key)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user