diff --git a/lib/dxf2lib.py b/lib/dxf2lib.py index f90549c..4927eaf 100644 --- a/lib/dxf2lib.py +++ b/lib/dxf2lib.py @@ -6,6 +6,7 @@ import sys import shutil import configparser from utils import check_environment_var, setup_logger +from pathlib import Path def get_bbox(entities): @@ -188,9 +189,9 @@ def create_block_library(input_dir, output_file, config, logger=None): if error_files: print(f"Warnung: {len(error_files)} Dateien konnten nicht verarbeitet werden.") - output_dir = os.path.dirname(output_file) - if not os.path.exists(output_dir): - os.makedirs(output_dir, exist_ok=True) + output_dir = output_file.parent + if not output_dir.exists(): + output_dir.mkdir(parents=True, exist_ok=True) doc.saveas(output_file) @@ -233,26 +234,30 @@ if __name__ == "__main__": sys.exit(1) # Verzeichnisse über Umgebungsvariablen oder Fallback - INPUT_DIR = check_environment_var("PROJECT_WORK", ".") - print(f"Verwende Input-Verzeichnis: {INPUT_DIR} \n") + if args.input: + INPUT_DIR = Path(args.input) + print(f"Verwende Input-Verzeichnis: {INPUT_DIR} \n") + else: + INPUT_DIR = check_environment_var("PROJECT_WORK") / "converted_dxfs" + print(f"Kein Input-Verzeichnis angegeben, verwende Standard: {INPUT_DIR} \n") - OUTPUT_FILE = os.path.join(check_environment_var("PROJECT_DATA", "."),"block_libaries", f"{args.name}.dxf") + OUTPUT_FILE = check_environment_var("PROJECT_DATA") / "block_libaries" / f"{args.name}.dxf" # Prüfe und erstelle log-Verzeichnis falls nötig - log_dir = check_environment_var("PROJECT_LOG", ".") - if not os.path.exists(log_dir): - os.makedirs(log_dir, exist_ok=True) + log_dir = check_environment_var("PROJECT_LOG") + if not log_dir.exists(): + log_dir.mkdir(parents=True, exist_ok=True) print(f"Log-Verzeichnis erstellt: {log_dir}") # Logger Setup - logger, log_file = setup_logger(log_dir, name='dxf2lib') + logger = setup_logger(log_dir, name='dxf2lib') logger.info("=== DXF2LIB Verarbeitung gestartet ===") logger.info(f"Input-Verzeichnis: {INPUT_DIR}") logger.info(f"Output-Datei: {OUTPUT_FILE}") # Lade Config-Datei config = configparser.ConfigParser() - config_path = os.path.join(check_environment_var("PROJECT_CFG", "."), "allgemein.cfg") + config_path = check_environment_var("PROJECT_CFG") / "allgemein.cfg" config.read(config_path, encoding="utf-8") logger.info(f"Config-Datei geladen: {config_path}") @@ -263,7 +268,7 @@ if __name__ == "__main__": if not args.keep: logger.info(f"Keep-Argument nicht gesetzt, lösche Input-Verzeichnis: {INPUT_DIR}") try: - if os.path.exists(INPUT_DIR): + if INPUT_DIR.exists(): shutil.rmtree(INPUT_DIR) logger.info(f"Verzeichnis '{INPUT_DIR}' wurde gelöscht.") except Exception as err: diff --git a/lib/svg2dxf.py b/lib/svg2dxf.py index 7df943b..12950d2 100644 --- a/lib/svg2dxf.py +++ b/lib/svg2dxf.py @@ -7,6 +7,7 @@ import ezdxf from svg.path import parse_path, Line, Arc, CubicBezier, QuadraticBezier, Close import xml.etree.ElementTree as ET import re +from pathlib import Path from utils import check_environment_var, setup_logger @@ -14,8 +15,16 @@ class SVGtoDXFConverter: def __init__(self, logger=None): # Standard DXF-Farben (AutoCAD Color Index) self.color_map = { - 'red': 1, 'yellow': 2, 'green': 3, 'cyan': 4, 'blue': 5, - 'magenta': 6, 'white': 7, 'gray': 8, 'grey': 8, 'black': 7 + 'red': 1, + 'yellow': 2, + 'green': 3, + 'cyan': 4, + 'blue': 5, + 'magenta': 6, + 'white': 7, + 'gray': 8, + 'grey': 8, + 'black': 7 } self.logger = logger @@ -187,13 +196,14 @@ class SVGtoDXFConverter: # Batch-Konvertierung für mehrere Dateien def batch_convert(svg_files: list, output_dir: str = '.', logger=None): """Konvertiert mehrere SVG-Dateien""" + output_dir = Path(output_dir) # Sicherstellen, dass es ein Path ist converter = SVGtoDXFConverter(logger=logger) for svg_file in svg_files: try: # Ausgabedateiname generieren - base_name = svg_file.rsplit('.', 1)[0] - dxf_file = f"{output_dir}/{base_name}.dxf" + base_name = Path(svg_file).stem + dxf_file = output_dir / f"{base_name}.dxf" converter.svg_to_dxf(svg_file, dxf_file) if logger: @@ -223,22 +233,23 @@ if __name__ == "__main__": # Verzeichnisse über Umgebungsvariablen oder Fallback if args.input: - INPUT_DIR = args.input + INPUT_DIR = Path(args.input) print(f"Input-Verzeichnis: {INPUT_DIR} \n") else: - INPUT_DIR = os.path.join(check_environment_var("PROJECT_DATA", "."), "svg") + INPUT_DIR = check_environment_var("PROJECT_DATA") / "svg" print(f"Kein Input-Verzeichnis angegeben, verwende Standard: {INPUT_DIR} \n") if args.output: - OUTPUT_DIR = args.output + OUTPUT_DIR = Path(args.output) print(f"Output-Verzeichnis: {OUTPUT_DIR} \n") else: - OUTPUT_DIR = os.path.join(check_environment_var("PROJECT_WORK", "."), "converted_dxfs") + OUTPUT_DIR = check_environment_var("PROJECT_WORK") / "converted_dxfs" print(f"Kein Output-Verzeichnis angegeben, verwende Standard: {OUTPUT_DIR} \n") - os.makedirs(OUTPUT_DIR, exist_ok=True) + OUTPUT_DIR.mkdir(parents=True, exist_ok=True) - files = [f for f in os.listdir(INPUT_DIR) if f.lower().endswith((".svg", ".xml"))] + files = [f for f in INPUT_DIR.iterdir() if f.suffix.lower() in (".svg", ".xml")] + files = [str(f) for f in files] # batch_convert erwartet str log_dir = check_environment_var("PROJECT_LOG") logger = setup_logger(log_dir, name='svg2dxf') @@ -250,8 +261,8 @@ if __name__ == "__main__": if args.inkscape: INKSCAPE = "inkscape" # ggf. vollständiger Pfad angeben 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") + input_path = INPUT_DIR / filename + output_path = OUTPUT_DIR / (Path(filename).stem + ".dxf") if logger: logger.info(f"Konvertiere: {input_path} → {output_path}") else: @@ -259,7 +270,7 @@ if __name__ == "__main__": try: subprocess.run([ INKSCAPE, - input_path, + str(input_path), "--export-type=dxf", f"--export-filename={output_path}" ], check=True) @@ -271,7 +282,7 @@ if __name__ == "__main__": time.sleep(0.5) # kleine Pause zur Entlastung von RAM/GTK else: - batch_convert(files, OUTPUT_DIR, logger=logger) + batch_convert(files, str(OUTPUT_DIR), logger=logger) logger.info("=== SVG2DXF Verarbeitung abgeschlossen ===")