aus Argument test-type rausgeworfen. Es genüügt die Angabe der Szene aus der .json Config, um eine Datei zu erzeugen
This commit is contained in:
@@ -48,7 +48,7 @@
|
||||
"name": "MA-1@@",
|
||||
"kennzeichnung": "A01+UH00",
|
||||
"layer_name": "ILS_MOTOR",
|
||||
"direction": "TOP_BOTTOM/LEFT_RIGHT",
|
||||
"direction": "LEFT_RIGHT",
|
||||
"x": 450,
|
||||
"y": 150,
|
||||
"width": 1400,
|
||||
|
||||
+64
-50
@@ -23,15 +23,14 @@ PROJECT_CFG = os.getenv('PROJECT_CFG', os.path.join(PROJECT, 'cfg'))
|
||||
class TestDataGenerator:
|
||||
"""Generiert Test-DXF-Dateien für verschiedene Szenarien"""
|
||||
|
||||
def __init__(self, filename, test_type, config_file=None, scene_name=None):
|
||||
def __init__(self, filename, scene_name, config_file=None):
|
||||
self.filename = filename
|
||||
self.test_type = test_type
|
||||
self.scene_name = scene_name
|
||||
self.doc = None
|
||||
self.msp = None
|
||||
self.config = None
|
||||
|
||||
# Lade Config-Datei falls angegeben
|
||||
# Lade Config-Datei (muss immer angegeben werden)
|
||||
if config_file:
|
||||
self.load_config(config_file)
|
||||
|
||||
@@ -51,10 +50,10 @@ class TestDataGenerator:
|
||||
self.config = json.load(f)
|
||||
print(f"Config geladen: {config_path}")
|
||||
except FileNotFoundError:
|
||||
print(f"Warnung: Config-Datei nicht gefunden: {config_path}")
|
||||
print(f"FEHLER: Config-Datei nicht gefunden: {config_path}")
|
||||
self.config = None
|
||||
except json.JSONDecodeError as e:
|
||||
print(f"Fehler beim Parsen der Config-Datei: {e}")
|
||||
print(f"FEHLER beim Parsen der Config-Datei: {e}")
|
||||
self.config = None
|
||||
|
||||
def create_document(self):
|
||||
@@ -624,9 +623,18 @@ class TestDataGenerator:
|
||||
continue
|
||||
|
||||
# Erstelle Block-Referenz
|
||||
# Der Insert-Punkt soll an der oberen linken Ecke des TEXT-D liegen
|
||||
# TEXT-D ist bei (772.87, 110.44) relativ zum Block, Höhe 63.75
|
||||
# Die obere linke Ecke von TEXT-D ist bei (772.87, 110.44 + 63.75) = (772.87, 174.19) relativ zum Block
|
||||
# Daher muss der Block um diese Werte verschoben werden
|
||||
text_d_x_offset = 772.87
|
||||
text_d_y_offset = 110.44 + 63.75 # Basis + Höhe = obere linke Ecke
|
||||
block_insert_x = x - text_d_x_offset
|
||||
block_insert_y = y - text_d_y_offset
|
||||
|
||||
blockref = self.msp.add_blockref(
|
||||
'io',
|
||||
insert=(x, y),
|
||||
insert=(block_insert_x, block_insert_y),
|
||||
dxfattribs={'layer': layer}
|
||||
)
|
||||
|
||||
@@ -703,11 +711,17 @@ class TestDataGenerator:
|
||||
top_right_y = 1000
|
||||
top_right_x_start = 1500
|
||||
|
||||
# Der Insert-Punkt soll an der oberen linken Ecke des TEXT-D liegen
|
||||
text_d_x_offset = 772.87
|
||||
text_d_y_offset = 110.44 + 63.75 # Basis + Höhe = obere linke Ecke
|
||||
|
||||
for i in range(3):
|
||||
x = top_right_x_start + i * spacing
|
||||
block_insert_x = x - text_d_x_offset
|
||||
block_insert_y = top_right_y - text_d_y_offset
|
||||
blockref = self.msp.add_blockref(
|
||||
'io',
|
||||
insert=(x, top_right_y),
|
||||
insert=(block_insert_x, block_insert_y),
|
||||
dxfattribs={'layer': 'ILS_MOTOR'}
|
||||
)
|
||||
# Erzeuge Attribut-Instanzen aus ATTDEFs mit Werten
|
||||
@@ -731,9 +745,14 @@ class TestDataGenerator:
|
||||
# Links unten: 1x MA-1@@
|
||||
left_bottom_x = 500
|
||||
left_bottom_y = 200
|
||||
# Der Insert-Punkt soll an der oberen linken Ecke des TEXT-D liegen
|
||||
text_d_x_offset = 772.87
|
||||
text_d_y_offset = 110.44 + 63.75 # Basis + Höhe = obere linke Ecke
|
||||
block_insert_x = left_bottom_x - text_d_x_offset
|
||||
block_insert_y = left_bottom_y - text_d_y_offset
|
||||
blockref = self.msp.add_blockref(
|
||||
'io',
|
||||
insert=(left_bottom_x, left_bottom_y),
|
||||
insert=(block_insert_x, block_insert_y),
|
||||
dxfattribs={'layer': 'ILS_MOTOR'}
|
||||
)
|
||||
blockref.add_auto_attribs({
|
||||
@@ -757,12 +776,18 @@ class TestDataGenerator:
|
||||
bottom_right_x_start = top_right_x_start
|
||||
y_offsets = [0, -50, 50] # Leichte vertikale Versetzung (angepasst an Symbol-Höhe)
|
||||
|
||||
# Der Insert-Punkt soll an der oberen linken Ecke des TEXT-D liegen
|
||||
text_d_x_offset = 772.87
|
||||
text_d_y_offset = 110.44 + 63.75 # Basis + Höhe = obere linke Ecke
|
||||
|
||||
for i in range(3):
|
||||
x = bottom_right_x_start + i * spacing
|
||||
y = bottom_right_y_start + y_offsets[i]
|
||||
block_insert_x = x - text_d_x_offset
|
||||
block_insert_y = y - text_d_y_offset
|
||||
blockref = self.msp.add_blockref(
|
||||
'io',
|
||||
insert=(x, y),
|
||||
insert=(block_insert_x, block_insert_y),
|
||||
dxfattribs={'layer': 'ILS_MOTOR'}
|
||||
)
|
||||
blockref.add_auto_attribs({
|
||||
@@ -833,32 +858,23 @@ class TestDataGenerator:
|
||||
"""Generiert die Testdaten basierend auf dem Test-Typ"""
|
||||
self.create_document()
|
||||
|
||||
if self.test_type == 'nummerierung':
|
||||
# Bestimme Scene-Name: entweder explizit angegeben oder automatisch aus Filename
|
||||
scene_name = self.scene_name
|
||||
if not scene_name:
|
||||
# Versuche Scene-Name aus Filename zu extrahieren (z.B. "Nummerierung2.dxf" -> "Nummerierung2")
|
||||
import re
|
||||
match = re.match(r'(Nummerierung\d+)', self.filename, re.IGNORECASE)
|
||||
if match:
|
||||
scene_name = match.group(1)
|
||||
else:
|
||||
scene_name = 'Nummerierung1' # Default
|
||||
self.generate_nummerierung(scene_name)
|
||||
elif self.test_type == 'sps':
|
||||
print("SPS-Testdaten noch nicht implementiert")
|
||||
elif self.test_type == 'todraw':
|
||||
print("ToDraw-Testdaten noch nicht implementiert")
|
||||
elif self.test_type == 'erdung':
|
||||
print("Erdung-Testdaten noch nicht implementiert")
|
||||
elif self.test_type == 'translation':
|
||||
print("Translation-Testdaten noch nicht implementiert")
|
||||
elif self.test_type == 'hoehe':
|
||||
print("Höhe-Testdaten noch nicht implementiert")
|
||||
else:
|
||||
print(f"Unbekannter Test-Typ: {self.test_type}")
|
||||
# Prüfe ob Scene in Config existiert
|
||||
if not self.config:
|
||||
print("FEHLER: Keine Config-Datei geladen")
|
||||
return False
|
||||
|
||||
|
||||
if 'test_scenes' not in self.config:
|
||||
print("FEHLER: Config enthält keinen 'test_scenes' Abschnitt")
|
||||
return False
|
||||
|
||||
if self.scene_name not in self.config['test_scenes']:
|
||||
print(f"FEHLER: Scene '{self.scene_name}' nicht in Config gefunden")
|
||||
print(f"Verfügbare Scenes: {', '.join(self.config['test_scenes'].keys())}")
|
||||
return False
|
||||
|
||||
# Generiere nur Nummerierung (andere Test-Typen werden später unterstützt)
|
||||
self.generate_nummerierung(self.scene_name)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
@@ -869,18 +885,17 @@ def main():
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
'--filename',
|
||||
'--scene',
|
||||
type=str,
|
||||
required=True,
|
||||
help='Name der zu erzeugenden Testdatei (z.B. Nummerierung1.dxf)'
|
||||
help='Name der Testszene (z.B. Nummerierung1, Nummerierung2). Muss in der Config existieren.'
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
'--type',
|
||||
'--filename',
|
||||
type=str,
|
||||
required=True,
|
||||
choices=['nummerierung', 'sps', 'todraw', 'erdung', 'translation', 'hoehe'],
|
||||
help='Typ des Tests'
|
||||
default=None,
|
||||
help='Name der zu erzeugenden Testdatei (z.B. Nummerierung1.dxf). Falls nicht angegeben, wird scene + .dxf verwendet.'
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
@@ -897,21 +912,20 @@ def main():
|
||||
help='JSON-Konfigurationsdatei (Standard: create_tests.json)'
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
'--scene',
|
||||
type=str,
|
||||
default=None,
|
||||
help='Name der Testszene (z.B. Nummerierung1, Nummerierung2). Falls nicht angegeben, wird aus Filename extrahiert.'
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# Bestimme Filename: entweder angegeben oder aus scene ableiten
|
||||
if args.filename:
|
||||
filename = args.filename
|
||||
else:
|
||||
filename = args.scene + '.dxf'
|
||||
|
||||
# Stelle sicher, dass Dateiname .dxf Endung hat
|
||||
if not args.filename.endswith('.dxf'):
|
||||
args.filename += '.dxf'
|
||||
if not filename.endswith('.dxf'):
|
||||
filename += '.dxf'
|
||||
|
||||
# Generiere Testdaten
|
||||
generator = TestDataGenerator(args.filename, args.type, config_file=args.config, scene_name=args.scene)
|
||||
generator = TestDataGenerator(filename, args.scene, config_file=args.config)
|
||||
|
||||
if generator.generate():
|
||||
generator.save(args.output_dir)
|
||||
|
||||
Reference in New Issue
Block a user