Code zur Bestimmung der Länge u Breite der Bounding box
This commit is contained in:
@@ -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 %*
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user