create_pot_block Methode implementiert.
This commit is contained in:
+93
-14
@@ -286,6 +286,82 @@ class TestDataGenerator:
|
|||||||
|
|
||||||
return io_block
|
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):
|
def save(self, output_dir=None):
|
||||||
"""Speichert das DXF-Dokument"""
|
"""Speichert das DXF-Dokument"""
|
||||||
if output_dir is None:
|
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']:
|
if self.config and 'test_scenes' in self.config and scene_name in self.config['test_scenes']:
|
||||||
scene = self.config['test_scenes'][scene_name]
|
scene = self.config['test_scenes'][scene_name]
|
||||||
if 'pot_groups' in scene and scene['pot_groups']:
|
if 'pot_groups' in scene and scene['pot_groups']:
|
||||||
print("POT-Symbole erkannt, lade ILS_POT-Erdung Block...")
|
print("POT-Symbole erkannt, erstelle ILS_POT-Erdung Block...")
|
||||||
# Lade POT-Block aus Referenzdatei
|
pot_block = self.create_pot_block()
|
||||||
pot_reference_file = os.path.join(PROJECT, 'testdata', 'Nummerierung_IO.dxf')
|
if pot_block:
|
||||||
if os.path.exists(pot_reference_file):
|
print(f"POT-Block 'ILS_POT-Erdung' erfolgreich erstellt")
|
||||||
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")
|
|
||||||
else:
|
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
|
# 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']:
|
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_width = dimensions.get('width', 1210)
|
||||||
symbol_height = dimensions.get('height', 381)
|
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']:
|
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:
|
else:
|
||||||
actual_spacing = 0
|
actual_spacing = 0
|
||||||
|
|
||||||
@@ -729,9 +803,14 @@ class TestDataGenerator:
|
|||||||
dxfattribs={'layer': layer}
|
dxfattribs={'layer': layer}
|
||||||
)
|
)
|
||||||
|
|
||||||
# Setze Attribute (dynamisch IO und BEZEICHNUNG)
|
# Setze Attribute (dynamisch IO/NAME und BEZEICHNUNG)
|
||||||
attrib_values = attributes.copy()
|
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
|
# Setze BEZEICHNUNG nur wenn im Template vorhanden
|
||||||
if 'BEZEICHNUNG' in attrib_values:
|
if 'BEZEICHNUNG' in attrib_values:
|
||||||
|
|||||||
Reference in New Issue
Block a user