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 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:
+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 ===")