diff --git a/lib/dxf2lib.py b/lib/dxf2lib.py index 37d91fc..f72b2c5 100644 --- a/lib/dxf2lib.py +++ b/lib/dxf2lib.py @@ -43,7 +43,7 @@ if __name__ == "__main__": # Argumentparser für Kommandozeilenoptionen parser = argparse.ArgumentParser(description="SVG/XML zu DXF Konverter") parser.add_argument('-i', '--input', type=str, help='Input-Verzeichnis mit SVG/XML-Dateien') - parser.add_argument('-n', '--name', required=True, type=str, help='Name der zu erzeugenden Bibliothek') + parser.add_argument('-n', '--name', required=False, type=str, help='Name der zu erzeugenden Bibliothek (optional, wird sonst abgefragt)') parser.add_argument('-k', '--keep', action="store_true", help='Behalte converted_dxf Ordner. Sonst Löschen nach erfolgreicher Bibliothekserstellung') if len(sys.argv) == 2 and sys.argv[1] in ("-h", "--help"): @@ -52,6 +52,12 @@ if __name__ == "__main__": args = parser.parse_args() + if not args.name: + args.name = input("Bitte Namen der zu erzeugenden Bibliothek eingeben: ").strip() + if not args.name: + print("Fehler: Kein Name angegeben. Beende.") + sys.exit(1) + # Verzeichnisse über Umgebungsvariablen oder Fallback if args.input: INPUT_DIR = args.input @@ -106,8 +112,20 @@ if __name__ == "__main__": # Platzierung in Reihen und Spalten msp.add_blockref(name, insert=(x_offset, y_offset)) # Text mit Blocknamen über dem Block - text_y = y_offset + 150 # 150 Einheiten über dem Block - msp.add_text(name, dxfattribs={'height': 20, 'insert': (x_offset-150, text_y)}) + text_y = y_offset + 175 # 175 Einheiten über dem Block + max_len = 9 + text_height = 20 + line_spacing = 22 # Abstand zwischen den zwei Textzeilen + + if len(name) > max_len: + first_line = name[:max_len] + second_line = name[max_len:] + # obere Zeile + msp.add_text(first_line, dxfattribs={'height': text_height, 'insert': (x_offset - 150, text_y)}) + # untere Zeile, etwas niedriger (y kleiner) + msp.add_text(second_line, dxfattribs={'height': text_height, 'insert': (x_offset - 150, text_y - line_spacing)}) + else: + msp.add_text(name, dxfattribs={'height': text_height, 'insert': (x_offset - 150, text_y)}) blocks_in_row += 1 x_offset += 350 # Abstand zwischen Blöcken in einer Reihe if blocks_in_row == 20: @@ -116,6 +134,11 @@ if __name__ == "__main__": y_offset -= 500 # Neue Zeile, nach unten versetzt print(f"Bibliotheks-DXF gespeichert: {OUTPUT_FILE} \n") + + output_dir = os.path.dirname(OUTPUT_FILE) + if not os.path.exists(output_dir): + os.makedirs(output_dir, exist_ok=True) + doc.saveas(OUTPUT_FILE) if not args.keep: diff --git a/lib/svg2dxf.py b/lib/svg2dxf.py index b6cf729..d0a95a3 100644 --- a/lib/svg2dxf.py +++ b/lib/svg2dxf.py @@ -2,7 +2,7 @@ import os import subprocess import sys import argparse - +import time # Hilfsfunktion wie in plant2dxf.py def check_environment_var(env_str: str, fallback: str) -> str: @@ -44,16 +44,20 @@ if __name__ == "__main__": os.makedirs(OUTPUT_DIR, exist_ok=True) - for filename in os.listdir(INPUT_DIR): - if filename.lower().endswith((".svg", ".xml")): - in_path = os.path.join(INPUT_DIR, filename) - name_wo_ext = os.path.splitext(filename)[0] - out_path = os.path.join(OUTPUT_DIR, name_wo_ext + ".dxf") + files = [f for f in os.listdir(INPUT_DIR) if f.lower().endswith((".svg", ".xml"))] - print(f"Konvertiere: {filename} → {out_path}") + 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") + + print(f"Konvertiere: {input_path} → {output_path}") + try: subprocess.run([ INKSCAPE, - in_path, + input_path, "--export-type=dxf", - f"--export-filename={out_path}" + f"--export-filename={output_path}" ], check=True) + except subprocess.CalledProcessError as e: + print(f"[FEHLER] Inkscape-Absturz bei {filename}: {e}") + time.sleep(0.5) # kleine Pause zur Entlastung von RAM/GTK