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