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
+19 -4
View File
@@ -72,10 +72,25 @@ def test_staubereiche_als_block_mit_name_und_schluessel():
t2 = jams["TRO02"]
assert (t2["CONVEYOR"], t2["NUMBER"], t2["ENTRY"], t2["AREA"], t2["AUTO"]) == (
"0042", "2", "1", "J0102", "0042_2")
# vor dem Separator, Richtung Vorgaenger TRO01 (gegen den Fluss)
assert t2["pos"] == (5000 - round(tro_annotate.JAM_VERSATZ), 0)
# TRO01 hat nur eine Station als Vorgaenger: am Separator
assert jams["TRO01"]["pos"] == (0, 0)
# direkt vor dem Marker, Richtung Vorgaenger TRO01 (gegen den Fluss):
# Markerradius + Luft + halbe Rechteckbreite
abstand = (tro_annotate.DEFAULT_MARKER + tro_annotate.JAM_ABSTAND
+ 200.0 * tro_annotate.JAM_HALB_BREITE)
assert t2["pos"] == (5000 - round(abstand), 0)
# TRO01 hat nur eine Station als Vorgaenger: gegen die Richtung zum Nachfolger
assert jams["TRO01"]["pos"] == (-round(abstand), 0)
def test_staubereich_ist_stehendes_graues_rechteck():
doc, _, _ = _zeichnen()
blk = doc.blocks.get(tro_annotate.JAM_BLOCK)
rahmen = next(iter(blk.query("LWPOLYLINE")))
xs = [p[0] for p in rahmen.get_points()]
ys = [p[1] for p in rahmen.get_points()]
assert max(ys) - min(ys) > 3 * (max(xs) - min(xs))
assert rahmen.dxf.color == 8 and len(blk.query("HATCH")) == 1
name = next(a for a in blk.query("ATTDEF") if a.dxf.tag == "NAME")
assert name.dxf.rotation == 90.0
def test_korrektur_wird_gezeichnet():