import os import subprocess import sys import argparse import time # Hilfsfunktion wie in plant2dxf.py def check_environment_var(env_str: str, fallback: str) -> str: out_path = os.environ.get(env_str) if out_path: return out_path print(f"[WARN] Umgebungsvariable {env_str} ist nicht gesetzt oder leer. Verwende '{fallback}'.") return fallback if __name__ == "__main__": # Argumentparser für Kommandozeilenoptionen parser = argparse.ArgumentParser(description="SVG/XML zu DXF Konverter") parser.add_argument('-i', '--input', type=str, help='Input-Verzeichnis mit SVG/XML-Dateien') parser.add_argument('-o', '--output', type=str, help='Output-Verzeichnis für DXF-Dateien') if len(sys.argv) == 2 and sys.argv[1] in ("-h", "--help"): parser.print_help() sys.exit(0) args = parser.parse_args() # Verzeichnisse über Umgebungsvariablen oder Fallback if args.input: INPUT_DIR = args.input print(f"Input-Verzeichnis: {INPUT_DIR} \n") else: INPUT_DIR = os.path.join(check_environment_var("PROJECT_DATA", "."), "svg") print(f"Kein Input-Verzeichnis angegeben, verwende Standard: {INPUT_DIR} \n") if args.output: OUTPUT_DIR = args.output print(f"Output-Verzeichnis: {OUTPUT_DIR} \n") else: OUTPUT_DIR = os.path.join(check_environment_var("PROJECT_WORK", "."), "converted_dxfs") print(f"Kein Output-Verzeichnis angegeben, verwende Standard: {OUTPUT_DIR} \n") INKSCAPE = "inkscape" # ggf. vollständiger Pfad angeben os.makedirs(OUTPUT_DIR, exist_ok=True) files = [f for f in os.listdir(INPUT_DIR) if f.lower().endswith((".svg", ".xml"))] for filename in files: input_path = os.path.join(INPUT_DIR, filename) output_path = os.path.join(OUTPUT_DIR, os.path.splitext(filename)[0] + ".dxf") print(f"Konvertiere: {input_path} → {output_path}") try: subprocess.run([ INKSCAPE, input_path, "--export-type=dxf", f"--export-filename={output_path}" ], check=True) except subprocess.CalledProcessError as e: print(f"[FEHLER] Inkscape-Absturz bei {filename}: {e}") time.sleep(0.5) # kleine Pause zur Entlastung von RAM/GTK