tro_annotate --read-tros: TRO-Handkorrekturen aus BricsCAD, Staubereiche vor dem TRO

- Marker tragen KEY (ID der ID-Datei) und SLOTS (Bauteil je Slot), die
  Zeichnung die Bauteiltabelle SPS_SKEL_PARTS (XRECORD) fuer "Im Plan
  waehlen" im Dialog TRO_EDIT (dxfmakros)
- --read-tros schreibt geaenderte, neue und geloeschte Marker als
  Abschnitte edit/edit_add nach cfg/tro_overrides.ini; tro_flow.apply_edits
  wendet nur diese Arten an (Bauteile mit Lage, exportfest)
- --emit-lisp schreibt dazu *TRO-SLOTS* und *TRO-SLOT-KINDS*
- model: Lagerlinien zaehlen je TRO (Katalog nur Vorgabe), Mubea-Speicher
  jetzt 20 Linien (Golden-Datei)
- Staubereich als stehendes graues Rechteck direkt vor seinem TRO-Marker
  (jam_abstand statt jam_versatz); Marker 150 mm, Text 120 mm

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-26 14:35:04 +01:00
parent 9ec1022fb1
commit 6c8c235287
12 changed files with 1441 additions and 125 deletions
+10
View File
@@ -52,6 +52,7 @@ __all__ = [
"render_new_entries",
"insert_entries",
"other_sections",
"id_problem",
]
SECTION = "tro"
@@ -133,6 +134,15 @@ def _parser() -> configparser.ConfigParser:
return parser
def id_problem(tro_id: str) -> str:
"""Warum `tro_id` keine gueltige TRO-ID ist ("" = gueltig)."""
if not _ID_PATTERN.match(tro_id):
return f"'{tro_id}' ist kein gueltiger SCL-Bezeichner"
if _RESERVED.match(tro_id):
return f"'{tro_id}' ist fuer Systemgrenzen reserviert"
return ""
def load_ids(path: Path) -> list[IdEntry]:
"""ID-Datei lesen. ValueError bei doppelter ID, falscher Lage oder ID."""
parser = _parser()