Compare commits
170 Commits
5a4eb67291
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| aea8c5e029 | |||
| eb04b9d73a | |||
| 8e8ce9e676 | |||
| 9fa569e449 | |||
| b959208ddc | |||
| aeb34cd85a | |||
| a3715cd036 | |||
| 099630ca86 | |||
| 0defdc24cc | |||
| fb25aca5ce | |||
| 901844fcb8 | |||
| a74f7e5e3a | |||
| af957c6ccd | |||
| 6898a37570 | |||
| b72c792850 | |||
| b9a71ae07c | |||
| 8e36935c4e | |||
| 8ad8297bce | |||
| 767883d406 | |||
| b7bbee5429 | |||
| 48c0450fe8 | |||
| cd1af92967 | |||
| 34135bcd28 | |||
| cd318d4c0d | |||
| 7287dad368 | |||
| b39442165e | |||
| ff924b1e51 | |||
| 5b1eb66860 | |||
| de2e49cc96 | |||
| 478469780d | |||
| 70d7149683 | |||
| 9d487dcba1 | |||
| 2af0c72cac | |||
| 76d8829ef5 | |||
| bd951d2dd2 | |||
| 650cfadc71 | |||
| 4c741a0783 | |||
| 2ad5433503 | |||
| 9f339a5495 | |||
| dad82b64f4 | |||
| d5c58a65db | |||
| 0401d26d58 | |||
| 58a70e1358 | |||
| 51828ff7e6 | |||
| de8c5112e0 | |||
| 1e16e4ab43 | |||
| ce007c080a | |||
| 747d08dd27 | |||
| 3bf78f5d33 | |||
| bcb80a7ce2 | |||
| 2315f9fc0b | |||
| b7402fc043 | |||
| 60ca7ee656 | |||
| 8024aebf85 | |||
| 732cb5d042 | |||
| 68d4a074f2 | |||
| 297dcd1a30 | |||
| f5dfec9276 | |||
| d7341f1140 | |||
| 86519f20b3 | |||
| f66a63c4af | |||
| e8d053ed48 | |||
| 91b5e0e5c9 | |||
| 2d239606e9 | |||
| 0ef3ae58ec | |||
| 7eedef7fcc | |||
| 8d9d70f2fc | |||
| ed5b339a45 | |||
| ec89d5e380 | |||
| 76a7b32e1f | |||
| 346f416930 | |||
| 97b78cb909 | |||
| c1b66e0157 | |||
| c705407a33 | |||
| cb0c400963 | |||
| feb059ca8b | |||
| 23e9259873 | |||
| 5f0cbf3c2e | |||
| bbef3d1d1b | |||
| 2cae74a943 | |||
| 6097190079 | |||
| 6167b57a7d | |||
| bb0e9b617f | |||
| 9768ca1fae | |||
| c7968ad6b3 | |||
| dff8bf443c | |||
| 8dc9e4e3b1 | |||
| 1cf705da3b | |||
| 8c9cd0e67c | |||
| d57e9c7895 | |||
| c7855deb06 | |||
| 900632594a | |||
| aa796ed900 | |||
| 25cc46d835 | |||
| 0ebbfabb9d | |||
| 2d56e31911 | |||
| 06b292539b | |||
| 3d07b213eb | |||
| cdb15ee461 | |||
| 58a5597111 | |||
| bb86139e95 | |||
| e74b910ad7 | |||
| b507772587 | |||
| 537b453b4d | |||
| a1bd089b01 | |||
| a9015ade15 | |||
| 56e3358e97 | |||
| 84676b8a06 | |||
| 4964f212d2 | |||
| c84ea82c63 | |||
| 49f7ec689b | |||
| f679ef0d72 | |||
| c44761655b | |||
| 19408c7276 | |||
| 6175027ab9 | |||
| 8c1e98c52e | |||
| 88533a2c34 | |||
| f5691dd341 | |||
| 1b59981cea | |||
| 19207f949d | |||
| cf55ee51c8 | |||
| 6be6076bdd | |||
| cb3e5c7f16 | |||
| 103bd9bea8 | |||
| ce43b868f4 | |||
| 23e3bd1cbe | |||
| 0cf9b6d8e5 | |||
| e0cf0126ae | |||
| e3570d1287 | |||
| 01416077ed | |||
| 6026958a89 | |||
| 70e3f2682b | |||
| be131f6f5c | |||
| e1ba4c9fd1 | |||
| 5090664004 | |||
| ec4bc1974a | |||
| 910dabff77 | |||
| fe7897c699 | |||
| 1fe688241c | |||
| 6a33315163 | |||
| cd47b68bbc | |||
| 5640e4f963 | |||
| b282b9303c | |||
| 8a0d890ef5 | |||
| 77c2c4410d | |||
| 9024483343 | |||
| 4b67b45a18 | |||
| 6da0fed80a | |||
| 3f948874e2 | |||
| 59154a5394 | |||
| 682f8b0067 | |||
| 55bd3aaea5 | |||
| dc57ad918c | |||
| ad9b29d065 | |||
| 897bdb3fe1 | |||
| a17ef5dfce | |||
| 9ec9667a43 | |||
| dfd960ffee | |||
| dce67a6f8e | |||
| b14a5f36f2 | |||
| 8b827ccb7c | |||
| 0e8034b352 | |||
| 9750ff508c | |||
| 8984a4b5e3 | |||
| bf8d17731a | |||
| bbcc736d69 | |||
| 40a5eb9f1c | |||
| 92bb102951 | |||
| 54e1eca9df | |||
| 30e1895541 |
@@ -1,10 +1,18 @@
|
||||
@echo off
|
||||
REM ~dp0 steht für das Verzeichnis, in der diese Datei liegt
|
||||
setlocal
|
||||
SET "MANAGE=%~dp0manage_interpreter.bat"
|
||||
|
||||
call setenv.bat
|
||||
CALL "%MANAGE%" activate
|
||||
if errorlevel 1 (
|
||||
echo ERROR: Failed to activate Python environment
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM Beispielaufruf mit Parametern:
|
||||
REM --in: Ordner mit .par-Dateien (optional. Standard: Input)
|
||||
REM --out: Zielverzeichnis (optional. Standard: Work)
|
||||
pushd "%PROJECT%"
|
||||
|
||||
python %PROJECT_LIB%\create_assemblies.py %*
|
||||
"%VIRTUAL_ENV%\Scripts\python.exe" -m lib.create_assemblies %*
|
||||
set PYTHON_EXIT=%ERRORLEVEL%
|
||||
|
||||
popd
|
||||
CALL "%MANAGE%" deactivate
|
||||
exit /b %PYTHON_EXIT%
|
||||
|
||||
@@ -1,6 +1,18 @@
|
||||
@echo off
|
||||
REM ~dp0 steht für das Verzeichnis, in der diese Datei liegt
|
||||
setlocal
|
||||
SET "MANAGE=%~dp0manage_interpreter.bat"
|
||||
|
||||
call setenv.bat
|
||||
CALL "%MANAGE%" activate
|
||||
if errorlevel 1 (
|
||||
echo ERROR: Failed to activate Python environment
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
python "%PROJECT_LIB%\diff_dimensions.py" %*
|
||||
pushd "%PROJECT%"
|
||||
|
||||
"%VIRTUAL_ENV%\Scripts\python.exe" -m lib.diff_dimensions %*
|
||||
set PYTHON_EXIT=%ERRORLEVEL%
|
||||
|
||||
popd
|
||||
CALL "%MANAGE%" deactivate
|
||||
exit /b %PYTHON_EXIT%
|
||||
|
||||
@@ -23,4 +23,4 @@ set /p TOLERANCE=Gib die Toleranz ein (Standard: %DEFAULT_TOLERANCE%):
|
||||
if "%TOLERANCE%"=="" set "TOLERANCE=%DEFAULT_TOLERANCE%"
|
||||
|
||||
REM Aufruf des Skripts mit den eingegebenen oder Standardwerten
|
||||
call diff_dimensions.bat --type %TYPE% --json_2d %JSON2D% --json_dimensions %JSONDIM% --tolerance %TOLERANCE%
|
||||
call "%~dp0diff_dimensions.bat" --type %TYPE% --json_2d %JSON2D% --json_dimensions %JSONDIM% --tolerance %TOLERANCE%
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
@echo off
|
||||
call setenv.bat
|
||||
call "%~dp0setenv.bat"
|
||||
start
|
||||
|
||||
|
||||
@@ -1,10 +1,18 @@
|
||||
@echo off
|
||||
REM ~dp0 steht für das Verzeichnis, in der diese Datei liegt
|
||||
setlocal
|
||||
SET "MANAGE=%~dp0manage_interpreter.bat"
|
||||
|
||||
call setenv.bat
|
||||
CALL "%MANAGE%" activate
|
||||
if errorlevel 1 (
|
||||
echo ERROR: Failed to activate Python environment
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM Beispielaufruf mit Parametern:
|
||||
REM --in: Ordner mit .asm-Dateien (optional. Standard: Work)
|
||||
REM --out: Zielverzeichnis (optional. Standard: Work\stl_export)
|
||||
pushd "%PROJECT%"
|
||||
|
||||
python %PROJECT_LIB%\read_variables.py %*
|
||||
"%VIRTUAL_ENV%\Scripts\python.exe" -m lib.read_variables %*
|
||||
set PYTHON_EXIT=%ERRORLEVEL%
|
||||
|
||||
popd
|
||||
CALL "%MANAGE%" deactivate
|
||||
exit /b %PYTHON_EXIT%
|
||||
|
||||
@@ -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!
|
||||
)
|
||||
@@ -0,0 +1,35 @@
|
||||
@echo off
|
||||
CALL "%~dp0setenv.bat"
|
||||
|
||||
IF /I "%1"=="activate" GOTO activate
|
||||
IF /I "%1"=="deactivate" GOTO deactivate
|
||||
IF /I "%1"=="activate_interpreter" GOTO activate
|
||||
IF /I "%1"=="deactivate_interpreter" GOTO deactivate
|
||||
GOTO :eof
|
||||
|
||||
|
||||
:activate
|
||||
REM Interpreter wählen
|
||||
IF DEFINED NETWORK_PYTHON (
|
||||
SET PYTHON_EXE=%NETWORK_PYTHON%\python.exe
|
||||
) ELSE (
|
||||
SET PYTHON_EXE=python
|
||||
)
|
||||
|
||||
REM venv sicherstellen
|
||||
IF NOT EXIST "%PROJECT%\.venv" (
|
||||
"%PYTHON_EXE%" -m venv "%PROJECT%\.venv"
|
||||
)
|
||||
|
||||
REM venv aktivieren
|
||||
CALL "%PROJECT%\.venv\Scripts\activate.bat"
|
||||
|
||||
REM Interpreter festnageln
|
||||
SET VIRTUAL_ENV_PYTHON=%PYTHON_EXE%
|
||||
GOTO :eof
|
||||
|
||||
|
||||
:deactivate
|
||||
CALL "%PROJECT%\.venv\Scripts\deactivate.bat"
|
||||
SET VIRTUAL_ENV_PYTHON=
|
||||
GOTO :eof
|
||||
@@ -1,10 +1,18 @@
|
||||
@echo off
|
||||
REM ~dp0 steht für das Verzeichnis, in der diese Datei liegt
|
||||
setlocal
|
||||
SET "MANAGE=%~dp0manage_interpreter.bat"
|
||||
|
||||
call setenv.bat
|
||||
CALL "%MANAGE%" activate
|
||||
if errorlevel 1 (
|
||||
echo ERROR: Failed to activate Python environment
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM Beispielaufruf mit Parametern:
|
||||
REM --in: Ordner mit .asm-Dateien (optional. Standard: Work)
|
||||
REM --out: Zielverzeichnis (optional. Standard: Work\stl_export)
|
||||
pushd "%PROJECT%"
|
||||
|
||||
python %PROJECT_LIB%\save_stl.py %*
|
||||
"%VIRTUAL_ENV%\Scripts\python.exe" -m lib.save_stl %*
|
||||
set PYTHON_EXIT=%ERRORLEVEL%
|
||||
|
||||
popd
|
||||
CALL "%MANAGE%" deactivate
|
||||
exit /b %PYTHON_EXIT%
|
||||
|
||||
+8
-11
@@ -1,17 +1,14 @@
|
||||
@echo off
|
||||
REM ~dp0 steht für das Verzeichnis, in der diese Datei liegt
|
||||
REM ~dp0 steht für das Verzeichnis, in der diese Datei liegt
|
||||
pushd %~dp0\..
|
||||
|
||||
REM for /f "delims=" %%i in ('git rev-parse --show-toplevel') do set SSG_RD_DIR=%%i
|
||||
set PROJECT=%cd%
|
||||
|
||||
|
||||
set PROJECT_DIR=%cd%
|
||||
|
||||
set PROJECT_BIN=%PROJECT_DIR%\bin
|
||||
set PROJECT_LIB=%PROJECT_DIR%\lib
|
||||
set PROJECT_WORK=%PROJECT_DIR%\work
|
||||
set PROJECT_DATA=%PROJECT_DIR%\data
|
||||
set PROJECT_INPUT=%PROJECT_DIR%\input
|
||||
set PROJECT_BIN=%PROJECT%\bin
|
||||
set PROJECT_LIB=%PROJECT%\lib
|
||||
set PROJECT_WORK=%PROJECT%\work
|
||||
set PROJECT_DATA=%PROJECT%\data
|
||||
set PROJECT_INPUT=%PROJECT%\input
|
||||
set PROJECT_TEMPLATE=\\ssg.local\freigaben\RuleDesigner\Templates\CreateAssemblies
|
||||
|
||||
if not exist %PROJECT_WORK% mkdir %PROJECT_WORK%
|
||||
@@ -23,4 +20,4 @@ set PROJECT_JSON_TEFBOGEN=%SSG_RD_DIR%\SVGs\Omniflo\python\TEFBogen\json
|
||||
set PROJECT_JSON_TEFWEICHE=%SSG_RD_DIR%\SVGs\Omniflo\python\TEFWeiche\json
|
||||
|
||||
popd
|
||||
goto :eof
|
||||
goto :eof
|
||||
|
||||
+153
-30
@@ -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 <Eingabeordner> --out <Ausgabeordner>
|
||||
```
|
||||
- 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 <Eingabeordner> --out <Ausgabeordner>
|
||||
```
|
||||
|
||||
#### 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 <Eingabeordner> --out <Ausgabeordner>
|
||||
## 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 <Eingabeordner> --out <Ausgabeordner>
|
||||
```
|
||||
- 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 <Eingabeordner> --out <Ausgabeordner>
|
||||
```
|
||||
|
||||
#### 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 <Eingabeordner> --out <Ausgabeordner>
|
||||
## 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 <Eingabeordner> --out <Ausgabeordner>
|
||||
```
|
||||
|
||||
**Direkt über die Kommandozeile:**
|
||||
|
||||
```sh
|
||||
python lib/read_variables.py --in <Eingabeordner> --out <Ausgabeordner>
|
||||
```
|
||||
|
||||
#### 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": <Wert>,
|
||||
"hoehe": <Wert>
|
||||
},
|
||||
...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 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 <Eingabeordner> --out <Ausgabeordner>
|
||||
|
||||
---
|
||||
|
||||
- **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 <Typ> --json_dimensions <3D-JSON> --json_2d <2D-JSON> [--tolerance <Wert>] [--result <Ausgabedatei>]
|
||||
```
|
||||
|
||||
**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 <Typ> --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!
|
||||
## 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.
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
pywin32
|
||||
@@ -4,13 +4,14 @@ import argparse
|
||||
import win32com.client
|
||||
import pythoncom
|
||||
|
||||
def export_assemblies_to_stl(input_dir, output_dir):
|
||||
def export_assemblies_to_stl(input_dir, output_dir, filter_name=None, minimized=False):
|
||||
pythoncom.CoInitialize()
|
||||
|
||||
try:
|
||||
# Solid Edge starten oder verbinden
|
||||
se_app = win32com.client.Dispatch("SolidEdge.Application")
|
||||
se_app.Visible = True
|
||||
se_app.WindowState = 2 if minimized else 1
|
||||
|
||||
documents = se_app.Documents
|
||||
|
||||
@@ -18,6 +19,8 @@ def export_assemblies_to_stl(input_dir, output_dir):
|
||||
|
||||
for filename in os.listdir(input_dir):
|
||||
if filename.lower().endswith(".asm"):
|
||||
if filter_name and filter_name.lower() not in filename.lower():
|
||||
continue
|
||||
asm_path = os.path.join(input_dir, filename)
|
||||
stl_filename = os.path.splitext(filename)[0] + ".stl"
|
||||
stl_path = os.path.join(output_dir, stl_filename)
|
||||
@@ -29,7 +32,7 @@ def export_assemblies_to_stl(input_dir, output_dir):
|
||||
doc = documents.Open(asm_path)
|
||||
# STL exportieren in den Unterordner
|
||||
doc.SaveAs(stl_path)
|
||||
print(f"→ Exported to: {stl_path}")
|
||||
print(f"-> Exported to: {stl_path}")
|
||||
except Exception as e:
|
||||
print(f"Error processing {filename}: {e}")
|
||||
finally:
|
||||
@@ -69,6 +72,8 @@ if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description="Exportiert alle .asm-Dateien in einem Ordner nach STL.")
|
||||
parser.add_argument("--in", dest="input_dir", required=False, help="Ordner mit .asm-Dateien (Standard: WORK oder ../work)")
|
||||
parser.add_argument("--out", dest="output_dir", required=False, help="Zielordner für STL-Dateien (Standard: work/STL_Export)")
|
||||
parser.add_argument("--filter", dest="filter_name", required=False, help="Nur Dateien verarbeiten, deren Name diesen String enthält")
|
||||
parser.add_argument("--se-minimized", dest="minimized", action="store_true", default=False, help="Solid Edge minimiert starten")
|
||||
|
||||
if len(sys.argv) == 2 and sys.argv[1] in ("-h", "--help"):
|
||||
parser.print_help()
|
||||
@@ -97,4 +102,7 @@ if __name__ == "__main__":
|
||||
print(f"Input folder not found: {input_dir}")
|
||||
sys.exit(1)
|
||||
|
||||
export_assemblies_to_stl(input_dir, output_dir)
|
||||
if args.filter_name:
|
||||
print(f"Filtering files containing: '{args.filter_name}'\n")
|
||||
|
||||
export_assemblies_to_stl(input_dir, output_dir, args.filter_name, args.minimized)
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,37 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Projektübersicht
|
||||
|
||||
**SSG-Ruledesigner-Konfigurator** ist die Library der Schönenberger GmbH für den
|
||||
RuleDesigner Fusion (RD Fusion) — ein PDM-System zur Verwaltung von CAD-Daten. Der
|
||||
**RuleDesigner Configurator** ist eine *low-code*-Programmierumgebung, über die das PDM
|
||||
an externe Systeme (Datenbanken, CAD wie Solid Edge, Export nach CSV/JSON) angebunden
|
||||
wird. Dieses Repo bündelt Konfigurationen, Layouts, Bibliotheken und Schulungs-Doku für
|
||||
den abteilungsübergreifenden Einsatz bei Schönenberger.
|
||||
|
||||
## Projektstruktur
|
||||
|
||||
```text
|
||||
SSG-Ruledesigner-Konfigurator/
|
||||
├── MAIN_SSG.rdx # Haupt-Konfiguration (RuleDesigner)
|
||||
├── Sub_DWG2SWG.rdx # Teil-Konfiguration DWG→SWG
|
||||
├── Editor2DLibrary/ # 2D-Editor-Bibliothek
|
||||
├── CAD/ # CAD-Daten
|
||||
├── CSV/ # CSV-Daten/Exporte
|
||||
├── SVGs/ # SVG-Grafiken
|
||||
├── Pictures/ # Bilder
|
||||
├── HallenLayouts/ # Hallen-Layouts
|
||||
├── Sessions/ # Session-Daten
|
||||
├── Doku/ # Dokumentation
|
||||
├── wiki/ # Wiki (Roadmap, Home, Schulungs-Doku)
|
||||
├── _setenv.bat # Umgebung setzen
|
||||
└── cleanLocalShapes.bat # Lokale Shapes bereinigen
|
||||
```
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Die `.rdx`-Dateien sind RuleDesigner-Configurator-Projekte (low code).
|
||||
- Ausführliche Doku und Roadmap liegen im `wiki/` (siehe `Readme.md` für Links).
|
||||
- Ziel: Programmierarbeiten künftig durch hauseigene Mitarbeiter (nach Schulung).
|
||||
@@ -0,0 +1,452 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="297mm"
|
||||
height="210mm"
|
||||
viewBox="0 0 297 210"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.4.2 (ebf0e94, 2025-05-08)"
|
||||
sodipodi:docname="Varioförderer_abwärts.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="0.52221046"
|
||||
inkscape:cx="1171.9413"
|
||||
inkscape:cy="251.81418"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="1912"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g13" />
|
||||
<defs
|
||||
id="defs1" />
|
||||
<g
|
||||
inkscape:label="Ebene 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
transform="matrix(0.23034607,0,0,0.23034607,0.53613215,11.200168)"
|
||||
id="g13">
|
||||
<g
|
||||
transform="matrix(0.93111819,0,0,0.96168343,42.607341,-3.2012156)"
|
||||
id="g41">
|
||||
<rect
|
||||
x="0"
|
||||
y="0"
|
||||
width="123"
|
||||
height="96"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
transform="matrix(-1,0,0,1,294,178)"
|
||||
id="rect1" />
|
||||
<path
|
||||
d="m 171,178 122.88,96"
|
||||
stroke="#e59edd"
|
||||
stroke-width="4"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path1" />
|
||||
<path
|
||||
d="M 295,272 703.758,520.544"
|
||||
stroke="#7030a0"
|
||||
stroke-width="4"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path2" />
|
||||
<path
|
||||
d="M 972.8,635.36 704,519"
|
||||
stroke="#00b0f0"
|
||||
stroke-width="4"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path3" />
|
||||
<path
|
||||
d="M 1116.08,668.6 974,635"
|
||||
stroke="#c1e5f5"
|
||||
stroke-width="4"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path4" />
|
||||
<text
|
||||
fill="#7030a0"
|
||||
font-family="Symbol, Symbol_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="43px"
|
||||
transform="translate(429.665,319)"
|
||||
id="text4"></text>
|
||||
<text
|
||||
fill="#7030a0"
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="24px"
|
||||
transform="translate(456.665,319)"
|
||||
id="text5">F</text>
|
||||
<text
|
||||
fill="#00b0f0"
|
||||
font-family="Symbol, Symbol_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="43px"
|
||||
transform="translate(803.268,617)"
|
||||
id="text6"></text>
|
||||
<text
|
||||
fill="#00b0f0"
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="24px"
|
||||
transform="translate(830.268,617)"
|
||||
id="text7">S</text>
|
||||
<path
|
||||
d="M 0,0 C 28.842,37.2866 34.2679,71.9892 32.7764,106"
|
||||
stroke="#7030a0"
|
||||
stroke-width="3"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(1,0,0,-1,480.5,380.5)"
|
||||
id="path7" />
|
||||
<path
|
||||
d="M 0,0 C 26.5571,21.2117 32.3714,48.3031 33,77"
|
||||
stroke="#00b0f0"
|
||||
stroke-width="3"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(-1,0,0,1,797.5,558.5)"
|
||||
id="path8" />
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(131.297,162)"
|
||||
id="text8">Ho</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(1116.31,708)"
|
||||
id="text9">H</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(1135.14,708)"
|
||||
id="text10">1</text>
|
||||
<path
|
||||
d="m 295.979,218 h 406.759 v 2 H 295.979 Z m 7.497,6.53 -9.481,-5.53 9.481,-5.53 c 0.477,-0.279 1.089,-0.118 1.368,0.359 0.278,0.478 0.117,1.09 -0.36,1.368 l -8,4.667 v -1.728 l 8,4.667 c 0.477,0.278 0.638,0.89 0.36,1.368 -0.279,0.477 -0.891,0.638 -1.368,0.359 z m 391.765,-11.06 9.481,5.53 -9.481,5.531 c -0.477,0.278 -1.089,0.117 -1.367,-0.36 -0.278,-0.477 -0.117,-1.09 0.36,-1.368 l 8,-4.667 v 1.728 l -8,-4.667 c -0.477,-0.278 -0.638,-0.89 -0.36,-1.367 0.278,-0.477 0.89,-0.639 1.367,-0.36 z"
|
||||
id="path10" />
|
||||
<path
|
||||
d="m 704,452 v 59.488"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path11" />
|
||||
<path
|
||||
d="m 973,467 v 36.381"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path12" />
|
||||
<path
|
||||
d="m 705.979,479 h 264.842 v 2 H 705.979 Z m 7.497,6.53 -9.481,-5.53 9.481,-5.53 c 0.477,-0.279 1.089,-0.118 1.368,0.359 0.278,0.478 0.117,1.09 -0.36,1.368 l -8,4.667 v -1.728 l 8,4.667 c 0.477,0.278 0.638,0.89 0.36,1.368 -0.279,0.477 -0.891,0.638 -1.368,0.359 z m 249.848,-11.06 9.481,5.53 -9.481,5.531 c -0.477,0.278 -1.089,0.117 -1.368,-0.36 -0.278,-0.477 -0.117,-1.09 0.36,-1.368 l 8,-4.667 v 1.728 l -8,-4.667 c -0.477,-0.278 -0.638,-0.89 -0.36,-1.367 0.279,-0.477 0.891,-0.639 1.368,-0.36 z"
|
||||
id="path13" />
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(489.106,209)"
|
||||
id="text13">L</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(502.44,209)"
|
||||
id="text14">F</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(825.829,455)"
|
||||
id="text15">L</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(839.163,455)"
|
||||
id="text16">S</text>
|
||||
<path
|
||||
d="m 1107,669 c 0,-4.971 4.03,-9 9,-9 4.97,0 9,4.029 9,9 0,4.971 -4.03,9 -9,9 -4.97,0 -9,-4.029 -9,-9 z"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path16" />
|
||||
<path
|
||||
d="m 162,178 c 0,-4.971 4.029,-9 9,-9 4.971,0 9,4.029 9,9 0,4.971 -4.029,9 -9,9 -4.971,0 -9,-4.029 -9,-9 z"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path17" />
|
||||
<path
|
||||
d="M 1,1.98013 1.0001,112.925 H -0.999897 L -0.999998,1.98013 Z M -5.53044,9.47613 -3.97253e-8,-0.0046346 5.53045,9.47612 C 5.80873,9.95317 5.6476,10.5655 5.17055,10.8438 4.6935,11.1221 4.08118,10.9609 3.8029,10.4839 L -0.863777,2.48387 H 0.863781 L -3.80288,10.4839 c -0.27828,0.477 -0.8906,0.6382 -1.36765,0.3599 C -5.64758,10.5655 -5.80872,9.95318 -5.53044,9.47613 Z M 5.53054,105.429 1.0489e-4,114.91 -5.53035,105.429 c -0.27828,-0.477 -0.11714,-1.089 0.35991,-1.367 0.47705,-0.279 1.08937,-0.117 1.36765,0.36 l 4.666672,8 h -1.727558 l 4.666656,-8 c 0.27828,-0.477 0.8906,-0.639 1.36765,-0.36 0.47706,0.278 0.63819,0.89 0.35991,1.367 z"
|
||||
transform="matrix(1,0,0,-1,1183,635.906)"
|
||||
id="path18" />
|
||||
<path
|
||||
d="m 1.00001,1.98 9e-5,29.6399 H -0.999901 L -0.999994,1.98 Z M -5.53042,9.47615 2.40488e-8,-0.0046346 5.53048,9.47611 C 5.80876,9.95316 5.64762,10.5655 5.17057,10.8438 4.69352,11.122 4.0812,10.9609 3.80292,10.4839 L -0.863771,2.48387 H 0.863787 L -3.80286,10.4839 c -0.27827,0.477 -0.89059,0.6382 -1.36764,0.3599 C -5.64756,10.5655 -5.80869,9.9532 -5.53042,9.47615 Z M 5.53052,24.1237 1.04963e-4,33.6045 -5.53037,24.1238 c -0.27828,-0.4771 -0.11715,-1.0894 0.3599,-1.3677 0.47705,-0.2782 1.08937,-0.1171 1.36765,0.3599 l 4.666696,8 h -1.727558 l 4.666642,-8 c 0.27828,-0.477 0.8906,-0.6382 1.36765,-0.3599 0.47705,0.2783 0.63819,0.8906 0.35991,1.3676 z"
|
||||
transform="matrix(1,0,0,-1,1183,668.6)"
|
||||
id="path19" />
|
||||
<path
|
||||
d="M 0,0 199.69,1.04987e-4"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(-1,0,0,1,1190.69,519)"
|
||||
id="path20" />
|
||||
<path
|
||||
d="M 0,0 65.4454,1.04987e-4"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(-1,0,0,1,1190.45,635)"
|
||||
id="path21" />
|
||||
<path
|
||||
d="M 0,0 65.4454,1.04987e-4"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(-1,0,0,1,1197.45,669)"
|
||||
id="path22" />
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(1203.12,582)"
|
||||
id="text22">H</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(1221.95,582)"
|
||||
id="text23">S</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(1201.32,662)"
|
||||
id="text24">H</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(1220.15,662)"
|
||||
id="text25">AS</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(1025.92,465)"
|
||||
id="text26">L</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(1039.25,465)"
|
||||
id="text27">AS</text>
|
||||
<path
|
||||
d="m 975.98,481 h 136.22 v 2 H 975.98 Z m 7.496,6.53 -9.481,-5.53 9.481,-5.53 c 0.477,-0.279 1.089,-0.118 1.368,0.359 0.278,0.478 0.117,1.09 -0.36,1.368 l -8,4.667 v -1.728 l 8,4.667 c 0.477,0.278 0.638,0.89 0.36,1.368 -0.279,0.477 -0.891,0.638 -1.368,0.359 z m 121.224,-11.06 9.48,5.53 -9.48,5.531 c -0.48,0.278 -1.09,0.117 -1.37,-0.36 -0.28,-0.477 -0.11,-1.09 0.36,-1.368 l 8,-4.667 v 1.728 l -8,-4.667 c -0.47,-0.278 -0.64,-0.89 -0.36,-1.367 0.28,-0.477 0.89,-0.639 1.37,-0.36 z"
|
||||
id="path27" />
|
||||
<path
|
||||
d="M 1114,477 V 615.439"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path28" />
|
||||
<path
|
||||
d="m 123.188,271.022 -0.184,-92.04 2,-0.004 0.184,92.04 z m 6.516,-7.509 -5.512,9.492 -5.549,-9.47 c -0.279,-0.477 -0.119,-1.089 0.357,-1.368 0.477,-0.28 1.089,-0.12 1.368,0.357 l 4.683,7.99 -1.727,0.004 4.65,-8.009 c 0.278,-0.478 0.89,-0.64 1.367,-0.363 0.478,0.277 0.64,0.889 0.363,1.367 z m -11.215,-77.026 5.511,-9.492 5.549,9.47 c 0.28,0.477 0.12,1.089 -0.357,1.368 -0.476,0.28 -1.089,0.12 -1.368,-0.357 l -4.683,-7.99 1.728,-0.004 -4.651,8.009 c -0.277,0.478 -0.889,0.64 -1.367,0.363 -0.477,-0.277 -0.64,-0.889 -0.362,-1.367 z"
|
||||
id="path29" />
|
||||
<path
|
||||
d="M 0,0 38.6295,1.04987e-4"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(-1,0,0,1,153.63,273)"
|
||||
id="path30" />
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(74.7453,401)"
|
||||
id="text30">H</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(93.5786,401)"
|
||||
id="text31">F</text>
|
||||
<path
|
||||
d="M 0,0 45.3722,1.04987e-4"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(-1,0,0,1,153.372,178)"
|
||||
id="path31" />
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(68.8266,230)"
|
||||
id="text32">H</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(87.6599,230)"
|
||||
id="text33">ES</text>
|
||||
<path
|
||||
d="M 1,1.9794 1.0001,243.656 H -0.999896 L -0.999999,1.9794 Z M -5.53044,9.47613 2.45822e-8,-0.0046346 5.53045,9.47613 C 5.80873,9.95318 5.64759,10.5655 5.17054,10.8438 4.69349,11.1221 4.08117,10.9609 3.80289,10.4839 L -0.863778,2.48387 H 0.86378 l -4.66666,8.00003 c -0.27828,0.477 -0.8906,0.6382 -1.36765,0.3599 C -5.64759,10.5655 -5.80872,9.95318 -5.53044,9.47613 Z M 5.53055,236.159 1.04757e-4,245.64 -5.53034,236.159 c -0.27829,-0.477 -0.11715,-1.089 0.3599,-1.368 0.47705,-0.278 1.08937,-0.117 1.36765,0.36 l 4.666673,8 h -1.727558 l 4.666665,-8 c 0.27828,-0.477 0.8906,-0.638 1.36765,-0.36 0.47705,0.279 0.63819,0.891 0.35991,1.368 z"
|
||||
transform="matrix(1,0,0,-1,124,518.635)"
|
||||
id="path33" />
|
||||
<path
|
||||
d="M 0,0 156.35,1.04987e-4"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(-1,0,0,1,271.349,519)"
|
||||
id="path34" />
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(213.958,347)"
|
||||
id="text34">L</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(227.292,347)"
|
||||
id="text35">ES</text>
|
||||
<path
|
||||
d="m 172.98,359 h 120.304 v 2 H 172.98 Z m 7.496,6.53 -9.481,-5.53 9.481,-5.53 c 0.477,-0.279 1.09,-0.118 1.368,0.359 0.278,0.478 0.117,1.09 -0.36,1.368 l -8,4.667 v -1.728 l 8,4.667 c 0.477,0.278 0.638,0.89 0.36,1.368 -0.279,0.477 -0.891,0.638 -1.368,0.359 z m 105.312,-11.06 9.481,5.53 -9.481,5.531 c -0.477,0.278 -1.089,0.117 -1.367,-0.36 -0.279,-0.477 -0.117,-1.09 0.36,-1.368 l 8,-4.667 v 1.728 l -8,-4.667 c -0.477,-0.278 -0.639,-0.89 -0.36,-1.367 0.278,-0.477 0.89,-0.639 1.367,-0.36 z"
|
||||
id="path35" />
|
||||
<path
|
||||
d="m 173,293 v 80.092"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path36" />
|
||||
<rect
|
||||
x="294"
|
||||
y="272"
|
||||
width="410"
|
||||
height="249"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
id="rect36" />
|
||||
<rect
|
||||
x="704"
|
||||
y="519"
|
||||
width="269"
|
||||
height="116"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
id="rect37" />
|
||||
<rect
|
||||
x="0"
|
||||
y="0"
|
||||
width="144"
|
||||
height="34"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
transform="matrix(-1,0,0,1,1117,635)"
|
||||
id="rect38" />
|
||||
<path
|
||||
d="m 704,210 v 50"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path38" />
|
||||
<path
|
||||
d="m 173,119 v 30.704"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path39" />
|
||||
<path
|
||||
d="m 172.971,126 h 940.919 v 2 H 172.971 Z m 7.505,6.53 -9.481,-5.53 9.481,-5.53 c 0.477,-0.279 1.089,-0.118 1.368,0.359 0.278,0.478 0.117,1.09 -0.36,1.368 l -8,4.667 v -1.728 l 8,4.667 c 0.477,0.278 0.638,0.89 0.36,1.368 -0.279,0.477 -0.891,0.638 -1.368,0.359 z m 925.914,-11.06 9.48,5.53 -9.48,5.531 c -0.48,0.278 -1.09,0.117 -1.37,-0.36 -0.28,-0.477 -0.12,-1.09 0.36,-1.368 l 8,-4.667 v 1.728 l -8,-4.667 c -0.48,-0.278 -0.64,-0.89 -0.36,-1.367 0.28,-0.477 0.89,-0.639 1.37,-0.36 z"
|
||||
id="path40" />
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(605.305,154)"
|
||||
id="text40">L</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(618.638,154)"
|
||||
id="text41">1</text>
|
||||
<path
|
||||
d="M 1114,109 V 456.164"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path41" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,452 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="297mm"
|
||||
height="210mm"
|
||||
viewBox="0 0 297 210"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.4.2 (ebf0e94, 2025-05-08)"
|
||||
sodipodi:docname="Varioförderer_aufwärts.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="0.73851712"
|
||||
inkscape:cx="501.00396"
|
||||
inkscape:cy="561.25984"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="1912"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1" />
|
||||
<g
|
||||
inkscape:label="Ebene 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
transform="matrix(0.23034607,0,0,0.23034607,0.93511915,3.6997708)"
|
||||
id="g30">
|
||||
<path
|
||||
d="m 294.979,214 h 406.759 v 2 H 294.979 Z m 7.497,6.53 -9.481,-5.53 9.481,-5.53 c 0.477,-0.279 1.089,-0.118 1.368,0.359 0.278,0.478 0.117,1.09 -0.36,1.368 l -8,4.667 v -1.728 l 8,4.667 c 0.477,0.278 0.638,0.89 0.36,1.368 -0.279,0.477 -0.891,0.638 -1.368,0.359 z m 391.765,-11.06 9.481,5.53 -9.481,5.531 c -0.477,0.278 -1.089,0.117 -1.367,-0.36 -0.278,-0.477 -0.117,-1.09 0.36,-1.368 l 8,-4.667 v 1.728 l -8,-4.667 c -0.477,-0.278 -0.638,-0.89 -0.36,-1.367 0.278,-0.477 0.89,-0.639 1.367,-0.36 z"
|
||||
id="path1" />
|
||||
<path
|
||||
d="m 704,205 v 59.488"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path2" />
|
||||
<path
|
||||
d="m 295,204 v 59.488"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path3" />
|
||||
<path
|
||||
d="m 973,205 v 59.488"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path4" />
|
||||
<path
|
||||
d="m 705.979,214 h 264.842 v 2 H 705.979 Z m 7.497,6.53 -9.481,-5.53 9.481,-5.53 c 0.477,-0.279 1.089,-0.118 1.368,0.359 0.278,0.478 0.117,1.09 -0.36,1.368 l -8,4.667 v -1.728 l 8,4.667 c 0.477,0.278 0.638,0.89 0.36,1.368 -0.279,0.477 -0.891,0.638 -1.368,0.359 z m 249.848,-11.06 9.481,5.53 -9.481,5.531 c -0.477,0.278 -1.089,0.117 -1.368,-0.36 -0.278,-0.477 -0.117,-1.09 0.36,-1.368 l 8,-4.667 v 1.728 l -8,-4.667 c -0.477,-0.278 -0.638,-0.89 -0.36,-1.367 0.279,-0.477 0.891,-0.639 1.368,-0.36 z"
|
||||
id="path5" />
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(487.134,199)"
|
||||
id="text5">L</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(500.468,199)"
|
||||
id="text6">F</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(825.829,199)"
|
||||
id="text7">L</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(839.163,199)"
|
||||
id="text8">S</text>
|
||||
<path
|
||||
d="M 1,1.98013 1.0001,112.925 H -0.999897 L -0.999998,1.98013 Z M -5.53044,9.47613 -3.97253e-8,-0.0046346 5.53045,9.47612 C 5.80873,9.95317 5.6476,10.5655 5.17055,10.8438 4.6935,11.1221 4.08118,10.9609 3.8029,10.4839 L -0.863777,2.48387 H 0.863781 L -3.80288,10.4839 c -0.27828,0.477 -0.8906,0.6382 -1.36765,0.3599 C -5.64758,10.5655 -5.80872,9.95318 -5.53044,9.47613 Z M 5.53054,105.429 1.0489e-4,114.91 -5.53035,105.429 c -0.27828,-0.477 -0.11714,-1.089 0.35991,-1.367 0.47705,-0.279 1.08937,-0.117 1.36765,0.36 l 4.666672,8 h -1.727558 l 4.666656,-8 c 0.27828,-0.477 0.8906,-0.639 1.36765,-0.36 0.47706,0.278 0.63819,0.89 0.35991,1.367 z"
|
||||
transform="matrix(1,0,0,-1,1183,387.906)"
|
||||
id="path8" />
|
||||
<path
|
||||
d="m 1.00001,1.98 9e-5,29.6399 H -0.999901 L -0.999994,1.98 Z M -5.53042,9.47615 2.40488e-8,-0.0046346 5.53048,9.47611 C 5.80876,9.95316 5.64762,10.5655 5.17057,10.8438 4.69352,11.122 4.0812,10.9609 3.80292,10.4839 L -0.863771,2.48387 H 0.863787 L -3.80286,10.4839 c -0.27827,0.477 -0.89059,0.6382 -1.36764,0.3599 C -5.64756,10.5655 -5.80869,9.9532 -5.53042,9.47615 Z M 5.53052,24.1237 1.04963e-4,33.6045 -5.53037,24.1238 c -0.27828,-0.4771 -0.11715,-1.0894 0.3599,-1.3677 0.47705,-0.2782 1.08937,-0.1171 1.36765,0.3599 l 4.666696,8 h -1.727558 l 4.666642,-8 c 0.27828,-0.477 0.8906,-0.6382 1.36765,-0.3599 0.47705,0.2783 0.63819,0.8906 0.35991,1.3676 z"
|
||||
transform="matrix(1,0,0,-1,1183,421.6)"
|
||||
id="path9" />
|
||||
<path
|
||||
d="M 0,0 76.4572,1.04987e-4"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(-1,0,0,1,1190.46,272)"
|
||||
id="path10" />
|
||||
<path
|
||||
d="M 0,0 65.4454,1.04987e-4"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(-1,0,0,1,1190.45,388)"
|
||||
id="path11" />
|
||||
<path
|
||||
d="M 0,0 65.4454,1.04987e-4"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(-1,0,0,1,1197.45,422)"
|
||||
id="path12" />
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(1203.12,335)"
|
||||
id="text12">H</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(1221.95,335)"
|
||||
id="text13">S</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(1201.32,415)"
|
||||
id="text14">H</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(1220.15,415)"
|
||||
id="text15">ES</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(1025.92,202)"
|
||||
id="text16">L</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(1039.25,202)"
|
||||
id="text17">ES</text>
|
||||
<path
|
||||
d="m 975.98,214 h 136.22 v 2 H 975.98 Z m 7.496,6.53 -9.481,-5.53 9.481,-5.53 c 0.477,-0.279 1.089,-0.118 1.368,0.359 0.278,0.478 0.117,1.09 -0.36,1.368 l -8,4.667 v -1.728 l 8,4.667 c 0.477,0.278 0.638,0.89 0.36,1.368 -0.279,0.477 -0.891,0.638 -1.368,0.359 z m 121.224,-11.06 9.48,5.53 -9.48,5.531 c -0.48,0.278 -1.09,0.117 -1.37,-0.36 -0.28,-0.477 -0.11,-1.09 0.36,-1.368 l 8,-4.667 v 1.728 l -8,-4.667 c -0.47,-0.278 -0.64,-0.89 -0.36,-1.367 0.28,-0.477 0.89,-0.639 1.37,-0.36 z"
|
||||
id="path17" />
|
||||
<path
|
||||
d="m 1114,205 v 59.488"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path18" />
|
||||
<path
|
||||
d="m 123.188,614.022 -0.184,-92.04 2,-0.004 0.184,92.04 z m 6.516,-7.509 -5.512,9.492 -5.549,-9.47 c -0.279,-0.477 -0.119,-1.089 0.357,-1.368 0.477,-0.28 1.089,-0.12 1.368,0.357 l 4.683,7.99 -1.727,0.004 4.65,-8.009 c 0.278,-0.478 0.89,-0.64 1.367,-0.363 0.478,0.277 0.64,0.889 0.363,1.367 z m -11.215,-77.026 5.511,-9.492 5.549,9.47 c 0.28,0.477 0.12,1.089 -0.357,1.368 -0.476,0.28 -1.089,0.12 -1.368,-0.357 l -4.683,-7.99 1.728,-0.004 -4.651,8.009 c -0.277,0.478 -0.889,0.64 -1.367,0.363 -0.477,-0.277 -0.64,-0.889 -0.362,-1.367 z"
|
||||
id="path19" />
|
||||
<path
|
||||
d="M 0,0 88.0784,1.04987e-4"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(-1,0,0,1,165.078,616)"
|
||||
id="path20" />
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(38.1987,453)"
|
||||
id="text20">H</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(57.0321,453)"
|
||||
id="text21">F</text>
|
||||
<path
|
||||
d="M 0,0 45.3722,1.04987e-4"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(-1,0,0,1,153.372,521)"
|
||||
id="path21" />
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(40.9113,575)"
|
||||
id="text22">H</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(59.7446,575)"
|
||||
id="text23">AS</text>
|
||||
<path
|
||||
d="M 1,1.9794 1.0001,341.406 H -0.999896 L -0.999999,1.9794 Z M -5.53044,9.47613 -1.09084e-8,-0.0046346 5.53045,9.47613 C 5.80873,9.95318 5.64759,10.5655 5.17054,10.8438 4.69349,11.1221 4.08117,10.9609 3.80289,10.4839 L -0.863778,2.48387 H 0.86378 l -4.66667,8.00003 c -0.27828,0.477 -0.89059,0.6382 -1.36765,0.3599 -0.47705,-0.2783 -0.63818,-0.89062 -0.3599,-1.36767 z M 5.53055,333.909 1.04861e-4,343.39 -5.53034,333.909 c -0.27828,-0.477 -0.11715,-1.089 0.3599,-1.367 0.47706,-0.279 1.08937,-0.118 1.36765,0.36 l 4.666673,8 h -1.727558 l 4.666665,-8 c 0.27828,-0.478 0.8906,-0.639 1.36765,-0.36 0.47705,0.278 0.63819,0.89 0.35991,1.367 z"
|
||||
transform="matrix(1,0,0,-1,94,616.385)"
|
||||
id="path23" />
|
||||
<path
|
||||
d="M 0,0 197.424,1.04987e-4"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(-1,0,0,1,281.424,273)"
|
||||
id="path24" />
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(213.958,202)"
|
||||
id="text24">L</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(227.292,202)"
|
||||
id="text25">AS</text>
|
||||
<path
|
||||
d="m 172.98,213 h 120.304 v 2 H 172.98 Z m 7.496,6.53 -9.481,-5.53 9.481,-5.53 c 0.477,-0.279 1.09,-0.118 1.368,0.359 0.278,0.478 0.117,1.09 -0.36,1.368 l -8,4.667 v -1.728 l 8,4.667 c 0.477,0.278 0.638,0.89 0.36,1.368 -0.279,0.477 -0.891,0.638 -1.368,0.359 z m 105.312,-11.06 9.481,5.53 -9.481,5.531 c -0.477,0.278 -1.089,0.117 -1.367,-0.36 -0.279,-0.477 -0.117,-1.09 0.36,-1.368 l 8,-4.667 v 1.728 l -8,-4.667 c -0.477,-0.278 -0.639,-0.89 -0.36,-1.367 0.278,-0.477 0.89,-0.639 1.367,-0.36 z"
|
||||
id="path25" />
|
||||
<path
|
||||
d="m 171,205 v 80.092"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path26" />
|
||||
<path
|
||||
d="m 172.971,670 h 940.919 v 2 H 172.971 Z m 7.505,6.53 -9.481,-5.53 9.481,-5.53 c 0.477,-0.279 1.089,-0.118 1.368,0.359 0.278,0.478 0.117,1.09 -0.36,1.368 l -8,4.667 v -1.728 l 8,4.667 c 0.477,0.278 0.638,0.89 0.36,1.368 -0.279,0.477 -0.891,0.638 -1.368,0.359 z m 925.914,-11.06 9.48,5.53 -9.48,5.531 c -0.48,0.278 -1.09,0.117 -1.37,-0.36 -0.28,-0.477 -0.12,-1.09 0.36,-1.368 l 8,-4.667 v 1.728 l -8,-4.667 c -0.48,-0.278 -0.64,-0.89 -0.36,-1.367 0.28,-0.477 0.89,-0.639 1.37,-0.36 z"
|
||||
id="path27" />
|
||||
<path
|
||||
d="M 1116,483 V 681.968"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path28" />
|
||||
<path
|
||||
d="m 171,625 v 57"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path29" />
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(601.134,662)"
|
||||
id="text29">L</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(614.468,662)"
|
||||
id="text30">1</text>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.23034607,0,0,0.23034607,0.53613215,2.9601198)"
|
||||
id="g13">
|
||||
<rect
|
||||
x="0"
|
||||
y="0"
|
||||
width="123"
|
||||
height="96"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
transform="matrix(-1,0,0,1,294,521)"
|
||||
id="rect1" />
|
||||
<path
|
||||
d="m 171,521 122.88,96"
|
||||
stroke="#e59edd"
|
||||
stroke-width="4"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path1-0" />
|
||||
<path
|
||||
d="M 0,0 410.718,344.84"
|
||||
stroke="#7030a0"
|
||||
stroke-width="4"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(1,0,0,-1,293,616.84)"
|
||||
id="path2-9" />
|
||||
<path
|
||||
d="M 972.8,388.36 704,272"
|
||||
stroke="#00b0f0"
|
||||
stroke-width="4"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path3-4" />
|
||||
<path
|
||||
d="M 1116.08,421.6 974,388"
|
||||
stroke="#c1e5f5"
|
||||
stroke-width="4"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path4-8" />
|
||||
<text
|
||||
fill="#7030a0"
|
||||
font-family="Symbol, Symbol_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="43px"
|
||||
transform="translate(411.13,582)"
|
||||
id="text4"></text>
|
||||
<text
|
||||
fill="#7030a0"
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="24px"
|
||||
transform="translate(438.13,582)"
|
||||
id="text5-8">F</text>
|
||||
<text
|
||||
fill="#00b0f0"
|
||||
font-family="Symbol, Symbol_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="43px"
|
||||
transform="translate(803.268,370)"
|
||||
id="text6-2"></text>
|
||||
<text
|
||||
fill="#00b0f0"
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="24px"
|
||||
transform="translate(830.268,370)"
|
||||
id="text7-4">S</text>
|
||||
<path
|
||||
d="m 452.5,483.5 c 35.65,34.747 46.361,64.679 47,130"
|
||||
stroke="#7030a0"
|
||||
stroke-width="3"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path7" />
|
||||
<path
|
||||
d="M 0,0 C 26.5571,21.2117 32.3714,48.3031 33,77"
|
||||
stroke="#00b0f0"
|
||||
stroke-width="3"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
transform="matrix(-1,0,0,1,797.5,311.5)"
|
||||
id="path8-5" />
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(136.448,500)"
|
||||
id="text8-5">Ho</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="27px"
|
||||
transform="translate(1116.31,461)"
|
||||
id="text9">H</text>
|
||||
<text
|
||||
font-family="Aptos, Aptos_MSFontService, sans-serif"
|
||||
font-weight="400"
|
||||
font-size="21px"
|
||||
transform="translate(1135.14,461)"
|
||||
id="text10">1</text>
|
||||
<path
|
||||
d="m 1107,422 c 0,-4.971 4.03,-9 9,-9 4.97,0 9,4.029 9,9 0,4.971 -4.03,9 -9,9 -4.97,0 -9,-4.029 -9,-9 z"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path10-1" />
|
||||
<path
|
||||
d="m 162,521 c 0,-4.971 4.029,-9 9,-9 4.971,0 9,4.029 9,9 0,4.971 -4.029,9 -9,9 -4.971,0 -9,-4.029 -9,-9 z"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="path11-7" />
|
||||
<rect
|
||||
x="294"
|
||||
y="272"
|
||||
width="410"
|
||||
height="345"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
id="rect11" />
|
||||
<rect
|
||||
x="704"
|
||||
y="272"
|
||||
width="269"
|
||||
height="116"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
id="rect12" />
|
||||
<rect
|
||||
x="0"
|
||||
y="0"
|
||||
width="144"
|
||||
height="34"
|
||||
stroke="#000000"
|
||||
stroke-width="2"
|
||||
stroke-miterlimit="8"
|
||||
fill="none"
|
||||
transform="matrix(-1,0,0,1,1117,388)"
|
||||
id="rect13" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,150 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Filtert ein ZIP-Archiv und entfernt alle .stl Dateien.
|
||||
Ausgabe: originalname_heute.zip (oder ersetzt Original mit --replace)
|
||||
"""
|
||||
|
||||
import zipfile
|
||||
import sys
|
||||
import argparse
|
||||
import shutil
|
||||
import struct
|
||||
import zlib
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def filter_zip_no_stl(source_zip_path: str, replace: bool = False) -> str:
|
||||
"""
|
||||
Öffnet ein ZIP und erstellt ein neues ohne .stl Dateien.
|
||||
|
||||
Args:
|
||||
source_zip_path: Pfad zur Quell-ZIP-Datei
|
||||
replace: Wenn True, wird das Original ersetzt
|
||||
|
||||
Returns:
|
||||
Pfad zur erstellten/ersetzten ZIP-Datei
|
||||
"""
|
||||
source_path = Path(source_zip_path)
|
||||
|
||||
if not source_path.exists():
|
||||
raise FileNotFoundError(f"Datei nicht gefunden: {source_zip_path}")
|
||||
|
||||
if not source_path.suffix.lower() == '.zip':
|
||||
raise ValueError(f"Keine ZIP-Datei: {source_zip_path}")
|
||||
|
||||
# Temporäres Ziel-ZIP
|
||||
temp_path = source_path.with_name(f"{source_path.stem}_heute.zip")
|
||||
|
||||
copied_count = 0
|
||||
skipped_count = 0
|
||||
|
||||
print("Filtere ZIP und erstelle neues Archiv mit UTF-8 Encoding...")
|
||||
|
||||
with zipfile.ZipFile(source_path, 'r') as src_zip:
|
||||
with zipfile.ZipFile(temp_path, 'w', zipfile.ZIP_DEFLATED) as dst_zip:
|
||||
# Iteriere über alle Dateien im Quell-ZIP
|
||||
for info in src_zip.infolist():
|
||||
# Verzeichnisse überspringen
|
||||
if info.is_dir():
|
||||
continue
|
||||
|
||||
# .stl Dateien überspringen
|
||||
if info.filename.lower().endswith('.stl'):
|
||||
skipped_count += 1
|
||||
print(f" - {info.filename}")
|
||||
continue
|
||||
|
||||
# Kopiere Datei ins neue ZIP
|
||||
try:
|
||||
# Lese Dateiinhalt
|
||||
with src_zip.open(info, 'r') as source:
|
||||
file_data = source.read()
|
||||
|
||||
# Schreibe ins neue ZIP (mit UTF-8 Encoding)
|
||||
dst_zip.writestr(info.filename, file_data, compress_type=zipfile.ZIP_DEFLATED)
|
||||
copied_count += 1
|
||||
|
||||
except Exception as e:
|
||||
# Fallback: Low-Level Extraktion für problematische Dateien
|
||||
try:
|
||||
# Lese direkt aus der ZIP-Datei ohne Validierung
|
||||
with open(source_path, 'rb') as f:
|
||||
# Gehe zu Local File Header
|
||||
f.seek(info.header_offset)
|
||||
|
||||
# Lese Local File Header (30 Bytes)
|
||||
fheader = f.read(30)
|
||||
if len(fheader) != 30:
|
||||
raise Exception("Kann Local File Header nicht lesen")
|
||||
|
||||
# Parse Header (ZIP Local File Header format)
|
||||
sig, ver, flags, comp_method, mod_time, mod_date, crc, comp_size, uncomp_size, fname_len, extra_len = struct.unpack('<4s5H3I2H', fheader)
|
||||
if sig != b'PK\x03\x04':
|
||||
raise Exception("Ungültiger Local File Header")
|
||||
|
||||
# Lese raw filename bytes aus Header
|
||||
raw_filename_bytes = f.read(fname_len)
|
||||
|
||||
# Überspringe Extra Field
|
||||
f.seek(info.header_offset + 30 + fname_len + extra_len)
|
||||
|
||||
# Lese komprimierte Daten
|
||||
compressed_data = f.read(comp_size)
|
||||
|
||||
# Dekomprimiere
|
||||
if comp_method == 8: # DEFLATE
|
||||
file_data = zlib.decompress(compressed_data, -zlib.MAX_WBITS)
|
||||
elif comp_method == 0: # STORED
|
||||
file_data = compressed_data
|
||||
else:
|
||||
raise Exception(f"Unbekannte Kompression: {comp_method}")
|
||||
|
||||
# Dekodiere Dateinamen mit latin-1 (ISO-8859-1)
|
||||
# latin-1 unterstützt deutsche Umlaute korrekt (\xf6 = ö)
|
||||
correct_filename = raw_filename_bytes.decode('latin-1', errors='replace')
|
||||
|
||||
# Schreibe ins neue ZIP mit korrigiertem Namen
|
||||
dst_zip.writestr(correct_filename, file_data, compress_type=zipfile.ZIP_DEFLATED)
|
||||
copied_count += 1
|
||||
print(f" + {correct_filename} (re-encoded)")
|
||||
|
||||
except Exception as e2:
|
||||
print(f" ! Warnung: Konnte {info.filename} nicht kopieren: {e2}")
|
||||
skipped_count += 1
|
||||
|
||||
print(f"\nErgebnis: {copied_count} Datei(en) kopiert, {skipped_count} STL-Datei(en) entfernt")
|
||||
|
||||
if replace:
|
||||
shutil.move(str(temp_path), str(source_path))
|
||||
print(f"Original ersetzt: {source_path}")
|
||||
return str(source_path)
|
||||
else:
|
||||
print(f"Ziel-ZIP: {temp_path}")
|
||||
return str(temp_path)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Filtert ZIP-Archive und entfernt alle .stl Dateien."
|
||||
)
|
||||
parser.add_argument(
|
||||
"zipfile",
|
||||
help="Pfad zur Quell-ZIP-Datei"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--replace",
|
||||
action="store_true",
|
||||
help="Original-ZIP durch gefilterte Version ersetzen"
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
try:
|
||||
filter_zip_no_stl(args.zipfile, args.replace)
|
||||
except (FileNotFoundError, ValueError, zipfile.BadZipFile) as e:
|
||||
print(f"Fehler: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,10 @@
|
||||
echo === EXE erstellen ===
|
||||
|
||||
@echo off
|
||||
call .venv\Scripts\activate.bat
|
||||
pyinstaller --onefile filter_zip_no_stl.py
|
||||
|
||||
echo.
|
||||
echo === Fertig! ===
|
||||
move dist\filter_zip_no_stl.exe ..\..\Sessions\removeStls.exe
|
||||
pause
|
||||
@@ -0,0 +1,2 @@
|
||||
# Für EXE-Erstellung
|
||||
pyinstaller>=6.0
|
||||
@@ -0,0 +1,32 @@
|
||||
@echo off
|
||||
echo === Virtuelle Umgebung einrichten ===
|
||||
|
||||
REM Prüfen ob Python verfügbar ist
|
||||
python --version >nul 2>&1
|
||||
if errorlevel 1 (
|
||||
echo Fehler: Python nicht gefunden!
|
||||
echo Bitte Python installieren und zum PATH hinzufügen.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM Virtuelle Umgebung erstellen
|
||||
echo Erstelle .venv ...
|
||||
python -m venv .venv
|
||||
|
||||
REM Aktivieren und Dependencies installieren
|
||||
echo Aktiviere .venv und installiere Abhängigkeiten ...
|
||||
call .venv\Scripts\activate.bat
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
|
||||
echo.
|
||||
echo === Fertig! ===
|
||||
echo.
|
||||
echo Zum Aktivieren der Umgebung:
|
||||
echo .venv\Scripts\activate
|
||||
echo.
|
||||
echo Zum Erstellen der EXE:
|
||||
echo pyinstaller --onefile filter_zip_no_stl.py
|
||||
echo.
|
||||
pause
|
||||
@@ -0,0 +1,442 @@
|
||||
# Gleichungen Förderer aufwärts
|
||||
|
||||

|
||||
**violett** ist F wie _Förderer_
|
||||
**hellblau** ist S wie _Strecke_
|
||||
**AS** ist _Ausschleus_- Element
|
||||
**ES** ist _Einschleus_- Element
|
||||
|
||||
|
||||
## Gegeben
|
||||
|
||||
$H_0$, $H_1$, $L_1$, $\alpha_F$, $\alpha_S$, $L_{ES}$, $H_{ES}$, $L_{AS}$, $H_{AS}$
|
||||
|
||||
## Gesucht
|
||||
|
||||
$L_F$, $L_S$, $H_F$, $H_S$
|
||||
|
||||
---
|
||||
|
||||
## Grundgleichungen ($H_1 > H_0$, Förderrichtung: von $H_0$ nach $H_1$)
|
||||
|
||||
**(1) Horizontal:**
|
||||
|
||||
$$L_1 = L_{ES} + L_F + L_S + L_{AS}$$
|
||||
|
||||
**(2) Vertikal:**
|
||||
|
||||
$$H_1 - H_0 = H_F - H_S - H_{ES} - H_{AS}$$
|
||||
|
||||
**(3) Neigung F:**
|
||||
|
||||
$$\tan(\alpha_F) = \frac{H_F}{L_F} \quad \Rightarrow \quad H_F = L_F \cdot \tan(\alpha_F)$$
|
||||
|
||||
**(4) Neigung S:**
|
||||
|
||||
$$\tan(\alpha_S) = \frac{H_S}{L_S} \quad \Rightarrow \quad H_S = L_S \cdot \tan(\alpha_S)$$
|
||||
|
||||
---
|
||||
|
||||
## Lösung (Einsetzen von (3),(4) in (1),(2))
|
||||
|
||||
**(I)**
|
||||
|
||||
$$L_F + L_S = L_1 - L_{ES} - L_{AS}$$
|
||||
|
||||
**(II)**
|
||||
|
||||
$$L_F \cdot \tan(\alpha_F) - L_S \cdot \tan(\alpha_S) = (H_1 - H_0) + H_{ES} + H_{AS}$$
|
||||
|
||||
---
|
||||
|
||||
## Ergebnis
|
||||
|
||||
$$L_F = \frac{(H_1 - H_0 + H_{ES} + H_{AS}) + (L_1 - L_{ES} - L_{AS}) \cdot \tan(\alpha_S)}{\tan(\alpha_F) + \tan(\alpha_S)}$$
|
||||
|
||||
$$L_S = (L_1 - L_{ES} - L_{AS}) - L_F$$
|
||||
|
||||
$$H_F = L_F \cdot \tan(\alpha_F)$$
|
||||
|
||||
$$H_S = L_S \cdot \tan(\alpha_S)$$
|
||||
|
||||
|
||||
# Gleichungen Förderer abwärts
|
||||
|
||||

|
||||
|
||||
## Gegeben
|
||||
|
||||
$H_0$, $H_1$, $L_1$, $\alpha_F$, $\alpha_S$, $L_{ES}$, $H_{ES}$, $L_{AS}$, $H_{AS}$
|
||||
|
||||
## Gesucht
|
||||
|
||||
$L_F$, $L_S$, $H_F$, $H_S$
|
||||
|
||||
---
|
||||
|
||||
## Grundgleichungen ($H_0 > H_1$, Förderrichtung: von $H_0$ nach $H_1$)
|
||||
|
||||
**(1) Horizontal:**
|
||||
|
||||
$$L_1 = L_{ES} + L_F + L_S + L_{AS}$$
|
||||
|
||||
**(2) Vertikal:**
|
||||
|
||||
$$H_0 - H_1 = H_{ES} + H_F + H_S + H_{AS}$$
|
||||
|
||||
**(3) Neigung F:**
|
||||
|
||||
$$\tan(\alpha_F) = \frac{H_F}{L_F} \quad \Rightarrow \quad H_F = L_F \cdot \tan(\alpha_F)$$
|
||||
|
||||
**(4) Neigung S:**
|
||||
|
||||
$$\tan(\alpha_S) = \frac{H_S}{L_S} \quad \Rightarrow \quad H_S = L_S \cdot \tan(\alpha_S)$$
|
||||
|
||||
---
|
||||
|
||||
## Lösung (Einsetzen von (3),(4) in (1),(2))
|
||||
|
||||
**(I)**
|
||||
|
||||
$$L_F + L_S = L_1 - L_{ES} - L_{AS}$$
|
||||
|
||||
**(II)**
|
||||
|
||||
$$L_F \cdot \tan(\alpha_F) + L_S \cdot \tan(\alpha_S) = (H_0 - H_1) - H_{ES} - H_{AS}$$
|
||||
|
||||
---
|
||||
|
||||
## Ergebnis
|
||||
|
||||
$$L_F = \frac{(H_0 - H_1 - H_{ES} - H_{AS}) - (L_1 - L_{ES} - L_{AS}) \cdot \tan(\alpha_S)}{\tan(\alpha_F) - \tan(\alpha_S)}$$
|
||||
|
||||
$$L_S = (L_1 - L_{ES} - L_{AS}) - L_F$$
|
||||
|
||||
$$H_F = L_F \cdot \tan(\alpha_F)$$
|
||||
|
||||
$$H_S = L_S \cdot \tan(\alpha_S)$$
|
||||
|
||||
# Zusammenfassung
|
||||
|
||||
Wobei $\alpha_S$ normalerweise immer bei 3° liegt und $\alpha_F$ von 3,6,9,12,15.. 51° läuft.
|
||||
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Förderer-Berechnung in 2D – beide Fälle
|
||||
====================================================
|
||||
Aufwärts (H1 > H0):
|
||||
ΔH = H1 - H0
|
||||
L_F = (ΔH + H_ES + H_AS + L_rest·tan(α_S)) / (tan(α_F) + tan(α_S))
|
||||
Probe: H_F - H_S - H_ES - H_AS = ΔH
|
||||
|
||||
Abwärts (H0 > H1):
|
||||
ΔH = H0 - H1
|
||||
L_F = (ΔH - H_ES - H_AS - L_rest·tan(α_S)) / (tan(α_F) - tan(α_S))
|
||||
Probe: H_ES + H_F + H_S + H_AS = ΔH
|
||||
"""
|
||||
|
||||
import math
|
||||
|
||||
# ============================================================
|
||||
# KONSTANTEN [alle in Meter / Grad]
|
||||
# ============================================================
|
||||
H0 = 2.0
|
||||
H1 = 5.0
|
||||
L1 = 8.0
|
||||
L_ES = 1.0
|
||||
H_ES = 0.3
|
||||
L_AS = 1.0
|
||||
H_AS = 0.3
|
||||
|
||||
ALPHA_S = 3.0
|
||||
ALPHA_F_LIST = [3, 6, 9, 12, 15, 18, 24, 27, 33, 39, 45, 51]
|
||||
|
||||
|
||||
def berechne(h0, h1, l1, l_es, h_es, l_as, h_as, alpha_f_deg, alpha_s_deg):
|
||||
"""
|
||||
Berechnet L_F, L_S, H_F, H_S.
|
||||
Unterscheidet automatisch aufwärts/abwärts anhand h0 vs h1.
|
||||
"""
|
||||
alpha_f = math.radians(alpha_f_deg)
|
||||
alpha_s = math.radians(alpha_s_deg)
|
||||
tan_f = math.tan(alpha_f)
|
||||
tan_s = math.tan(alpha_s)
|
||||
l_rest = l1 - l_es - l_as
|
||||
|
||||
if h1 >= h0:
|
||||
# === AUFWÄRTS ===
|
||||
# (2): H1 - H0 = H_F - H_S - H_ES - H_AS
|
||||
delta_h = h1 - h0
|
||||
nenner = tan_f + tan_s
|
||||
if abs(nenner) < 1e-12:
|
||||
return None
|
||||
zaehler = (delta_h + h_es + h_as) + l_rest * tan_s
|
||||
fall = "aufwärts"
|
||||
else:
|
||||
# === ABWÄRTS ===
|
||||
# (2): H0 - H1 = H_ES + H_F + H_S + H_AS
|
||||
delta_h = h0 - h1
|
||||
nenner = tan_f - tan_s
|
||||
if abs(nenner) < 1e-12:
|
||||
return None
|
||||
zaehler = (delta_h - h_es - h_as) - l_rest * tan_s
|
||||
fall = "abwärts"
|
||||
|
||||
l_f = zaehler / nenner
|
||||
l_s = l_rest - l_f
|
||||
h_f = l_f * tan_f
|
||||
h_s = l_s * tan_s
|
||||
|
||||
# Gegenprobe
|
||||
if fall == "aufwärts":
|
||||
probe = h_f - h_s - h_es - h_as # soll = H1-H0
|
||||
else:
|
||||
probe = h_es + h_f + h_s + h_as # soll = H0-H1
|
||||
|
||||
return {
|
||||
"L_F": l_f, "L_S": l_s,
|
||||
"H_F": h_f, "H_S": h_s,
|
||||
"fall": fall, "delta_h": delta_h, "probe": probe,
|
||||
}
|
||||
|
||||
|
||||
def validierung(erg):
|
||||
probleme = []
|
||||
for key in ("L_F", "L_S", "H_F", "H_S"):
|
||||
if erg[key] < 0:
|
||||
probleme.append(f"{key} < 0")
|
||||
# L_F und L_S dürfen auch nicht > L_rest sein (implizit durch L_S < 0)
|
||||
return (len(probleme) == 0, probleme)
|
||||
|
||||
|
||||
def md_tabelle(fall_name, h0_val, h1_val):
|
||||
"""Erzeugt Markdown-Tabelle. Fall wird aus h0/h1 abgeleitet."""
|
||||
l_rest = L1 - L_ES - L_AS
|
||||
delta_h = abs(h1_val - h0_val)
|
||||
richtung = "aufwärts" if h1_val >= h0_val else "abwärts"
|
||||
|
||||
lines = []
|
||||
lines.append(f"### {fall_name}")
|
||||
lines.append(f"H₀ = {h0_val:.3f} m, H₁ = {h1_val:.3f} m → **{richtung}**, "
|
||||
f"ΔH = {delta_h:.4f} m, L_rest = {l_rest:.3f} m\n")
|
||||
|
||||
if richtung == "aufwärts":
|
||||
lines.append("Formel: L_F = (ΔH + H_ES + H_AS + L_rest·tan α_S) / "
|
||||
"(tan α_F **+** tan α_S)")
|
||||
lines.append("")
|
||||
lines.append("Probe: H_F − H_S − H_ES − H_AS = ΔH\n")
|
||||
else:
|
||||
lines.append("Formel: L_F = (ΔH − H_ES − H_AS − L_rest·tan α_S) / "
|
||||
"(tan α_F **−** tan α_S)")
|
||||
lines.append("")
|
||||
lines.append("Probe: H_ES + H_F + H_S + H_AS = ΔH\n")
|
||||
|
||||
lines.append("| α_F [°] | L_F [m] | L_S [m] | H_F [m] | H_S [m] | Probe | Status |")
|
||||
lines.append("|--------:|--------:|--------:|--------:|--------:|------:|--------|")
|
||||
|
||||
for alpha_f_deg in ALPHA_F_LIST:
|
||||
erg = berechne(h0_val, h1_val, L1, L_ES, H_ES, L_AS, H_AS,
|
||||
alpha_f_deg, ALPHA_S)
|
||||
if erg is None:
|
||||
lines.append(f"| {alpha_f_deg} | — | — | — | — | — | ⚠ Nenner = 0 |")
|
||||
continue
|
||||
|
||||
gueltig, probleme = validierung(erg)
|
||||
status = "✓ gültig" if gueltig else f"✗ {', '.join(probleme)}"
|
||||
|
||||
lines.append(
|
||||
f"| {alpha_f_deg} "
|
||||
f"| {erg['L_F']:.4f} "
|
||||
f"| {erg['L_S']:.4f} "
|
||||
f"| {erg['H_F']:.4f} "
|
||||
f"| {erg['H_S']:.4f} "
|
||||
f"| {erg['probe']:.4f} "
|
||||
f"| {status} |"
|
||||
)
|
||||
lines.append("")
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def grenzen():
|
||||
"""Erzeugt Übersichtstabellen: für welche (ΔH, L1) Kombinationen
|
||||
existieren gültige Lösungen? Zeigt den kleinsten gültigen α_F.
|
||||
ΔH von 0..5 m, L1 von 3..15 m."""
|
||||
delta_h_list = [0, 1, 2, 3, 4, 5]
|
||||
l1_list = [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
|
||||
lines = []
|
||||
|
||||
for richtung in ("aufwärts", "abwärts"):
|
||||
lines.append(f"### {richtung.capitalize()}\n")
|
||||
lines.append("Zelle = kleinster gültiger α_F [°], "
|
||||
"**—** = keine Lösung\n")
|
||||
|
||||
# Header
|
||||
header = "| ΔH \\ L₁ |" + "|".join(f" {l1} m " for l1 in l1_list) + "|"
|
||||
sep = "|--------:|" + "|".join("------:" for _ in l1_list) + "|"
|
||||
lines.append(header)
|
||||
lines.append(sep)
|
||||
|
||||
for dh in delta_h_list:
|
||||
if richtung == "aufwärts":
|
||||
h0, h1 = 0, dh
|
||||
else:
|
||||
h0, h1 = dh, 0
|
||||
|
||||
row = f"| {dh} m |"
|
||||
for l1 in l1_list:
|
||||
min_alpha = None
|
||||
for alpha_f_deg in ALPHA_F_LIST:
|
||||
erg = berechne(h0, h1, l1, L_ES, H_ES, L_AS, H_AS,
|
||||
alpha_f_deg, ALPHA_S)
|
||||
if erg is not None:
|
||||
gueltig, _ = validierung(erg)
|
||||
if gueltig:
|
||||
min_alpha = alpha_f_deg
|
||||
break
|
||||
if min_alpha is not None:
|
||||
row += f" {min_alpha}° |"
|
||||
else:
|
||||
row += " — |"
|
||||
lines.append(row)
|
||||
lines.append("")
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def main():
|
||||
md = []
|
||||
md.append("# Förderer-Berechnung (2D-Modell)\n")
|
||||
|
||||
md.append("## Gegebene Werte\n")
|
||||
md.append("| Parameter | Wert |")
|
||||
md.append("|-----------|-----:|")
|
||||
md.append(f"| H₀ | {H0:.3f} m |")
|
||||
md.append(f"| H₁ | {H1:.3f} m |")
|
||||
md.append(f"| L₁ | {L1:.3f} m |")
|
||||
md.append(f"| L_ES | {L_ES:.3f} m |")
|
||||
md.append(f"| H_ES | {H_ES:.3f} m |")
|
||||
md.append(f"| L_AS | {L_AS:.3f} m |")
|
||||
md.append(f"| H_AS | {H_AS:.3f} m |")
|
||||
md.append(f"| α_S | {ALPHA_S:.1f}° |")
|
||||
md.append("")
|
||||
|
||||
md.append("## Ergebnisse\n")
|
||||
|
||||
# Fall 1: Aufwärts – H0=2 → H1=5
|
||||
md.append(md_tabelle("Fall 1: Aufwärts", h0_val=H0, h1_val=H1))
|
||||
|
||||
# Fall 2: Abwärts – H0=5 → H1=2 (vertauscht!)
|
||||
md.append(md_tabelle("Fall 2: Abwärts", h0_val=H1, h1_val=H0))
|
||||
|
||||
md.append("## Grenzen der Varianten\n")
|
||||
md.append(grenzen())
|
||||
|
||||
result = "\n".join(md)
|
||||
print(result)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
# Förderer-Berechnung (2D-Modell)
|
||||
|
||||
## Gegebene Werte
|
||||
|
||||
| Parameter | Wert |
|
||||
|-----------|-----:|
|
||||
| H₀ | 2.000 m |
|
||||
| H₁ | 5.000 m |
|
||||
| L₁ | 8.000 m |
|
||||
| L_ES | 1.000 m |
|
||||
| H_ES | 0.300 m |
|
||||
| L_AS | 1.000 m |
|
||||
| H_AS | 0.300 m |
|
||||
| α_S | 3.0° |
|
||||
|
||||
## Ergebnisse
|
||||
|
||||
### Fall 1: Aufwärts
|
||||
H₀ = 2.000 m, H₁ = 5.000 m → **aufwärts**, ΔH = 3.0000 m, L_rest = 6.000 m
|
||||
|
||||
Formel: L_F = (ΔH + H_ES + H_AS + L_rest·tan α_S) / (tan α_F **+** tan α_S)
|
||||
|
||||
Probe: H_F − H_S − H_ES − H_AS = ΔH
|
||||
|
||||
| α_F [°] | L_F [m] | L_S [m] | H_F [m] | H_S [m] | Probe | Status |
|
||||
|--------:|--------:|--------:|--------:|--------:|------:|--------|
|
||||
| 3 | 37.3460 | -31.3460 | 1.9572 | -1.6428 | 3.0000 | ✗ L_S < 0, H_S < 0 |
|
||||
| 6 | 24.8517 | -18.8517 | 2.6120 | -0.9880 | 3.0000 | ✗ L_S < 0, H_S < 0 |
|
||||
| 9 | 18.5702 | -12.5702 | 2.9412 | -0.6588 | 3.0000 | ✗ L_S < 0, H_S < 0 |
|
||||
| 12 | 14.7735 | -8.7735 | 3.1402 | -0.4598 | 3.0000 | ✗ L_S < 0, H_S < 0 |
|
||||
| 15 | 12.2190 | -6.2190 | 3.2741 | -0.3259 | 3.0000 | ✗ L_S < 0, H_S < 0 |
|
||||
| 18 | 10.3741 | -4.3741 | 3.3708 | -0.2292 | 3.0000 | ✗ L_S < 0, H_S < 0 |
|
||||
| 24 | 7.8661 | -1.8661 | 3.5022 | -0.0978 | 3.0000 | ✗ L_S < 0, H_S < 0 |
|
||||
| 27 | 6.9660 | -0.9660 | 3.5494 | -0.0506 | 3.0000 | ✗ L_S < 0, H_S < 0 |
|
||||
| 33 | 5.5776 | 0.4224 | 3.6221 | 0.0221 | 3.0000 | ✓ gültig |
|
||||
| 39 | 4.5401 | 1.4599 | 3.6765 | 0.0765 | 3.0000 | ✓ gültig |
|
||||
| 45 | 3.7195 | 2.2805 | 3.7195 | 0.1195 | 3.0000 | ✓ gültig |
|
||||
| 51 | 3.0408 | 2.9592 | 3.7551 | 0.1551 | 3.0000 | ✓ gültig |
|
||||
|
||||
### Fall 2: Abwärts
|
||||
H₀ = 5.000 m, H₁ = 2.000 m → **abwärts**, ΔH = 3.0000 m, L_rest = 6.000 m
|
||||
|
||||
Formel: L_F = (ΔH − H_ES − H_AS − L_rest·tan α_S) / (tan α_F **−** tan α_S)
|
||||
|
||||
Probe: H_ES + H_F + H_S + H_AS = ΔH
|
||||
|
||||
| α_F [°] | L_F [m] | L_S [m] | H_F [m] | H_S [m] | Probe | Status |
|
||||
|--------:|--------:|--------:|--------:|--------:|------:|--------|
|
||||
| 3 | — | — | — | — | — | ⚠ Nenner = 0 |
|
||||
| 6 | 39.5767 | -33.5767 | 4.1597 | -1.7597 | 3.0000 | ✗ L_S < 0, H_S < 0 |
|
||||
| 9 | 19.6794 | -13.6794 | 3.1169 | -0.7169 | 3.0000 | ✗ L_S < 0, H_S < 0 |
|
||||
| 12 | 13.0226 | -7.0226 | 2.7680 | -0.3680 | 3.0000 | ✗ L_S < 0, H_S < 0 |
|
||||
| 15 | 9.6759 | -3.6759 | 2.5926 | -0.1926 | 3.0000 | ✗ L_S < 0, H_S < 0 |
|
||||
| 18 | 7.6531 | -1.6531 | 2.4866 | -0.0866 | 3.0000 | ✗ L_S < 0, H_S < 0 |
|
||||
| 24 | 5.3092 | 0.6908 | 2.3638 | 0.0362 | 3.0000 | ✓ gültig |
|
||||
| 27 | 4.5624 | 1.4376 | 2.3247 | 0.0753 | 3.0000 | ✓ gültig |
|
||||
| 33 | 3.4934 | 2.5066 | 2.2686 | 0.1314 | 3.0000 | ✓ gültig |
|
||||
| 39 | 2.7537 | 3.2463 | 2.2299 | 0.1701 | 3.0000 | ✓ gültig |
|
||||
| 45 | 2.2009 | 3.7991 | 2.2009 | 0.1991 | 3.0000 | ✓ gültig |
|
||||
| 51 | 1.7637 | 4.2363 | 2.1780 | 0.2220 | 3.0000 | ✓ gültig |
|
||||
|
||||
|
||||
## Grenzen der Varianten
|
||||
|
||||
| Parameter | Wert |
|
||||
|-----------|-----:|
|
||||
| ΔH | 0 … 5 m |
|
||||
| L₁ | 3 … 15 m |
|
||||
| α_S | 3° |
|
||||
| L_ES, L_AS | 1.000 m |
|
||||
| H_ES, H_AS | 0.300 m |
|
||||
|
||||
Zelle = kleinster gültiger α_F [°], **—** = keine Lösung
|
||||
|
||||
### Aufwärts
|
||||
|
||||
| ΔH \ L₁ | 3 m | 4 m | 5 m | 6 m | 7 m | 8 m | 9 m | 10 m | 11 m | 12 m | 13 m | 14 m | 15 m |
|
||||
|--------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|
|
||||
| 0 m | 33° | 18° | 12° | 9° | 9° | 6° | 6° | 6° | 6° | 6° | 6° | 3° | 3° |
|
||||
| 1 m | — | 39° | 33° | 24° | 18° | 15° | 15° | 12° | 12° | 12° | 9° | 9° | 9° |
|
||||
| 2 m | — | — | 45° | 39° | 33° | 24° | 24° | 24° | 18° | 15° | 15° | 15° | 12° |
|
||||
| 3 m | — | — | 51° | 45° | 39° | 33° | 33° | 27° | 24° | 24° | 24° | 18° | 18° |
|
||||
| 4 m | — | — | — | 51° | 45° | 39° | 39° | 33° | 33° | 27° | 24° | 24° | 24° |
|
||||
| 5 m | — | — | — | — | 51° | 45° | 39° | 39° | 33° | 33° | 27° | 27° | 24° |
|
||||
|
||||
### Abwärts
|
||||
|
||||
| ΔH \ L₁ | 3 m | 4 m | 5 m | 6 m | 7 m | 8 m | 9 m | 10 m | 11 m | 12 m | 13 m | 14 m | 15 m |
|
||||
|--------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|------:|
|
||||
| 0 m | 33° | 18° | 12° | 9° | 9° | 6° | 6° | 6° | 6° | 6° | 6° | 3° | 3° |
|
||||
| 1 m | 24° | 12° | 9° | 6° | 6° | 6° | 6° | — | — | — | — | — | — |
|
||||
| 2 m | — | 39° | 27° | 24° | 18° | 15° | 12° | 12° | 9° | 9° | 9° | 9° | 9° |
|
||||
| 3 m | — | 51° | 39° | 33° | 27° | 24° | 24° | 18° | 15° | 15° | 15° | 12° | 12° |
|
||||
| 4 m | — | — | 51° | 45° | 39° | 33° | 27° | 24° | 24° | 24° | 18° | 18° | 15° |
|
||||
| 5 m | — | — | — | 51° | 45° | 39° | 33° | 33° | 27° | 24° | 24° | 24° | 24° |
|
||||
|
||||
**Lücke bei ΔH = 1 m, L₁ ≥ 10 m:** Im Abwärts-Fall ist der Zähler der L_F-Formel
|
||||
$(ΔH - H_{ES} - H_{AS}) - L_{rest} \cdot \tan(α_S)$. Bei ΔH = 1 m und L₁ = 10 m wird
|
||||
$L_{rest}$ = 8 m und der Zähler = (1 − 0,3 − 0,3) − 8 · tan 3° = 0,4 − 0,419 = −0,019.
|
||||
Da der Nenner für alle α_F > 3° positiv ist, wird L_F negativ — es gibt keine gültige Lösung.
|
||||
|
||||
Weil bei so kleinem Höhenunterschied die Reststrecke mit 3°-Neigung allein schon mehr Höhe verbraucht als verfügbar ist.
|
||||
Die Reststrecke allein erzeugt durch die 3°-Neigung der S-Strecke plus H_ES + H_AS bereits mehr Höhe als der verfügbare Höhenunterschied ΔH = 1 m hergibt.
|
||||
@@ -0,0 +1,109 @@
|
||||
[
|
||||
{
|
||||
"ID": "s_Kurve_30_L_Aussen_F",
|
||||
"KurvenWinkel": 30,
|
||||
"Breite": 161.197,
|
||||
"Laenge": 311.186,
|
||||
"KurvenRichtung" : "links",
|
||||
"AntriebNebenStrecke": "Aussen"
|
||||
},
|
||||
{
|
||||
"ID": "s_Kurve_60_L_Aussen_F",
|
||||
"KurvenWinkel": 60,
|
||||
"Breite": 335.902,
|
||||
"Laenge": 527.586,
|
||||
"KurvenRichtung" : "links",
|
||||
"AntriebNebenStrecke": "Aussen"
|
||||
},
|
||||
{
|
||||
|
||||
"ID": "s_Kurve_90_L_Aussen_F",
|
||||
"KurvenWinkel": 90,
|
||||
"Breite": 604.384,
|
||||
"Laenge": 604.384,
|
||||
"KurvenRichtung" : "links",
|
||||
"AntriebNebenStrecke": "Aussen"
|
||||
|
||||
},
|
||||
{
|
||||
|
||||
"ID": "s_Kurve_30_R_Aussen_F",
|
||||
"KurvenWinkel": 30,
|
||||
"Breite": 161.197,
|
||||
"Laenge": 311.186,
|
||||
"KurvenRichtung" : "rechts",
|
||||
"AntriebNebenStrecke": "Aussen"
|
||||
},
|
||||
{
|
||||
|
||||
"ID": "s_Kurve_60_R_Aussen_F",
|
||||
"KurvenWinkel": 60,
|
||||
"Breite": 335.902,
|
||||
"Laenge": 527.586,
|
||||
"KurvenRichtung" : "rechts",
|
||||
"AntriebNebenStrecke": "Aussen"
|
||||
},
|
||||
{
|
||||
|
||||
"ID": "s_Kurve_90_R_Aussen_F",
|
||||
"KurvenWinkel": 90,
|
||||
"Breite": 604.384,
|
||||
"Laenge": 604.384,
|
||||
"KurvenRichtung" : "rechts",
|
||||
"AntriebNebenStrecke": "Aussen"
|
||||
},
|
||||
{
|
||||
|
||||
"ID": "s_Kurve_30_L_Innen_F",
|
||||
"KurvenWinkel": 30,
|
||||
"Breite": 215.295,
|
||||
"Laenge": 283.195,
|
||||
"KurvenRichtung" : "links",
|
||||
"AntriebNebenStrecke": "Innen"
|
||||
},
|
||||
{
|
||||
|
||||
"ID": "s_Kurve_60_L_Innen_F",
|
||||
"KurvenWinkel": 60,
|
||||
"Breite": 372.474,
|
||||
"Laenge": 456.644,
|
||||
"KurvenRichtung" : "links",
|
||||
"AntriebNebenStrecke": "Innen"
|
||||
},
|
||||
{
|
||||
|
||||
"ID": "s_Kurve_90_L_Innen_F",
|
||||
"KurvenWinkel": 90,
|
||||
"Breite": 577.221,
|
||||
"Laenge": 577.221,
|
||||
"KurvenRichtung" : "links",
|
||||
"AntriebNebenStrecke": "Innen"
|
||||
},
|
||||
{
|
||||
|
||||
"ID": "s_Kurve_30_R_Innen_F",
|
||||
"KurvenWinkel": 30,
|
||||
"Breite": 215.295,
|
||||
"Laenge": 283.195,
|
||||
"KurvenRichtung" : "rechts",
|
||||
"AntriebNebenStrecke": "Innen"
|
||||
},
|
||||
{
|
||||
|
||||
"ID": "s_Kurve_60_R_Innen_F",
|
||||
"KurvenWinkel": 60,
|
||||
"Breite": 372.474,
|
||||
"Laenge": 456.644,
|
||||
"KurvenRichtung" : "rechts",
|
||||
"AntriebNebenStrecke": "Innen"
|
||||
},
|
||||
{
|
||||
|
||||
"ID": "s_Kurve_90_R_Innen_F",
|
||||
"KurvenWinkel": 90,
|
||||
"Breite": 577.221,
|
||||
"Laenge": 577.221,
|
||||
"KurvenRichtung" : "rechts",
|
||||
"AntriebNebenStrecke": "Innen"
|
||||
}
|
||||
]
|
||||
@@ -1 +1 @@
|
||||
[{"id":"c_ILS","name":"ILS","hasShapes":false,"items":[{"id":"c_Kreiselmodule","name":"Kreisel-Module","hasShapes":true},{"id":"c_Zusatzmodul","name":"Zusatzmodul","hasShapes":true},{"id":"c_Foerderer","name":"Förderer","hasShapes":true},{"id":"c_Kurven","name":"Gefällestrecke","hasShapes":true}]},{"id":"c10","name":"PBU","hasShapes":true},{"id":"c_Background","name":"Background","hideName":true,"hasShapes":true},{"id":"c_Parts","name":"Parts","description":"Shapes used for creating new Assemblies while Session","hasShapes":true},{"id":"c_Session","name":"Session","hasShapes":true},{"id":"c_Omniflo","name":"Omniflo","hasShapes":false,"items":[{"id":"c_Boegen","name":"Bögen","hasShapes":true},{"id":"c_Gerade","name":"Aluprofil Gerade","hasShapes":true},{"id":"c_Weichen_90","name":"Weiche 90°","hasShapes":true},{"id":"c_Weichen_45","name":"Weiche 45°","hasShapes":true},{"id":"c_Weichen_Parallel","name":"Weichen Parallel","hasShapes":true},{"id":"c_Weichenkoerper","name":"Weichenkörper","hasShapes":true},{"id":"c_Weichenkombinationen","name":"Weichenkombinationen","hasShapes":true},{"id":"c_TEFElemente","name":"TEF Elemente","hasShapes":true}]},{"id":"c_OmnifloBogen","name":"Omniflo Bogen","hasShapes":true,"items":[{"id":"c_Boegen_90","name":"Bögen 90°","hasShapes":true}]},{"id":"c_OmnifloWeiche","name":"Omniflo Weiche","hasShapes":true}]
|
||||
[{"id":"c_ILS","name":"ILS","hasShapes":false,"items":[{"id":"c_Kreiselmodule","name":"Kreisel-Module","hasShapes":true},{"id":"c_Zusatzmodul","name":"Zusatzmodul","hasShapes":true},{"id":"c_Foerderer","name":"Förderer","hasShapes":true},{"id":"c_Kurven","name":"Gefällestrecke","hasShapes":true}]},{"id":"c10","name":"PBU","hasShapes":true},{"id":"c_Background","name":"Background","hideName":true,"hasShapes":true},{"id":"c_Parts","name":"Parts","description":"Shapes used for creating new Assemblies while Session","hasShapes":true},{"id":"c_Session","name":"Session","hasShapes":true},{"id":"c_Omniflo","name":"Omniflo","hasShapes":false,"items":[{"id":"c_Boegen","name":"Bögen","hasShapes":true},{"id":"c_Gerade","name":"Aluprofil Gerade","hasShapes":true},{"id":"c_Weichen_90","name":"Weiche 90°","hasShapes":true},{"id":"c_Weichen_45","name":"Weiche 45°","hasShapes":true},{"id":"c_Weichen_Parallel","name":"Weichen Parallel","hasShapes":true},{"id":"c_Weichenkoerper","name":"Weichenkörper","hasShapes":true},{"id":"c_Weichenkombinationen","name":"Weichenkombinationen","hasShapes":true},{"id":"c_TEFElemente","name":"TEF Elemente","hasShapes":true},{"id":"c_KettenFoerderer","name":"KettenFörderer","hasShapes":true}]},{"id":"c_OmnifloBogen","name":"Omniflo Bogen","hasShapes":true,"items":[{"id":"c_Boegen_90","name":"Bögen 90°","hasShapes":true}]},{"id":"c_OmnifloWeiche","name":"Omniflo Weiche","hasShapes":true},{"id":"c_vario_vertikal_bogen","name":"Varioboegen vertikal","hasShapes":true}]
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 512 B After Width: | Height: | Size: 553 B |
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.2 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user