Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/sps_skel
This commit is contained in:
commit
22b08cc0ce
10 files changed
+582
-637
No files matched your search
@@ -10,23 +10,30 @@ of Siemens SCL code** ("TRO" — Transfer Route Object — blocks for a conveyor
|
|||||||
control system) that can be imported directly into TIA Portal.
|
control system) that can be imported directly into TIA Portal.
|
||||||
|
|
||||||
The repository has moved past pure analysis: `lib/` now holds working Python tooling that
|
The repository has moved past pure analysis: `lib/` now holds working Python tooling that
|
||||||
derives a material-flow graph and a TRO list from a CSV export (ILS 2.0) and can annotate a
|
runs the **full DXF → JSON → SCL pipeline in a first version**. From a CSV export (ILS 2.0)
|
||||||
copy of the BricsCAD drawing with the result. What does **not** exist yet is the actual
|
it derives a material-flow graph and a TRO list, annotates a copy of the BricsCAD drawing
|
||||||
SCL-skeleton generator — the step that would emit TIA-Portal-importable SCL from a JSON
|
with the result, reads the (possibly hand-edited) drawing back into a TRO-JSON, and emits an
|
||||||
layout model. `tests/` and `examples/` are still empty scaffolding (see "Standard Programm
|
`FB_Main` **SCL skeleton** from that JSON. The skeleton is deliberately not a running
|
||||||
Template" below). What exists today is:
|
program — every value that must come from the electrical planning is left as a visible
|
||||||
|
`TODO(E-Planung)` gap rather than guessed. What is **not** done yet is the fuller layout-JSON
|
||||||
|
schema (`doc/HundM/Json_Layout-Konzept.md`) as an intermediate format and the generation of
|
||||||
|
the other per-controller blocks (`FB_CallSensors`, `FC_Direction`/`FC_Call_Jams` as
|
||||||
|
standalone files); see "Roadmap" below. `tests/` and `examples/` are still empty scaffolding
|
||||||
|
(see "Standard Programm Template" below). What exists today is:
|
||||||
|
|
||||||
- `bin/` — environment/venv management scripts, plus one `.bat`/`.sh` wrapper pair per CLI
|
- `bin/` — environment/venv management scripts, plus one `.bat`/`.sh` wrapper pair per CLI
|
||||||
tool in `lib/` (see "Environment scripts" below)
|
tool in `lib/` (see "Environment scripts" below)
|
||||||
- `lib/*.py` — CLI tools and libraries that turn a CSV export + BricsCAD DXF into a
|
- `lib/*.py` — CLI tools and libraries that turn a CSV export + BricsCAD DXF into a
|
||||||
material-flow graph, a derived TRO list/diagram, and an annotated copy of the drawing.
|
material-flow graph, a derived TRO list/diagram, an annotated copy of the drawing, a
|
||||||
|
TRO-JSON read back out of that drawing, and an `FB_Main` SCL skeleton.
|
||||||
See **`doc/Python_Scripts.md`** for what each script does and which switches it takes.
|
See **`doc/Python_Scripts.md`** for what each script does and which switches it takes.
|
||||||
- `data/` — input CSV exports (gitignored, not committed)
|
- `data/` — input CSV exports (gitignored, not committed)
|
||||||
- `cad/tro_types.lsp` — generated type list for the BricsCAD `TROEDIT` dialog (written by
|
- `cad/tro_types.lsp` — generated type list for the BricsCAD `TROEDIT` dialog (written by
|
||||||
`tro_annotate.py --emit-lisp`)
|
`tro_annotate.py --emit-lisp`)
|
||||||
- `cfg/dxf_registration.json` — persisted, verified CSV↔DXF coordinate transform
|
- `cfg/dxf_registration.json` — persisted, verified CSV↔DXF coordinate transform;
|
||||||
|
`cfg/tro_overrides.ini` — hand-maintained corrections to the derived TROs (see `tro_overrides.py`)
|
||||||
- `doc/*.md` — analysis documents that reverse-engineer the SCL patterns and propose the
|
- `doc/*.md` — analysis documents that reverse-engineer the SCL patterns and propose the
|
||||||
JSON schema / code-generation approach for the generator that's still to be written
|
fuller JSON layout schema for the parts of the pipeline still to be built out
|
||||||
|
|
||||||
Read `doc/` before writing any generator code — start with `doc/Python_Scripts.md` for the
|
Read `doc/` before writing any generator code — start with `doc/Python_Scripts.md` for the
|
||||||
existing tooling, then the domain-model documents below; together they contain the actual
|
existing tooling, then the domain-model documents below; together they contain the actual
|
||||||
@@ -81,9 +88,10 @@ routing, modeled around **TRO** (Transfer Route Object) blocks. Key documents, r
|
|||||||
this order for onboarding:
|
this order for onboarding:
|
||||||
|
|
||||||
0. **`doc/Python_Scripts.md`** — the existing CLI tooling (`lib/material_flow.py`,
|
0. **`doc/Python_Scripts.md`** — the existing CLI tooling (`lib/material_flow.py`,
|
||||||
`lib/tro_flow.py`, `lib/tro_annotate.py`, plus the `lib/tro_catalog.py` and
|
`lib/tro_flow.py`, `lib/tro_annotate.py`, `lib/tro_extract.py`, `lib/scl_skeleton.py`,
|
||||||
`lib/dxf_registration.py` libraries they share): what each script does, its switches,
|
plus the `lib/tro_catalog.py`, `lib/dxf_registration.py` and `lib/tro_overrides.py`
|
||||||
inputs/outputs. This is working code, not a proposal — read it before touching `lib/`.
|
libraries they share): what each script does, its switches, inputs/outputs. This is
|
||||||
|
working code, not a proposal — read it before touching `lib/`.
|
||||||
1. **`doc/HundM/Json_Layout-Konzept.md`** — the core proposal: a JSON file as single source
|
1. **`doc/HundM/Json_Layout-Konzept.md`** — the core proposal: a JSON file as single source
|
||||||
of truth (`plc`, `controlUnits`, `sensors[]`, `conveyors[]`, `tros[]`, `loadingBooms[]`,
|
of truth (`plc`, `controlUnits`, `sensors[]`, `conveyors[]`, `tros[]`, `loadingBooms[]`,
|
||||||
`emptyCarrBuffers[]`, `routing`, `jamAreas[]`, `scanners[]`, `connections[]`,
|
`emptyCarrBuffers[]`, `routing`, `jamAreas[]`, `scanners[]`, `connections[]`,
|
||||||
@@ -114,9 +122,10 @@ this order for onboarding:
|
|||||||
6. **`doc/HundM/suggestion.md`** — a follow-up proposal to collapse the 7 `FB_ILS_MTRO_*`
|
6. **`doc/HundM/suggestion.md`** — a follow-up proposal to collapse the 7 `FB_ILS_MTRO_*`
|
||||||
variants into a single `FB_ILS_MTRO` block driven by an array/config descriptor
|
variants into a single `FB_ILS_MTRO` block driven by an array/config descriptor
|
||||||
instead of hand-duplicated numbered members (`...1`, `...2`, `Dir1..Dir4`). References
|
instead of hand-duplicated numbered members (`...1`, `...2`, `Dir1..Dir4`). References
|
||||||
a not-yet-written `lib/create_skel.py` (`guess_fbtype()`) as the intended generator
|
a `lib/create_skel.py` (`guess_fbtype()`) as the intended generator entry point. That
|
||||||
entry point — this is still the planned shape of the SCL-emitting generator itself;
|
specific module does not exist in this repo — it is the HundM Excel-based generator
|
||||||
the current `lib/` tooling derives TROs from a layout but does not yet emit SCL.
|
sketch, a different input source (see "Roadmap" below). This repo's own SCL emitter is
|
||||||
|
`lib/scl_skeleton.py`, which already emits an `FB_Main` skeleton from the TRO-JSON.
|
||||||
7. **`doc/500573_Mubea/TRO_Identifikation_500573.md`** — the derivation rules
|
7. **`doc/500573_Mubea/TRO_Identifikation_500573.md`** — the derivation rules
|
||||||
`lib/tro_flow.py` implements: how to infer a TRO's type from its separator's host
|
`lib/tro_flow.py` implements: how to infer a TRO's type from its separator's host
|
||||||
object (Gefällestrecke/Strecke/Kreisel) when no I/O list or `FB_Main` exists yet.
|
object (Gefällestrecke/Strecke/Kreisel) when no I/O list or `FB_Main` exists yet.
|
||||||
@@ -137,6 +146,48 @@ local, fully-vendored SCL source (`FB_ILS_MTRO_Vario_workStation`, `FB_EmptyCarr
|
|||||||
`doc/TRO_Katalog/scl_templates/*.scl` as **read-only reference material** for pattern
|
`doc/TRO_Katalog/scl_templates/*.scl` as **read-only reference material** for pattern
|
||||||
extraction, not code to execute or modify.
|
extraction, not code to execute or modify.
|
||||||
|
|
||||||
|
## Roadmap: DXF → JSON → SCL (first version implemented)
|
||||||
|
|
||||||
|
The DXF → JSON → SCL pipeline now runs end-to-end in a first version. After `tro_annotate.py`
|
||||||
|
burns the TROs into a copy of the drawing, the user can hand-edit that DXF in BricsCAD (via
|
||||||
|
the `TRO_INSERT`/`TRO_EDIT` commands, see `doc/HundM/BricsCAD_TRO_Symbol.md`) — moving TROs,
|
||||||
|
adding new ones, changing a type — and two further `lib/` tools carry the drawing the rest of
|
||||||
|
the way to importable SCL:
|
||||||
|
|
||||||
|
1. **`lib/tro_extract.py`** (implemented) — reads the (possibly hand-edited) annotated DXF
|
||||||
|
**only** (not the CSV) and derives a TRO-JSON (`<drawing>_tro.json`): the TROs tagged with
|
||||||
|
XDATA, their `predecessors`/`successors` computed from the flow arrows, and plant
|
||||||
|
coordinates resolved through the persisted registration. See `doc/Python_Scripts.md` §5a.
|
||||||
|
2. **`lib/scl_skeleton.py`** (implemented) — reads that TRO-JSON and emits an `FB_Main` SCL
|
||||||
|
skeleton (`<source>_FB_Main.scl`): one `REGION` per TRO with the instance call and every
|
||||||
|
parameter line in the right order, plus inline `FC_Direction` calls for switch TROs.
|
||||||
|
Everything derivable from the layout is filled (REGION order, FB type, parameter-block
|
||||||
|
counts, destination list per switch exit, `nTo1Destinations` for single-switch TROs);
|
||||||
|
everything that must come from the electrical planning is a `TODO(E-Planung)` gap.
|
||||||
|
Switches `--json`, `--out`, `--start` (the last picks an entry point while the plant is a
|
||||||
|
closed loop with no loading/unloading station). See `doc/Python_Scripts.md` §5b.
|
||||||
|
|
||||||
|
What is **not** built out yet, relative to the original two-tool design:
|
||||||
|
|
||||||
|
- the fuller **layout-JSON schema** of `doc/HundM/Json_Layout-Konzept.md` (`plc`,
|
||||||
|
`controlUnits`, `sensors[]`, `conveyors[]`, `tros[]`, `loadingBooms[]`,
|
||||||
|
`emptyCarrBuffers[]`, `routing`, `jamAreas[]`, `scanners[]`, `connections[]`,
|
||||||
|
`destinations[]`) as the intermediate format — `tro_extract.py` currently emits a
|
||||||
|
TRO-focused JSON, not this full schema;
|
||||||
|
- the **other per-controller blocks** (`FB_CallSensors`, `FC_Direction`/`FC_Call_Jams` as
|
||||||
|
standalone files) — only `FB_Main` is generated today;
|
||||||
|
- **type-based timing defaults** from `doc/TRO_Typen.md` and the `OVERRIDE_TIMING_JSON` CAD
|
||||||
|
attribute (timings are emitted as `TODO(E-Planung): pruefen` placeholders for now);
|
||||||
|
- a **`--skip-json`** convenience path that would read DXF + CSV directly and emit SCL
|
||||||
|
without an intermediate JSON file.
|
||||||
|
|
||||||
|
Note the `create_skel.py` / `guess_fbtype()` generator sketched in `doc/HundM/suggestion.md`
|
||||||
|
and `doc/HundM/Json_Layout-Konzept.md` §14.5 is a **separate concept** and is not implemented
|
||||||
|
here: it is designed to derive its skeleton JSON from HundM's Excel I/O-list exports
|
||||||
|
(`*_TIA.xlsx`, `*_positions.json`, ...), a different input source than this repo's CSV+DXF
|
||||||
|
pipeline. The JSON *schema* it targets is the same (`doc/HundM/Json_Layout-Konzept.md`); only
|
||||||
|
the derivation source differs.
|
||||||
|
|
||||||
## Standard Programm Template
|
## Standard Programm Template
|
||||||
|
|
||||||
This project follows the user's standard Python project scaffold convention:
|
This project follows the user's standard Python project scaffold convention:
|
||||||
@@ -153,14 +204,14 @@ sps_skel/
|
|||||||
examples/ example files — empty for now
|
examples/ example files — empty for now
|
||||||
lib/ Python source, importable via SKEL_LIB on PYTHONPATH — CLI tools and
|
lib/ Python source, importable via SKEL_LIB on PYTHONPATH — CLI tools and
|
||||||
libraries that derive material flow / TRO lists / CAD annotations from a
|
libraries that derive material flow / TRO lists / CAD annotations from a
|
||||||
layout (see doc/Python_Scripts.md); the JSON-driven SCL generator itself
|
layout, read the TROs back into JSON, and emit an FB_Main SCL skeleton
|
||||||
is not yet written
|
(see doc/Python_Scripts.md)
|
||||||
log/ gitignored
|
log/ gitignored
|
||||||
results/ gitignored — CLI tool output (.dot/.svg/.md/.dxf)
|
results/ gitignored — CLI tool output (.dot/.svg/.md/.dxf/.scl/.json)
|
||||||
tests/ unit tests — empty for now
|
tests/ unit tests — empty for now
|
||||||
```
|
```
|
||||||
|
|
||||||
When adding the SCL generator, put it under `lib/` (importable via `SKEL_LIB` on
|
When extending the pipeline (the remaining pieces in "Roadmap" above), put new modules under
|
||||||
`PYTHONPATH`), add a `bin/<name>.bat`/`.sh` wrapper pair for it following the pattern of
|
`lib/` (importable via `SKEL_LIB` on `PYTHONPATH`), add a `bin/<name>.bat`/`.sh` wrapper pair
|
||||||
`bin/tro_flow.bat`/`.sh` (see "Environment scripts" above), document its switches in
|
for each following the pattern of `bin/tro_flow.bat`/`.sh` (see "Environment scripts" above),
|
||||||
`doc/Python_Scripts.md`, and add tests under `tests/`.
|
document its switches in `doc/Python_Scripts.md`, and add tests under `tests/`.
|
||||||
@@ -1,30 +1,74 @@
|
|||||||
# sps_skel
|
# sps_skel
|
||||||
|
|
||||||
> Das Programm erhält ein mechanische Layout von der Projektierung oder
|
> Das Programm erhält ein mechanisches Layout von der Projektierung oder dem
|
||||||
> Angebotswesen zusammen mit dem elektronischen Layout mit der Liste aller
|
> Angebotswesen zusammen mit dem elektrischen Layout (Liste aller Sensoren,
|
||||||
> Sensoren, Stopper, etc. Daraus erstellt es dann ein Skelett für die SPS
|
> Stopper, Weichen, etc.). Daraus soll es ein Skelett für die SPS-Programmierung
|
||||||
> Programmierung, welches direkt ins TIA Portal importiert werden kann.
|
> (Siemens SCL, TIA Portal) erzeugen — aufgebaut aus **TRO**-Bausteinen
|
||||||
|
> (Transfer Route Object), den wiederkehrenden Steuerungseinheiten einer
|
||||||
|
> Fördertechnik-Anlage.
|
||||||
|
|
||||||
|
## Stand des Projekts
|
||||||
|
|
||||||
|
Aus einem CSV-Export der mechanischen Planung (ILS 2.0) werden automatisch
|
||||||
|
|
||||||
|
- der **Materialfluss-Graph** der mechanischen Objekte (Strecken, Gefällestrecken,
|
||||||
|
Kreisel),
|
||||||
|
- die daraus abgeleitete **TRO-Liste** samt eigenem Flussdiagramm,
|
||||||
|
- eine **annotierte Kopie der BricsCAD-Zeichnung** mit einem Marker-Symbol pro
|
||||||
|
TRO (danach in BricsCAD von Hand nachbearbeitbar — TROs verschieben,
|
||||||
|
ergänzen, Typ ändern),
|
||||||
|
- daraus zurückgelesen ein **JSON-Modell der TROs** (liest nur die Zeichnung,
|
||||||
|
erfasst also auch von Hand vorgenommene Korrekturen), und
|
||||||
|
- daraus ein **SCL-Gerüst für `FB_Main`** — ein `REGION` pro TRO mit
|
||||||
|
Instanzaufruf und allen Parametern in der richtigen Reihenfolge, aber
|
||||||
|
bewusst nicht lauffähig: jeder Wert, der aus der E-Planung stammen muss
|
||||||
|
(Sensor-/Aktoradressen, Separator-/Weichennummern, Staubereiche, ungeprüfte
|
||||||
|
Zeiten), ist als `TODO(E-Planung)` markiert statt geraten.
|
||||||
|
|
||||||
|
Diese fünf Werkzeuge liegen als CLI-Tools in `lib/` und sind über
|
||||||
|
`bin/`-Wrapper aufrufbar (siehe unten). Details, Domänenmodell und die
|
||||||
|
verbleibende Roadmap stehen in `doc/`, allen voran `doc/Python_Scripts.md`.
|
||||||
|
|
||||||
|
## Roadmap
|
||||||
|
|
||||||
|
Offen ist vor allem die JSON-Layout-Datei nach dem in
|
||||||
|
`doc/HundM/Json_Layout-Konzept.md` beschriebenen Schema (`plc`,
|
||||||
|
`controlUnits`, `sensors[]`, `conveyors[]`, `tros[]`, `loadingBooms[]`,
|
||||||
|
`emptyCarrBuffers[]`, `routing`, `jamAreas[]`, `scanners[]`, `connections[]`,
|
||||||
|
`destinations[]`) als von Hand editierbares Zwischenformat vor der
|
||||||
|
SCL-Erzeugung, sowie die Generierung der übrigen Bausteine je Steuerung
|
||||||
|
(`FB_CallSensors`, `FC_Direction`, `FC_Call_Jams`) — `scl_skeleton.py` deckt
|
||||||
|
bisher nur `FB_Main` ab. Siehe `CLAUDE.md` (Abschnitt "Roadmap") für den
|
||||||
|
aktuellen Stand der Planung dazu.
|
||||||
|
|
||||||
## Projektstruktur
|
## Projektstruktur
|
||||||
|
|
||||||
sps_skel/
|
```text
|
||||||
bin/ Skripte zur Umgebungsverwaltung
|
sps_skel/
|
||||||
|
bin/ Umgebungsskripte + ein .bat/.sh-Wrapper-Paar je CLI-Tool
|
||||||
setenv.bat/.sh Umgebungsvariablen setzen
|
setenv.bat/.sh Umgebungsvariablen setzen
|
||||||
install_py.bat/.sh venv erstellen + pip install
|
install_py.bat/.sh venv erstellen + pip install
|
||||||
activate_venv.bat/.sh venv aktivieren
|
activate_venv.bat/.sh venv aktivieren
|
||||||
get_cmd.bat/.sh Shell mit Umgebung oeffnen
|
get_cmd.bat/.sh Shell mit Umgebung oeffnen
|
||||||
cfg/ Konfigurationsdateien (INI/JSON)
|
material_flow.bat/.sh Wrapper fuer lib/material_flow.py
|
||||||
data/ Eingabedaten (nicht im Git)
|
tro_flow.bat/.sh Wrapper fuer lib/tro_flow.py
|
||||||
doc/ Dokumentation
|
tro_annotate.bat/.sh Wrapper fuer lib/tro_annotate.py
|
||||||
|
tro_extract.bat/.sh Wrapper fuer lib/tro_extract.py
|
||||||
|
scl_skeleton.bat/.sh Wrapper fuer lib/scl_skeleton.py
|
||||||
|
cad/ generiertes BricsCAD-LISP (tro_types.lsp) fuer den TROEDIT-Dialog
|
||||||
|
cfg/ Konfigurationsdateien (INI/JSON); dxf_registration.json
|
||||||
|
data/ Eingabedaten - CSV-Exporte, DXF (nicht im Git)
|
||||||
|
doc/ Dokumentation, siehe doc/Python_Scripts.md
|
||||||
examples/ Beispieldateien
|
examples/ Beispieldateien
|
||||||
lib/ Python-Quellcode / Bibliothek
|
lib/ Python-Quellcode (CLI-Tools + Bibliotheken)
|
||||||
log/ Log-Dateien (nicht im Git)
|
log/ Log-Dateien (nicht im Git)
|
||||||
results/ Ergebnisse / Ausgaben (nicht im Git)
|
results/ Ergebnisse der CLI-Tools (.dot/.svg/.md/.dxf, nicht im Git)
|
||||||
tests/ Unit Tests
|
tests/ Unit Tests
|
||||||
.gitignore
|
.gitignore
|
||||||
LICENSE
|
LICENSE
|
||||||
README.md
|
README.md
|
||||||
requirements.txt
|
requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
## Umgebungsvariablen
|
## Umgebungsvariablen
|
||||||
|
|
||||||
@@ -35,9 +79,11 @@
|
|||||||
| `SKEL_LIB` | Python-Quellcode |
|
| `SKEL_LIB` | Python-Quellcode |
|
||||||
| `SKEL_CFG` | Konfigurationsdateien |
|
| `SKEL_CFG` | Konfigurationsdateien |
|
||||||
| `SKEL_DATA` | Eingabedaten |
|
| `SKEL_DATA` | Eingabedaten |
|
||||||
|
| `SKEL_DOC` | Dokumentation |
|
||||||
| `SKEL_LOG` | Log-Dateien |
|
| `SKEL_LOG` | Log-Dateien |
|
||||||
| `SKEL_RESULTS` | Ergebnisse |
|
| `SKEL_RESULTS` | Ergebnisse |
|
||||||
| `SKEL_EXAMPLES` | Beispieldateien |
|
| `SKEL_EXAMPLES` | Beispieldateien |
|
||||||
|
| `SKEL_TESTS` | Unit Tests |
|
||||||
| `PYTHONPATH` | Erweitert um `SKEL_LIB` |
|
| `PYTHONPATH` | Erweitert um `SKEL_LIB` |
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
@@ -45,31 +91,75 @@
|
|||||||
### Voraussetzungen
|
### Voraussetzungen
|
||||||
|
|
||||||
- Python 3.10 oder hoeher
|
- Python 3.10 oder hoeher
|
||||||
|
- Graphviz (`dot`) auf `PATH` fuer `--tosvg`, optional aber empfohlen
|
||||||
|
- fuer `tro_annotate.py`: `ezdxf` (wird per `requirements.txt` installiert)
|
||||||
|
|
||||||
### Setup (Windows)
|
### Setup (Windows)
|
||||||
|
|
||||||
bin\install_py.bat
|
```bat
|
||||||
|
bin\install_py.bat
|
||||||
|
```
|
||||||
|
|
||||||
### Setup (Linux / macOS)
|
### Setup (Linux / macOS)
|
||||||
|
|
||||||
bash bin/install_py.sh
|
```sh
|
||||||
|
bash bin/install_py.sh
|
||||||
|
```
|
||||||
|
|
||||||
## Nutzung
|
## Nutzung
|
||||||
|
|
||||||
### Umgebung setzen
|
### Umgebung setzen
|
||||||
|
|
||||||
bin\setenv.bat # Windows
|
```bat
|
||||||
source bin/setenv.sh # Linux / macOS
|
bin\setenv.bat # Windows
|
||||||
|
source bin/setenv.sh # Linux / macOS
|
||||||
|
```
|
||||||
|
|
||||||
### Shell mit gesetzten Variablen oeffnen
|
### Shell mit gesetzten Variablen oeffnen
|
||||||
|
|
||||||
bin\get_cmd.bat # Windows
|
```bat
|
||||||
source bin/get_cmd.sh # Linux / macOS
|
bin\get_cmd.bat # Windows
|
||||||
|
source bin/get_cmd.sh # Linux / macOS
|
||||||
|
```
|
||||||
|
|
||||||
### venv aktivieren
|
### venv aktivieren
|
||||||
|
|
||||||
bin\activate_venv.bat # Windows
|
```bat
|
||||||
source bin/activate_venv.sh # Linux / macOS
|
bin\activate_venv.bat # Windows
|
||||||
|
source bin/activate_venv.sh # Linux / macOS
|
||||||
|
```
|
||||||
|
|
||||||
|
### CLI-Tools ausführen
|
||||||
|
|
||||||
|
Jedes Tool wird über seinen `bin/<name>.bat`/`.sh`-Wrapper aufgerufen; dieser
|
||||||
|
setzt die Umgebung, aktiviert `.venv` und ruft dann das Python-Modul auf.
|
||||||
|
`--file`/`--dxf` akzeptieren entweder einen Dateinamen (wird gegen
|
||||||
|
`%SKEL_DATA%` aufgelöst) oder einen vollen Pfad; Ausgaben landen in
|
||||||
|
`%SKEL_RESULTS%`.
|
||||||
|
|
||||||
|
```bat
|
||||||
|
REM 1) Materialfluss der mechanischen Objekte
|
||||||
|
bin\material_flow.bat --file mubea.csv --tosvg --doc
|
||||||
|
|
||||||
|
REM 2) TRO-Liste + eigenes Flussdiagramm ableiten
|
||||||
|
bin\tro_flow.bat --file mubea.csv --tosvg --doc
|
||||||
|
|
||||||
|
REM 3) TROs als Marker-Symbole in eine Kopie der CAD-Zeichnung einbrennen
|
||||||
|
bin\tro_annotate.bat --file mubea.csv --dxf 500573_60_1.dxf --flow --fb --legend
|
||||||
|
|
||||||
|
REM (Zeichnung optional in BricsCAD von Hand nachbearbeiten)
|
||||||
|
|
||||||
|
REM 4) TROs aus der (ggf. bearbeiteten) Zeichnung zurueck in JSON lesen
|
||||||
|
bin\tro_extract.bat --dxf export_annotated.dxf
|
||||||
|
|
||||||
|
REM 5) FB_Main-SCL-Geruest aus dem JSON erzeugen
|
||||||
|
bin\scl_skeleton.bat --json export_tro.json --start TRO07
|
||||||
|
```
|
||||||
|
|
||||||
|
Alle Switches, Ausgabedateien und Exit-Codes der drei Tools sind in
|
||||||
|
[`doc/Python_Scripts.md`](doc/Python_Scripts.md) dokumentiert; das
|
||||||
|
Domänenmodell (TRO-Typen, geplantes JSON-Layout, I/O-Listen-Analyse) findet
|
||||||
|
sich in den übrigen Dokumenten unter `doc/`.
|
||||||
|
|
||||||
## Lizenz
|
## Lizenz
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,26 @@ REM Python-Interpreter bestimmen (py-Launcher bevorzugt, sonst python)
|
|||||||
set "PY=py"
|
set "PY=py"
|
||||||
py --version >nul 2>&1 || set "PY=python"
|
py --version >nul 2>&1 || set "PY=python"
|
||||||
|
|
||||||
|
REM Graphviz pruefen, wenn --tosvg SVG erzeugen soll (dot, bei --use-cords/
|
||||||
|
REM --use-coords neato) - nur ein frueher Hinweis; das eigentliche Skript
|
||||||
|
REM meldet denselben Fehler beim Rendern noch einmal im Detail.
|
||||||
|
set "GV_ENGINE=dot"
|
||||||
|
echo %*| findstr /i /c:"--use-cords" /c:"--use-coords" >nul && set "GV_ENGINE=neato"
|
||||||
|
echo %*| findstr /i /c:"--tosvg" >nul
|
||||||
|
if not errorlevel 1 (
|
||||||
|
where %GV_ENGINE%.exe >nul 2>&1
|
||||||
|
if errorlevel 1 (
|
||||||
|
set "GV_OK="
|
||||||
|
if /i "%GV_ENGINE%"=="dot" if defined GRAPHVIZ_DOT set "GV_OK=1"
|
||||||
|
if not defined GV_OK (
|
||||||
|
echo WARNUNG: Graphviz '%GV_ENGINE%' nicht im PATH gefunden - --tosvg wird vermutlich fehlschlagen.
|
||||||
|
echo Graphviz installieren ^(https://graphviz.org/download/^), den bin-Ordner
|
||||||
|
echo zum PATH hinzufuegen, oder GRAPHVIZ_DOT auf die dot.exe setzen ^(nur fuer 'dot'^).
|
||||||
|
echo.
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
"%PY%" "%SKEL_LIB%\material_flow.py" %*
|
"%PY%" "%SKEL_LIB%\material_flow.py" %*
|
||||||
set "RC=%ERRORLEVEL%"
|
set "RC=%ERRORLEVEL%"
|
||||||
|
|
||||||
|
|||||||
@@ -28,4 +28,24 @@ fi
|
|||||||
PY="python3"
|
PY="python3"
|
||||||
command -v python3 >/dev/null 2>&1 || PY="python"
|
command -v python3 >/dev/null 2>&1 || PY="python"
|
||||||
|
|
||||||
|
# Graphviz pruefen, wenn --tosvg SVG erzeugen soll (dot, bei --use-cords/
|
||||||
|
# --use-coords neato) - nur ein frueher Hinweis; das eigentliche Skript
|
||||||
|
# meldet denselben Fehler beim Rendern noch einmal im Detail.
|
||||||
|
case " $* " in
|
||||||
|
*" --tosvg "*)
|
||||||
|
GV_ENGINE="dot"
|
||||||
|
case " $* " in
|
||||||
|
*" --use-cords "*|*" --use-coords "*) GV_ENGINE="neato" ;;
|
||||||
|
esac
|
||||||
|
if ! command -v "$GV_ENGINE" >/dev/null 2>&1; then
|
||||||
|
if [ "$GV_ENGINE" != "dot" ] || [ -z "${GRAPHVIZ_DOT:-}" ]; then
|
||||||
|
echo "WARNUNG: Graphviz '$GV_ENGINE' nicht im PATH gefunden - --tosvg wird vermutlich fehlschlagen." >&2
|
||||||
|
echo " Graphviz installieren (https://graphviz.org/download/), PATH ergaenzen," >&2
|
||||||
|
echo " oder GRAPHVIZ_DOT auf die dot-Programmdatei setzen (nur fuer 'dot')." >&2
|
||||||
|
echo "" >&2
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
exec "$PY" "$SKEL_LIB/material_flow.py" "$@"
|
exec "$PY" "$SKEL_LIB/material_flow.py" "$@"
|
||||||
@@ -27,6 +27,26 @@ REM Python-Interpreter bestimmen (py-Launcher bevorzugt, sonst python)
|
|||||||
set "PY=py"
|
set "PY=py"
|
||||||
py --version >nul 2>&1 || set "PY=python"
|
py --version >nul 2>&1 || set "PY=python"
|
||||||
|
|
||||||
|
REM Graphviz pruefen, wenn --tosvg SVG erzeugen soll (dot, bei --use-cords/
|
||||||
|
REM --use-coords neato) - nur ein frueher Hinweis; das eigentliche Skript
|
||||||
|
REM meldet denselben Fehler beim Rendern noch einmal im Detail.
|
||||||
|
set "GV_ENGINE=dot"
|
||||||
|
echo %*| findstr /i /c:"--use-cords" /c:"--use-coords" >nul && set "GV_ENGINE=neato"
|
||||||
|
echo %*| findstr /i /c:"--tosvg" >nul
|
||||||
|
if not errorlevel 1 (
|
||||||
|
where %GV_ENGINE%.exe >nul 2>&1
|
||||||
|
if errorlevel 1 (
|
||||||
|
set "GV_OK="
|
||||||
|
if /i "%GV_ENGINE%"=="dot" if defined GRAPHVIZ_DOT set "GV_OK=1"
|
||||||
|
if not defined GV_OK (
|
||||||
|
echo WARNUNG: Graphviz '%GV_ENGINE%' nicht im PATH gefunden - --tosvg wird vermutlich fehlschlagen.
|
||||||
|
echo Graphviz installieren ^(https://graphviz.org/download/^), den bin-Ordner
|
||||||
|
echo zum PATH hinzufuegen, oder GRAPHVIZ_DOT auf die dot.exe setzen ^(nur fuer 'dot'^).
|
||||||
|
echo.
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
"%PY%" "%SKEL_LIB%\tro_flow.py" %*
|
"%PY%" "%SKEL_LIB%\tro_flow.py" %*
|
||||||
set "RC=%ERRORLEVEL%"
|
set "RC=%ERRORLEVEL%"
|
||||||
|
|
||||||
|
|||||||
@@ -31,4 +31,24 @@ fi
|
|||||||
PY="python3"
|
PY="python3"
|
||||||
command -v python3 >/dev/null 2>&1 || PY="python"
|
command -v python3 >/dev/null 2>&1 || PY="python"
|
||||||
|
|
||||||
|
# Graphviz pruefen, wenn --tosvg SVG erzeugen soll (dot, bei --use-cords/
|
||||||
|
# --use-coords neato) - nur ein frueher Hinweis; das eigentliche Skript
|
||||||
|
# meldet denselben Fehler beim Rendern noch einmal im Detail.
|
||||||
|
case " $* " in
|
||||||
|
*" --tosvg "*)
|
||||||
|
GV_ENGINE="dot"
|
||||||
|
case " $* " in
|
||||||
|
*" --use-cords "*|*" --use-coords "*) GV_ENGINE="neato" ;;
|
||||||
|
esac
|
||||||
|
if ! command -v "$GV_ENGINE" >/dev/null 2>&1; then
|
||||||
|
if [ "$GV_ENGINE" != "dot" ] || [ -z "${GRAPHVIZ_DOT:-}" ]; then
|
||||||
|
echo "WARNUNG: Graphviz '$GV_ENGINE' nicht im PATH gefunden - --tosvg wird vermutlich fehlschlagen." >&2
|
||||||
|
echo " Graphviz installieren (https://graphviz.org/download/), PATH ergaenzen," >&2
|
||||||
|
echo " oder GRAPHVIZ_DOT auf die dot-Programmdatei setzen (nur fuer 'dot')." >&2
|
||||||
|
echo "" >&2
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
exec "$PY" "$SKEL_LIB/tro_flow.py" "$@"
|
exec "$PY" "$SKEL_LIB/tro_flow.py" "$@"
|
||||||
@@ -4,634 +4,219 @@
|
|||||||
<!-- Generated by graphviz version 15.1.0 (20260618.0150)
|
<!-- Generated by graphviz version 15.1.0 (20260618.0150)
|
||||||
-->
|
-->
|
||||||
<!-- Title: Materialfluss Pages: 1 -->
|
<!-- Title: Materialfluss Pages: 1 -->
|
||||||
<svg width="2928pt" height="5734pt"
|
<svg width="2940pt" height="5743pt"
|
||||||
viewBox="0.00 0.00 2928.00 5734.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
viewBox="0.00 0.00 2940.00 5743.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 5730.07)">
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 5739.44)">
|
||||||
<title>Materialfluss</title>
|
<title>Materialfluss</title>
|
||||||
<polygon fill="white" stroke="none" points="-4,4 -4,-5730.07 2924.07,-5730.07 2924.07,4 -4,4"/>
|
<polygon fill="white" stroke="none" points="-4,4 -4,-5739.44 2936.07,-5739.44 2936.07,4 -4,4"/>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1460.04" y="-5711.62" font-family="Segoe UI" font-size="11.00">Materialfluss - export.csv</text>
|
<text xml:space="preserve" text-anchor="middle" x="1466.04" y="-5720.99" font-family="Segoe UI" font-size="11.00">Materialfluss - mubea.csv</text>
|
||||||
<!-- 0001-L -->
|
<!-- 0001-L -->
|
||||||
<g id="node1" class="node">
|
<g id="node1" class="node">
|
||||||
<title>0001-L</title>
|
<title>0001-L</title>
|
||||||
<path fill="#2f5597" stroke="#1f3864" d="M1241.32,-981.25C1241.32,-981.25 1182.57,-981.25 1182.57,-981.25 1176.57,-981.25 1170.57,-975.25 1170.57,-969.25 1170.57,-969.25 1170.57,-947 1170.57,-947 1170.57,-941 1176.57,-935 1182.57,-935 1182.57,-935 1241.32,-935 1241.32,-935 1247.32,-935 1253.32,-941 1253.32,-947 1253.32,-947 1253.32,-969.25 1253.32,-969.25 1253.32,-975.25 1247.32,-981.25 1241.32,-981.25"/>
|
<path fill="#2f5597" stroke="#1f3864" d="M1253.32,-990.62C1253.32,-990.62 1194.57,-990.62 1194.57,-990.62 1188.57,-990.62 1182.57,-984.62 1182.57,-978.62 1182.57,-978.62 1182.57,-956.38 1182.57,-956.38 1182.57,-950.38 1188.57,-944.38 1194.57,-944.38 1194.57,-944.38 1253.32,-944.38 1253.32,-944.38 1259.32,-944.38 1265.32,-950.38 1265.32,-956.38 1265.32,-956.38 1265.32,-978.62 1265.32,-978.62 1265.32,-984.62 1259.32,-990.62 1253.32,-990.62"/>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1211.95" y="-968.7" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Kreisel1  [0001-L]</text>
|
<text xml:space="preserve" text-anchor="middle" x="1223.94" y="-978.08" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Kreisel1  [0001-L]</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1211.95" y="-955.95" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Bahn L (links)</text>
|
<text xml:space="preserve" text-anchor="middle" x="1223.94" y="-965.33" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Bahn L (links)</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1211.95" y="-943.2" font-family="Segoe UI" font-size="9.00" fill="#ffffff">h = 1.470 m</text>
|
<text xml:space="preserve" text-anchor="middle" x="1223.94" y="-952.58" font-family="Segoe UI" font-size="9.00" fill="#ffffff">h = 1.470 m</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0002-R -->
|
<!-- 0002-R -->
|
||||||
<g id="node4" class="node">
|
<g id="node4" class="node">
|
||||||
<title>0002-R</title>
|
<title>0002-R</title>
|
||||||
<path fill="#2f5597" stroke="#1f3864" d="M416.69,-3308.13C416.69,-3308.13 357.19,-3308.13 357.19,-3308.13 351.19,-3308.13 345.19,-3302.13 345.19,-3296.13 345.19,-3296.13 345.19,-3273.88 345.19,-3273.88 345.19,-3267.88 351.19,-3261.88 357.19,-3261.88 357.19,-3261.88 416.69,-3261.88 416.69,-3261.88 422.69,-3261.88 428.69,-3267.88 428.69,-3273.88 428.69,-3273.88 428.69,-3296.13 428.69,-3296.13 428.69,-3302.13 422.69,-3308.13 416.69,-3308.13"/>
|
<path fill="#2f5597" stroke="#1f3864" d="M428.69,-3317.51C428.69,-3317.51 369.19,-3317.51 369.19,-3317.51 363.19,-3317.51 357.19,-3311.51 357.19,-3305.51 357.19,-3305.51 357.19,-3283.26 357.19,-3283.26 357.19,-3277.26 363.19,-3271.26 369.19,-3271.26 369.19,-3271.26 428.69,-3271.26 428.69,-3271.26 434.69,-3271.26 440.69,-3277.26 440.69,-3283.26 440.69,-3283.26 440.69,-3305.51 440.69,-3305.51 440.69,-3311.51 434.69,-3317.51 428.69,-3317.51"/>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="386.94" y="-3295.58" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Kreisel2  [0002-R]</text>
|
<text xml:space="preserve" text-anchor="middle" x="398.94" y="-3304.95" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Kreisel2  [0002-R]</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="386.94" y="-3282.83" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Bahn R (rechts)</text>
|
<text xml:space="preserve" text-anchor="middle" x="398.94" y="-3292.2" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Bahn R (rechts)</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="386.94" y="-3270.08" font-family="Segoe UI" font-size="9.00" fill="#ffffff">h = 1.470 m</text>
|
<text xml:space="preserve" text-anchor="middle" x="398.94" y="-3279.45" font-family="Segoe UI" font-size="9.00" fill="#ffffff">h = 1.470 m</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0001-L->0002-R -->
|
<!-- 0001-L->0002-R -->
|
||||||
<g id="edge1" class="edge">
|
<g id="edge1" class="edge">
|
||||||
<title>0001-L->0002-R</title>
|
<title>0001-L->0002-R</title>
|
||||||
<g id="a_edge1"><a xlink:title="Richtung Weiche">
|
<g id="a_edge1"><a xlink:title="Richtung Weiche">
|
||||||
<path fill="none" stroke="#bf8f00" stroke-width="1.2" stroke-dasharray="5,2" d="M1200.43,-990.59C1108.22,-1250.68 490.75,-2992.22 398.47,-3252.49"/>
|
<path fill="none" stroke="#bf8f00" stroke-width="1.2" stroke-dasharray="5,2" d="M1212.43,-999.97C1120.22,-1260.06 502.75,-3001.59 410.47,-3261.86"/>
|
||||||
<polygon fill="#bf8f00" stroke="#bf8f00" stroke-width="1.2" points="1203,-991.72 1203.04,-983.24 1197.73,-989.85 1203,-991.72"/>
|
<polygon fill="#bf8f00" stroke="#bf8f00" stroke-width="1.2" points="1215,-1001.1 1215.04,-992.62 1209.73,-999.22 1215,-1001.1"/>
|
||||||
<polygon fill="#bf8f00" stroke="#bf8f00" stroke-width="1.2" points="395.94,-3251.27 395.9,-3259.74 401.21,-3253.14 395.94,-3251.27"/>
|
<polygon fill="#bf8f00" stroke="#bf8f00" stroke-width="1.2" points="407.94,-3260.64 407.9,-3269.12 413.21,-3262.51 407.94,-3260.64"/>
|
||||||
</a>
|
</a>
|
||||||
</g>
|
</g>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="786.11" y="-2124.76" font-family="Segoe UI" font-size="8.00" fill="#cc8800">Weiche</text>
|
<text xml:space="preserve" text-anchor="middle" x="798.11" y="-2134.13" font-family="Segoe UI" font-size="8.00" fill="#cc8800">Weiche</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0001-R -->
|
<!-- 0001-R -->
|
||||||
<g id="node2" class="node">
|
<g id="node2" class="node">
|
||||||
<title>0001-R</title>
|
<title>0001-R</title>
|
||||||
<path fill="#2f5597" stroke="#1f3864" d="M1244.32,-812.62C1244.32,-812.62 1179.57,-812.62 1179.57,-812.62 1173.57,-812.62 1167.57,-806.62 1167.57,-800.62 1167.57,-800.62 1167.57,-765.62 1167.57,-765.62 1167.57,-759.62 1173.57,-753.62 1179.57,-753.62 1179.57,-753.62 1244.32,-753.62 1244.32,-753.62 1250.32,-753.62 1256.32,-759.62 1256.32,-765.62 1256.32,-765.62 1256.32,-800.62 1256.32,-800.62 1256.32,-806.62 1250.32,-812.62 1244.32,-812.62"/>
|
<path fill="#2f5597" stroke="#1f3864" d="M1256.32,-822C1256.32,-822 1191.57,-822 1191.57,-822 1185.57,-822 1179.57,-816 1179.57,-810 1179.57,-810 1179.57,-775 1179.57,-775 1179.57,-769 1185.57,-763 1191.57,-763 1191.57,-763 1256.32,-763 1256.32,-763 1262.32,-763 1268.32,-769 1268.32,-775 1268.32,-775 1268.32,-810 1268.32,-810 1268.32,-816 1262.32,-822 1256.32,-822"/>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1211.95" y="-800.08" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Kreisel1  [0001-R]</text>
|
<text xml:space="preserve" text-anchor="middle" x="1223.94" y="-809.45" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Kreisel1  [0001-R]</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1211.95" y="-787.33" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Bahn R (rechts)</text>
|
<text xml:space="preserve" text-anchor="middle" x="1223.94" y="-796.7" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Bahn R (rechts)</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1211.95" y="-774.58" font-family="Segoe UI" font-size="9.00" fill="#ffffff">h = 1.470 m</text>
|
<text xml:space="preserve" text-anchor="middle" x="1223.94" y="-783.95" font-family="Segoe UI" font-size="9.00" fill="#ffffff">h = 1.470 m</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1211.95" y="-761.83" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Separator (1): 0061</text>
|
<text xml:space="preserve" text-anchor="middle" x="1223.94" y="-771.2" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Separator (1): 0061</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0001-R->0001-L -->
|
<!-- 0001-R->0001-L -->
|
||||||
<g id="edge5" class="edge">
|
<g id="edge3" class="edge">
|
||||||
<title>0001-R->0001-L</title>
|
<title>0001-R->0001-L</title>
|
||||||
<g id="a_edge5"><a xlink:title="Kreisel-Umlauf UZS">
|
<g id="a_edge3"><a xlink:title="Kreisel-Umlauf UZS">
|
||||||
<path fill="none" stroke="#8ea9db" stroke-width="1.2" stroke-dasharray="5,2" d="M1211.95,-812.81C1211.95,-843.6 1211.95,-891.69 1211.95,-924.02"/>
|
<path fill="none" stroke="#8ea9db" stroke-width="1.2" stroke-dasharray="5,2" d="M1223.94,-822.19C1223.94,-852.98 1223.94,-901.06 1223.94,-933.4"/>
|
||||||
<polygon fill="#8ea9db" stroke="#8ea9db" stroke-width="1.2" points="1208.8,-923.93 1211.95,-932.93 1215.1,-923.93 1208.8,-923.93"/>
|
<polygon fill="#8ea9db" stroke="#8ea9db" stroke-width="1.2" points="1220.8,-933.31 1223.95,-942.31 1227.1,-933.31 1220.8,-933.31"/>
|
||||||
</a>
|
</a>
|
||||||
</g>
|
</g>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1204.82" y="-877.56" font-family="Segoe UI" font-size="8.00" fill="#5b7fc7">UZS</text>
|
<text xml:space="preserve" text-anchor="middle" x="1216.82" y="-886.93" font-family="Segoe UI" font-size="8.00" fill="#5b7fc7">UZS</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0001-R->0002-R -->
|
<!-- 0001-R->0002-R -->
|
||||||
<g id="edge2" class="edge">
|
<g id="edge2" class="edge">
|
||||||
<title>0001-R->0002-R</title>
|
<title>0001-R->0002-R</title>
|
||||||
<g id="a_edge2"><a xlink:title="Richtung Weiche">
|
<g id="a_edge2"><a xlink:title="Richtung Weiche">
|
||||||
<path fill="none" stroke="#bf8f00" stroke-width="1.2" stroke-dasharray="5,2" d="M1199.1,-822.08C1102.18,-1116.01 487.19,-2981.01 397.78,-3252.15"/>
|
<path fill="none" stroke="#bf8f00" stroke-width="1.2" stroke-dasharray="5,2" d="M1211.1,-831.46C1114.18,-1125.38 499.19,-2990.39 409.78,-3261.52"/>
|
||||||
<polygon fill="#bf8f00" stroke="#bf8f00" stroke-width="1.2" points="1201.69,-823.16 1201.54,-814.69 1196.37,-821.41 1201.69,-823.16"/>
|
<polygon fill="#bf8f00" stroke="#bf8f00" stroke-width="1.2" points="1213.69,-832.54 1213.54,-824.07 1208.37,-830.79 1213.69,-832.54"/>
|
||||||
<polygon fill="#bf8f00" stroke="#bf8f00" stroke-width="1.2" points="395.12,-3251.26 395.28,-3259.74 400.44,-3253.02 395.12,-3251.26"/>
|
<polygon fill="#bf8f00" stroke="#bf8f00" stroke-width="1.2" points="407.12,-3260.64 407.28,-3269.11 412.44,-3262.39 407.12,-3260.64"/>
|
||||||
</a>
|
</a>
|
||||||
</g>
|
</g>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="782.11" y="-2049.34" font-family="Segoe UI" font-size="8.00" fill="#cc8800">Weiche</text>
|
<text xml:space="preserve" text-anchor="middle" x="794.11" y="-2058.71" font-family="Segoe UI" font-size="8.00" fill="#cc8800">Weiche</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0002-L -->
|
<!-- 0002-L -->
|
||||||
<g id="node3" class="node">
|
<g id="node3" class="node">
|
||||||
<title>0002-L</title>
|
<title>0002-L</title>
|
||||||
<path fill="#2f5597" stroke="#1f3864" d="M441.82,-3495.88C441.82,-3495.88 332.07,-3495.88 332.07,-3495.88 326.07,-3495.88 320.07,-3489.88 320.07,-3483.88 320.07,-3483.88 320.07,-3436.13 320.07,-3436.13 320.07,-3430.13 326.07,-3424.13 332.07,-3424.13 332.07,-3424.13 441.82,-3424.13 441.82,-3424.13 447.82,-3424.13 453.82,-3430.13 453.82,-3436.13 453.82,-3436.13 453.82,-3483.88 453.82,-3483.88 453.82,-3489.88 447.82,-3495.88 441.82,-3495.88"/>
|
<path fill="#2f5597" stroke="#1f3864" d="M453.82,-3505.26C453.82,-3505.26 344.07,-3505.26 344.07,-3505.26 338.07,-3505.26 332.07,-3499.26 332.07,-3493.26 332.07,-3493.26 332.07,-3445.51 332.07,-3445.51 332.07,-3439.51 338.07,-3433.51 344.07,-3433.51 344.07,-3433.51 453.82,-3433.51 453.82,-3433.51 459.82,-3433.51 465.82,-3439.51 465.82,-3445.51 465.82,-3445.51 465.82,-3493.26 465.82,-3493.26 465.82,-3499.26 459.82,-3505.26 453.82,-3505.26"/>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="386.94" y="-3483.33" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Kreisel2  [0002-L]</text>
|
<text xml:space="preserve" text-anchor="middle" x="398.94" y="-3492.7" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Kreisel2  [0002-L]</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="386.94" y="-3470.58" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Bahn L (links)</text>
|
<text xml:space="preserve" text-anchor="middle" x="398.94" y="-3479.95" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Bahn L (links)</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="386.94" y="-3457.83" font-family="Segoe UI" font-size="9.00" fill="#ffffff">h = 1.470 m</text>
|
<text xml:space="preserve" text-anchor="middle" x="398.94" y="-3467.2" font-family="Segoe UI" font-size="9.00" fill="#ffffff">h = 1.470 m</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="386.94" y="-3445.08" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Separator (3): 0003, 0011, 0012</text>
|
<text xml:space="preserve" text-anchor="middle" x="398.94" y="-3454.45" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Separator (3): 0003, 0011, 0012</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="386.94" y="-3432.33" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Scanner (3): 0004, 0007, 0009</text>
|
<text xml:space="preserve" text-anchor="middle" x="398.94" y="-3441.7" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Scanner (3): 0004, 0007, 0009</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0016 -->
|
<!-- 0016 -->
|
||||||
<g id="node9" class="node">
|
<g id="node9" class="node">
|
||||||
<title>0016</title>
|
<title>0016</title>
|
||||||
<path fill="#e2f0d9" stroke="#548235" d="M279.12,-3816.49C279.12,-3816.49 179.13,-3816.49 179.13,-3816.49 173.13,-3816.49 167.13,-3810.49 167.13,-3804.49 167.13,-3804.49 167.13,-3743.99 167.13,-3743.99 167.13,-3737.99 173.13,-3731.99 179.13,-3731.99 179.13,-3731.99 279.12,-3731.99 279.12,-3731.99 285.12,-3731.99 291.12,-3737.99 291.12,-3743.99 291.12,-3743.99 291.12,-3804.49 291.12,-3804.49 291.12,-3810.49 285.12,-3816.49 279.12,-3816.49"/>
|
<path fill="#e2f0d9" stroke="#548235" d="M291.12,-3825.87C291.12,-3825.87 191.12,-3825.87 191.12,-3825.87 185.12,-3825.87 179.12,-3819.87 179.12,-3813.87 179.12,-3813.87 179.12,-3753.37 179.12,-3753.37 179.12,-3747.37 185.12,-3741.37 191.12,-3741.37 191.12,-3741.37 291.12,-3741.37 291.12,-3741.37 297.12,-3741.37 303.12,-3747.37 303.12,-3753.37 303.12,-3753.37 303.12,-3813.87 303.12,-3813.87 303.12,-3819.87 297.12,-3825.87 291.12,-3825.87"/>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="229.13" y="-3803.94" font-family="Segoe UI" font-size="9.00" fill="#375623">VarioFoerderer :1  [0016]</text>
|
<text xml:space="preserve" text-anchor="middle" x="241.12" y="-3813.32" font-family="Segoe UI" font-size="9.00" fill="#375623">VarioFoerderer :1  [0016]</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="229.13" y="-3791.19" font-family="Segoe UI" font-size="9.00" fill="#375623">Strecke</text>
|
<text xml:space="preserve" text-anchor="middle" x="241.12" y="-3800.57" font-family="Segoe UI" font-size="9.00" fill="#375623">Strecke</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="229.13" y="-3778.44" font-family="Segoe UI" font-size="9.00" fill="#375623">h = 0.000 m</text>
|
<text xml:space="preserve" text-anchor="middle" x="241.12" y="-3787.82" font-family="Segoe UI" font-size="9.00" fill="#375623">h = 0.000 m</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="229.13" y="-3765.69" font-family="Segoe UI" font-size="9.00" fill="#375623">0 -> 0 mm (+0) = aufwaerts</text>
|
<text xml:space="preserve" text-anchor="middle" x="241.12" y="-3775.07" font-family="Segoe UI" font-size="9.00" fill="#375623">0 -> 0 mm (+0) = aufwaerts</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="229.13" y="-3752.94" font-family="Segoe UI" font-size="9.00" fill="#375623">Separator (2): 0058, 0059</text>
|
<text xml:space="preserve" text-anchor="middle" x="241.12" y="-3762.32" font-family="Segoe UI" font-size="9.00" fill="#375623">Separator (2): 0058, 0059</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="229.13" y="-3740.19" font-family="Segoe UI" font-size="9.00" fill="#375623">Scanner (1): 0060</text>
|
<text xml:space="preserve" text-anchor="middle" x="241.12" y="-3749.57" font-family="Segoe UI" font-size="9.00" fill="#375623">Scanner (1): 0060</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0002-L->0016 -->
|
<!-- 0002-L->0016 -->
|
||||||
<g id="edge46" class="edge">
|
<g id="edge8" class="edge">
|
||||||
<title>0002-L->0016</title>
|
<title>0002-L->0016</title>
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M368.69,-3496.36C340.63,-3552.22 286.83,-3659.35 254.84,-3723.04"/>
|
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M380.69,-3505.73C352.63,-3561.59 298.83,-3668.72 266.84,-3732.41"/>
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="252.38,-3721.7 251.29,-3730.1 257.39,-3724.21 252.38,-3721.7"/>
|
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="264.38,-3731.07 263.29,-3739.48 269.39,-3733.59 264.38,-3731.07"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0002-R->0002-L -->
|
<!-- 0002-R->0002-L -->
|
||||||
<g id="edge4" class="edge">
|
<g id="edge4" class="edge">
|
||||||
<title>0002-R->0002-L</title>
|
<title>0002-R->0002-L</title>
|
||||||
<g id="a_edge4"><a xlink:title="Kreisel-Umlauf UZS">
|
<g id="a_edge4"><a xlink:title="Kreisel-Umlauf UZS">
|
||||||
<path fill="none" stroke="#8ea9db" stroke-width="1.2" stroke-dasharray="5,2" d="M386.94,-3308.61C386.94,-3335.29 386.94,-3379.42 386.94,-3413.16"/>
|
<path fill="none" stroke="#8ea9db" stroke-width="1.2" stroke-dasharray="5,2" d="M398.94,-3317.98C398.94,-3344.67 398.94,-3388.79 398.94,-3422.54"/>
|
||||||
<polygon fill="#8ea9db" stroke="#8ea9db" stroke-width="1.2" points="383.8,-3412.9 386.95,-3421.9 390.1,-3412.9 383.8,-3412.9"/>
|
<polygon fill="#8ea9db" stroke="#8ea9db" stroke-width="1.2" points="395.8,-3422.28 398.95,-3431.28 402.1,-3422.28 395.8,-3422.28"/>
|
||||||
</a>
|
</a>
|
||||||
</g>
|
</g>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="379.82" y="-3369.77" font-family="Segoe UI" font-size="8.00" fill="#5b7fc7">UZS</text>
|
<text xml:space="preserve" text-anchor="middle" x="391.82" y="-3379.15" font-family="Segoe UI" font-size="8.00" fill="#5b7fc7">UZS</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0013 -->
|
<!-- 0013 -->
|
||||||
<g id="node7" class="node">
|
<g id="node7" class="node">
|
||||||
<title>0013</title>
|
<title>0013</title>
|
||||||
<path fill="#e2f0d9" stroke="#548235" d="M1681.56,-5703.07C1681.56,-5703.07 1563.56,-5703.07 1563.56,-5703.07 1557.56,-5703.07 1551.56,-5697.07 1551.56,-5691.07 1551.56,-5691.07 1551.56,-5643.32 1551.56,-5643.32 1551.56,-5637.32 1557.56,-5631.32 1563.56,-5631.32 1563.56,-5631.32 1681.56,-5631.32 1681.56,-5631.32 1687.56,-5631.32 1693.56,-5637.32 1693.56,-5643.32 1693.56,-5643.32 1693.56,-5691.07 1693.56,-5691.07 1693.56,-5697.07 1687.56,-5703.07 1681.56,-5703.07"/>
|
<path fill="#e2f0d9" stroke="#548235" d="M1693.56,-5712.44C1693.56,-5712.44 1575.56,-5712.44 1575.56,-5712.44 1569.56,-5712.44 1563.56,-5706.44 1563.56,-5700.44 1563.56,-5700.44 1563.56,-5652.69 1563.56,-5652.69 1563.56,-5646.69 1569.56,-5640.69 1575.56,-5640.69 1575.56,-5640.69 1693.56,-5640.69 1693.56,-5640.69 1699.56,-5640.69 1705.56,-5646.69 1705.56,-5652.69 1705.56,-5652.69 1705.56,-5700.44 1705.56,-5700.44 1705.56,-5706.44 1699.56,-5712.44 1693.56,-5712.44"/>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1622.56" y="-5690.52" font-family="Segoe UI" font-size="9.00" fill="#375623">VarioFoerderer :3  [0013]</text>
|
<text xml:space="preserve" text-anchor="middle" x="1634.56" y="-5699.89" font-family="Segoe UI" font-size="9.00" fill="#375623">VarioFoerderer :3  [0013]</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1622.56" y="-5677.77" font-family="Segoe UI" font-size="9.00" fill="#375623">Strecke</text>
|
<text xml:space="preserve" text-anchor="middle" x="1634.56" y="-5687.14" font-family="Segoe UI" font-size="9.00" fill="#375623">Strecke</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1622.56" y="-5665.02" font-family="Segoe UI" font-size="9.00" fill="#375623">h = 0.237 m</text>
|
<text xml:space="preserve" text-anchor="middle" x="1634.56" y="-5674.39" font-family="Segoe UI" font-size="9.00" fill="#375623">h = 0.237 m</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1622.56" y="-5652.27" font-family="Segoe UI" font-size="9.00" fill="#375623">0 -> 474 mm (+474) = aufwaerts</text>
|
<text xml:space="preserve" text-anchor="middle" x="1634.56" y="-5661.64" font-family="Segoe UI" font-size="9.00" fill="#375623">0 -> 474 mm (+474) = aufwaerts</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1622.56" y="-5639.52" font-family="Segoe UI" font-size="9.00" fill="#375623">Separator (2): 0015, 0062</text>
|
<text xml:space="preserve" text-anchor="middle" x="1634.56" y="-5648.89" font-family="Segoe UI" font-size="9.00" fill="#375623">Separator (2): 0015, 0062</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0002-R->0013 -->
|
<!-- 0002-R->0013 -->
|
||||||
<g id="edge50" class="edge">
|
<g id="edge12" class="edge">
|
||||||
<title>0002-R->0013</title>
|
<title>0002-R->0013</title>
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M399.2,-3308.48C413.29,-3335.48 437.1,-3381.15 457.52,-3420.43 918.48,-4307.16 1480.01,-5391.79 1599.53,-5622.68"/>
|
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M411.2,-3317.86C425.29,-3344.86 449.1,-3390.52 469.52,-3429.81 930.48,-4316.54 1492.01,-5401.17 1611.53,-5632.06"/>
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1596.92,-5623.73 1603.08,-5629.55 1601.89,-5621.16 1596.92,-5623.73"/>
|
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1608.92,-5633.11 1615.08,-5638.93 1613.89,-5630.53 1608.92,-5633.11"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0014 -->
|
<!-- 0014 -->
|
||||||
<g id="node8" class="node">
|
<g id="node8" class="node">
|
||||||
<title>0014</title>
|
<title>0014</title>
|
||||||
<path fill="#e2f0d9" stroke="#548235" d="M1681.56,-1146.19C1681.56,-1146.19 1563.56,-1146.19 1563.56,-1146.19 1557.56,-1146.19 1551.56,-1140.19 1551.56,-1134.19 1551.56,-1134.19 1551.56,-1073.69 1551.56,-1073.69 1551.56,-1067.69 1557.56,-1061.69 1563.56,-1061.69 1563.56,-1061.69 1681.56,-1061.69 1681.56,-1061.69 1687.56,-1061.69 1693.56,-1067.69 1693.56,-1073.69 1693.56,-1073.69 1693.56,-1134.19 1693.56,-1134.19 1693.56,-1140.19 1687.56,-1146.19 1681.56,-1146.19"/>
|
<path fill="#e2f0d9" stroke="#548235" d="M1693.56,-1155.57C1693.56,-1155.57 1575.56,-1155.57 1575.56,-1155.57 1569.56,-1155.57 1563.56,-1149.57 1563.56,-1143.57 1563.56,-1143.57 1563.56,-1083.07 1563.56,-1083.07 1563.56,-1077.07 1569.56,-1071.07 1575.56,-1071.07 1575.56,-1071.07 1693.56,-1071.07 1693.56,-1071.07 1699.56,-1071.07 1705.56,-1077.07 1705.56,-1083.07 1705.56,-1083.07 1705.56,-1143.57 1705.56,-1143.57 1705.56,-1149.57 1699.56,-1155.57 1693.56,-1155.57"/>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1622.56" y="-1133.64" font-family="Segoe UI" font-size="9.00" fill="#375623">VarioFoerderer :2  [0014]</text>
|
<text xml:space="preserve" text-anchor="middle" x="1634.56" y="-1143.02" font-family="Segoe UI" font-size="9.00" fill="#375623">VarioFoerderer :2  [0014]</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1622.56" y="-1120.89" font-family="Segoe UI" font-size="9.00" fill="#375623">Strecke</text>
|
<text xml:space="preserve" text-anchor="middle" x="1634.56" y="-1130.27" font-family="Segoe UI" font-size="9.00" fill="#375623">Strecke</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1622.56" y="-1108.14" font-family="Segoe UI" font-size="9.00" fill="#375623">h = 0.237 m</text>
|
<text xml:space="preserve" text-anchor="middle" x="1634.56" y="-1117.52" font-family="Segoe UI" font-size="9.00" fill="#375623">h = 0.237 m</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1622.56" y="-1095.39" font-family="Segoe UI" font-size="9.00" fill="#375623">0 -> 474 mm (+474) = aufwaerts</text>
|
<text xml:space="preserve" text-anchor="middle" x="1634.56" y="-1104.77" font-family="Segoe UI" font-size="9.00" fill="#375623">0 -> 474 mm (+474) = aufwaerts</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1622.56" y="-1082.64" font-family="Segoe UI" font-size="9.00" fill="#375623">Separator (2): 0057, 0065</text>
|
<text xml:space="preserve" text-anchor="middle" x="1634.56" y="-1092.02" font-family="Segoe UI" font-size="9.00" fill="#375623">Separator (2): 0057, 0065</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1622.56" y="-1069.89" font-family="Segoe UI" font-size="9.00" fill="#375623">Scanner (1): 0006</text>
|
<text xml:space="preserve" text-anchor="middle" x="1634.56" y="-1079.27" font-family="Segoe UI" font-size="9.00" fill="#375623">Scanner (1): 0006</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0002-R->0014 -->
|
<!-- 0002-R->0014 -->
|
||||||
<g id="edge48" class="edge">
|
<g id="edge10" class="edge">
|
||||||
<title>0002-R->0014</title>
|
<title>0002-R->0014</title>
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M400.19,-3261.62C520.3,-3049.62 1420.55,-1460.54 1593.78,-1154.76"/>
|
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M412.19,-3271C532.3,-3058.99 1432.55,-1469.91 1605.78,-1164.14"/>
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1596.05,-1156.43 1597.55,-1148.09 1591.18,-1153.67 1596.05,-1156.43"/>
|
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1608.05,-1165.81 1609.55,-1157.47 1603.18,-1163.05 1608.05,-1165.81"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0010-L -->
|
<!-- 0010-L -->
|
||||||
<g id="node5" class="node">
|
<g id="node5" class="node">
|
||||||
<title>0010-L</title>
|
<title>0010-L</title>
|
||||||
<path fill="#2f5597" stroke="#1f3864" d="M2893.82,-3483.13C2893.82,-3483.13 2835.07,-3483.13 2835.07,-3483.13 2829.07,-3483.13 2823.07,-3477.13 2823.07,-3471.13 2823.07,-3471.13 2823.07,-3448.88 2823.07,-3448.88 2823.07,-3442.88 2829.07,-3436.88 2835.07,-3436.88 2835.07,-3436.88 2893.82,-3436.88 2893.82,-3436.88 2899.82,-3436.88 2905.82,-3442.88 2905.82,-3448.88 2905.82,-3448.88 2905.82,-3471.13 2905.82,-3471.13 2905.82,-3477.13 2899.82,-3483.13 2893.82,-3483.13"/>
|
<path fill="#2f5597" stroke="#1f3864" d="M2905.82,-3492.51C2905.82,-3492.51 2847.07,-3492.51 2847.07,-3492.51 2841.07,-3492.51 2835.07,-3486.51 2835.07,-3480.51 2835.07,-3480.51 2835.07,-3458.26 2835.07,-3458.26 2835.07,-3452.26 2841.07,-3446.26 2847.07,-3446.26 2847.07,-3446.26 2905.82,-3446.26 2905.82,-3446.26 2911.82,-3446.26 2917.82,-3452.26 2917.82,-3458.26 2917.82,-3458.26 2917.82,-3480.51 2917.82,-3480.51 2917.82,-3486.51 2911.82,-3492.51 2905.82,-3492.51"/>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="2864.44" y="-3470.58" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Kreisel3  [0010-L]</text>
|
<text xml:space="preserve" text-anchor="middle" x="2876.45" y="-3479.95" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Kreisel3  [0010-L]</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="2864.44" y="-3457.83" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Bahn L (links)</text>
|
<text xml:space="preserve" text-anchor="middle" x="2876.45" y="-3467.2" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Bahn L (links)</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="2864.44" y="-3445.08" font-family="Segoe UI" font-size="9.00" fill="#ffffff">h = 1.940 m</text>
|
<text xml:space="preserve" text-anchor="middle" x="2876.45" y="-3454.45" font-family="Segoe UI" font-size="9.00" fill="#ffffff">h = 1.940 m</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0017 -->
|
<!-- grp_0017 -->
|
||||||
<g id="node10" class="node">
|
<g id="node10" class="node">
|
||||||
<title>0017</title>
|
<title>grp_0017</title>
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-5327.64C1693.98,-5327.64 1563.23,-5327.64 1563.23,-5327.64 1557.23,-5327.64 1551.23,-5321.64 1551.23,-5315.64 1551.23,-5315.64 1551.23,-5267.89 1551.23,-5267.89 1551.23,-5261.89 1557.23,-5255.89 1563.23,-5255.89 1563.23,-5255.89 1693.98,-5255.89 1693.98,-5255.89 1699.98,-5255.89 1705.98,-5261.89 1705.98,-5267.89 1705.98,-5267.89 1705.98,-5315.64 1705.98,-5315.64 1705.98,-5321.64 1699.98,-5327.64 1693.98,-5327.64"/>
|
<path fill="#fbe5d6" stroke="#c55a11" d="M1705.98,-3443.39C1705.98,-3443.39 1575.23,-3443.39 1575.23,-3443.39 1569.23,-3443.39 1563.23,-3437.39 1563.23,-3431.39 1563.23,-3431.39 1563.23,-3370.89 1563.23,-3370.89 1563.23,-3364.89 1569.23,-3358.89 1575.23,-3358.89 1575.23,-3358.89 1705.98,-3358.89 1705.98,-3358.89 1711.98,-3358.89 1717.98,-3364.89 1717.98,-3370.89 1717.98,-3370.89 1717.98,-3431.39 1717.98,-3431.39 1717.98,-3437.39 1711.98,-3443.39 1705.98,-3443.39"/>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-5315.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :20  [0017]</text>
|
<path fill="none" stroke="#c55a11" d="M1709.98,-3447.39C1709.98,-3447.39 1571.23,-3447.39 1571.23,-3447.39 1565.23,-3447.39 1559.23,-3441.39 1559.23,-3435.39 1559.23,-3435.39 1559.23,-3366.89 1559.23,-3366.89 1559.23,-3360.89 1565.23,-3354.89 1571.23,-3354.89 1571.23,-3354.89 1709.98,-3354.89 1709.98,-3354.89 1715.98,-3354.89 1721.98,-3360.89 1721.98,-3366.89 1721.98,-3366.89 1721.98,-3435.39 1721.98,-3435.39 1721.98,-3441.39 1715.98,-3447.39 1709.98,-3447.39"/>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-5302.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
<text xml:space="preserve" text-anchor="middle" x="1640.61" y="-3430.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke 0017 -> 0036 (20x)</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-5289.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
<text xml:space="preserve" text-anchor="middle" x="1640.61" y="-3418.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gruppe paralleler Schwerkraftlinien</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-5276.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
<text xml:space="preserve" text-anchor="middle" x="1640.61" y="-3405.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-5264.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0037</text>
|
<text xml:space="preserve" text-anchor="middle" x="1640.61" y="-3392.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
||||||
|
<text xml:space="preserve" text-anchor="middle" x="1640.61" y="-3379.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (21): 0005 - 0056</text>
|
||||||
|
<text xml:space="preserve" text-anchor="middle" x="1640.61" y="-3367.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Scanner (1): 0066</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0010-L->0017 -->
|
<!-- 0010-L->grp_0017 -->
|
||||||
<g id="edge44" class="edge">
|
|
||||||
<title>0010-L->0017</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2848.59,-3483.5C2718.91,-3675.72 1832.79,-4989.12 1658.37,-5247.64"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1656.12,-5245.98 1653.96,-5254.18 1660.76,-5249.11 1656.12,-5245.98"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0018 -->
|
|
||||||
<g id="node11" class="node">
|
|
||||||
<title>0018</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-5127.64C1693.98,-5127.64 1563.23,-5127.64 1563.23,-5127.64 1557.23,-5127.64 1551.23,-5121.64 1551.23,-5115.64 1551.23,-5115.64 1551.23,-5067.89 1551.23,-5067.89 1551.23,-5061.89 1557.23,-5055.89 1563.23,-5055.89 1563.23,-5055.89 1693.98,-5055.89 1693.98,-5055.89 1699.98,-5055.89 1705.98,-5061.89 1705.98,-5067.89 1705.98,-5067.89 1705.98,-5115.64 1705.98,-5115.64 1705.98,-5121.64 1699.98,-5127.64 1693.98,-5127.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-5115.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :19  [0018]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-5102.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-5089.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-5076.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-5064.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0038</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0018 -->
|
|
||||||
<g id="edge42" class="edge">
|
|
||||||
<title>0010-L->0018</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2846.74,-3483.39C2711.56,-3661.86 1843.31,-4808.27 1661.83,-5047.9"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1659.61,-5046.19 1657.01,-5054.26 1664.07,-5049.57 1659.61,-5046.19"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0019 -->
|
|
||||||
<g id="node12" class="node">
|
|
||||||
<title>0019</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-4927.64C1693.98,-4927.64 1563.23,-4927.64 1563.23,-4927.64 1557.23,-4927.64 1551.23,-4921.64 1551.23,-4915.64 1551.23,-4915.64 1551.23,-4867.89 1551.23,-4867.89 1551.23,-4861.89 1557.23,-4855.89 1563.23,-4855.89 1563.23,-4855.89 1693.98,-4855.89 1693.98,-4855.89 1699.98,-4855.89 1705.98,-4861.89 1705.98,-4867.89 1705.98,-4867.89 1705.98,-4915.64 1705.98,-4915.64 1705.98,-4921.64 1699.98,-4927.64 1693.98,-4927.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4915.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :18  [0019]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4902.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4889.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4876.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4864.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0039</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0019 -->
|
|
||||||
<g id="edge40" class="edge">
|
|
||||||
<title>0010-L->0019</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2844.28,-3483.37C2702.46,-3647.67 1855.06,-4629.41 1665.99,-4848.45"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1664.1,-4846.36 1660.99,-4854.24 1668.34,-4850.02 1664.1,-4846.36"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0020 -->
|
|
||||||
<g id="node13" class="node">
|
|
||||||
<title>0020</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-4727.64C1693.98,-4727.64 1563.23,-4727.64 1563.23,-4727.64 1557.23,-4727.64 1551.23,-4721.64 1551.23,-4715.64 1551.23,-4715.64 1551.23,-4667.89 1551.23,-4667.89 1551.23,-4661.89 1557.23,-4655.89 1563.23,-4655.89 1563.23,-4655.89 1693.98,-4655.89 1693.98,-4655.89 1699.98,-4655.89 1705.98,-4661.89 1705.98,-4667.89 1705.98,-4667.89 1705.98,-4715.64 1705.98,-4715.64 1705.98,-4721.64 1699.98,-4727.64 1693.98,-4727.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4715.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :17  [0020]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4702.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4689.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4676.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4664.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0040</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0020 -->
|
|
||||||
<g id="edge38" class="edge">
|
|
||||||
<title>0010-L->0020</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2840.86,-3483.51C2690.89,-3632.99 1870.17,-4451 1671.79,-4648.73"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1669.97,-4646.58 1666.28,-4654.21 1673.92,-4650.55 1669.97,-4646.58"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0021 -->
|
|
||||||
<g id="node14" class="node">
|
|
||||||
<title>0021</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-4527.64C1693.98,-4527.64 1563.23,-4527.64 1563.23,-4527.64 1557.23,-4527.64 1551.23,-4521.64 1551.23,-4515.64 1551.23,-4515.64 1551.23,-4467.89 1551.23,-4467.89 1551.23,-4461.89 1557.23,-4455.89 1563.23,-4455.89 1563.23,-4455.89 1693.98,-4455.89 1693.98,-4455.89 1699.98,-4455.89 1705.98,-4461.89 1705.98,-4467.89 1705.98,-4467.89 1705.98,-4515.64 1705.98,-4515.64 1705.98,-4521.64 1699.98,-4527.64 1693.98,-4527.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4515.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :16  [0021]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4502.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4489.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4476.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4464.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0041</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0021 -->
|
|
||||||
<g id="edge36" class="edge">
|
|
||||||
<title>0010-L->0021</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2836.31,-3483.49C2677.05,-3616.46 1888.32,-4274.94 1679.44,-4449.33"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1677.7,-4447.13 1673.36,-4454.4 1681.29,-4451.43 1677.7,-4447.13"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0022 -->
|
|
||||||
<g id="node15" class="node">
|
|
||||||
<title>0022</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-4327.64C1693.98,-4327.64 1563.23,-4327.64 1563.23,-4327.64 1557.23,-4327.64 1551.23,-4321.64 1551.23,-4315.64 1551.23,-4315.64 1551.23,-4267.89 1551.23,-4267.89 1551.23,-4261.89 1557.23,-4255.89 1563.23,-4255.89 1563.23,-4255.89 1693.98,-4255.89 1693.98,-4255.89 1699.98,-4255.89 1705.98,-4261.89 1705.98,-4267.89 1705.98,-4267.89 1705.98,-4315.64 1705.98,-4315.64 1705.98,-4321.64 1699.98,-4327.64 1693.98,-4327.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4315.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :15  [0022]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4302.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4289.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4276.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4264.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0042</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0022 -->
|
|
||||||
<g id="edge34" class="edge">
|
|
||||||
<title>0010-L->0022</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2829.45,-3483.56C2658.63,-3598.53 1911.67,-4101.25 1690.51,-4250.1"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1689.13,-4247.65 1684.06,-4254.44 1692.26,-4252.3 1689.13,-4247.65"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0023 -->
|
|
||||||
<g id="node16" class="node">
|
|
||||||
<title>0023</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-4127.64C1693.98,-4127.64 1563.23,-4127.64 1563.23,-4127.64 1557.23,-4127.64 1551.23,-4121.64 1551.23,-4115.64 1551.23,-4115.64 1551.23,-4067.89 1551.23,-4067.89 1551.23,-4061.89 1557.23,-4055.89 1563.23,-4055.89 1563.23,-4055.89 1693.98,-4055.89 1693.98,-4055.89 1699.98,-4055.89 1705.98,-4061.89 1705.98,-4067.89 1705.98,-4067.89 1705.98,-4115.64 1705.98,-4115.64 1705.98,-4121.64 1699.98,-4127.64 1693.98,-4127.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4115.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :14  [0023]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4102.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4089.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4076.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-4064.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0043</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0023 -->
|
|
||||||
<g id="edge32" class="edge">
|
|
||||||
<title>0010-L->0023</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2822.62,-3481.39C2644.26,-3572.56 1945.55,-3929.74 1708.09,-4051.13"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1706.97,-4048.56 1701.12,-4054.7 1709.52,-4053.55 1706.97,-4048.56"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0024 -->
|
|
||||||
<g id="node17" class="node">
|
|
||||||
<title>0024</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-3927.64C1693.98,-3927.64 1563.23,-3927.64 1563.23,-3927.64 1557.23,-3927.64 1551.23,-3921.64 1551.23,-3915.64 1551.23,-3915.64 1551.23,-3867.89 1551.23,-3867.89 1551.23,-3861.89 1557.23,-3855.89 1563.23,-3855.89 1563.23,-3855.89 1693.98,-3855.89 1693.98,-3855.89 1699.98,-3855.89 1705.98,-3861.89 1705.98,-3867.89 1705.98,-3867.89 1705.98,-3915.64 1705.98,-3915.64 1705.98,-3921.64 1699.98,-3927.64 1693.98,-3927.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3915.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :13  [0024]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3902.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3889.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3876.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3864.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0044</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0024 -->
|
|
||||||
<g id="edge30" class="edge">
|
|
||||||
<title>0010-L->0024</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2822.62,-3474.62C2646.11,-3536.28 1960.05,-3775.97 1715.66,-3861.35"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1714.8,-3858.69 1708.17,-3863.97 1716.64,-3863.97 1714.8,-3858.69"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0025 -->
|
|
||||||
<g id="node18" class="node">
|
|
||||||
<title>0025</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-3727.64C1693.98,-3727.64 1563.23,-3727.64 1563.23,-3727.64 1557.23,-3727.64 1551.23,-3721.64 1551.23,-3715.64 1551.23,-3715.64 1551.23,-3667.89 1551.23,-3667.89 1551.23,-3661.89 1557.23,-3655.89 1563.23,-3655.89 1563.23,-3655.89 1693.98,-3655.89 1693.98,-3655.89 1699.98,-3655.89 1705.98,-3661.89 1705.98,-3667.89 1705.98,-3667.89 1705.98,-3715.64 1705.98,-3715.64 1705.98,-3721.64 1699.98,-3727.64 1693.98,-3727.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3715.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :12  [0025]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3702.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3689.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3676.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3664.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0045</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0025 -->
|
|
||||||
<g id="edge28" class="edge">
|
|
||||||
<title>0010-L->0025</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2822.62,-3467.85C2646.2,-3500.93 1960.73,-3629.48 1716.02,-3675.37"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1715.59,-3672.6 1708.24,-3676.83 1716.62,-3678.11 1715.59,-3672.6"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0026 -->
|
|
||||||
<g id="node19" class="node">
|
|
||||||
<title>0026</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-3527.64C1693.98,-3527.64 1563.23,-3527.64 1563.23,-3527.64 1557.23,-3527.64 1551.23,-3521.64 1551.23,-3515.64 1551.23,-3515.64 1551.23,-3467.89 1551.23,-3467.89 1551.23,-3461.89 1557.23,-3455.89 1563.23,-3455.89 1563.23,-3455.89 1693.98,-3455.89 1693.98,-3455.89 1699.98,-3455.89 1705.98,-3461.89 1705.98,-3467.89 1705.98,-3467.89 1705.98,-3515.64 1705.98,-3515.64 1705.98,-3521.64 1699.98,-3527.64 1693.98,-3527.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3515.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :11  [0026]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3502.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3489.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3476.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3464.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0046</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0026 -->
|
|
||||||
<g id="edge26" class="edge">
|
|
||||||
<title>0010-L->0026</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2822.62,-3461.08C2646.2,-3465.61 1960.73,-3483.23 1716.02,-3489.52"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1716.19,-3486.71 1708.27,-3489.72 1716.34,-3492.31 1716.19,-3486.71"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0027 -->
|
|
||||||
<g id="node20" class="node">
|
|
||||||
<title>0027</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-3327.64C1693.98,-3327.64 1563.23,-3327.64 1563.23,-3327.64 1557.23,-3327.64 1551.23,-3321.64 1551.23,-3315.64 1551.23,-3315.64 1551.23,-3267.89 1551.23,-3267.89 1551.23,-3261.89 1557.23,-3255.89 1563.23,-3255.89 1563.23,-3255.89 1693.98,-3255.89 1693.98,-3255.89 1699.98,-3255.89 1705.98,-3261.89 1705.98,-3267.89 1705.98,-3267.89 1705.98,-3315.64 1705.98,-3315.64 1705.98,-3321.64 1699.98,-3327.64 1693.98,-3327.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3315.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :10  [0027]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3302.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3289.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3276.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3264.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0047</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0027 -->
|
|
||||||
<g id="edge24" class="edge">
|
|
||||||
<title>0010-L->0027</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2822.62,-3454.31C2646.2,-3430.29 1960.73,-3336.98 1716.02,-3303.67"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1716.56,-3300.91 1708.25,-3302.61 1715.8,-3306.46 1716.56,-3300.91"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0028 -->
|
|
||||||
<g id="node21" class="node">
|
|
||||||
<title>0028</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-3127.64C1693.98,-3127.64 1563.23,-3127.64 1563.23,-3127.64 1557.23,-3127.64 1551.23,-3121.64 1551.23,-3115.64 1551.23,-3115.64 1551.23,-3067.89 1551.23,-3067.89 1551.23,-3061.89 1557.23,-3055.89 1563.23,-3055.89 1563.23,-3055.89 1693.98,-3055.89 1693.98,-3055.89 1699.98,-3055.89 1705.98,-3061.89 1705.98,-3067.89 1705.98,-3067.89 1705.98,-3115.64 1705.98,-3115.64 1705.98,-3121.64 1699.98,-3127.64 1693.98,-3127.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3115.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :9  [0028]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3102.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3089.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3076.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-3064.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0048</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0028 -->
|
|
||||||
<g id="edge22" class="edge">
|
|
||||||
<title>0010-L->0028</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2822.62,-3447.54C2646.11,-3394.95 1960.05,-3190.52 1715.66,-3117.7"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1716.66,-3115.08 1708.19,-3115.48 1715.06,-3120.45 1716.66,-3115.08"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0029 -->
|
|
||||||
<g id="node22" class="node">
|
|
||||||
<title>0029</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-2927.64C1693.98,-2927.64 1563.23,-2927.64 1563.23,-2927.64 1557.23,-2927.64 1551.23,-2921.64 1551.23,-2915.64 1551.23,-2915.64 1551.23,-2867.89 1551.23,-2867.89 1551.23,-2861.89 1557.23,-2855.89 1563.23,-2855.89 1563.23,-2855.89 1693.98,-2855.89 1693.98,-2855.89 1699.98,-2855.89 1705.98,-2861.89 1705.98,-2867.89 1705.98,-2867.89 1705.98,-2915.64 1705.98,-2915.64 1705.98,-2921.64 1699.98,-2927.64 1693.98,-2927.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2915.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :8  [0029]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2902.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2889.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2876.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2864.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0049</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0029 -->
|
|
||||||
<g id="edge20" class="edge">
|
|
||||||
<title>0010-L->0029</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2822.62,-3440.77C2646.03,-3359.58 1959.37,-3043.85 1715.3,-2931.63"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1716.54,-2929.12 1708.1,-2928.32 1714.2,-2934.2 1716.54,-2929.12"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0030 -->
|
|
||||||
<g id="node23" class="node">
|
|
||||||
<title>0030</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-2727.64C1693.98,-2727.64 1563.23,-2727.64 1563.23,-2727.64 1557.23,-2727.64 1551.23,-2721.64 1551.23,-2715.64 1551.23,-2715.64 1551.23,-2667.89 1551.23,-2667.89 1551.23,-2661.89 1557.23,-2655.89 1563.23,-2655.89 1563.23,-2655.89 1693.98,-2655.89 1693.98,-2655.89 1699.98,-2655.89 1705.98,-2661.89 1705.98,-2667.89 1705.98,-2667.89 1705.98,-2715.64 1705.98,-2715.64 1705.98,-2721.64 1699.98,-2727.64 1693.98,-2727.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2715.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :7  [0030]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2702.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2689.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2676.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2664.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0050</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0030 -->
|
|
||||||
<g id="edge18" class="edge">
|
|
||||||
<title>0010-L->0030</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2826.44,-3436.38C2651.2,-3327.44 1920.01,-2872.91 1694.88,-2732.96"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1696.58,-2730.72 1688.31,-2728.88 1693.62,-2735.48 1696.58,-2730.72"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0031 -->
|
|
||||||
<g id="node24" class="node">
|
|
||||||
<title>0031</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-2527.64C1693.98,-2527.64 1563.23,-2527.64 1563.23,-2527.64 1557.23,-2527.64 1551.23,-2521.64 1551.23,-2515.64 1551.23,-2515.64 1551.23,-2467.89 1551.23,-2467.89 1551.23,-2461.89 1557.23,-2455.89 1563.23,-2455.89 1563.23,-2455.89 1693.98,-2455.89 1693.98,-2455.89 1699.98,-2455.89 1705.98,-2461.89 1705.98,-2467.89 1705.98,-2467.89 1705.98,-2515.64 1705.98,-2515.64 1705.98,-2521.64 1699.98,-2527.64 1693.98,-2527.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2515.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :6  [0031]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2502.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2489.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2476.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2464.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0051</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0031 -->
|
|
||||||
<g id="edge16" class="edge">
|
|
||||||
<title>0010-L->0031</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2834.51,-3436.55C2672.02,-3309.25 1895.48,-2700.85 1682.65,-2534.11"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1684.47,-2531.98 1676.45,-2529.25 1681.02,-2536.39 1684.47,-2531.98"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0032 -->
|
|
||||||
<g id="node25" class="node">
|
|
||||||
<title>0032</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-2327.64C1693.98,-2327.64 1563.23,-2327.64 1563.23,-2327.64 1557.23,-2327.64 1551.23,-2321.64 1551.23,-2315.64 1551.23,-2315.64 1551.23,-2267.89 1551.23,-2267.89 1551.23,-2261.89 1557.23,-2255.89 1563.23,-2255.89 1563.23,-2255.89 1693.98,-2255.89 1693.98,-2255.89 1699.98,-2255.89 1705.98,-2261.89 1705.98,-2267.89 1705.98,-2267.89 1705.98,-2315.64 1705.98,-2315.64 1705.98,-2321.64 1699.98,-2327.64 1693.98,-2327.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2315.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :5  [0032]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2302.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2289.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2276.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2264.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0052</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0032 -->
|
|
||||||
<g id="edge14" class="edge">
|
|
||||||
<title>0010-L->0032</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2839.48,-3436.4C2686.46,-3291.75 1875.24,-2524.91 1673.87,-2334.56"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1676.03,-2332.74 1668.29,-2329.28 1672.18,-2336.81 1676.03,-2332.74"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0033 -->
|
|
||||||
<g id="node26" class="node">
|
|
||||||
<title>0033</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-2127.64C1693.98,-2127.64 1563.23,-2127.64 1563.23,-2127.64 1557.23,-2127.64 1551.23,-2121.64 1551.23,-2115.64 1551.23,-2115.64 1551.23,-2067.89 1551.23,-2067.89 1551.23,-2061.89 1557.23,-2055.89 1563.23,-2055.89 1563.23,-2055.89 1693.98,-2055.89 1693.98,-2055.89 1699.98,-2055.89 1705.98,-2061.89 1705.98,-2067.89 1705.98,-2067.89 1705.98,-2115.64 1705.98,-2115.64 1705.98,-2121.64 1699.98,-2127.64 1693.98,-2127.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2115.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :4  [0033]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2102.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2089.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2076.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-2064.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0053</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0033 -->
|
|
||||||
<g id="edge12" class="edge">
|
|
||||||
<title>0010-L->0033</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2843.25,-3436.54C2698.93,-3276.76 1860.49,-2348.49 1667.99,-2135.37"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1670.07,-2133.5 1662.63,-2129.44 1665.92,-2137.25 1670.07,-2133.5"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0034 -->
|
|
||||||
<g id="node27" class="node">
|
|
||||||
<title>0034</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-1927.64C1693.98,-1927.64 1563.23,-1927.64 1563.23,-1927.64 1557.23,-1927.64 1551.23,-1921.64 1551.23,-1915.64 1551.23,-1915.64 1551.23,-1867.89 1551.23,-1867.89 1551.23,-1861.89 1557.23,-1855.89 1563.23,-1855.89 1563.23,-1855.89 1693.98,-1855.89 1693.98,-1855.89 1699.98,-1855.89 1705.98,-1861.89 1705.98,-1867.89 1705.98,-1867.89 1705.98,-1915.64 1705.98,-1915.64 1705.98,-1921.64 1699.98,-1927.64 1693.98,-1927.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1915.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :3  [0034]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1902.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1889.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1876.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1864.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0054</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0034 -->
|
|
||||||
<g id="edge10" class="edge">
|
|
||||||
<title>0010-L->0034</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2846.02,-3436.62C2708.85,-3262.56 1847.34,-2169.33 1663.21,-1935.68"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1665.47,-1934.03 1658.32,-1929.48 1661.08,-1937.49 1665.47,-1934.03"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0035 -->
|
|
||||||
<g id="node28" class="node">
|
|
||||||
<title>0035</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-1727.64C1693.98,-1727.64 1563.23,-1727.64 1563.23,-1727.64 1557.23,-1727.64 1551.23,-1721.64 1551.23,-1715.64 1551.23,-1715.64 1551.23,-1667.89 1551.23,-1667.89 1551.23,-1661.89 1557.23,-1655.89 1563.23,-1655.89 1563.23,-1655.89 1693.98,-1655.89 1693.98,-1655.89 1699.98,-1655.89 1705.98,-1661.89 1705.98,-1667.89 1705.98,-1667.89 1705.98,-1715.64 1705.98,-1715.64 1705.98,-1721.64 1699.98,-1727.64 1693.98,-1727.64"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1715.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :2  [0035]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1702.34" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1689.59" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1676.84" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1664.09" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (1): 0055</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0035 -->
|
|
||||||
<g id="edge8" class="edge">
|
|
||||||
<title>0010-L->0035</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2848.14,-3436.67C2717.11,-3249.2 1836.18,-1988.76 1659.44,-1735.89"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1661.86,-1734.45 1654.98,-1729.5 1657.27,-1737.66 1661.86,-1734.45"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0036 -->
|
|
||||||
<g id="node29" class="node">
|
|
||||||
<title>0036</title>
|
|
||||||
<path fill="#fbe5d6" stroke="#c55a11" d="M1693.98,-1534.01C1693.98,-1534.01 1563.23,-1534.01 1563.23,-1534.01 1557.23,-1534.01 1551.23,-1528.01 1551.23,-1522.01 1551.23,-1522.01 1551.23,-1461.51 1551.23,-1461.51 1551.23,-1455.51 1557.23,-1449.51 1563.23,-1449.51 1563.23,-1449.51 1693.98,-1449.51 1693.98,-1449.51 1699.98,-1449.51 1705.98,-1455.51 1705.98,-1461.51 1705.98,-1461.51 1705.98,-1522.01 1705.98,-1522.01 1705.98,-1528.01 1699.98,-1534.01 1693.98,-1534.01"/>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1521.46" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke :1  [0036]</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1508.71" font-family="Segoe UI" font-size="9.00" fill="#833c00">Gefaellestrecke</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1495.96" font-family="Segoe UI" font-size="9.00" fill="#833c00">h = 1.941 m</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1483.21" font-family="Segoe UI" font-size="9.00" fill="#833c00">1941 -> 1466 mm (-475) = abwaerts</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1470.46" font-family="Segoe UI" font-size="9.00" fill="#833c00">Separator (2): 0005, 0056</text>
|
|
||||||
<text xml:space="preserve" text-anchor="middle" x="1628.61" y="-1457.71" font-family="Segoe UI" font-size="9.00" fill="#833c00">Scanner (1): 0066</text>
|
|
||||||
</g>
|
|
||||||
<!-- 0010-L->0036 -->
|
|
||||||
<g id="edge6" class="edge">
|
<g id="edge6" class="edge">
|
||||||
<title>0010-L->0036</title>
|
<title>0010-L->grp_0017</title>
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2849.7,-3436.53C2724.51,-3237.14 1839.69,-1827.95 1660.29,-1542.22"/>
|
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M2834.62,-3467.07C2659.14,-3457.38 1979.99,-3419.88 1731.96,-3406.18"/>
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1662.78,-1540.93 1656.15,-1535.64 1658.04,-1543.9 1662.78,-1540.93"/>
|
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="1732.2,-3403.39 1724.06,-3405.75 1731.89,-3408.99 1732.2,-3403.39"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0010-R -->
|
<!-- 0010-R -->
|
||||||
<g id="node6" class="node">
|
<g id="node6" class="node">
|
||||||
<title>0010-R</title>
|
<title>0010-R</title>
|
||||||
<path fill="#2f5597" stroke="#1f3864" d="M2908.07,-3314.51C2908.07,-3314.51 2820.82,-3314.51 2820.82,-3314.51 2814.82,-3314.51 2808.82,-3308.51 2808.82,-3302.51 2808.82,-3302.51 2808.82,-3267.51 2808.82,-3267.51 2808.82,-3261.51 2814.82,-3255.51 2820.82,-3255.51 2820.82,-3255.51 2908.07,-3255.51 2908.07,-3255.51 2914.07,-3255.51 2920.07,-3261.51 2920.07,-3267.51 2920.07,-3267.51 2920.07,-3302.51 2920.07,-3302.51 2920.07,-3308.51 2914.07,-3314.51 2908.07,-3314.51"/>
|
<path fill="#2f5597" stroke="#1f3864" d="M2920.07,-3323.88C2920.07,-3323.88 2832.82,-3323.88 2832.82,-3323.88 2826.82,-3323.88 2820.82,-3317.88 2820.82,-3311.88 2820.82,-3311.88 2820.82,-3276.88 2820.82,-3276.88 2820.82,-3270.88 2826.82,-3264.88 2832.82,-3264.88 2832.82,-3264.88 2920.07,-3264.88 2920.07,-3264.88 2926.07,-3264.88 2932.07,-3270.88 2932.07,-3276.88 2932.07,-3276.88 2932.07,-3311.88 2932.07,-3311.88 2932.07,-3317.88 2926.07,-3323.88 2920.07,-3323.88"/>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="2864.44" y="-3301.95" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Kreisel3  [0010-R]</text>
|
<text xml:space="preserve" text-anchor="middle" x="2876.45" y="-3311.33" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Kreisel3  [0010-R]</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="2864.44" y="-3289.2" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Bahn R (rechts)</text>
|
<text xml:space="preserve" text-anchor="middle" x="2876.45" y="-3298.58" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Bahn R (rechts)</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="2864.44" y="-3276.45" font-family="Segoe UI" font-size="9.00" fill="#ffffff">h = 1.940 m</text>
|
<text xml:space="preserve" text-anchor="middle" x="2876.45" y="-3285.83" font-family="Segoe UI" font-size="9.00" fill="#ffffff">h = 1.940 m</text>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="2864.44" y="-3263.7" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Separator (2): 0063, 0064</text>
|
<text xml:space="preserve" text-anchor="middle" x="2876.45" y="-3273.08" font-family="Segoe UI" font-size="9.00" fill="#ffffff">Separator (2): 0063, 0064</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0010-R->0010-L -->
|
<!-- 0010-R->0010-L -->
|
||||||
<g id="edge3" class="edge">
|
<g id="edge5" class="edge">
|
||||||
<title>0010-R->0010-L</title>
|
<title>0010-R->0010-L</title>
|
||||||
<g id="a_edge3"><a xlink:title="Kreisel-Umlauf UZS">
|
<g id="a_edge5"><a xlink:title="Kreisel-Umlauf UZS">
|
||||||
<path fill="none" stroke="#8ea9db" stroke-width="1.2" stroke-dasharray="5,2" d="M2864.44,-3314.69C2864.44,-3345.48 2864.44,-3393.57 2864.44,-3425.9"/>
|
<path fill="none" stroke="#8ea9db" stroke-width="1.2" stroke-dasharray="5,2" d="M2876.45,-3324.07C2876.45,-3354.86 2876.45,-3402.94 2876.45,-3435.28"/>
|
||||||
<polygon fill="#8ea9db" stroke="#8ea9db" stroke-width="1.2" points="2861.3,-3425.81 2864.45,-3434.81 2867.6,-3425.81 2861.3,-3425.81"/>
|
<polygon fill="#8ea9db" stroke="#8ea9db" stroke-width="1.2" points="2873.3,-3435.19 2876.45,-3444.19 2879.6,-3435.19 2873.3,-3435.19"/>
|
||||||
</a>
|
</a>
|
||||||
</g>
|
</g>
|
||||||
<text xml:space="preserve" text-anchor="middle" x="2857.32" y="-3379.44" font-family="Segoe UI" font-size="8.00" fill="#5b7fc7">UZS</text>
|
<text xml:space="preserve" text-anchor="middle" x="2869.32" y="-3388.81" font-family="Segoe UI" font-size="8.00" fill="#5b7fc7">UZS</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0013->0010-L -->
|
<!-- 0013->0010-L -->
|
||||||
<g id="edge51" class="edge">
|
<g id="edge13" class="edge">
|
||||||
<title>0013->0010-L</title>
|
<title>0013->0010-L</title>
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1642.83,-5631.18C1791.09,-5367.68 2706.66,-3740.44 2846.53,-3491.85"/>
|
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1654.83,-5640.56C1803.09,-5377.06 2718.66,-3749.82 2858.53,-3501.22"/>
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="2848.8,-3493.52 2850.29,-3485.17 2843.92,-3490.77 2848.8,-3493.52"/>
|
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="2860.8,-3502.89 2862.29,-3494.55 2855.92,-3500.15 2860.8,-3502.89"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0014->0010-L -->
|
<!-- 0014->0010-L -->
|
||||||
<g id="edge49" class="edge">
|
<g id="edge11" class="edge">
|
||||||
<title>0014->0010-L</title>
|
<title>0014->0010-L</title>
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1645.05,-1146.6C1800.36,-1441.25 2711.82,-3170.45 2847.55,-3427.95"/>
|
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1657.05,-1155.97C1812.36,-1450.62 2723.82,-3179.82 2859.55,-3437.32"/>
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="2844.99,-3429.1 2851.2,-3434.87 2849.94,-3426.49 2844.99,-3429.1"/>
|
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="2856.99,-3438.48 2863.2,-3444.25 2861.94,-3435.87 2856.99,-3438.48"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0016->0002-R -->
|
<!-- 0016->0002-R -->
|
||||||
<g id="edge47" class="edge">
|
|
||||||
<title>0016->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M236.24,-3731.59C248.24,-3664.1 275.3,-3529.18 316.37,-3420.43 330.4,-3383.28 352.17,-3343.24 367.83,-3316.41"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="370.1,-3318.06 371.75,-3309.75 365.28,-3315.22 370.1,-3318.06"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0017->0002-R -->
|
|
||||||
<g id="edge45" class="edge">
|
|
||||||
<title>0017->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1606.26,-5255.65C1452.33,-5006.88 550.95,-3550.07 406.48,-3316.57"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="409.02,-3315.35 402.43,-3310.02 404.25,-3318.3 409.02,-3315.35"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0018->0002-R -->
|
|
||||||
<g id="edge43" class="edge">
|
|
||||||
<title>0018->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1603.8,-5055.67C1443.76,-4822.8 558.75,-3535 408.6,-3316.51"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="411.04,-3315.12 404.2,-3310.11 406.42,-3318.29 411.04,-3315.12"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0019->0002-R -->
|
|
||||||
<g id="edge41" class="edge">
|
|
||||||
<title>0019->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1600.63,-4855.57C1433.32,-4639.06 566.89,-3517.86 410.99,-3316.12"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="413.34,-3314.58 406.23,-3309.97 408.91,-3318.01 413.34,-3314.58"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0020->0002-R -->
|
|
||||||
<g id="edge39" class="edge">
|
|
||||||
<title>0020->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1596.66,-4655.58C1421.17,-4456.74 576.18,-3499.4 413.92,-3315.57"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="416.17,-3313.88 408.78,-3309.74 411.97,-3317.59 416.17,-3313.88"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0021->0002-R -->
|
|
||||||
<g id="edge37" class="edge">
|
|
||||||
<title>0021->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1591.44,-4455.65C1406.47,-4275.87 587.15,-3479.59 417.68,-3314.88"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="419.78,-3313.01 412.09,-3309.44 415.88,-3317.03 419.78,-3313.01"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0022->0002-R -->
|
|
||||||
<g id="edge35" class="edge">
|
|
||||||
<title>0022->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1584.05,-4255.64C1387.82,-4096.53 602.5,-3459.78 423.42,-3314.58"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="425.23,-3312.44 417.25,-3309.58 421.7,-3316.79 425.23,-3312.44"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0023->0002-R -->
|
|
||||||
<g id="edge33" class="edge">
|
|
||||||
<title>0023->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1572.84,-4055.53C1362.67,-3918.98 620.79,-3436.94 431.28,-3313.81"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="432.95,-3311.56 424.72,-3309.55 429.9,-3316.26 432.95,-3311.56"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0024->0002-R -->
|
|
||||||
<g id="edge31" class="edge">
|
|
||||||
<title>0024->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1554.19,-3855.4C1324.63,-3743.22 631.34,-3404.43 437.68,-3309.8"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="439.16,-3307.4 430.74,-3306.41 436.7,-3312.43 439.16,-3307.4"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0025->0002-R -->
|
|
||||||
<g id="edge29" class="edge">
|
|
||||||
<title>0025->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1550.93,-3666.32C1318.35,-3590.13 631.64,-3365.17 438.19,-3301.79"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="439.28,-3299.2 430.81,-3299.38 437.54,-3304.53 439.28,-3299.2"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0026->0002-R -->
|
|
||||||
<g id="edge27" class="edge">
|
|
||||||
<title>0026->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1550.93,-3478.83C1318.58,-3440.14 633,-3325.98 438.77,-3293.63"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="439.23,-3290.87 430.88,-3292.32 438.31,-3296.4 439.23,-3290.87"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0027->0002-R -->
|
|
||||||
<g id="edge25" class="edge">
|
|
||||||
<title>0027->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1550.93,-3291.34C1318.58,-3290.08 633,-3286.34 438.77,-3285.29"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="438.92,-3282.49 430.9,-3285.24 438.89,-3288.09 438.92,-3282.49"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0028->0002-R -->
|
|
||||||
<g id="edge23" class="edge">
|
|
||||||
<title>0028->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1550.93,-3103.85C1318.58,-3140.01 633,-3246.71 438.77,-3276.94"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="438.35,-3274.17 430.88,-3278.17 439.21,-3279.7 438.35,-3274.17"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0029->0002-R -->
|
|
||||||
<g id="edge21" class="edge">
|
|
||||||
<title>0029->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1550.93,-2916.36C1318.35,-2990.02 631.64,-3207.51 438.19,-3268.78"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="437.6,-3266.03 430.82,-3271.11 439.29,-3271.36 437.6,-3266.03"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0030->0002-R -->
|
|
||||||
<g id="edge19" class="edge">
|
|
||||||
<title>0030->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1552.8,-2727.98C1321.9,-2838.3 631.24,-3168.29 437.8,-3260.71"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="436.62,-3258.17 430.61,-3264.14 439.03,-3263.22 436.62,-3258.17"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0031->0002-R -->
|
|
||||||
<g id="edge17" class="edge">
|
|
||||||
<title>0031->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1572.03,-2527.91C1360.96,-2662.75 621.93,-3134.88 431.81,-3256.34"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="430.47,-3253.88 425.23,-3260.54 433.48,-3258.6 430.47,-3253.88"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0032->0002-R -->
|
|
||||||
<g id="edge15" class="edge">
|
|
||||||
<title>0032->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1583.31,-2328C1386.05,-2485.79 603.75,-3111.57 423.93,-3255.42"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="422.23,-3253.19 417.73,-3260.38 425.73,-3257.57 422.23,-3253.19"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0033->0002-R -->
|
|
||||||
<g id="edge13" class="edge">
|
|
||||||
<title>0033->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1590.77,-2128.13C1404.65,-2306.98 588.5,-3091.31 418.17,-3255"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="416.37,-3252.84 412.54,-3260.41 420.25,-3256.88 416.37,-3252.84"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0034->0002-R -->
|
|
||||||
<g id="edge11" class="edge">
|
|
||||||
<title>0034->0002-R</title>
|
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1596.35,-1927.96C1420.24,-2125.57 576.89,-3071.87 414.16,-3254.47"/>
|
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="412.23,-3252.43 408.99,-3260.27 416.41,-3256.16 412.23,-3252.43"/>
|
|
||||||
</g>
|
|
||||||
<!-- 0035->0002-R -->
|
|
||||||
<g id="edge9" class="edge">
|
<g id="edge9" class="edge">
|
||||||
<title>0035->0002-R</title>
|
<title>0016->0002-R</title>
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1600.34,-1728.04C1432.38,-1943.55 567.62,-3053.17 411.21,-3253.87"/>
|
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M248.24,-3740.97C260.24,-3673.48 287.3,-3538.56 328.37,-3429.81 342.4,-3392.65 364.17,-3352.61 379.83,-3325.78"/>
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="409.15,-3251.96 406.44,-3259.99 413.57,-3255.4 409.15,-3251.96"/>
|
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="382.1,-3327.44 383.75,-3319.12 377.28,-3324.59 382.1,-3327.44"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- 0036->0002-R -->
|
<!-- grp_0017->0002-R -->
|
||||||
<g id="edge7" class="edge">
|
<g id="edge7" class="edge">
|
||||||
<title>0036->0002-R</title>
|
<title>grp_0017->0002-R</title>
|
||||||
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1599.14,-1534.32C1427.36,-1782.41 557.72,-3038.36 408.69,-3253.6"/>
|
<path fill="none" stroke="#2f5597" stroke-width="1.2" d="M1559.14,-3394.14C1323.15,-3373.84 643.65,-3315.42 450.64,-3298.82"/>
|
||||||
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="406.4,-3252 404.14,-3260.17 411,-3255.18 406.4,-3252"/>
|
<polygon fill="#2f5597" stroke="#2f5597" stroke-width="1.2" points="451.03,-3296.05 442.82,-3298.15 450.55,-3301.63 451.03,-3296.05"/>
|
||||||
</g>
|
</g>
|
||||||
<!-- legende -->
|
<!-- legende -->
|
||||||
<g id="node30" class="node">
|
<g id="node11" class="node">
|
||||||
<title>legende</title>
|
<title>legende</title>
|
||||||
<text xml:space="preserve" text-anchor="start" x="12" y="-48.5" font-family="Segoe UI" font-size="9.00">durchgezogen</text>
|
<text xml:space="preserve" text-anchor="start" x="12" y="-67.25" font-family="Segoe UI" font-size="9.00">durchgezogen</text>
|
||||||
<text xml:space="preserve" text-anchor="start" x="78.75" y="-48.5" font-family="Segoe UI" font-size="9.00">Materialfluss</text>
|
<text xml:space="preserve" text-anchor="start" x="102.75" y="-67.25" font-family="Segoe UI" font-size="9.00">Materialfluss</text>
|
||||||
<text xml:space="preserve" text-anchor="start" x="12" y="-29.75" font-family="Segoe UI" font-size="9.00" fill="#8ea9db">gestrichelt blau</text>
|
<text xml:space="preserve" text-anchor="start" x="12" y="-48.5" font-family="Segoe UI" font-size="9.00" fill="#8ea9db">gestrichelt blau</text>
|
||||||
<text xml:space="preserve" text-anchor="start" x="78.75" y="-29.75" font-family="Segoe UI" font-size="9.00">Kreisel-Umlauf, Richtung aus Drehrichtung (UZS = rechts nach links, GUZ = links nach rechts)</text>
|
<text xml:space="preserve" text-anchor="start" x="102.75" y="-48.5" font-family="Segoe UI" font-size="9.00">Kreisel-Umlauf, Richtung aus Drehrichtung (UZS = rechts nach links, GUZ = links nach rechts)</text>
|
||||||
<text xml:space="preserve" text-anchor="start" x="12" y="-11" font-family="Segoe UI" font-size="9.00" fill="#bf8f00">gestrichelt gelb</text>
|
<text xml:space="preserve" text-anchor="start" x="12" y="-29.75" font-family="Segoe UI" font-size="9.00" fill="#bf8f00">gestrichelt gelb</text>
|
||||||
<text xml:space="preserve" text-anchor="start" x="78.75" y="-11" font-family="Segoe UI" font-size="9.00">Richtung nicht bestimmbar</text>
|
<text xml:space="preserve" text-anchor="start" x="102.75" y="-29.75" font-family="Segoe UI" font-size="9.00">Richtung nicht bestimmbar</text>
|
||||||
|
<text xml:space="preserve" text-anchor="start" x="12" y="-11" font-family="Segoe UI" font-size="9.00">doppelte Umrandung</text>
|
||||||
|
<text xml:space="preserve" text-anchor="start" x="102.75" y="-11" font-family="Segoe UI" font-size="9.00">Gruppe paralleler Gefaellestrecken (gleicher Zu-/Ablauf, gleiche Steigung)</text>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 21 KiB |
@@ -1,8 +1,8 @@
|
|||||||
<!-- erzeugt von lib/material_flow.py -->
|
<!-- erzeugt von lib/material_flow.py -->
|
||||||
# Materialfluss - export.csv
|
# Materialfluss - mubea.csv
|
||||||
|
|
||||||
**Erzeugt:** 2026-08-07 13:20 von `lib/material_flow.py`
|
**Erzeugt:** 2026-08-21 11:53 von `lib/material_flow.py`
|
||||||
**Quelle:** `C:\develop\sps_skel\data\export.csv`
|
**Quelle:** `C:\10-Develop\gitrepos\sps_skel\data\mubea.csv`
|
||||||
|
|
||||||
> Materialfluss der mechanischen Objekte. Die daraus abgeleiteten Steuerungsobjekte (TROs) dokumentiert `lib/tro_flow.py --doc`.
|
> Materialfluss der mechanischen Objekte. Die daraus abgeleiteten Steuerungsobjekte (TROs) dokumentiert `lib/tro_flow.py --doc`.
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
| Anbauteile | Scanner: 6, Separator: 33 |
|
| Anbauteile | Scanner: 6, Separator: 33 |
|
||||||
| Plausibilitaetshinweise | 7 |
|
| Plausibilitaetshinweise | 7 |
|
||||||
|
|
||||||
Graph: [`export_material_flow.dot`](export_material_flow.dot) - [`export_material_flow.svg`](export_material_flow.svg)
|
Graph: [`mubea_material_flow.dot`](mubea_material_flow.dot) - [`mubea_material_flow.svg`](mubea_material_flow.svg)
|
||||||
|
|
||||||
Ein **Kreisel** ist ein Umlauf und wird als zwei Knoten modelliert - eine Bahn je Fahrtrichtung (`-L` links, `-R` rechts), die zu einem Kreis verbunden sind.
|
Ein **Kreisel** ist ein Umlauf und wird als zwei Knoten modelliert - eine Bahn je Fahrtrichtung (`-L` links, `-R` rechts), die zu einem Kreis verbunden sind.
|
||||||
|
|
||||||
@@ -67,55 +67,55 @@ Hoehe: bei Kreiseln aus dem Merkmal `Höhe in m`, bei Gefaellestrecke und Streck
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `0001-L` | `0002-R` | Richtung unbestimmt (Weiche) |
|
| `0001-L` | `0002-R` | Richtung unbestimmt (Weiche) |
|
||||||
| `0001-R` | `0002-R` | Richtung unbestimmt (Weiche) |
|
| `0001-R` | `0002-R` | Richtung unbestimmt (Weiche) |
|
||||||
| `0010-R` | `0010-L` | Kreisel-Umlauf (UZS) |
|
|
||||||
| `0002-R` | `0002-L` | Kreisel-Umlauf (UZS) |
|
|
||||||
| `0001-R` | `0001-L` | Kreisel-Umlauf (UZS) |
|
| `0001-R` | `0001-L` | Kreisel-Umlauf (UZS) |
|
||||||
| `0010-L` | `0036` | Materialfluss |
|
| `0002-R` | `0002-L` | Kreisel-Umlauf (UZS) |
|
||||||
| `0036` | `0002-R` | Materialfluss |
|
| `0010-R` | `0010-L` | Kreisel-Umlauf (UZS) |
|
||||||
| `0010-L` | `0035` | Materialfluss |
|
| `0010-L` | `0036` | Materialfluss (Ausschleusung) |
|
||||||
| `0035` | `0002-R` | Materialfluss |
|
| `0036` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0034` | Materialfluss |
|
| `0010-L` | `0035` | Materialfluss (Ausschleusung) |
|
||||||
| `0034` | `0002-R` | Materialfluss |
|
| `0035` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0033` | Materialfluss |
|
| `0010-L` | `0034` | Materialfluss (Ausschleusung) |
|
||||||
| `0033` | `0002-R` | Materialfluss |
|
| `0034` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0032` | Materialfluss |
|
| `0010-L` | `0033` | Materialfluss (Ausschleusung) |
|
||||||
| `0032` | `0002-R` | Materialfluss |
|
| `0033` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0031` | Materialfluss |
|
| `0010-L` | `0032` | Materialfluss (Ausschleusung) |
|
||||||
| `0031` | `0002-R` | Materialfluss |
|
| `0032` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0030` | Materialfluss |
|
| `0010-L` | `0031` | Materialfluss (Ausschleusung) |
|
||||||
| `0030` | `0002-R` | Materialfluss |
|
| `0031` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0029` | Materialfluss |
|
| `0010-L` | `0030` | Materialfluss (Ausschleusung) |
|
||||||
| `0029` | `0002-R` | Materialfluss |
|
| `0030` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0028` | Materialfluss |
|
| `0010-L` | `0029` | Materialfluss (Ausschleusung) |
|
||||||
| `0028` | `0002-R` | Materialfluss |
|
| `0029` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0027` | Materialfluss |
|
| `0010-L` | `0028` | Materialfluss (Ausschleusung) |
|
||||||
| `0027` | `0002-R` | Materialfluss |
|
| `0028` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0026` | Materialfluss |
|
| `0010-L` | `0027` | Materialfluss (Ausschleusung) |
|
||||||
| `0026` | `0002-R` | Materialfluss |
|
| `0027` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0025` | Materialfluss |
|
| `0010-L` | `0026` | Materialfluss (Ausschleusung) |
|
||||||
| `0025` | `0002-R` | Materialfluss |
|
| `0026` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0024` | Materialfluss |
|
| `0010-L` | `0025` | Materialfluss (Ausschleusung) |
|
||||||
| `0024` | `0002-R` | Materialfluss |
|
| `0025` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0023` | Materialfluss |
|
| `0010-L` | `0024` | Materialfluss (Ausschleusung) |
|
||||||
| `0023` | `0002-R` | Materialfluss |
|
| `0024` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0022` | Materialfluss |
|
| `0010-L` | `0023` | Materialfluss (Ausschleusung) |
|
||||||
| `0022` | `0002-R` | Materialfluss |
|
| `0023` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0021` | Materialfluss |
|
| `0010-L` | `0022` | Materialfluss (Ausschleusung) |
|
||||||
| `0021` | `0002-R` | Materialfluss |
|
| `0022` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0020` | Materialfluss |
|
| `0010-L` | `0021` | Materialfluss (Ausschleusung) |
|
||||||
| `0020` | `0002-R` | Materialfluss |
|
| `0021` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0019` | Materialfluss |
|
| `0010-L` | `0020` | Materialfluss (Ausschleusung) |
|
||||||
| `0019` | `0002-R` | Materialfluss |
|
| `0020` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0018` | Materialfluss |
|
| `0010-L` | `0019` | Materialfluss (Ausschleusung) |
|
||||||
| `0018` | `0002-R` | Materialfluss |
|
| `0019` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0010-L` | `0017` | Materialfluss |
|
| `0010-L` | `0018` | Materialfluss (Ausschleusung) |
|
||||||
| `0017` | `0002-R` | Materialfluss |
|
| `0018` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0002-L` | `0016` | Materialfluss |
|
| `0010-L` | `0017` | Materialfluss (Ausschleusung) |
|
||||||
| `0016` | `0002-R` | Materialfluss |
|
| `0017` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0002-R` | `0014` | Materialfluss |
|
| `0002-L` | `0016` | Materialfluss (Ausschleusung) |
|
||||||
| `0014` | `0010-L` | Materialfluss |
|
| `0016` | `0002-R` | Materialfluss (Einschleusung) |
|
||||||
| `0002-R` | `0013` | Materialfluss |
|
| `0002-R` | `0014` | Materialfluss (Ausschleusung) |
|
||||||
| `0013` | `0010-L` | Materialfluss |
|
| `0014` | `0010-L` | Materialfluss (Einschleusung) |
|
||||||
|
| `0002-R` | `0013` | Materialfluss (Ausschleusung) |
|
||||||
|
| `0013` | `0010-L` | Materialfluss (Einschleusung) |
|
||||||
|
|
||||||
Die Richtung innerhalb eines Kreisels kommt aus dem Merkmal `Drehrichtung`: **UZS** (im Uhrzeigersinn) laesst das Material rechts nach links laufen, **GUZ** (gegen den Uhrzeigersinn) links nach rechts.
|
Die Richtung innerhalb eines Kreisels kommt aus dem Merkmal `Drehrichtung`: **UZS** (im Uhrzeigersinn) laesst das Material rechts nach links laufen, **GUZ** (gegen den Uhrzeigersinn) links nach rechts.
|
||||||
|
|
||||||
@@ -133,7 +133,7 @@ Abweichungen zwischen den Merkmalen des CSV-Exports und den tatsaechlich vorhand
|
|||||||
|
|
||||||
## 5. Warnungen des Laufs
|
## 5. Warnungen des Laufs
|
||||||
|
|
||||||
- Zeile 52 (Strecke 0016 'VarioFoerderer :1'): alle Nachbarn auf gleicher Hoehe (1.470 m) - Richtung nicht bestimmbar
|
- Zeile 17 (Strecke 0016 'VarioFoerderer :1'): alle Nachbarn auf gleicher Hoehe (1.470 m) - Richtung nicht bestimmbar
|
||||||
- Verbindung 0001-L <-> 0002-R: Richtung nicht bestimmbar (kein Transportobjekt beteiligt) - beidseitig gezeichnet
|
- Verbindung 0001-L <-> 0002-R: Richtung nicht bestimmbar (kein Transportobjekt beteiligt) - beidseitig gezeichnet
|
||||||
- Verbindung 0001-R <-> 0002-R: Richtung nicht bestimmbar (kein Transportobjekt beteiligt) - beidseitig gezeichnet
|
- Verbindung 0001-R <-> 0002-R: Richtung nicht bestimmbar (kein Transportobjekt beteiligt) - beidseitig gezeichnet
|
||||||
- Verbindung 0002-L <-> 0016: Richtung nicht bestimmbar (kein Transportobjekt beteiligt) - beidseitig gezeichnet
|
- Verbindung 0002-L <-> 0016: Richtung nicht bestimmbar (kein Transportobjekt beteiligt) - beidseitig gezeichnet
|
||||||
|
|||||||
+32
-8
@@ -1,12 +1,13 @@
|
|||||||
# Python Scripts — CLI Tooling Overview
|
# Python Scripts — CLI Tooling Overview
|
||||||
|
|
||||||
**As of:** 2026-08-03
|
**As of:** 2026-08-20
|
||||||
|
|
||||||
`lib/` currently holds five Python modules (three of them runnable CLI tools,
|
`lib/` currently holds eight Python modules (five of them runnable CLI tools,
|
||||||
two supporting libraries), plus one documentation-generator script that lives
|
three supporting libraries), plus one documentation-generator script that lives
|
||||||
under `doc/TRO_Katalog/tro_graphs/`. Together the CLI tools turn a CSV export
|
under `doc/TRO_Katalog/tro_graphs/`. Together the CLI tools turn a CSV export
|
||||||
of the mechanical layout (ILS 2.0) into a material-flow graph, a derived TRO
|
of the mechanical layout (ILS 2.0) into a material-flow graph, a derived TRO
|
||||||
list/diagram, and an annotated copy of the BricsCAD drawing.
|
list/diagram, an annotated copy of the BricsCAD drawing, a TRO-JSON read back
|
||||||
|
out of that drawing, and an `FB_Main` SCL skeleton generated from that JSON.
|
||||||
|
|
||||||
This document is the practical "what does each script do and which switches
|
This document is the practical "what does each script do and which switches
|
||||||
does it take" reference. For the underlying domain model (TRO types, JSON
|
does it take" reference. For the underlying domain model (TRO types, JSON
|
||||||
@@ -27,8 +28,14 @@ tro_flow.py ──► <name>_tro_flow.dot / .svg, _tro_doc.md, _tro_error
|
|||||||
│ (derives TROs, using the type catalog in tro_catalog.py)
|
│ (derives TROs, using the type catalog in tro_catalog.py)
|
||||||
▼
|
▼
|
||||||
tro_annotate.py ──► <name>_annotated.dxf, <name>_registration.json
|
tro_annotate.py ──► <name>_annotated.dxf, <name>_registration.json
|
||||||
(also needs the BricsCAD DXF; uses dxf_registration.py for the CSV↔DXF
|
│ (also needs the BricsCAD DXF; uses dxf_registration.py for the CSV↔DXF
|
||||||
coordinate offset and tro_catalog.py for marker shape/color per TRO type)
|
│ coordinate offset and tro_catalog.py for marker shape/color per TRO type)
|
||||||
|
▼ (drawing may be hand-edited in BricsCAD before the next step)
|
||||||
|
tro_extract.py ──► <drawing>_tro.json
|
||||||
|
│ (reads only the drawing; resolves plant coords via the registration)
|
||||||
|
▼
|
||||||
|
scl_skeleton.py ──► <source>_FB_Main.scl
|
||||||
|
(one REGION per TRO; E-planning values left as TODO(E-Planung) gaps)
|
||||||
```
|
```
|
||||||
|
|
||||||
- `material_flow.py` models the material flow of the **mechanical** objects only
|
- `material_flow.py` models the material flow of the **mechanical** objects only
|
||||||
@@ -47,6 +54,9 @@ Supporting libraries (no CLI of their own, imported by the tools above):
|
|||||||
- **`lib/dxf_registration.py`** — derives, verifies and persists the rigid
|
- **`lib/dxf_registration.py`** — derives, verifies and persists the rigid
|
||||||
(rotation + offset) transform between the CSV export's coordinate system and
|
(rotation + offset) transform between the CSV export's coordinate system and
|
||||||
the DXF drawing's.
|
the DXF drawing's.
|
||||||
|
- **`lib/tro_overrides.py`** — reads the hand-maintained
|
||||||
|
`%SKEL_CFG%\tro_overrides.ini` (type corrections, open points, TRO merges)
|
||||||
|
that survive re-runs of `tro_flow.py`. See §6a.
|
||||||
|
|
||||||
Separate, documentation-only tool (not part of the generator pipeline):
|
Separate, documentation-only tool (not part of the generator pipeline):
|
||||||
|
|
||||||
@@ -74,7 +84,7 @@ bin\tro_annotate.bat --file mubea.csv --dxf 500573_60_1.dxf --flow --fb --legend
|
|||||||
(`--use-cords` lays both graphs out at the real plant coordinates; drop it for
|
(`--use-cords` lays both graphs out at the real plant coordinates; drop it for
|
||||||
Graphviz's computed left-to-right arrangement.)
|
Graphviz's computed left-to-right arrangement.)
|
||||||
|
|
||||||
Conventions shared by all three tools:
|
Conventions shared by the CLI tools:
|
||||||
|
|
||||||
- `--file` / `--dxf` accept either a bare filename — resolved against
|
- `--file` / `--dxf` accept either a bare filename — resolved against
|
||||||
`%SKEL_DATA%` — or a full path.
|
`%SKEL_DATA%` — or a full path.
|
||||||
@@ -88,7 +98,11 @@ Conventions shared by all three tools:
|
|||||||
`ezdxf>=1.4.0` for `tro_annotate.py` only) — run `bin\install_py.bat` once.
|
`ezdxf>=1.4.0` for `tro_annotate.py` only) — run `bin\install_py.bat` once.
|
||||||
- `--tosvg` needs Graphviz's `dot` (or `neato`, for `tro_flow.py
|
- `--tosvg` needs Graphviz's `dot` (or `neato`, for `tro_flow.py
|
||||||
--use-cords`) on `PATH`, or the `GRAPHVIZ_DOT` environment variable pointing
|
--use-cords`) on `PATH`, or the `GRAPHVIZ_DOT` environment variable pointing
|
||||||
at the `dot` executable.
|
at the `dot` executable. `bin/material_flow.bat`/`.sh` and `bin/tro_flow.bat`/`.sh`
|
||||||
|
check for the right engine up front when `--tosvg` is passed and print an early
|
||||||
|
`WARNUNG` if it's missing (`GRAPHVIZ_DOT` only covers `dot`, not `neato`) — this
|
||||||
|
is just a heads-up before the CSV is even parsed; the Python script still runs
|
||||||
|
and reports the same failure in detail (exit code `2`) if the SVG step is reached.
|
||||||
|
|
||||||
## 3. `material_flow.py` — material-flow graph of the mechanical layout
|
## 3. `material_flow.py` — material-flow graph of the mechanical layout
|
||||||
|
|
||||||
@@ -122,6 +136,16 @@ Reads the CSV export and builds a directed graph of the mechanical objects:
|
|||||||
> will contain the 61 conveyor items but **no** BTMT rows, so no entry/exit nodes
|
> will contain the 61 conveyor items but **no** BTMT rows, so no entry/exit nodes
|
||||||
> appear. The recognition above is ready for when BTMT rows are present.
|
> appear. The recognition above is ready for when BTMT rows are present.
|
||||||
|
|
||||||
|
In the rendered graph, **parallel Gefällestrecken between the same two Kreisel
|
||||||
|
lanes with the same slope** (`Hoehe_Von_mm`/`Hoehe_Bis_mm`) — a typical
|
||||||
|
line-storage bank — are drawn as a **single** Gefällestrecke-styled box with a
|
||||||
|
double border (`peripheries=2`) instead of one box per line. Its label states
|
||||||
|
the id range and count of the merged lines plus the combined Separator/Scanner
|
||||||
|
id ranges, e.g. `Gefaellestrecke 0017 - 0036 (20x)` / `Separator (20): 0037 -
|
||||||
|
0056`. This is purely a rendering simplification (`_group_parallel_gefaelle`
|
||||||
|
in `lib/material_flow.py`) — the underlying graph, `--doc` report and
|
||||||
|
`--connect` output are unaffected and still list every line individually.
|
||||||
|
|
||||||
Flow direction between conveyor segments is derived from height change
|
Flow direction between conveyor segments is derived from height change
|
||||||
(`Hoehe_Von_mm`/`Hoehe_Bis_mm`) or, failing that, from `Antriebfahrtrichtung`
|
(`Hoehe_Von_mm`/`Hoehe_Bis_mm`) or, failing that, from `Antriebfahrtrichtung`
|
||||||
("Auf"/"Ab"); connections whose direction can't be determined are drawn
|
("Auf"/"Ab"); connections whose direction can't be determined are drawn
|
||||||
|
|||||||
+116
-1
@@ -138,6 +138,12 @@ NODE_STYLES = {
|
|||||||
}
|
}
|
||||||
DEFAULT_NODE_STYLE = dict(fillcolor="#f2f2f2", fontcolor="#404040", color="#808080")
|
DEFAULT_NODE_STYLE = dict(fillcolor="#f2f2f2", fontcolor="#404040", color="#808080")
|
||||||
|
|
||||||
|
# Ab dieser Anzahl paralleler Gefaellestrecken zwischen denselben zwei
|
||||||
|
# Kreisel-Bahnen (gleicher Zulauf, gleicher Ablauf, gleiche Steigung) werden
|
||||||
|
# sie im Materialfluss-Diagramm zu einem Block zusammengefasst - sonst wird
|
||||||
|
# eine grosse Linienbank (Speicher) unlesbar breit.
|
||||||
|
MIN_GEFAELLE_GROUP = 2
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Datenmodell
|
# Datenmodell
|
||||||
@@ -1011,6 +1017,78 @@ def _pos_attr(node: "Node", use_coords: bool) -> str:
|
|||||||
return f', pos="{xy[0] * COORD_SCALE:.2f},{xy[1] * COORD_SCALE:.2f}"'
|
return f', pos="{xy[0] * COORD_SCALE:.2f},{xy[1] * COORD_SCALE:.2f}"'
|
||||||
|
|
||||||
|
|
||||||
|
def _flow_neighbours(node_id: str, edges: list[Edge]) -> tuple[str, str] | None:
|
||||||
|
"""
|
||||||
|
(Vorgaenger, Nachfolger) eines Knotens im Materialfluss.
|
||||||
|
|
||||||
|
None, wenn der Knoten nicht genau einen ankommenden und einen abgehenden
|
||||||
|
EDGE_FLOW hat - dann ist er kein einfacher Durchlaufknoten zwischen zwei
|
||||||
|
festen Nachbarn.
|
||||||
|
"""
|
||||||
|
incoming = {e.src for e in edges if e.dst == node_id and e.kind == EDGE_FLOW}
|
||||||
|
outgoing = {e.dst for e in edges if e.src == node_id and e.kind == EDGE_FLOW}
|
||||||
|
if len(incoming) != 1 or len(outgoing) != 1:
|
||||||
|
return None
|
||||||
|
return next(iter(incoming)), next(iter(outgoing))
|
||||||
|
|
||||||
|
|
||||||
|
def _group_parallel_gefaelle(graph: Graph) -> list[list[Node]]:
|
||||||
|
"""
|
||||||
|
Parallele Gefaellestrecken zwischen denselben zwei Kreisel-Bahnen zu
|
||||||
|
Gruppen zusammenfassen (z. B. eine Bank aus Schwerkraftlinien).
|
||||||
|
|
||||||
|
Kriterium: gleicher Zulauf- und Ablauf-Knoten (jeweils eine Kreisel-Bahn)
|
||||||
|
und gleiche Steigung (Hoehe_Von/Hoehe_Bis) - "gleich lang und gleiche
|
||||||
|
Steigung" laesst sich aus dem Export nur ueber die Hoehenangabe pruefen,
|
||||||
|
die Laenge ergibt sich daraus, dass beide Enden an denselben zwei Knoten
|
||||||
|
haengen. Rein fuer die Darstellung; Graph-Knoten/-Kanten bleiben unveraendert.
|
||||||
|
"""
|
||||||
|
groups: dict[tuple, list[Node]] = {}
|
||||||
|
for node_id in sorted(graph.nodes):
|
||||||
|
node = graph.nodes[node_id]
|
||||||
|
if node.kind != "Gefaellestrecke":
|
||||||
|
continue
|
||||||
|
neighbours = _flow_neighbours(node_id, graph.edges)
|
||||||
|
if neighbours is None:
|
||||||
|
continue
|
||||||
|
before, after = neighbours
|
||||||
|
if graph.nodes[before].kind != "Kreisel" or graph.nodes[after].kind != "Kreisel":
|
||||||
|
continue
|
||||||
|
element = node.element
|
||||||
|
key = (before, after, element.height_from, element.height_to)
|
||||||
|
groups.setdefault(key, []).append(node)
|
||||||
|
return [members for members in groups.values() if len(members) >= MIN_GEFAELLE_GROUP]
|
||||||
|
|
||||||
|
|
||||||
|
def _id_range(ids: list[str]) -> str:
|
||||||
|
"""Sortierte Ids als Bereich, z. B. ['0037', '0056'] -> '0037 - 0056'."""
|
||||||
|
ids = sorted(ids)
|
||||||
|
return ids[0] if len(ids) == 1 else f"{ids[0]} - {ids[-1]}"
|
||||||
|
|
||||||
|
|
||||||
|
def _gefaelle_group_label(members: list[Node]) -> str:
|
||||||
|
"""Sammel-Label einer Gefaellestrecken-Gruppe: Bereich der Linien-Ids,
|
||||||
|
gemeinsame Steigung, zusammengefasste Separatoren/Scanner."""
|
||||||
|
element = members[0].element
|
||||||
|
ids = sorted(m.node_id for m in members)
|
||||||
|
lines = [
|
||||||
|
f"Gefaellestrecke {ids[0]} -> {ids[-1]} ({len(ids)}x)",
|
||||||
|
"Gruppe paralleler Schwerkraftlinien",
|
||||||
|
]
|
||||||
|
if element.height is not None:
|
||||||
|
lines.append(f"h = {element.height:.3f} m")
|
||||||
|
if element.rise is not None:
|
||||||
|
uphill = drive_uphill(element)[0]
|
||||||
|
arrow = {True: "aufwaerts", False: "abwaerts", None: "Richtung offen"}[uphill]
|
||||||
|
lines.append(f"{element.height_from:.0f} -> {element.height_to:.0f} mm "
|
||||||
|
f"({element.rise:+.0f}) = {arrow}")
|
||||||
|
for kind in DEVICE_KINDS:
|
||||||
|
ids_dev = sorted({d for m in members for d in m.devices.get(kind, [])})
|
||||||
|
if ids_dev:
|
||||||
|
lines.append(f"{kind} ({len(ids_dev)}): {_id_range(ids_dev)}")
|
||||||
|
return _dot_label(lines)
|
||||||
|
|
||||||
|
|
||||||
def render_dot(graph: Graph, use_coords: bool = False) -> str:
|
def render_dot(graph: Graph, use_coords: bool = False) -> str:
|
||||||
out: list[str] = []
|
out: list[str] = []
|
||||||
add = out.append
|
add = out.append
|
||||||
@@ -1059,14 +1137,48 @@ def render_dot(graph: Graph, use_coords: bool = False) -> str:
|
|||||||
add(" }")
|
add(" }")
|
||||||
add("")
|
add("")
|
||||||
|
|
||||||
|
# Parallele Gefaellestrecken (gleicher Zu-/Ablauf, gleiche Steigung) zu
|
||||||
|
# je einem Block zusammenfassen, damit eine Linienbank nicht als N
|
||||||
|
# einzelne Kaesten gezeichnet wird.
|
||||||
|
gefaelle_groups = _group_parallel_gefaelle(graph)
|
||||||
|
group_of: dict[str, str] = {}
|
||||||
|
for members in gefaelle_groups:
|
||||||
|
group_id = f"grp_{members[0].node_id}"
|
||||||
|
for member in members:
|
||||||
|
group_of[member.node_id] = group_id
|
||||||
|
grouped_ids = set(group_of)
|
||||||
|
|
||||||
for node in plain:
|
for node in plain:
|
||||||
|
if node.node_id in grouped_ids:
|
||||||
|
continue
|
||||||
style = NODE_STYLES.get(node.kind, DEFAULT_NODE_STYLE)
|
style = NODE_STYLES.get(node.kind, DEFAULT_NODE_STYLE)
|
||||||
attrs = ", ".join(f'{key}="{value}"' for key, value in style.items())
|
attrs = ", ".join(f'{key}="{value}"' for key, value in style.items())
|
||||||
add(f' "{node.node_id}" [label="{_node_label(node)}", {attrs}'
|
add(f' "{node.node_id}" [label="{_node_label(node)}", {attrs}'
|
||||||
f'{_pos_attr(node, use_coords)}];')
|
f'{_pos_attr(node, use_coords)}];')
|
||||||
|
|
||||||
|
for members in gefaelle_groups:
|
||||||
|
group_id = f"grp_{members[0].node_id}"
|
||||||
|
style = NODE_STYLES.get("Gefaellestrecke", DEFAULT_NODE_STYLE)
|
||||||
|
attrs = ", ".join(f'{key}="{value}"' for key, value in style.items())
|
||||||
|
pos = ""
|
||||||
|
if use_coords:
|
||||||
|
xs = [xy[0] for m in members if (xy := _node_xy(m))]
|
||||||
|
ys = [xy[1] for m in members if (xy := _node_xy(m))]
|
||||||
|
if xs and ys:
|
||||||
|
pos = (f', pos="{sum(xs) / len(xs) * COORD_SCALE:.2f},'
|
||||||
|
f'{sum(ys) / len(ys) * COORD_SCALE:.2f}"')
|
||||||
|
add(f' "{group_id}" [label="{_gefaelle_group_label(members)}", {attrs}, '
|
||||||
|
f'peripheries=2{pos}];')
|
||||||
add("")
|
add("")
|
||||||
|
|
||||||
|
seen_group_edges: set[tuple[str, str]] = set()
|
||||||
for edge in graph.edges:
|
for edge in graph.edges:
|
||||||
|
src = group_of.get(edge.src, edge.src)
|
||||||
|
dst = group_of.get(edge.dst, edge.dst)
|
||||||
|
if edge.src in grouped_ids or edge.dst in grouped_ids:
|
||||||
|
if src == dst or (src, dst) in seen_group_edges:
|
||||||
|
continue
|
||||||
|
seen_group_edges.add((src, dst))
|
||||||
if edge.kind == EDGE_CIRCLE:
|
if edge.kind == EDGE_CIRCLE:
|
||||||
# Richtung kommt aus der Drehrichtung und steht als Label an der Kante
|
# Richtung kommt aus der Drehrichtung und steht als Label an der Kante
|
||||||
label = f', xlabel="{_dot_escape(edge.note)}"' if edge.note else ""
|
label = f', xlabel="{_dot_escape(edge.note)}"' if edge.note else ""
|
||||||
@@ -1082,7 +1194,7 @@ def render_dot(graph: Graph, use_coords: bool = False) -> str:
|
|||||||
'fontcolor="#cc8800", tooltip="Weiche (Kreisel-Uebergang)"]')
|
'fontcolor="#cc8800", tooltip="Weiche (Kreisel-Uebergang)"]')
|
||||||
else:
|
else:
|
||||||
attrs = "[]"
|
attrs = "[]"
|
||||||
add(f' "{edge.src}" -> "{edge.dst}" {attrs};')
|
add(f' "{src}" -> "{dst}" {attrs};')
|
||||||
add("")
|
add("")
|
||||||
|
|
||||||
legend_pos = ""
|
legend_pos = ""
|
||||||
@@ -1106,6 +1218,9 @@ def render_dot(graph: Graph, use_coords: bool = False) -> str:
|
|||||||
f'{ROTATION_CCW} = {ROTATION_FLOW[ROTATION_CCW]})</td></tr>'
|
f'{ROTATION_CCW} = {ROTATION_FLOW[ROTATION_CCW]})</td></tr>'
|
||||||
'<tr><td align="left"><font color="#bf8f00">gestrichelt gelb</font></td>'
|
'<tr><td align="left"><font color="#bf8f00">gestrichelt gelb</font></td>'
|
||||||
'<td align="left">Richtung nicht bestimmbar</td></tr>'
|
'<td align="left">Richtung nicht bestimmbar</td></tr>'
|
||||||
|
'<tr><td align="left">doppelte Umrandung</td>'
|
||||||
|
'<td align="left">Gruppe paralleler Gefaellestrecken (gleicher Zu-/Ablauf, '
|
||||||
|
"gleiche Steigung)</td></tr>"
|
||||||
"</table>>];")
|
"</table>>];")
|
||||||
add(" }")
|
add(" }")
|
||||||
add("}")
|
add("}")
|
||||||
|
|||||||
Reference in new issue
Block a user