From 91fffadc1f400d87a3b3ca21109b976a5cd57589 Mon Sep 17 00:00:00 2001 From: lertlmaier Date: Tue, 29 Jul 2025 15:29:36 +0200 Subject: [PATCH] =?UTF-8?q?Erweiterung=20der=20Kommandozeilenargumente=20i?= =?UTF-8?q?n=20`dxf2lib.py`,=20um=20den=20Bibliotheksnamen=20optional=20zu?= =?UTF-8?q?=20machen=20und=20Eingabeaufforderung=20bei=20fehlendem=20Namen?= =?UTF-8?q?=20hinzuzuf=C3=BCgen.=20Anpassung=20der=20Textplatzierung=20in?= =?UTF-8?q?=20`svg2dxf.py`,=20um=20l=C3=A4ngere=20Namen=20auf=20zwei=20Zei?= =?UTF-8?q?len=20darzustellen=20und=20Fehlerbehandlung=20bei=20der=20Inksc?= =?UTF-8?q?ape-Konvertierung=20zu=20integrieren.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/dxf2lib.py | 29 ++++++++++++++++++++++++++--- lib/svg2dxf.py | 22 +++++++++++++--------- 2 files changed, 39 insertions(+), 12 deletions(-) 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