validate_anlage, stabiler TRO-Schluessel, Verbindungen aus BricsCAD, Zeichnung aus der Anlagen-JSON
- validate_anlage.py (+ bin-Wrapper): Pruefung vor der SCL fuer beide Wege (Struktur, Zuordnungen, Aktualitaet der JSON, Korrekturen ohne Ziel); scl_skeleton ruft sie auf (Warnung, --strict bricht ab) - DerivedTro.key: stabiler Schluessel (ID der ID-Datei); hw_overrides.ini, <csv>_jam_names.ini und tro_overrides.ini greifen ueber ID oder Schluessel, eine Umbenennung in TRO_EDIT laesst sie bestehen; JAM_AREA traegt KEY - --read-tros liest die CONNECTION_ARROW-Bloecke mit -> [<csv>.edit_connections]; tro_flow.apply_connection_edits wendet sie nach link_tros an - tro_annotate --anlage zeichnet Marker/Verbindungen aus der Anlagen-JSON - INI-Korrekturen auch mit BOM lesbar (utf-8-sig) - Ablauf CSV/DXF+TIA -> Anlagen-JSON -> (BricsCAD) -> SCL in doc/Python_Scripts.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+25
-3
@@ -68,6 +68,8 @@ __all__ = [
|
||||
"flow_order",
|
||||
"JAM_NAMES_SUFFIX",
|
||||
"jam_key",
|
||||
"jam_override",
|
||||
"jam_stable_key",
|
||||
"jam_label",
|
||||
"jam_names",
|
||||
"jam_numbers",
|
||||
@@ -653,6 +655,25 @@ def jam_key(area: JamArea) -> str:
|
||||
return f"{area.tro}.{area.entry}"
|
||||
|
||||
|
||||
def jam_stable_key(area: JamArea, document: TroDocument) -> str:
|
||||
"""Wie jam_key, aber mit dem stabilen Schluessel des TRO (DerivedTro.key):
|
||||
bleibt gleich, wenn der TRO in BricsCAD umbenannt wird."""
|
||||
tro = document.by_id(area.tro)
|
||||
return f"{tro.stable_key}.{area.entry}" if tro is not None else jam_key(area)
|
||||
|
||||
|
||||
def jam_override(area: JamArea, document: TroDocument,
|
||||
overrides: dict[str, tuple[str, int]] | None) -> tuple[str, int] | None:
|
||||
"""Korrektur eines Staubereichs: ueber den stabilen Schluessel, sonst ueber
|
||||
die aktuelle TRO-ID (Dateien vor 2026-10-27 bzw. ohne Umbenennung)."""
|
||||
if not overrides:
|
||||
return None
|
||||
for key in (jam_stable_key(area, document), jam_key(area)):
|
||||
if key in overrides:
|
||||
return overrides[key]
|
||||
return None
|
||||
|
||||
|
||||
def jam_label(nr: str, k: int) -> str:
|
||||
"""Kurzname fuer Zeichnung und Dialog: Jam0054_3."""
|
||||
return f"Jam{nr}_{k}"
|
||||
@@ -671,7 +692,8 @@ def load_jam_overrides(path: Path) -> dict[str, tuple[str, int]]:
|
||||
parser = configparser.ConfigParser(inline_comment_prefixes=(";", "#"),
|
||||
interpolation=None)
|
||||
parser.optionxform = str
|
||||
with path.open(encoding="utf-8") as fh:
|
||||
# utf-8-sig: von Hand (Editor, PowerShell) gespeichert oft mit BOM
|
||||
with path.open(encoding="utf-8-sig") as fh:
|
||||
parser.read_file(fh)
|
||||
result: dict[str, tuple[str, int]] = {}
|
||||
if parser.has_section("jam"):
|
||||
@@ -711,8 +733,8 @@ def jam_names(document: TroDocument, geordnet: list[TroBase], hw: HwSource,
|
||||
"""
|
||||
nummern = jam_numbers(document, geordnet, hw)
|
||||
for area in document.jam_areas_or_derived():
|
||||
if overrides and jam_key(area) in overrides:
|
||||
nummern[area.jam_id] = overrides[jam_key(area)]
|
||||
if (wert := jam_override(area, document, overrides)) is not None:
|
||||
nummern[area.jam_id] = wert
|
||||
return {jam_id: f'"DB_JamArea{nr}".stJam{nr}_{k}'
|
||||
for jam_id, (nr, k) in nummern.items()}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user