diff --git a/CAD/Code/bin/install_py.bat b/CAD/Code/bin/install_py.bat new file mode 100644 index 0000000..ca9b59f --- /dev/null +++ b/CAD/Code/bin/install_py.bat @@ -0,0 +1,15 @@ +call setenv.bat +if not exist %PROJECT%\.venv ( + ECHO Initialisiere Python virtual environment... + py -m venv %PROJECT%\.venv --upgrade-deps + ECHO Erfolgreich. + + call %PROJECT%\.venv\Scripts\activate.bat + ECHO Installiere erforderliche Python Packages... + pip install -r %PROJECT_LIB%/requirements.txt -q + ECHO Erfolgreich + deactivate + + ) ELSE ( + ECHO Erforderliche Python Packages bereits installiert! + ) diff --git a/CAD/Code/doku/README.md b/CAD/Code/doku/README.md index dc70fc1..344aa80 100644 --- a/CAD/Code/doku/README.md +++ b/CAD/Code/doku/README.md @@ -1,39 +1,60 @@ -# Dokumentation: create_assemblies, save_stl & read_variables +# Dokumentation: CAD-Automatisierungsskripte + +## Übersicht + +| Skript | Batch-Datei | Zweck | +| ------ | ----------- | ----- | +| `lib/create_assemblies.py` | `bin/create_assemblies.bat` | Erzeugt .asm-Baugruppen aus .par-Dateien | +| `lib/save_stl.py` | `bin/save_stl.bat` | Exportiert .asm-Baugruppen als STL-Dateien | +| `lib/read_variables.py` | `bin/get_dimensions.bat` | Liest Maße aus .par-Dateien und speichert als JSON | +| `lib/diff_dimensions.py` | `bin/diff_dimensions.bat` | Vergleicht 3D-Maße (JSON) mit 2D-Zeichnungsmaßen | +| *(kein Python)* | `bin/get_all_differences.bat` | Interaktiver Wrapper für diff_dimensions | +| *(kein Python)* | `bin/get_cmd.bat` | Öffnet Kommandozeile mit gesetzten Umgebungsvariablen | +| *(kein Python)* | `bin/setenv.bat` | Setzt alle Umgebungsvariablen für das Projekt | + +--- ## 1. create_assemblies ### Zweck + Das Skript erstellt für jede .par-Datei im Eingabeordner eine neue .asm-Baugruppe, indem es eine Platzhalter-Baugruppe (dummy.asm) kopiert und darin die Platzhalter-Komponente (dummy.par) durch die jeweilige .par-Datei ersetzt. ### Aufrufmöglichkeiten -#### Über die Batch-Datei (empfohlen unter Windows): +**Über die Batch-Datei (empfohlen unter Windows):** + ```bat bin\create_assemblies.bat --in --out ``` -- Die Batch-Datei setzt Umgebungsvariablen und ruft das Python-Skript mit den übergebenen Parametern auf. -#### Direkt über die Kommandozeile: +Die Batch-Datei setzt Umgebungsvariablen und ruft das Python-Skript mit den übergebenen Parametern auf. + +**Direkt über die Kommandozeile:** + ```sh python lib/create_assemblies.py --in --out ``` -#### Parameter: +**Parameter:** + - `--in`: Pfad zum Ordner mit .par-Dateien (optional, Standard: Umgebungsvariable PROJECT_INPUT oder ./input) - `--out`: Zielordner für die erzeugten .asm-Dateien (optional, Standard: ./work) ### Input/Output -- **Input:** +- **Input:** - .par-Dateien im angegebenen Eingabeordner - - dummy.asm und dummy.par im data/-Verzeichnis (werden als Vorlage und Platzhalter verwendet) -- **Output:** + - dummy.asm und dummy.par im Netzwerkpfad PROJECT_TEMPLATE (werden als Vorlage und Platzhalter verwendet) +- **Output:** - Für jede .par-Datei wird eine .asm-Datei im Ausgabeverzeichnis erzeugt. - Temporäre Dateien (_temp.asm, .cfg) werden nach Verarbeitung gelöscht. ### Hinweise + - Solid Edge muss installiert sein, da das Skript über COM darauf zugreift. - Die Platzhalter-Komponente in dummy.asm muss exakt dummy.par heißen. +- Die Vorlage (dummy.asm) wird aus dem Netzwerkpfad `PROJECT_TEMPLATE` geladen (Standard: `\\ssg.local\freigaben\RuleDesigner\Templates\CreateAssemblies`). - Fehlerhafte oder fehlende Platzhalter werden übersprungen und führen nicht zum Abbruch des gesamten Prozesses. --- @@ -41,34 +62,40 @@ python lib/create_assemblies.py --in --out ## 2. save_stl ### Zweck -Das Skript exportiert alle .asm-Baugruppen in einem Ordner als STL-Dateien. Es dient dazu, die zuvor erzeugten Baugruppen für die Weiterverarbeitung (z.B. 3D-Druck) bereitzustellen. + +Das Skript exportiert alle .asm-Baugruppen in einem Ordner als STL-Dateien. Es dient dazu, die zuvor erzeugten Baugruppen für die Weiterverarbeitung (z.B. 3D-Druck oder Visualisierung) bereitzustellen. ### Aufrufmöglichkeiten -#### Über die Batch-Datei (empfohlen unter Windows): +**Über die Batch-Datei (empfohlen unter Windows):** + ```bat bin\save_stl.bat --in --out ``` -- Die Batch-Datei setzt Umgebungsvariablen und ruft das Python-Skript mit den übergebenen Parametern auf. -#### Direkt über die Kommandozeile: +Die Batch-Datei setzt Umgebungsvariablen und ruft das Python-Skript mit den übergebenen Parametern auf. + +**Direkt über die Kommandozeile:** + ```sh python lib/save_stl.py --in --out ``` -#### Parameter: +**Parameter:** + - `--in`: Pfad zum Ordner mit .asm-Dateien (optional, Standard: Umgebungsvariable PROJECT_WORK oder ./work) - `--out`: Zielordner für die STL-Dateien (optional, Standard: ./work/STL_Export) ### Input/Output -- **Input:** +- **Input:** - .asm-Dateien im angegebenen Eingabeordner (z.B. aus create_assemblies) -- **Output:** +- **Output:** - Für jede .asm-Datei wird eine .stl-Datei im Ausgabeverzeichnis erzeugt. - Temporäre .cfg- und .log-Dateien werden nach dem Export gelöscht. ### Hinweise + - Solid Edge muss installiert sein, da das Skript über COM darauf zugreift. - Das Skript ist robust gegenüber Fehlern beim Export einzelner Dateien (Fehler werden gemeldet, der Prozess läuft weiter). - Nach dem Export werden überflüssige .cfg- und .log-Dateien im Eingabe- und Ausgabeverzeichnis entfernt. @@ -78,36 +105,46 @@ python lib/save_stl.py --in --out ## 3. read_variables ### Zweck -Das Skript liest aus allen .par-Dateien in einem Verzeichnis die benutzerdefinierten Variablen 'Mittiges_Koordinatensystem_X_Translation' und 'Mittiges_Koordinatensystem_Y_Translation' aus und speichert die Werte als Breite und Höhe in einer JSON-Datei. + +Das Skript liest aus allen .par-Dateien in einem Verzeichnis die benutzerdefinierten Variablen `Mittiges_Koordinatensystem_X_Translation` und `Mittiges_Koordinatensystem_Y_Translation` aus und speichert die Werte als Breite und Höhe in einer JSON-Datei. ### Aufrufmöglichkeiten -#### Über die Kommandozeile oder Batch-Datei: +**Über die Batch-Datei (empfohlen unter Windows):** + +```bat +bin\get_dimensions.bat --in --out +``` + +**Direkt über die Kommandozeile:** + ```sh python lib/read_variables.py --in --out ``` -#### Parameter: +**Parameter:** + - `--in`: Pfad zum Ordner mit .par-Dateien (optional, Standard: Umgebungsvariable PROJECT_INPUT oder ./input) - `--out`: Zielordner für die JSON-Ausgabe (optional, Standard: Umgebungsvariable PROJECT_WORK oder ./work) ### Input/Output -- **Input:** +- **Input:** - .par-Dateien im angegebenen Eingabeordner -- **Output:** +- **Output:** - Eine JSON-Datei im Ausgabeverzeichnis, benannt nach dem Eingabeordner (z.B. input.json), mit folgendem Aufbau: + ```json { "Dateiname_ohne_Endung": { "breite": , "hoehe": - }, - ... + } } ``` ### Hinweise + - Solid Edge muss installiert sein, da das Skript über COM darauf zugreift. - Die Variablen werden mit 2000 multipliziert und auf drei Nachkommastellen gerundet. - Falls eine .par-Datei die benötigten Variablen nicht enthält, wird sie übersprungen. @@ -115,14 +152,100 @@ python lib/read_variables.py --in --out --- -- **Umgebungsvariablen:** - Die Batch-Dateien rufen vorab setenv.bat auf, um Umgebungsvariablen wie PROJECT_LIB, PROJECT_WORK, PROJECT_INPUT, PROJECT_DATA zu setzen. Diese sollten korrekt konfiguriert sein. -- **Voraussetzungen:** - - Python (mit win32com) - - Solid Edge (für COM-Zugriff) -- **Fehlerbehandlung:** - Fehlerhafte oder fehlende Dateien werden übersprungen, der Prozess läuft weiter. +## 4. diff_dimensions + +### Zweck + +Das Skript vergleicht 3D-Bauteilmaße (aus einer JSON-Datei erzeugt von `read_variables`) mit 2D-Zeichnungsmaßen (aus einer JSON-Datei des SVG-Editors). Einträge, bei denen Breite oder Höhe außerhalb der Toleranz abweichen, werden in einer Ausgabe-JSON gespeichert. So lassen sich Inkonsistenzen zwischen 3D-Modell und 2D-Zeichnung schnell identifizieren. + +### Aufrufmöglichkeiten + +**Über die Batch-Datei:** + +```bat +bin\diff_dimensions.bat --type --json_dimensions <3D-JSON> --json_2d <2D-JSON> [--tolerance ] [--result ] +``` + +**Interaktiv (mit Abfragen):** + +```bat +bin\get_all_differences.bat +``` + +Fragt Typ, Dateinamen und Toleranz interaktiv ab und ruft dann `diff_dimensions.bat` auf. + +**Direkt über die Kommandozeile:** + +```sh +python lib/diff_dimensions.py --type --json_dimensions <3D-JSON> --json_2d <2D-JSON> +``` + +**Parameter:** + +- `--type`: Art des Bauteils: `BOGEN`, `WEICHE`, `TEFBOGEN` oder `TEFWEICHE` (bestimmt das Eingabeverzeichnis für die 2D-JSON) +- `--json_dimensions`: Dateiname der 3D-Maße-JSON (aus `read_variables`, liegt in PROJECT_WORK) +- `--json_2d`: Dateiname der 2D-Maße-JSON (liegt im typabhängigen Verzeichnis) +- `--tolerance`: Toleranz in Millimetern (optional, Standard: `0.05`) +- `--result`: Dateiname der Ausgabedatei (optional, Standard: `Differenzen_2D_3D.json`) +- `--output_dir`: Ausgabeverzeichnis (optional, Standard: Umgebungsvariable PROJECT_WORK) + +### Input/Output + +- **Input:** + - `--json_dimensions`: JSON-Datei mit 3D-Maßen (Schlüssel: SIVAS-Nummer, Felder: `breite`, `hoehe`) + - `--json_2d`: JSON-Datei mit 2D-Maßen (Liste mit Feldern `Sivasnr`, `Objekte_width_mm`, `Objekte_height_mm`) +- **Output:** + - JSON-Datei mit allen Einträgen, deren Maße außerhalb der Toleranz liegen, inkl. Differenzwerten (`w_diff`, `h_diff`). Bei übereinstimmenden Maßen wird keine Ausgabedatei erzeugt. + +### Beispielaufruf + +```bat +bin\diff_dimensions.bat --type BOGEN --json_dimensions Bogen_3D.json --json_2d Bogen_2D.json --tolerance 0.1 --result diff_bogen.json +``` + +### Hinweise + +- Erfordert kein Solid Edge — reine JSON-Verarbeitung. +- Die Umgebungsvariablen `PROJECT_JSON_BOGEN`, `PROJECT_JSON_WEICHE`, `PROJECT_JSON_TEFBOGEN`, `PROJECT_JSON_TEFWEICHE` müssen für den `--type`-Parameter korrekt gesetzt sein (via setenv.bat). --- -Wenn du eine Beispielkonfiguration oder weitere Details (z.B. zu setenv.bat oder den Umgebungsvariablen) benötigst, sag gerne Bescheid! \ No newline at end of file +## 5. Batch-Hilfsskripte + +### setenv.bat + +Setzt alle Projektumgebungsvariablen. Wird von allen anderen Batch-Dateien automatisch aufgerufen. + +| Variable | Standardwert | Bedeutung | +| -------- | ------------ | --------- | +| `PROJECT_DIR` | Verzeichnis des Code-Ordners | Wurzelverzeichnis des Projekts | +| `PROJECT_BIN` | `%PROJECT_DIR%\bin` | Verzeichnis der Batch-Dateien | +| `PROJECT_LIB` | `%PROJECT_DIR%\lib` | Verzeichnis der Python-Skripte | +| `PROJECT_WORK` | `%PROJECT_DIR%\work` | Arbeitsverzeichnis (Zwischenergebnisse) | +| `PROJECT_DATA` | `%PROJECT_DIR%\data` | Datenverzeichnis | +| `PROJECT_INPUT` | `%PROJECT_DIR%\input` | Eingabeverzeichnis (.par-Dateien) | +| `PROJECT_TEMPLATE` | `\\ssg.local\freigaben\RuleDesigner\Templates\CreateAssemblies` | Netzwerkpfad zur dummy.asm-Vorlage | +| `PROJECT_JSON_BOGEN` | `%SSG_RD_DIR%\SVGs\Omniflo\python\OFBogen\json` | 2D-JSON-Verzeichnis für Bögen | +| `PROJECT_JSON_WEICHE` | `%SSG_RD_DIR%\SVGs\Omniflo\python\OFWeiche\json` | 2D-JSON-Verzeichnis für Weichen | +| `PROJECT_JSON_TEFBOGEN` | `%SSG_RD_DIR%\SVGs\Omniflo\python\TEFBogen\json` | 2D-JSON-Verzeichnis für TEF-Bögen | +| `PROJECT_JSON_TEFWEICHE` | `%SSG_RD_DIR%\SVGs\Omniflo\python\TEFWeiche\json` | 2D-JSON-Verzeichnis für TEF-Weichen | + +### get_cmd.bat + +Ruft `setenv.bat` auf und öffnet anschließend eine Kommandozeile mit gesetzten Umgebungsvariablen. Nützlich, um Skripte manuell mit korrekter Umgebung zu testen. + +### get_all_differences.bat + +Interaktiver Wrapper für `diff_dimensions.bat`. Fragt Typ, JSON-Dateinamen und Toleranz per Eingabeaufforderung ab (mit vordefinierten Standardwerten) und startet dann den Vergleich. + +--- + +## Voraussetzungen + +- **Python** mit den Paketen `win32com` (pywin32) und `pythoncom` +- **Solid Edge** (für COM-Zugriff bei `create_assemblies`, `save_stl`, `read_variables`) +- **Netzwerkzugriff** auf `\\ssg.local\freigaben\RuleDesigner\Templates\CreateAssemblies` (für `create_assemblies`) + +## Fehlerbehandlung + +Fehlerhafte oder fehlende Dateien werden bei allen Skripten übersprungen — der Prozess läuft jeweils weiter und gibt eine Fehlermeldung aus. diff --git a/CAD/Code/lib/requirements.txt b/CAD/Code/lib/requirements.txt new file mode 100644 index 0000000..10c9d32 --- /dev/null +++ b/CAD/Code/lib/requirements.txt @@ -0,0 +1 @@ +pywin32