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@@",
|
"name": "MA-1@@",
|
||||||
"kennzeichnung": "A01+UH00",
|
"kennzeichnung": "A01+UH00",
|
||||||
"layer_name": "ILS_MOTOR",
|
"layer_name": "ILS_MOTOR",
|
||||||
"direction": "TOP_BOTTOM/LEFT_RIGHT",
|
"direction": "LEFT_RIGHT",
|
||||||
"x": 450,
|
"x": 450,
|
||||||
"y": 150,
|
"y": 150,
|
||||||
"width": 1400,
|
"width": 1400,
|
||||||
|
|||||||
+64
-50
@@ -23,15 +23,14 @@ PROJECT_CFG = os.getenv('PROJECT_CFG', os.path.join(PROJECT, 'cfg'))
|
|||||||
class TestDataGenerator:
|
class TestDataGenerator:
|
||||||
"""Generiert Test-DXF-Dateien für verschiedene Szenarien"""
|
"""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.filename = filename
|
||||||
self.test_type = test_type
|
|
||||||
self.scene_name = scene_name
|
self.scene_name = scene_name
|
||||||
self.doc = None
|
self.doc = None
|
||||||
self.msp = None
|
self.msp = None
|
||||||
self.config = None
|
self.config = None
|
||||||
|
|
||||||
# Lade Config-Datei falls angegeben
|
# Lade Config-Datei (muss immer angegeben werden)
|
||||||
if config_file:
|
if config_file:
|
||||||
self.load_config(config_file)
|
self.load_config(config_file)
|
||||||
|
|
||||||
@@ -51,10 +50,10 @@ class TestDataGenerator:
|
|||||||
self.config = json.load(f)
|
self.config = json.load(f)
|
||||||
print(f"Config geladen: {config_path}")
|
print(f"Config geladen: {config_path}")
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
print(f"Warnung: Config-Datei nicht gefunden: {config_path}")
|
print(f"FEHLER: Config-Datei nicht gefunden: {config_path}")
|
||||||
self.config = None
|
self.config = None
|
||||||
except json.JSONDecodeError as e:
|
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
|
self.config = None
|
||||||
|
|
||||||
def create_document(self):
|
def create_document(self):
|
||||||
@@ -624,9 +623,18 @@ class TestDataGenerator:
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
# Erstelle Block-Referenz
|
# 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(
|
blockref = self.msp.add_blockref(
|
||||||
'io',
|
'io',
|
||||||
insert=(x, y),
|
insert=(block_insert_x, block_insert_y),
|
||||||
dxfattribs={'layer': layer}
|
dxfattribs={'layer': layer}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -703,11 +711,17 @@ class TestDataGenerator:
|
|||||||
top_right_y = 1000
|
top_right_y = 1000
|
||||||
top_right_x_start = 1500
|
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):
|
for i in range(3):
|
||||||
x = top_right_x_start + i * spacing
|
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(
|
blockref = self.msp.add_blockref(
|
||||||
'io',
|
'io',
|
||||||
insert=(x, top_right_y),
|
insert=(block_insert_x, block_insert_y),
|
||||||
dxfattribs={'layer': 'ILS_MOTOR'}
|
dxfattribs={'layer': 'ILS_MOTOR'}
|
||||||
)
|
)
|
||||||
# Erzeuge Attribut-Instanzen aus ATTDEFs mit Werten
|
# Erzeuge Attribut-Instanzen aus ATTDEFs mit Werten
|
||||||
@@ -731,9 +745,14 @@ class TestDataGenerator:
|
|||||||
# Links unten: 1x MA-1@@
|
# Links unten: 1x MA-1@@
|
||||||
left_bottom_x = 500
|
left_bottom_x = 500
|
||||||
left_bottom_y = 200
|
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(
|
blockref = self.msp.add_blockref(
|
||||||
'io',
|
'io',
|
||||||
insert=(left_bottom_x, left_bottom_y),
|
insert=(block_insert_x, block_insert_y),
|
||||||
dxfattribs={'layer': 'ILS_MOTOR'}
|
dxfattribs={'layer': 'ILS_MOTOR'}
|
||||||
)
|
)
|
||||||
blockref.add_auto_attribs({
|
blockref.add_auto_attribs({
|
||||||
@@ -757,12 +776,18 @@ class TestDataGenerator:
|
|||||||
bottom_right_x_start = top_right_x_start
|
bottom_right_x_start = top_right_x_start
|
||||||
y_offsets = [0, -50, 50] # Leichte vertikale Versetzung (angepasst an Symbol-Höhe)
|
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):
|
for i in range(3):
|
||||||
x = bottom_right_x_start + i * spacing
|
x = bottom_right_x_start + i * spacing
|
||||||
y = bottom_right_y_start + y_offsets[i]
|
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(
|
blockref = self.msp.add_blockref(
|
||||||
'io',
|
'io',
|
||||||
insert=(x, y),
|
insert=(block_insert_x, block_insert_y),
|
||||||
dxfattribs={'layer': 'ILS_MOTOR'}
|
dxfattribs={'layer': 'ILS_MOTOR'}
|
||||||
)
|
)
|
||||||
blockref.add_auto_attribs({
|
blockref.add_auto_attribs({
|
||||||
@@ -833,32 +858,23 @@ class TestDataGenerator:
|
|||||||
"""Generiert die Testdaten basierend auf dem Test-Typ"""
|
"""Generiert die Testdaten basierend auf dem Test-Typ"""
|
||||||
self.create_document()
|
self.create_document()
|
||||||
|
|
||||||
if self.test_type == 'nummerierung':
|
# Prüfe ob Scene in Config existiert
|
||||||
# Bestimme Scene-Name: entweder explizit angegeben oder automatisch aus Filename
|
if not self.config:
|
||||||
scene_name = self.scene_name
|
print("FEHLER: Keine Config-Datei geladen")
|
||||||
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}")
|
|
||||||
return False
|
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
|
return True
|
||||||
|
|
||||||
|
|
||||||
@@ -869,18 +885,17 @@ def main():
|
|||||||
)
|
)
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--filename',
|
'--scene',
|
||||||
type=str,
|
type=str,
|
||||||
required=True,
|
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(
|
parser.add_argument(
|
||||||
'--type',
|
'--filename',
|
||||||
type=str,
|
type=str,
|
||||||
required=True,
|
default=None,
|
||||||
choices=['nummerierung', 'sps', 'todraw', 'erdung', 'translation', 'hoehe'],
|
help='Name der zu erzeugenden Testdatei (z.B. Nummerierung1.dxf). Falls nicht angegeben, wird scene + .dxf verwendet.'
|
||||||
help='Typ des Tests'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
@@ -897,21 +912,20 @@ def main():
|
|||||||
help='JSON-Konfigurationsdatei (Standard: create_tests.json)'
|
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()
|
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
|
# Stelle sicher, dass Dateiname .dxf Endung hat
|
||||||
if not args.filename.endswith('.dxf'):
|
if not filename.endswith('.dxf'):
|
||||||
args.filename += '.dxf'
|
filename += '.dxf'
|
||||||
|
|
||||||
# Generiere Testdaten
|
# 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():
|
if generator.generate():
|
||||||
generator.save(args.output_dir)
|
generator.save(args.output_dir)
|
||||||
|
|||||||
Reference in New Issue
Block a user