[ADD] Testanlage test_system als Nachbau-Vorlage fuer sps_skel
tests/testdata/test_system.json aus sps_skel/data/test_system.dxf (dxf_anlage_export.py --projekt TestSystem): 9 Kreisel, 10 Separatoren, BTMT Beladung, SC Entladung. Treiber tests/test_test_system.lsp (TEST_TEST_SYSTEM, Menue Tests -> Testanlage test_system) nutzt dematic_arvato:bau-datei, in alltests.json aktiv (save dxf). [FIX] dxf_anlage_export.py: doppelte Kreisel-IDs (Kreisel einzeln gebaut, NUMMER beginnt mehrmals bei 1) bekommen die naechste freie Nummer, mit Hinweis + Test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -336,6 +336,27 @@ def einzel_eintrag(e):
|
||||
])
|
||||
|
||||
|
||||
def kreisel_ids_eindeutig(kreisel, projekt, hinweise):
|
||||
"""Doppelte Kreisel-IDs aufloesen. Die Nummer kommt aus NUMMER bzw. dem
|
||||
Blocknamen; in einer Zeichnung, in der Kreisel einzeln gebaut wurden,
|
||||
beginnt sie jedes Mal neu bei 1 (test_system: vier KREISEL_1_*). Der
|
||||
erste behaelt seine ID, jeder weitere bekommt die naechste freie Nummer
|
||||
oberhalb der hoechsten vergebenen. Die Reihenfolge ist die der Eingabe
|
||||
(Blockname, x, y) und damit stabil."""
|
||||
muster = re.compile(r"^Kreisel_%s_(\d+)$" % re.escape(projekt))
|
||||
nummern = [int(m.group(1)) for m in (muster.match(k[sch.F_ID]) for k in kreisel) if m]
|
||||
naechste = max(nummern, default=0) + 1
|
||||
vergeben = set()
|
||||
for k in kreisel:
|
||||
if k[sch.F_ID] in vergeben:
|
||||
alt = k[sch.F_ID]
|
||||
k[sch.F_ID] = "Kreisel_%s_%02d" % (projekt, naechste)
|
||||
naechste += 1
|
||||
hinweise.append("%s doppelt - Kreisel bei %.2f/%.2f umbenannt in %s"
|
||||
% (alt, k[sch.F_X], k[sch.F_Y], k[sch.F_ID]))
|
||||
vergeben.add(k[sch.F_ID])
|
||||
|
||||
|
||||
def baue_eintraege(inserts, block_inhalt, projekt):
|
||||
"""Reihenfolge wie mubea.json: Kreisel, VF, GF, Einzelbloecke - die VF
|
||||
vor den GF, weil gf-init-bibliothek globale Elementmasse umsetzt."""
|
||||
@@ -344,6 +365,7 @@ def baue_eintraege(inserts, block_inhalt, projekt):
|
||||
name = e["name"] or ""
|
||||
if name.startswith("KREISEL_"):
|
||||
kreisel.append(kreisel_eintrag(e, block_inhalt, projekt))
|
||||
kreisel_ids_eindeutig(kreisel, projekt, hinweise)
|
||||
geo = [kreisel_geo(k) for k in kreisel]
|
||||
for e in inserts:
|
||||
name = e["name"] or ""
|
||||
|
||||
Reference in New Issue
Block a user