Compare commits
210 Commits
23471a7cc6
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 2325316dd3 | |||
| 5bfda0abf6 | |||
| 200145eea7 | |||
| c29f13a4ae | |||
| e8c6b17ea9 | |||
| 85132193dd | |||
| 4aae9e153d | |||
| 855a874e4a | |||
| 829fe76d0f | |||
| ab415071c2 | |||
| c8760fb024 | |||
| 5f59433ac8 | |||
| 79ff6794db | |||
| 19282888ee | |||
| 4d09aee02b | |||
| b58e80b79f | |||
| e124272c13 | |||
| 586102cf00 | |||
| 7f81240559 | |||
| d9d398b6fd | |||
| 9a8f0ff374 | |||
| c356b24fe9 | |||
| d8f75450a9 | |||
| 257ee8304a | |||
| 0e069456ac | |||
| 77b14233ed | |||
| f9558bf8b5 | |||
| 05f1adc1b4 | |||
| 9e024869d4 | |||
| 4c071362a1 | |||
| a2fc823341 | |||
| 3e4103c6f8 | |||
| 212ec79ce8 | |||
| e67935ac6f | |||
| e928ee363d | |||
| a5baccb40a | |||
| edfb75778e | |||
| 202334570e | |||
| 2cf0cf688e | |||
| 53e42c6bc3 | |||
| a666347da9 | |||
| e46ff3bd1b | |||
| 843011bab9 | |||
| d909fa6c1a | |||
| 6ffb679497 | |||
| 0dde02eabe | |||
| 442699de19 | |||
| b455f4370f | |||
| 1d4788479a | |||
| 8eb4345cdb | |||
| 847723fe15 | |||
| fd52f2b579 | |||
| 0272daed19 | |||
| 89c8530851 | |||
| 0dee2a8af7 | |||
| c734e2f821 | |||
| c3887e2269 | |||
| 73206fda5f | |||
| 40227e9c73 | |||
| 50a1e12749 | |||
| 8e1b90d313 | |||
| 7092d13280 | |||
| 61a04726fe | |||
| 274814e38b | |||
| b5149952b8 | |||
| 161fc9cebb | |||
| 7b0427111e | |||
| 24f35a22c3 | |||
| 38d303b8a0 | |||
| a3163e12fe | |||
| fabed828db | |||
| 66a2e4f860 | |||
| 72f21f715a | |||
| b4d8632fdf | |||
| 9bb174b621 | |||
| c2722d0bd0 | |||
| 79299bc914 | |||
| 94a53a29d9 | |||
| f7c3c39f51 | |||
| 9efee64c1e | |||
| d0d8880dc0 | |||
| f8b8b0dd15 | |||
| 0f3d39e7ba | |||
| 0680bad028 | |||
| a200d79ab1 | |||
| 5b2f4787a2 | |||
| 1d3fa60ed4 | |||
| 805213dd7f | |||
| 726ca87e96 | |||
| ba36863ea6 | |||
| c15505ca05 | |||
| e67fa975aa | |||
| 22e1338b5a | |||
| 23b6a244eb | |||
| af89011374 | |||
| 7979ad683d | |||
| 22efec8148 | |||
| 8fbaaf1335 | |||
| 76becb138f | |||
| 7b43cabf29 | |||
| 7ed328d897 | |||
| b59bed3c38 | |||
| 4af894d7e9 | |||
| 37d113b7fd | |||
| d85e50ffc5 | |||
| 06312fa503 | |||
| 7cfd6930aa | |||
| e6a20ccd76 | |||
| 2dce965a93 | |||
| aa711c49d3 | |||
| 3a9d105785 | |||
| ff681c9e52 | |||
| 780139a8c8 | |||
| c97b36254d | |||
| c5808fc281 | |||
| ec066cb4a5 | |||
| 2248c4ebf2 | |||
| 7373f85370 | |||
| b3baac9519 | |||
| 4b23f26343 | |||
| df772ad288 | |||
| acfa53b722 | |||
| d55a1b08d5 | |||
| e5dbd579ee | |||
| f7b68da60a | |||
| 6be34bab1d | |||
| a56fa8918a | |||
| 5aa46eb005 | |||
| 7eecc97478 | |||
| 067851b783 | |||
| 8e97df63f8 | |||
| 778a885e6e | |||
| 22243579a9 | |||
| 24ec2e9a5b | |||
| 74c7ded0f8 | |||
| 49eba2e921 | |||
| 2f5b43ad12 | |||
| 971a766f9f | |||
| 1f0ec6d687 | |||
| 04f3aa6cb6 | |||
| 20d4e49394 | |||
| 63e50a484e | |||
| 3f00071fd1 | |||
| 0f30e879a8 | |||
| 5b4d5ba76d | |||
| d29cf07cfc | |||
| 8a1f90ca95 | |||
| 008218ebc1 | |||
| d92b060ab2 | |||
| 698aa67de5 | |||
| e0375ed29b | |||
| 0cd87f7800 | |||
| 355db92c34 | |||
| 2b797b7f3c | |||
| c003409a02 | |||
| 37c85a8805 | |||
| 40fc2b0dc5 | |||
| 0224cd5649 | |||
| 2acaf2489d | |||
| d3108fcdc2 | |||
| 03b1bfd6c3 | |||
| e1a2f0a06a | |||
| 102620b220 | |||
| 00073e6d03 | |||
| b831060515 | |||
| e116fba375 | |||
| 4640262b81 | |||
| aa04ee3fd1 | |||
| 291b2eaec5 | |||
| 6861052fb5 | |||
| ad48e9ef76 | |||
| 20fa0e9203 | |||
| 867e366825 | |||
| 134607264a | |||
| e4222d699c | |||
| 523fdf9c59 | |||
| 2daae8af83 | |||
| 4eb1a05e9b | |||
| e3494530ea | |||
| ca2c06c8f9 | |||
| 3c4a149aa6 | |||
| 51fd65d60b | |||
| 7c662c9663 | |||
| 50f2d5f50e | |||
| 3905da309c | |||
| 566b3a0ada | |||
| ff0b821822 | |||
| 8d93b07fa0 | |||
| cc26152e62 | |||
| de60ec8ce1 | |||
| 07b69469f1 | |||
| 99429c4f65 | |||
| e89e4abf3f | |||
| 2ca1104b3c | |||
| 8eb46aa2d1 | |||
| 43b2ff35af | |||
| e51e60a508 | |||
| 0bc6e56bbd | |||
| 3e2e750cf1 | |||
| 397d7d410c | |||
| c733294554 | |||
| 0d8524c1b1 | |||
| 5e3d0a36b5 | |||
| 4595d9b562 | |||
| 36648649a5 | |||
| 67aed63507 | |||
| 42bfe554b6 | |||
| cd41972519 | |||
| b3e14f0114 | |||
| f8355967af |
@@ -0,0 +1,78 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## What this project does
|
||||
|
||||
`plant2dxf` reads a RuleDesigner CSV export describing all components of a plant/conveyor system (Kreisel, Gefällestrecke, VarioFörderer, Omniflo, etc.) and generates a DXF drawing of the plant by placing and assembling DXF blocks from library files. Positions come from the CSV's `Planquadrat` column (`X:<val> Y:<val>`, in mm); component-specific properties come from the `Merkmale` JSON column; connections between components come from `NachbarIds`.
|
||||
|
||||
Full functional documentation (CSV format, config format, per-element-type handler behavior, ezdxf usage patterns) lives in [doc/plant2dxf_dokumentation.md](doc/plant2dxf_dokumentation.md) — read it before making non-trivial changes to handler logic, it is much more detailed than this file.
|
||||
|
||||
## Commands
|
||||
|
||||
All commands are run via the `.bat` scripts in `bin/` (Windows only; this project has no `.sh` counterparts). Scripts call `setenv.bat` first, which sets `PROJECT`, `PROJECT_BIN`, `PROJECT_CFG`, `PROJECT_DOC`, `PROJECT_LIB`, `PROJECT_DATA`, `PROJECT_WORK`, `PROJECT_TEST`, `PROJECT_LOG` and creates missing `data/`, `work/`, `log/`, `testdata/` folders.
|
||||
|
||||
```bat
|
||||
bin\install_py.bat REM create .venv and pip install lib/requirements.txt (no-op if .venv exists)
|
||||
bin\manage_interpreter.bat activate REM activate .venv (used internally by other scripts)
|
||||
bin\run_unittests.bat REM run all *_tests.py under lib\Elemente via unittest discover
|
||||
bin\plant2dxf.bat -f <csv-datei> [-c shapes.cfg] [-l blocks.dxf] [-o output.dxf] [-v]
|
||||
```
|
||||
|
||||
`run_unittests.bat` runs `python -m unittest discover -t "%PROJECT%" -s lib\Elemente -p "*_tests.py"` from the project root — tests must be discovered from repo root or the `lib.*` imports break. To run a single test file/case directly (with venv already active):
|
||||
|
||||
```bat
|
||||
python -m unittest lib.Elemente.Kreisel_tests -v
|
||||
python -m unittest lib.Elemente.Kreisel_tests.TestKreiselModell.test_from_merkmale -v
|
||||
```
|
||||
|
||||
Dependencies (`lib/requirements.txt`): `ezdxf==1.4.1`, `svg.path==7.0`, `pydantic>=2.0.0`, plus `ruff` and `black` (line-length 88, target py312 — see `pyproject.toml`).
|
||||
|
||||
## Architecture
|
||||
|
||||
### Processing pipeline (`lib/plant2dxf.py`)
|
||||
|
||||
1. Load `cfg/shapes.cfg` and `cfg/allgemein.cfg`.
|
||||
2. Create a new empty DXF document (R2018, millimeters).
|
||||
3. `arbeiten_mit_csv.get_nachbar_information(csv_path)` does a full pre-pass over the CSV to build a neighbor map (`strecken_nachbarn`): for every Gefällestrecke/VarioFörderer it resolves which Kreisel/Eckrad/angetriebene Kurve/other VarioFörderer are attached via `NachbarIds`, and captures their rotation, height, position and drehrichtung. This neighbor map drives almost all the geometric decisions downstream.
|
||||
4. Row-by-row over the CSV: parse `TeileArt`/`TeileId`/`Planquadrat`/`Merkmale`, resolve the block library file for that `TeileArt` from `allgemein.cfg` (cached per path so each library is read once), dispatch to a handler function named `handle_<teileart normalized>` (spaces/dots → underscores, lowercased — see `arbeiten_mit_csv.normalize_func_name`), and call it with a `HandlerContext` (`lib/handler_context.py`) bundling `msp`, `teileid`, `merkmale`, `x`, `y`, `doc`, `lib_doc`, `symbols`, `strecken_nachbarn`, `config`, `config_allgemein`.
|
||||
5. Save the DXF to the output path.
|
||||
|
||||
Handler dispatch has special-cased overrides: any `TeileArt` starting with "Omniflo" or "TEF" is routed to `handle_omniflo` regardless of exact name, and "ILS 2.0 Kreisel*" variants all route to `handle_ils_2_0_kreisel`.
|
||||
|
||||
### Handler functions (`lib/plant2dxf.py`)
|
||||
|
||||
One `handle_*` function per `TeileArt`, e.g. `handle_ils_2_0_kreisel`, `handle_ils_2_0_gefaellestrecke`, `handle_ils_2_0_variofoerderer`, `handle_ils_2_0_eckrad`, `handle_ils_2_0_kurve_angetrieben`, `handle_bt___beladung`/`handle_bt___entladung`, `handle_omniflo`. Each handler:
|
||||
- builds a Pydantic element object via `<ElementClass>.from_merkmale(...)` (in `lib/Elemente/`),
|
||||
- inspects `ctx.strecken_nachbarn` to determine how many/which neighbors it's connected to (0, 1, or 2 Kreisel/Eckrad, direct-to-Kreisel vs. via-Stahlband, connected to an angetriebene Kurve needing a Motor-/Umlenkstation),
|
||||
- builds a deterministic, parameter-encoded block name (e.g. `Ils_2.0_Gefaellestrecke_{laenge}_{hoehe}_{hat_umlenk}_{hat_motor}_{tefkurve}_...`) and only constructs the block geometry via `doc.blocks.new(...)` if that exact name doesn't already exist in `doc.blocks` — this is the project's block-deduplication/caching strategy, and reusing it correctly for any new variant is essential to avoid duplicate block definitions,
|
||||
- inserts the resulting block (or raw lines for simple cases) into the modelspace with `msp.add_blockref(...)`.
|
||||
|
||||
This dispatch/handler structure — and especially the block-name-encodes-geometry-variant caching pattern — is the main thing to understand before adding a new `TeileArt` or modifying connection logic.
|
||||
|
||||
### Element classes (`lib/Elemente/`)
|
||||
|
||||
Pydantic models with geometry/business logic, one per component type: `Kreisel`, `Gefaellestrecke`, `VarioFoerderer`, `Angetriebene_Kurve`, `Eckrad`, `Bt_element`, `Omniflo`. Each has a `<Name>_tests.py` sibling with unittest cases (discovered by `run_unittests.bat`). `VarioFoerderer.py` and `Gefaellestrecke.py` contain the most complex logic (motor/Umlenkstation placement, AS/ES element insertion, rotation across one/two connected Kreisel) — see [doc/VarioFoerderer_Refactoring.md](doc/VarioFoerderer_Refactoring.md) for the design rationale (constants, enums, dataclasses extracted from what was previously an 820-line method).
|
||||
|
||||
### Helper modules (`lib/`)
|
||||
|
||||
- `arbeiten_mit_csv.py` — CSV parsing, `Planquadrat` coordinate extraction, `Merkmale` JSON parsing, the neighbor-analysis pass (`get_nachbar_information`), `TeileArt` → handler-name normalization.
|
||||
- `block_methoden.py` — importing blocks from a library doc into the target doc, block rotation/mirroring (`turn_two_blocks_left`), reading insert color/layer from a library block, attribute helpers.
|
||||
- `as_es_methoden.py` — AS-/ES-Element placement logic for Gefällestrecke (these depend on CSV height-comparison fields and Kreisel connection topology — flagged in the docs as needing review if RuleDesigner's CSV format changes).
|
||||
- `handler_context.py` — the `HandlerContext` dataclass-like container passed to every handler, plus a `create_context_from_row` factory and rich `__str__`/`to_dict` for debugging.
|
||||
- `utils.py` — `check_environment_var` (reads a required env var or exits) and `setup_logger` (timestamped file + console logger under `PROJECT_LOG`).
|
||||
|
||||
### Configuration (`cfg/`)
|
||||
|
||||
- `allgemein.cfg` — maps a `TeileArt`'s family (`[ILS]`, `[Omniflo]`, `[BT]`, `[TEF]`) to a block library filename under `data/block_libraries/`; also holds `[LOG]` format settings. Unmapped `TeileArt` falls back to `data/blocks.dxf`.
|
||||
- `shapes.cfg` — one section per exact `TeileArt` string (must match the CSV column value exactly), listing library block names to place (`items`), their offsets/rotations relative to the computed position, and type-specific parameters (e.g. `asoffset`/`esoffset` for Gefällestrecke, `vario_abstand` for VarioFörderer, `winkel_*` angle constants, Omniflo Sivas-number overrides).
|
||||
|
||||
Both are read fresh per run; there's no schema validation beyond what `configparser` and the handler code assume, so a `TeileArt` typo silently falls through to "no handler found" (logged as a warning, row skipped) rather than erroring.
|
||||
|
||||
### Known fragility (documented in doc/plant2dxf_dokumentation.md)
|
||||
|
||||
The AS/ES-element and height-comparison logic in `as_es_methoden.py`, `lib/plant2dxf.py` (`handle_ils_2_0_gefaellestrecke`, `handle_ils_2_0_variofoerderer`), `lib/Elemente/Gefaellestrecke.py` (`rotation_mit_zwei_verbunden`), and `lib/Elemente/VarioFoerderer.py` (`vario_verbuden_am_kreisel`) all assume the current RuleDesigner CSV column set and semantics. If the CSV export format changes, these are the first places to check.
|
||||
|
||||
## Directories not under version control
|
||||
|
||||
`data/`, `work/`, `log/` are gitignored (generated/input working data, log files with timestamped names). `testdata/` holds committed CSV+DXF fixture pairs used for manual/reference comparison, separate from the `lib/Elemente/*_tests.py` unittest suite.
|
||||
@@ -0,0 +1,38 @@
|
||||
@echo off
|
||||
CALL setenv.bat
|
||||
|
||||
echo ========================================
|
||||
echo Creating all test DXF files from testdata
|
||||
echo Output directory: %PROJECT_WORK%
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
REM Track if any errors occurred
|
||||
set ERRORS_OCCURRED=0
|
||||
|
||||
REM Iterate through all CSV files in testdata directory
|
||||
for %%f in ("%PROJECT_TEST%\*.csv") do (
|
||||
echo Processing: %%~nxf
|
||||
CALL plant2dxf.bat -f "%%f" -o "%PROJECT_WORK%\%%~nf.dxf"
|
||||
if errorlevel 1 (
|
||||
echo ERROR: Failed to process %%~nxf
|
||||
echo.
|
||||
set ERRORS_OCCURRED=1
|
||||
) else (
|
||||
echo SUCCESS: Created %%~nf.dxf in work folder
|
||||
echo.
|
||||
)
|
||||
)
|
||||
|
||||
echo ========================================
|
||||
if %ERRORS_OCCURRED%==1 (
|
||||
echo Processing completed with ERRORS!
|
||||
echo ========================================
|
||||
pause
|
||||
exit /b 1
|
||||
) else (
|
||||
echo All test DXF files processed successfully!
|
||||
echo ========================================
|
||||
pause
|
||||
exit /b 0
|
||||
)
|
||||
+1
-1
@@ -7,4 +7,4 @@ REM Beispielaufruf mit Parametern:
|
||||
REM --in: Ordner mit .dxf-Dateien (optional. Standard: work/converted_dxfs)
|
||||
REM --name: Name der zu erzeugenden Bibliothek
|
||||
|
||||
python %PROJECT_LIB%\dxf2lib.py %*
|
||||
"%VIRTUAL_ENV%\Scripts\python.exe" %PROJECT_LIB%\dxf2lib.py %*
|
||||
|
||||
+25
-21
@@ -1,30 +1,34 @@
|
||||
@echo off
|
||||
CALL setenv.bat
|
||||
IF DEFINED NETWORK_INTERPRETER_PATH (
|
||||
goto %~1_network
|
||||
|
||||
IF /I "%1"=="activate" GOTO activate
|
||||
IF /I "%1"=="deactivate" GOTO deactivate
|
||||
GOTO :eof
|
||||
|
||||
|
||||
:activate
|
||||
REM Interpreter wählen
|
||||
IF DEFINED NETWORK_PYTHON (
|
||||
SET PYTHON_EXE=%NETWORK_PYTHON%\python.exe
|
||||
) ELSE (
|
||||
goto %~1_local
|
||||
SET PYTHON_EXE=python
|
||||
)
|
||||
|
||||
:activate_interpreter_local
|
||||
IF NOT EXIST %PROJECT%\.venv CALL %PROJECT_BIN%\install_py.bat
|
||||
CALL %PROJECT%\.venv\Scripts\activate.bat
|
||||
goto :eof
|
||||
REM venv sicherstellen
|
||||
IF NOT EXIST "%PROJECT%\.venv" (
|
||||
"%PYTHON_EXE%" -m venv "%PROJECT%\.venv"
|
||||
)
|
||||
|
||||
:deactivate_interpreter_local
|
||||
deactivate
|
||||
goto :eof
|
||||
REM venv aktivieren
|
||||
CALL "%PROJECT%\.venv\Scripts\activate.bat"
|
||||
|
||||
:activate_interpreter_network
|
||||
SET OLD_PATH=%PATH%
|
||||
SET PATH=%NETWORK_INTERPRETER_PATH%;%PATH%
|
||||
CALL %PROJECT%\.venv\Scripts\activate.bat
|
||||
goto :eof
|
||||
REM Interpreter festnageln
|
||||
SET VIRTUAL_ENV_PYTHON=%PYTHON_EXE%
|
||||
GOTO :eof
|
||||
|
||||
:deactivate_interpreter_network
|
||||
SET PATH=%OLD_PATH%
|
||||
SET OLD_PATH=
|
||||
SET NETWORK_INTERPRETER_PATH=
|
||||
CALL %PROJECT%\.venv\Scripts\deactivate.bat
|
||||
goto :eof
|
||||
|
||||
:deactivate
|
||||
CALL "%PROJECT%\.venv\Scripts\deactivate.bat"
|
||||
SET VIRTUAL_ENV_PYTHON=
|
||||
GOTO :eof
|
||||
echo off
|
||||
|
||||
+17
-3
@@ -1,4 +1,18 @@
|
||||
@echo off
|
||||
CALL manage_interpreter.bat activate_interpreter
|
||||
python %PROJECT_LIB%\plant2dxf.py %*
|
||||
CALL manage_interpreter.bat deactivate_interpreter
|
||||
CALL manage_interpreter.bat activate
|
||||
if errorlevel 1 (
|
||||
echo ERROR: Failed to activate Python environment
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
cd /d "%PROJECT%"
|
||||
if errorlevel 1 (
|
||||
echo ERROR: Failed to change to project directory: %PROJECT%
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
"%VIRTUAL_ENV%\Scripts\python.exe" -m lib.plant2dxf %*
|
||||
set PYTHON_EXIT=%ERRORLEVEL%
|
||||
|
||||
CALL manage_interpreter.bat deactivate
|
||||
exit /b %PYTHON_EXIT%
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
@echo off
|
||||
CALL setenv.bat
|
||||
|
||||
echo ========================================
|
||||
echo running all unittests in lib\Elemente
|
||||
echo ========================================
|
||||
echo.
|
||||
CALL manage_interpreter.bat activate
|
||||
if %ERRORLEVEL% NEQ 0 (
|
||||
echo.
|
||||
echo Failed to activate the Python interpreter!
|
||||
pause
|
||||
exit /B 1
|
||||
)
|
||||
echo Gefundene Testdateien:
|
||||
for /f "delims=" %%f in ('dir /b "%PROJECT_LIB%\Elemente\*_tests.py" 2^>nul') do echo %%f
|
||||
echo.
|
||||
cd /d "%PROJECT%"
|
||||
if errorlevel 1 (
|
||||
echo ERROR: Failed to change to project directory: %PROJECT%
|
||||
CALL manage_interpreter.bat deactivate
|
||||
exit /b 1
|
||||
)
|
||||
"%VIRTUAL_ENV%\Scripts\python.exe" -m unittest discover -t "%PROJECT%" -s lib\Elemente -p "*_tests.py" -v
|
||||
if %ERRORLEVEL% NEQ 0 (
|
||||
echo.
|
||||
echo Tests failed!
|
||||
CALL manage_interpreter.bat deactivate
|
||||
exit /B 1
|
||||
) else (
|
||||
echo.
|
||||
echo All tests passed!
|
||||
CALL manage_interpreter.bat deactivate
|
||||
exit /B 0
|
||||
)
|
||||
|
||||
+3
-3
@@ -1,4 +1,3 @@
|
||||
chcp 1252 > nul
|
||||
@echo off
|
||||
|
||||
REM ~dp0 steht für das Verzeichnis, in der diese Datei liegt
|
||||
@@ -15,11 +14,12 @@ set PROJECT_TEST=%PROJECT%\testdata
|
||||
set PROJECT_LOG=%PROJECT%\log
|
||||
|
||||
if not exist %PROJECT%\data mkdir %PROJECT%\data
|
||||
if not exist %PROJECT%\work mkdir %PROJECT%\work
|
||||
if not exist %PROJECT%\log mkdir %PROJECT%\log
|
||||
|
||||
set INSTALL_DIR="%ONEDRIVE%\Desktop\Kabeltool"
|
||||
if not exist %PROJECT%\testdata mkdir %PROJECT%\testdata
|
||||
|
||||
set PATH=%PROJECT_BIN%;%PATH%
|
||||
REM set NETWORK_PYTHON=TO_BE_SET
|
||||
|
||||
|
||||
popd
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
@echo off
|
||||
REM ~dp0 steht für das Verzeichnis, in der diese Datei liegt
|
||||
|
||||
call setenv.bat
|
||||
|
||||
REM Beispielaufruf mit Parametern:
|
||||
REM --in: Ordner mit .svg bzw. .xml-Dateien (optional. Standard: data/svg)
|
||||
REM --out: Zielverzeichnis (optional. Standard: work/converted_dxfs)
|
||||
|
||||
python %PROJECT_LIB%\svg2dxf.py %*
|
||||
@@ -1,5 +1,9 @@
|
||||
# Allgemeine Konfigurationsdatei, welche die Zuweisung von Block-Bibliotheken zu bestimmten Bauteil-Familien steuert
|
||||
# General Config-File, that controls the assignment of block libraries to certain component families
|
||||
[LOG]
|
||||
log_level = INFO
|
||||
log_format = %%(asctime)s - %%(levelname)s - %%(message)s
|
||||
screen_format = %%(message)s
|
||||
|
||||
[ILS]
|
||||
libfile = ils_lib.dxf
|
||||
@@ -7,6 +11,10 @@ libfile = ils_lib.dxf
|
||||
[Omniflo]
|
||||
libfile = omniflo_lib.dxf
|
||||
|
||||
[BT]
|
||||
libfile = ils_lib.dxf
|
||||
[TEF]
|
||||
libfile = omniflo_lib.dxf
|
||||
[dxf2lib]
|
||||
# Text-Positionierung und Formatierung
|
||||
# Vertikaler Abstand des Texts über dem Block (in DXF-Einheiten)
|
||||
@@ -27,3 +35,5 @@ block_spacing_x = 350
|
||||
blocks_per_row = 20
|
||||
# Vertikaler Abstand zwischen Zeilen im Raster (in DXF-Einheiten)
|
||||
block_spacing_y = 500
|
||||
# Nicht in die MittelPunkt Berechnung erlaubt
|
||||
automation_layer = ("A-GRUPPE","B-GRUPPE")
|
||||
+33
-1
@@ -5,9 +5,41 @@ offset_symb2 = 0,0
|
||||
rot_symb1 = 0.0
|
||||
rot_symb2 = 0.0
|
||||
|
||||
[ILS 2.0 Kreisel mit Pin]
|
||||
items = SP8, AN8
|
||||
offset_symb1 = 0,0
|
||||
offset_symb2 = 0,0
|
||||
rot_symb1 = 0.0
|
||||
rot_symb2 = 0.0
|
||||
|
||||
[ILS 2.0 Gefällestrecke]
|
||||
items = EE DS, AE DS
|
||||
offset_symb1 = 0,-330
|
||||
offset_symb2 = 0,1000
|
||||
rot_symb1 = 0.0
|
||||
rot_symb2 = 0.0
|
||||
rot_symb2 = 0.0
|
||||
asoffset = 537.90
|
||||
esoffset = 479.95
|
||||
|
||||
[ILS 2.0 Variofoerderer]
|
||||
Umlenkstation = 500.0, 0.0, 0.0
|
||||
Motorstation = 500.0, 0.0, 0.0
|
||||
vario_abstand = 66.5
|
||||
|
||||
[Ils 2.0 core winkel]
|
||||
winkel_boegen = 3
|
||||
winkel_motor = 3.0
|
||||
winkel_umlenk = 3.0
|
||||
winkel_as = 3.0
|
||||
winkel_es = 3.0
|
||||
|
||||
[Omniflo]
|
||||
OFgeradesivas = 821106002
|
||||
Tefgeradesivas = 0_B10030
|
||||
OFfoerderer = 2
|
||||
|
||||
[Scanner_Stoper_namen]
|
||||
Omniflo_stopper = 827062022
|
||||
Omniflo_scanner = _DUMMY_SCANNER
|
||||
ILS_scanner = SCAN
|
||||
ILS_seperator = S-LP
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user