create_pot_block Methode implementiert.

This commit is contained in:
2026-02-04 16:38:57 +01:00
parent 0f16f1cfba
commit 3ef1fe1f19
+93 -14
View File
@@ -286,6 +286,82 @@ class TestDataGenerator:
return io_block
def create_pot_block(self):
"""
Erstellt den ILS_POT-Erdung Block mit allen Attribut-Definitionen
Basiert auf dem ILS_POT-Erdung Block aus Nummerierung_IO.dxf
Returns:
Block-Definition
"""
block_name = 'ILS_POT-Erdung'
if block_name in self.doc.blocks:
return self.doc.blocks[block_name]
# Erstelle neuen Block
pot_block = self.doc.blocks.new(block_name)
# Hole Attribut-Definitionen aus pot_defaults (falls vorhanden)
if self.config and 'pot_defaults' in self.config:
pot_defaults = self.config['pot_defaults']
attrib_configs = pot_defaults.get('attrib_defs', [])
else:
# Fallback: Hard-coded Attribute basierend auf Analyse von Nummerierung_IO.dxf
attrib_configs = [
{
'tag': 'REALE_POSITION',
'insert': (0.0, 13.0, 0.0),
'height': 100.0,
'default': 'x',
'layer': 'ILS_POT-Erdung',
'invisible': False
},
{
'tag': 'NAME',
'insert': (316.17, -179.49, 0.0),
'height': 128.0,
'default': 'POT-1@@@',
'layer': 'ILS_POT-Erdung',
'invisible': False
},
{
'tag': 'KENNZEICHNUNG',
'insert': (0.0, -377.38, 0.0),
'height': 128.0,
'default': '=A01+UH00-X01',
'layer': 'ILS_POT-Erdung',
'invisible': True
}
]
# Füge alle Attribut-Definitionen hinzu
for attrib_def in attrib_configs:
# Berechne flags: Bit 0 = invisible
flags = 1 if attrib_def['invisible'] else 0
# Konvertiere insert-Liste zu Tupel falls nötig
insert_pos = attrib_def['insert']
if isinstance(insert_pos, list):
insert_pos = tuple(insert_pos)
pot_block.add_attdef(
tag=attrib_def['tag'],
insert=insert_pos,
text=attrib_def['default'],
dxfattribs={
'height': attrib_def['height'],
'layer': attrib_def['layer'],
'color': 256, # BYLAYER
'style': 'textstyle3',
'rotation': 0,
'halign': 0,
'valign': 0,
'flags': flags
}
)
return pot_block
def save(self, output_dir=None):
"""Speichert das DXF-Dokument"""
if output_dir is None:
@@ -611,17 +687,12 @@ class TestDataGenerator:
if self.config and 'test_scenes' in self.config and scene_name in self.config['test_scenes']:
scene = self.config['test_scenes'][scene_name]
if 'pot_groups' in scene and scene['pot_groups']:
print("POT-Symbole erkannt, lade ILS_POT-Erdung Block...")
# Lade POT-Block aus Referenzdatei
pot_reference_file = os.path.join(PROJECT, 'testdata', 'Nummerierung_IO.dxf')
if os.path.exists(pot_reference_file):
pot_block = self.load_block_from_file(pot_reference_file, 'ILS_POT-Erdung')
if pot_block:
print(f"POT-Block 'ILS_POT-Erdung' erfolgreich geladen")
else:
print(f"WARNUNG: POT-Block konnte nicht aus {pot_reference_file} geladen werden")
print("POT-Symbole erkannt, erstelle ILS_POT-Erdung Block...")
pot_block = self.create_pot_block()
if pot_block:
print(f"POT-Block 'ILS_POT-Erdung' erfolgreich erstellt")
else:
print(f"WARNUNG: Referenzdatei {pot_reference_file} nicht gefunden")
print(f"WARNUNG: POT-Block konnte nicht erstellt werden")
# Wenn Config geladen ist, verwende sie, ansonsten Hard-coded Defaults
if self.config and 'test_scenes' in self.config and scene_name in self.config['test_scenes']:
@@ -680,9 +751,12 @@ class TestDataGenerator:
symbol_width = dimensions.get('width', 1210)
symbol_height = dimensions.get('height', 381)
# Berechne Spacing
# Berechne Spacing: Verwende group['spacing'] falls angegeben, sonst symbol_width * spacing_factor
if layout_type in ['horizontal', 'horizontal_offset']:
actual_spacing = symbol_width * spacing_factor
if 'spacing' in group and group['spacing'] > 0:
actual_spacing = group['spacing']
else:
actual_spacing = symbol_width * spacing_factor
else:
actual_spacing = 0
@@ -729,9 +803,14 @@ class TestDataGenerator:
dxfattribs={'layer': layer}
)
# Setze Attribute (dynamisch IO und BEZEICHNUNG)
# Setze Attribute (dynamisch IO/NAME und BEZEICHNUNG)
attrib_values = attributes.copy()
attrib_values['IO'] = io_pattern
# Für POT-Symbole: Setze NAME statt IO
if symbol_type == 'POT':
attrib_values['NAME'] = io_pattern
else:
attrib_values['IO'] = io_pattern
# Setze BEZEICHNUNG nur wenn im Template vorhanden
if 'BEZEICHNUNG' in attrib_values: