utils enthält jetzt generelle Routinen der verschiedenen Programme. create_example refactored. utils wird jetzt entsprechend überall importiert
This commit is contained in:
+58
-20
@@ -635,18 +635,17 @@ class TestDataGenerator:
|
||||
|
||||
return offset_map.get(insert_point, (0, 0)) # Default: left_top_corner
|
||||
|
||||
def _generate_ma_group(self, group, ma_defaults, symbol_width, symbol_height, spacing_factor, y_offsets_list, insert_point='left_top_corner'):
|
||||
def _generate_symbol_group(self, group, symbol_defaults, symbol_type='MA', spacing_factor=1.2, y_offsets_list=[0, -50, 50], insert_point='left_bottom_corner'):
|
||||
"""
|
||||
Generiert eine Gruppe von MA-Symbolen
|
||||
Generiert eine Gruppe von Symbolen (MA, BG, MB, POT, etc.)
|
||||
|
||||
Args:
|
||||
group: Dict mit Gruppen-Config (name, count, layout_type, base_x, base_y, spacing)
|
||||
ma_defaults: Dict mit MA-Default-Attributen
|
||||
symbol_width: Feste Breite des Symbols
|
||||
symbol_height: Feste Höhe des Symbols
|
||||
symbol_defaults: Dict mit Symbol-Default-Attributen (ma_defaults, bg_defaults, etc.)
|
||||
symbol_type: Typ des Symbols ('MA', 'BG', 'MB', 'POT') für BEZEICHNUNG
|
||||
spacing_factor: Spacing-Faktor zwischen Symbolen
|
||||
y_offsets_list: Liste von Y-Offsets für horizontal_offset Layout
|
||||
insert_point: Einfügepunkt des Blocks (z.B. "left_top_corner", "center")
|
||||
insert_point: Einfügepunkt des Blocks (z.B. "left_bottom_corner", "center")
|
||||
"""
|
||||
name = group['name']
|
||||
count = group['count']
|
||||
@@ -657,19 +656,33 @@ class TestDataGenerator:
|
||||
# Extrahiere IO-Pattern aus Name (z.B. "MA-1@@_top" -> "MA-1@@")
|
||||
io_pattern = name.split('_')[0]
|
||||
|
||||
# Hole Dimensionen aus defaults
|
||||
dimensions = symbol_defaults.get('dimensions', {})
|
||||
symbol_width = dimensions.get('width', 1210)
|
||||
symbol_height = dimensions.get('height', 381)
|
||||
|
||||
# Berechne Spacing
|
||||
if layout_type in ['horizontal', 'horizontal_offset']:
|
||||
actual_spacing = symbol_width * spacing_factor
|
||||
else:
|
||||
actual_spacing = 0
|
||||
|
||||
# Hole Attribute aus ma_defaults
|
||||
attributes = ma_defaults.get('attributes', {})
|
||||
layer = ma_defaults.get('layer', 'ILS_MOTOR')
|
||||
# Hole Attribute und Block-Info aus defaults
|
||||
attributes = symbol_defaults.get('attributes', {})
|
||||
layer = symbol_defaults.get('layer', 'ILS_MOTOR')
|
||||
block_name = symbol_defaults.get('block_name', 'io')
|
||||
|
||||
# Berechne Offset basierend auf Einfügepunkt
|
||||
offset_x, offset_y = self._calculate_insert_offset(insert_point, symbol_width, symbol_height)
|
||||
|
||||
# Bestimme BEZEICHNUNG basierend auf Symbol-Typ
|
||||
bezeichnung_prefix = {
|
||||
'MA': 'Motor',
|
||||
'BG': 'Eingang',
|
||||
'MB': 'Ausgang',
|
||||
'POT': 'Erdung'
|
||||
}.get(symbol_type, 'Symbol')
|
||||
|
||||
# Generiere Symbole basierend auf Layout-Typ
|
||||
for i in range(count):
|
||||
if layout_type == 'single':
|
||||
@@ -692,7 +705,7 @@ class TestDataGenerator:
|
||||
# DXF-Block wird an der linken unteren Ecke eingefügt
|
||||
# (da der io-Block bei (0,0) startet und nach oben geht)
|
||||
blockref = self.msp.add_blockref(
|
||||
'io',
|
||||
block_name,
|
||||
insert=(left_top_x, left_top_y - symbol_height),
|
||||
dxfattribs={'layer': layer}
|
||||
)
|
||||
@@ -700,7 +713,10 @@ class TestDataGenerator:
|
||||
# Setze Attribute (dynamisch IO und BEZEICHNUNG)
|
||||
attrib_values = attributes.copy()
|
||||
attrib_values['IO'] = io_pattern
|
||||
attrib_values['BEZEICHNUNG'] = f"Motor {io_pattern}"
|
||||
|
||||
# Setze BEZEICHNUNG nur wenn im Template vorhanden
|
||||
if 'BEZEICHNUNG' in attrib_values:
|
||||
attrib_values['BEZEICHNUNG'] = f"{bezeichnung_prefix} {io_pattern}"
|
||||
|
||||
blockref.add_auto_attribs(attrib_values)
|
||||
|
||||
@@ -724,26 +740,48 @@ class TestDataGenerator:
|
||||
scene_name: Name der Testszene in der Config
|
||||
"""
|
||||
scene = self.config['test_scenes'][scene_name]
|
||||
ma_defaults = self.config.get('ma_defaults', {})
|
||||
general = self.config.get('general', {})
|
||||
|
||||
# Hole Dimensions aus Config (feste Werte)
|
||||
dimensions = ma_defaults.get('dimensions', {})
|
||||
symbol_width = dimensions.get('width', 1210)
|
||||
symbol_height = dimensions.get('height', 381)
|
||||
|
||||
# Hole Layout-Einstellungen
|
||||
layout = general.get('layout', {})
|
||||
spacing_factor = layout.get('symbol_spacing_factor', 1.2)
|
||||
y_offsets_list = layout.get('horizontal_offset_y_offsets', [0, -50, 50])
|
||||
|
||||
# Hole Einfügepunkt aus Config (default: left_top_corner)
|
||||
# Hole Einfügepunkt aus Config (default: left_bottom_corner)
|
||||
ma_frame = general.get('ma_frame', {})
|
||||
insert_point = ma_frame.get('insert_point', 'left_top_corner')
|
||||
insert_point = ma_frame.get('insert_point', 'left_bottom_corner')
|
||||
|
||||
# Generiere MA-Gruppen aus Config
|
||||
ma_defaults = self.config.get('ma_defaults', {})
|
||||
for group in scene.get('ma_groups', []):
|
||||
self._generate_ma_group(group, ma_defaults, symbol_width, symbol_height, spacing_factor, y_offsets_list, insert_point)
|
||||
self._generate_symbol_group(group, ma_defaults, symbol_type='MA',
|
||||
spacing_factor=spacing_factor,
|
||||
y_offsets_list=y_offsets_list,
|
||||
insert_point=insert_point)
|
||||
|
||||
# Generiere BG-Gruppen aus Config (Eingänge)
|
||||
bg_defaults = self.config.get('bg_defaults', {})
|
||||
for group in scene.get('bg_groups', []):
|
||||
self._generate_symbol_group(group, bg_defaults, symbol_type='BG',
|
||||
spacing_factor=spacing_factor,
|
||||
y_offsets_list=y_offsets_list,
|
||||
insert_point=insert_point)
|
||||
|
||||
# Generiere MB-Gruppen aus Config (Ausgänge)
|
||||
mb_defaults = self.config.get('mb_defaults', {})
|
||||
for group in scene.get('mb_groups', []):
|
||||
self._generate_symbol_group(group, mb_defaults, symbol_type='MB',
|
||||
spacing_factor=spacing_factor,
|
||||
y_offsets_list=y_offsets_list,
|
||||
insert_point=insert_point)
|
||||
|
||||
# Generiere POT-Gruppen aus Config (Erdungspunkte)
|
||||
pot_defaults = self.config.get('pot_defaults', {})
|
||||
for group in scene.get('pot_groups', []):
|
||||
self._generate_symbol_group(group, pot_defaults, symbol_type='POT',
|
||||
spacing_factor=spacing_factor,
|
||||
y_offsets_list=y_offsets_list,
|
||||
insert_point=insert_point)
|
||||
|
||||
# Generiere Renamer-Rahmen aus Config
|
||||
for frame_config in scene.get('renaming_frames', []):
|
||||
|
||||
Reference in New Issue
Block a user