path objekte verwendet

This commit is contained in:
2025-07-30 16:57:29 +02:00
parent 97c81b466b
commit f14cbfd101
2 changed files with 42 additions and 26 deletions
+25 -14
View File
@@ -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 ===")