path objekte verwendet
This commit is contained in:
+17
-12
@@ -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
@@ -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 ===")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user