From f76ce362d2a11a44a53790bbae72337a950cc329 Mon Sep 17 00:00:00 2001 From: lertlmaier Date: Wed, 9 Jul 2025 17:13:28 +0200 Subject: [PATCH] =?UTF-8?q?Code=20zur=20Bestimmung=20der=20L=C3=A4nge=20u?= =?UTF-8?q?=20Breite=20der=20Bounding=20box?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CAD/Code/bin/get_dimensions.bat | 10 ++++ CAD/Code/lib/read_variables.py | 103 ++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 CAD/Code/bin/get_dimensions.bat create mode 100644 CAD/Code/lib/read_variables.py diff --git a/CAD/Code/bin/get_dimensions.bat b/CAD/Code/bin/get_dimensions.bat new file mode 100644 index 0000000..e720092 --- /dev/null +++ b/CAD/Code/bin/get_dimensions.bat @@ -0,0 +1,10 @@ +@echo off +REM ~dp0 steht für das Verzeichnis, in der diese Datei liegt + +call setenv.bat + +REM Beispielaufruf mit Parametern: +REM --in: Ordner mit .asm-Dateien (optional. Standard: Work) +REM --out: Zielverzeichnis (optional. Standard: Work\stl_export) + +python %PROJECT_LIB%\read_variables.py %* \ No newline at end of file diff --git a/CAD/Code/lib/read_variables.py b/CAD/Code/lib/read_variables.py new file mode 100644 index 0000000..82046f7 --- /dev/null +++ b/CAD/Code/lib/read_variables.py @@ -0,0 +1,103 @@ +import os +import sys +import json +import argparse +import win32com.client + +def read_custom_properties(par_path): + """Liest benutzerdefinierte Variablen 'Mittiges_Koordinatensystem_X/Y_Translation'.""" + try: + app = win32com.client.Dispatch("SolidEdge.Application") + app.Visible = False # Optional auf True für Debug + + doc = app.Documents.Open(par_path) + variables = doc.Variables + + breite = None + hoehe = None + + for i in range(1, variables.Count + 1): + variable = variables.Item(i) + name = variable.Name + value = variable.Value + + if name == 'Mittiges_Koordinatensystem_X_Translation': + breite = round(value*2000, 1) + elif name == 'Mittiges_Koordinatensystem_Y_Translation': + hoehe = round(value*2000, 1) + + doc.Close(False) + + if breite is not None and hoehe is not None: + return breite, hoehe + else: + raise ValueError("Benötigte Variablen nicht gefunden.") + + except Exception as e: + print(f"Fehler beim Lesen von {par_path}: {e}") + return None, None + + finally: + try: + if doc: + doc.Close(False) + except: + pass + + +def extract_all(input_dir): + """Verarbeitet alle .par Dateien im Verzeichnis.""" + result = {} + + for file in os.listdir(input_dir): + if file.lower().endswith(".par"): + par_path = os.path.join(input_dir, file) + print(f"Processing: {file}") + breite, hoehe = read_custom_properties(par_path) + + if breite is not None and hoehe is not None: + key = os.path.splitext(file)[0] # Dateiname ohne .par + result[key] = { + "breite": breite, + "hoehe": hoehe + } + + return result + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Extrahiert 'Breite' und 'Höhe' aus .par-Dateien in JSON.") + parser.add_argument("--in", dest="input_dir", required=False, help="Ordner mit .par-Dateien (Standard: PROJECT_INPUT oder ./input)") + parser.add_argument("--out", dest="output_dir", required=False, help="Ordner für JSON-Ausgabe (Standard: PROJECT_WORK oder ./work)") + + if len(sys.argv) == 2 and sys.argv[1] in ("-h", "--help"): + parser.print_help() + sys.exit(0) + + args = parser.parse_args() + + input_dir = args.input_dir or os.environ.get("PROJECT_INPUT", "./input") + output_dir = args.output_dir or os.environ.get("PROJECT_WORK", "./work") + + # Hole den Namen des Input-Ordners (ohne Pfad) + input_basename = os.path.basename(os.path.normpath(input_dir)) + output_filename = input_basename + ".json" + + # Pfad zur Zieldatei + json_output_path = os.path.join(output_dir, output_filename) + + print(f"Input directory: {input_dir}") + print(f"Output JSON will be saved to: {json_output_path}\n") + + if not os.path.exists(input_dir): + print(f"Input folder not found: {input_dir}") + sys.exit(1) + + os.makedirs(output_dir, exist_ok=True) + + data = extract_all(input_dir) + + with open(json_output_path, "w", encoding="utf-8") as f: + json.dump(data, f, indent=2, ensure_ascii=False) + + print("\nDone! Data saved to:", json_output_path)