Skript zur automatischen erzeugung von asm Dateien aus bestehenden .pars
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 .par-Dateien
|
||||||
|
REM --out: Zielverzeichnis (optional)
|
||||||
|
|
||||||
|
python %PROJECT_LIB%\create_assemblies.py %*
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
@echo off
|
||||||
|
call setenv.bat
|
||||||
|
start
|
||||||
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
@echo off
|
||||||
|
REM ~dp0 steht für das Verzeichnis, in der diese Datei liegt
|
||||||
|
pushd %~dp0\..
|
||||||
|
|
||||||
|
set PROJECT_DIR=%cd%
|
||||||
|
|
||||||
|
set PROJECT_LIB=%PROJECT_DIR%\lib
|
||||||
|
set PROJECT_WORK=%PROJECT_DIR%\work
|
||||||
|
set PROJECT_DATA=%PROJECT_DIR%\data
|
||||||
|
set PROJECT_INPUT=%PROJECT_DIR%\input
|
||||||
|
|
||||||
|
popd
|
||||||
|
goto :eof
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,111 @@
|
|||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import shutil
|
||||||
|
import argparse
|
||||||
|
import win32com.client
|
||||||
|
|
||||||
|
|
||||||
|
def start_solid_edge():
|
||||||
|
"""Startet Solid Edge über COM."""
|
||||||
|
print("Starting instance of SolidEdge...")
|
||||||
|
se = win32com.client.Dispatch("SolidEdge.Application")
|
||||||
|
se.Visible = True
|
||||||
|
print("done")
|
||||||
|
return se.Documents
|
||||||
|
|
||||||
|
|
||||||
|
def find_placeholder_occurrence(occurrences, placeholder_name):
|
||||||
|
"""Sucht die Occurrence mit dem Namen placeholder_name."""
|
||||||
|
for occ in occurrences:
|
||||||
|
filename = os.path.basename(occ.OccurrenceFileName)
|
||||||
|
if filename.lower() == placeholder_name.lower():
|
||||||
|
return occ
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def process_part(par_name, par_path, dummy_asm_path, placeholder_name, work_dir, output_dir, documents):
|
||||||
|
"""Kopiert Dummy-ASM, ersetzt Platzhalter mit .par, speichert Ergebnis."""
|
||||||
|
temp_asm = os.path.join(work_dir, "_temp.asm")
|
||||||
|
temp_cfg = os.path.splitext(temp_asm)[0] + ".cfg"
|
||||||
|
|
||||||
|
shutil.copyfile(dummy_asm_path, temp_asm)
|
||||||
|
|
||||||
|
asm_doc = documents.Open(temp_asm)
|
||||||
|
occurrences = asm_doc.Occurrences
|
||||||
|
|
||||||
|
target_occ = find_placeholder_occurrence(occurrences, placeholder_name)
|
||||||
|
|
||||||
|
if not target_occ:
|
||||||
|
print(f"[{par_name}] Placeholder '{placeholder_name}' not found in 'dummy.asm'. Skipping.")
|
||||||
|
asm_doc.Close(False)
|
||||||
|
|
||||||
|
# Cleanup bei Fehler
|
||||||
|
if os.path.exists(temp_asm):
|
||||||
|
os.remove(temp_asm)
|
||||||
|
if os.path.exists(temp_cfg):
|
||||||
|
os.remove(temp_cfg)
|
||||||
|
return
|
||||||
|
|
||||||
|
print(f"[{par_name}] Replacing '{placeholder_name}' with '{par_name}'...")
|
||||||
|
target_occ.Replace(par_path, True)
|
||||||
|
|
||||||
|
ziel_name = os.path.splitext(par_name)[0] + ".asm"
|
||||||
|
ziel_path = os.path.join(output_dir, ziel_name)
|
||||||
|
|
||||||
|
asm_doc.SaveAs(ziel_path)
|
||||||
|
print(f"Saved: {ziel_path}")
|
||||||
|
|
||||||
|
asm_doc.Close(False)
|
||||||
|
|
||||||
|
# Lösche ggf. erzeugte .cfg-Datei zur Ziel-ASM
|
||||||
|
ziel_cfg = os.path.splitext(ziel_path)[0] + ".cfg"
|
||||||
|
if os.path.exists(ziel_cfg):
|
||||||
|
os.remove(ziel_cfg)
|
||||||
|
|
||||||
|
# Lösche temporäre ASM und deren CFG
|
||||||
|
if os.path.exists(temp_asm):
|
||||||
|
os.remove(temp_asm)
|
||||||
|
if os.path.exists(temp_cfg):
|
||||||
|
os.remove(temp_cfg)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# Argumente parsen
|
||||||
|
parser = argparse.ArgumentParser(description="Solid Edge Occurrence-Replacer")
|
||||||
|
parser.add_argument("--in", dest="input_dir", required=False, help="Path to .par files (Standard: INPUT env or ./input)")
|
||||||
|
parser.add_argument("--out", dest="output_dir", required=False, help="Optional target-directory for .asm files (Standard: ./work)")
|
||||||
|
|
||||||
|
if len(sys.argv) == 2 and sys.argv[1] in ("-h", "--help"):
|
||||||
|
parser.print_help()
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# Umgebungsvariablen & Ordner
|
||||||
|
work_dir = os.environ.get("PROJECT_WORK", "../work")
|
||||||
|
data_dir = os.environ.get("PROJECT_DATA", "./data")
|
||||||
|
input_dir = args.input_dir if args.input_dir else os.environ.get("PROJECT_INPUT", "./input")
|
||||||
|
output_dir = args.output_dir if args.output_dir else work_dir
|
||||||
|
|
||||||
|
os.makedirs(work_dir, exist_ok=True)
|
||||||
|
os.makedirs(output_dir, exist_ok=True)
|
||||||
|
|
||||||
|
dummy_asm_path = os.path.join(data_dir, "dummy.asm")
|
||||||
|
placeholder_name = "dummy.par"
|
||||||
|
|
||||||
|
documents = start_solid_edge()
|
||||||
|
|
||||||
|
par_dateien = [f for f in os.listdir(input_dir) if f.lower().endswith(".par")]
|
||||||
|
|
||||||
|
if not par_dateien:
|
||||||
|
print("No .par-files found in input-directory. Exiting...")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
for par_name in par_dateien:
|
||||||
|
par_path = os.path.join(input_dir, par_name)
|
||||||
|
process_part(par_name, par_path, dummy_asm_path, placeholder_name, work_dir, output_dir, documents)
|
||||||
|
|
||||||
|
if output_dir == work_dir:
|
||||||
|
print("\nNo output folder (--out) specified. Files saved into 'work' folder.")
|
||||||
|
else:
|
||||||
|
print("\nAll .par files processed and saved into target folder.")
|
||||||
Reference in New Issue
Block a user