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
|
ohne Suffix werden per Fallback weiter gelesen, damit aeltere
|
||||||
export_raw.json-Dateien (z.B. tests/reference/export_raw.json) und noch
|
export_raw.json-Dateien (z.B. tests/reference/export_raw.json) und noch
|
||||||
nicht neu aufgebaute Bloecke in der Zeichnung weiterhin Werte liefern.
|
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", {})
|
attribs = block.get("attribs", {})
|
||||||
|
|
||||||
@@ -819,6 +825,46 @@ def resolve_umlauf_und_sepliste_nachbarn(items, kreisel_umlauf, sep_kette,
|
|||||||
item["nachbarn"] = ", ".join(nachbarn)
|
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):
|
def process_blocks(blocks, lookup, dbg=None):
|
||||||
# x_origin_mm/y_origin_mm einmalig fuer diesen Exportlauf aufloesen (siehe
|
# x_origin_mm/y_origin_mm einmalig fuer diesen Exportlauf aufloesen (siehe
|
||||||
# export_planquadrat.resolve_origins): automatisch aus den Bloecken, falls
|
# export_planquadrat.resolve_origins): automatisch aus den Bloecken, falls
|
||||||
@@ -1216,6 +1262,10 @@ def process_blocks(blocks, lookup, dbg=None):
|
|||||||
map_separator_kette_items(
|
map_separator_kette_items(
|
||||||
items, sep_kette, sep_kette_by_key=sep_kette_by_key, dbg=dbg)
|
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(
|
resolve_umlauf_und_sepliste_nachbarn(
|
||||||
items, kreisel_umlauf, sep_kette, sep_kette_by_key, weiche_by_key)
|
items, kreisel_umlauf, sep_kette, sep_kette_by_key, weiche_by_key)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user