fe4637d7df
Datenbasis (data/json/omniflo_*.json) hat sich seit der letzten Doku-Pflege verschoben: Boegen 27->29, Delta 1->7, Sternweiche 1->2, Dreifachweiche 6->0 (Typ aktuell nicht mehr in den Daten vorhanden), Gesamt 107->110. Schalter/Filterkriterien selbst (SWITCH_FILTERS in lib/omniflo_utils.py) sind unveraendert und weiterhin korrekt dokumentiert. set_koords-Aufruf im Dokument auf bin\set_coords.bat vereinheitlicht (war inkonsistent zu set_einfuegepunkt.bat, das korrekt den bin\-Wrapper nennt). bin/set_coords.bat trug noch den Kopfkommentar von set_einfuegepunkt.bat (Copy-Paste-Fehler) - korrigiert auf den tatsaechlichen Zweck (K1-K4 setzen). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
272 lines
10 KiB
Markdown
272 lines
10 KiB
Markdown
|
|
Diese Werkzeuge ermöglichen die massenhafte Aufbereitung von einzelnen dxf Dateien mit Omniflo Bögen und Weichen. Sie setzen automatisiert die Einfügepunkte, die Koordinatensysteme und die Attribugte der jeweiligen Datei korrekt. Anwendbarauf 2D und 3D Dateien, wenn in 3D die 2D Kurven als Skelett enthalten sind.
|
|
|
|
- [set\_einfuegepunkt](#set_einfuegepunkt)
|
|
- [Aufruf](#aufruf)
|
|
- [Datenquellen](#datenquellen)
|
|
- [Ablauf](#ablauf)
|
|
- [Schalter](#schalter)
|
|
- [--boegen](#--boegen)
|
|
- [--weichen45](#--weichen45)
|
|
- [--weichen90](#--weichen90)
|
|
- [--weichenkoerper](#--weichenkoerper)
|
|
- [--weichen-parallel](#--weichen-parallel)
|
|
- [--delta](#--delta)
|
|
- [--dreifachweiche](#--dreifachweiche)
|
|
- [--sternweiche](#--sternweiche)
|
|
- [--number SIVASNR](#--number-sivasnr)
|
|
- [--show-omniflo](#--show-omniflo)
|
|
- [Abdeckung](#abdeckung)
|
|
- [Uebersicht aller Schalter](#uebersicht-aller-schalter)
|
|
- [Umgebungsvariablen](#umgebungsvariablen)
|
|
- [set\_koords](#set_koords)
|
|
- [Aufruf](#aufruf-1)
|
|
- [Datenquellen](#datenquellen-1)
|
|
- [Ablauf](#ablauf-1)
|
|
- [Schalter](#schalter-1)
|
|
- [--k1set](#--k1set)
|
|
- [--k2set](#--k2set)
|
|
- [--k3set](#--k3set)
|
|
- [--k4set](#--k4set)
|
|
- [--set-all](#--set-all)
|
|
- [--force](#--force)
|
|
- [--show-omniflo](#--show-omniflo-1)
|
|
- [--test](#--test)
|
|
- [--number SIVASNR](#--number-sivasnr-1)
|
|
- [Uebersicht K-Zuordnung](#uebersicht-k-zuordnung)
|
|
- [Umgebungsvariablen](#umgebungsvariablen-1)
|
|
|
|
|
|
# set_einfuegepunkt
|
|
|
|
Setzt den Einfuegepunkt (`$INSBASE`) von Omniflo DXF-Dateien anhand geometrischer Kriterien an die richtige Stelle
|
|
|
|
## Aufruf
|
|
|
|
```
|
|
bin\set_einfuegepunkt.bat [--schalter] [--number SIVASNR]
|
|
```
|
|
|
|
Das Batch-Skript ruft `setenv.bat` auf und startet `lib/set_einfuegepkt.py` mit den uebergebenen Argumenten.
|
|
|
|
## Datenquellen
|
|
|
|
| Pfad | Inhalt |
|
|
|---|---|
|
|
| `data/json/omniflo_boegen.json` | Liste aller Boegen mit Sivasnr, ProfilTyp, Radius, KurvenWinkel etc. |
|
|
| `data/json/omniflo_weichen.json` | Liste aller Weichen mit Sivasnr, ProfilTyp, WeichenTyp, KurvenWinkel etc. |
|
|
| `data/omniflo/*.dxf` | Die DXF-Quelldateien (je Sivasnr eine Datei) |
|
|
|
|
Die JSON-Dateien liefern die IDs (Sivasnr) und Metadaten zur Filterung. Die DXF-Dateien enthalten die Geometrie (Linien, Boegen), aus der der Einfuegepunkt berechnet wird.
|
|
|
|
## Ablauf
|
|
|
|
1. JSON-Datei einlesen und nach Schalter-Kriterien filtern
|
|
2. Fuer jede gefilterte Sivasnr die DXF-Datei aus `data/omniflo/` laden
|
|
3. Einfuegepunkt gemaess Typ-Kriterium geometrisch berechnen
|
|
4. `$INSBASE` im DXF-Header setzen und Datei nach `results/` speichern
|
|
|
|
## Schalter
|
|
|
|
### --boegen
|
|
|
|
Alle Eintraege aus `omniflo_boegen.json` (29 Items, KurvenWinkel 22.5/45/67.5/90/180).
|
|
|
|
**Kriterium:** Schnittpunkt der Tangenten am Anfangs- und Endpunkt der Bogenkurve. Bei 180-Grad-Boegen wird der Mittelpunkt zwischen Start und Ende verwendet.
|
|
|
|
Hier die Bögen:
|
|
.
|
|
|
|
### --weichen45
|
|
|
|
Einzel-, Doppel- und Dreiwegeweichen mit KurvenWinkel 45 (32 Items).
|
|
|
|
**Kriterium:** Schnittpunkt der laengsten vertikalen Linie mit der Tangente am oberen Bogenpunkt. Bei mehreren Boegen wird der mit dem hoechsten Y-Wert gewaehlt.
|
|
|
|
### --weichen90
|
|
|
|
Einzel-, Doppel- und Dreiwegeweichen mit KurvenWinkel 90 (24 Items).
|
|
|
|
**Kriterium:** Wie `--weichen45`.
|
|
|
|
### --weichenkoerper
|
|
|
|
Alle Weichen mit KurvenWinkel 22.5 (8 Items: Einzel-/Doppel-/Dreiwegeweiche).
|
|
|
|
**Kriterium:** Schnittpunkt der laengsten Diagonale mit der laengsten vertikalen Linie (Konvergenzpunkt aller Linien).
|
|
|
|
### --weichen-parallel
|
|
|
|
Einzel-, Doppel- und Dreiwegeweichen mit KurvenWinkel 0, ohne Sternweiche (8 Items).
|
|
|
|
**Kriterium:** Wie `--weichenkoerper`.
|
|
|
|
### --delta
|
|
|
|
Deltaweichen (7 Items).
|
|
|
|
**Kriterium:** Mittelpunkt der laengsten horizontalen Linie.
|
|
|
|
### --dreifachweiche
|
|
|
|
Dreifachweichen (aktuell 0 Items in `omniflo_weichen.json` - Schalter und
|
|
Filterkriterium existieren weiter in `lib/omniflo_utils.py` fuer den Fall,
|
|
dass wieder Dreifachweichen-Daten gepflegt werden).
|
|
|
|
**Kriterium:** Mittelpunkt der laengsten horizontalen Linie.
|
|
|
|
### --sternweiche
|
|
|
|
Sternweiche (2 Items).
|
|
|
|
**Kriterium:** Zentrum, berechnet als Mittelpunkt der laengsten horizontalen Linie (entspricht dem Schnittpunkt der horizontalen und vertikalen Mittelachse).
|
|
|
|
### --number SIVASNR
|
|
|
|
Optionaler Filter: nur die angegebene 9-stellige Sivasnr verarbeiten. Kombinierbar mit jedem Typ-Schalter.
|
|
|
|
### --show-omniflo
|
|
|
|
Erzeugt eine Uebersichts-DXF (`results/omniflo_uebersicht.dxf`) mit allen Omniflo-Elementen. Die Elemente werden in Reihen nach Typ gruppiert angezeigt. Jedes Element erhaelt:
|
|
- Den Dateinamen als Beschriftung oberhalb
|
|
- Ein rotes Kreuz am Einfuegepunkt
|
|
|
|
Hier die Weichen
|
|
.
|
|
Hier die erzeugte [dxf Datei der Einfügepunkte als Beispiel](dxf/omniflo_uebersicht.dxf) des letzte Laufs
|
|
|
|
## Abdeckung
|
|
|
|
Alle 110 Items (29 Boegen + 81 Weichen, Stand aktuelle `data/json/omniflo_*.json`)
|
|
sind exklusiv genau einem Schalter zugeordnet. Keine Ueberlappungen, keine
|
|
Luecken. Die Zahlen je Schalter verschieben sich mit der Datenbasis; bei
|
|
Zweifel per `SWITCH_FILTERS` (`lib/omniflo_utils.py`) nachrechnen.
|
|
|
|
## Uebersicht aller Schalter
|
|
|
|
| Schalter | Items | WeichenTyp | KurvenWinkel | Einfuegepunkt-Kriterium |
|
|
| --- | --- | --- | --- | --- |
|
|
| `--boegen` | 29 | - | 22.5, 45, 67.5, 90, 180 | Tangentenschnittpunkt am Bogen (180: Mittelpunkt) |
|
|
| `--weichen45` | 32 | Einzel-, Doppel-, Dreiwegeweiche | 45 | Tangente oberer Bogenpunkt x laengste Vertikale |
|
|
| `--weichen90` | 24 | Einzel-, Doppel-, Dreiwegeweiche | 90 | Tangente oberer Bogenpunkt x laengste Vertikale |
|
|
| `--weichenkoerper` | 8 | Einzel-, Doppel-, Dreiwegeweiche | 22.5 | Laengste Diagonale x laengste Vertikale |
|
|
| `--weichen-parallel` | 8 | Einzel-, Doppel-, Dreiwegeweiche | 0 | Laengste Diagonale x laengste Vertikale |
|
|
| `--dreifachweiche` | 0 | Dreifachweiche | 90 | Mittelpunkt laengste Horizontale |
|
|
| `--delta` | 7 | Deltaweiche | 90 | Mittelpunkt laengste Horizontale |
|
|
| `--sternweiche` | 2 | Sternweiche | 0 | Zentrum (Mittelpunkt laengste Horizontale) |
|
|
| **Gesamt** | **110** | | | |
|
|
|
|
## Umgebungsvariablen
|
|
|
|
Werden durch `bin/setenv.bat` gesetzt:
|
|
|
|
| Variable | Verwendung |
|
|
|---|---|
|
|
| `DXFM_DATA` | Pfad zu `data/` (JSON + DXF Quelldateien) |
|
|
| `DXFM_RESULTS` | Pfad zu `results/` (Ausgabe) |
|
|
|
|
---
|
|
|
|
# set_koords
|
|
|
|
Setzt Koordinatensystem-Bloecke (K1, K2, K3, K4) in Omniflo DXF-Dateien. Jeder Block enthaelt drei Linien vom Ursprung: rot (X-Achse, Laenge 1), gruen (Y-Achse, Laenge 2), blau (Z-Achse, Laenge 3).
|
|
|
|
## Aufruf
|
|
|
|
```
|
|
bin\set_coords.bat [--schalter] [--number SIVASNR] [--force]
|
|
```
|
|
|
|
Das Batch-Skript ruft `setenv.bat` auf und startet `lib/set_koords.py` mit den uebergebenen Argumenten.
|
|
|
|
## Datenquellen
|
|
|
|
| Pfad | Inhalt |
|
|
|---|---|
|
|
| `data/json/omniflo_boegen.json` | Liste aller Boegen mit Sivasnr, ProfilTyp etc. |
|
|
| `data/json/omniflo_weichen.json` | Liste aller Weichen mit Sivasnr, ProfilTyp etc. |
|
|
| `data/omniflo/*.dxf` / `results/*.dxf` | DXF-Quelldateien (bevorzugt aus results/, Fallback data/omniflo/) |
|
|
|
|
## Ablauf
|
|
|
|
1. JSON-Daten und SWITCH_FILTERS (aus utils.py) laden
|
|
2. Fuer jede gefilterte Sivasnr die DXF-Datei laden
|
|
3. Kx-Position geometrisch berechnen (abhaengig von Typ und Schalter)
|
|
4. Block-Referenz mit korrekter Rotation einfuegen und DXF nach `results/` speichern
|
|
|
|
## Schalter
|
|
|
|
### --k1set
|
|
|
|
K1 an alle Boegen und Weichen setzen.
|
|
|
|
- **Boegen:** Beginn der obersten horizontalen Linie. x rechts, y oben, z aus Zeichenebene (rz=0).
|
|
- **Weichen:** Beginn der untersten vertikalen Linie. x oben, y links, z aus Zeichenebene (rz=90).
|
|
|
|
### --k2set
|
|
|
|
K2 an alle Boegen und Weichen setzen (linker Bogenzweig). Nutzt dieselben SWITCH_FILTERS wie set_einfuegepkt.py.
|
|
|
|
- **Boegen:** Position am anderen Ende der Kette (Gerade-Bogen-Gerade). x tangential zur Linie, zur Bogenmitte zeigend. 180-Grad-Sonderfall: rz=0.
|
|
- **Weichen (weichen45, weichen90, weichen_parallel):** Folgt dem Bogenzweig bis zum Ende. x tangential, bei Doppelweichen: linker Zweig.
|
|
- **Weichenkoerper:** Ende der linken langen Diagonale.
|
|
- **Dreifach-/Delta-/Sternweiche:** Linkes Ende der laengsten horizontalen Linie.
|
|
|
|
### --k3set
|
|
|
|
K3 an Weichen mit 2+ Boegen setzen (rechter Zweig). Gleiche Logik wie K2, aber rechter Ast (groesstes x). Nur bei: Doppelweichen, Dreiwegeweichen, Dreifachweiche, Delta, Stern, Weichenkoerper Doppel/Dreiwege.
|
|
|
|
### --k4set
|
|
|
|
K4 an Weichen setzen (oberes Ende der K1-Linie). Rotation wie K1 (rz=90). Kein K4 bei: Boegen, Doppelweiche, Dreifachweiche, Deltaweiche.
|
|
|
|
### --set-all
|
|
|
|
Alle Koordinatensysteme (K1-K4) in einem Durchgang setzen.
|
|
|
|
### --force
|
|
|
|
Bestehende Kx ueberschreiben (sonst skip wenn vorhanden). Duplikate werden immer bereinigt (letztes bleibt).
|
|
|
|
### --show-omniflo
|
|
|
|
Erzeugt eine Uebersichts-DXF (`results/koords_uebersicht.dxf`) mit allen Omniflo-Elementen und farbigen Kreuzen an den K-Positionen:
|
|
|
|
| Koordinatensystem | Farbe |
|
|
|---|---|
|
|
| K1 | rot |
|
|
| K2 | orange |
|
|
| K3 | gelb |
|
|
| K4 | gruen |
|
|
|
|
So sehen in der Übersicht die Markierungen von K1 bis K4 aus:
|
|
Hier eine Übersicht wie die gesamte Datei aussieht
|
|

|
|
|
|
Hier die erzeugte [dxf Datei mit den Koordinatensystemen](dxf/koords_uebersicht.dxf) als Beispiel des letzte Laufs
|
|
|
|
|
|
### --test
|
|
|
|
Erzeugt Testdatei (`results/ks_test.dxf`) mit 4 Koordinatensystemen und verifiziert das Ruecklesen.
|
|
|
|
### --number SIVASNR
|
|
|
|
Nur die angegebene 9-stellige Sivasnr verarbeiten. Kombinierbar mit jedem Schalter.
|
|
|
|
## Uebersicht K-Zuordnung
|
|
|
|
| K | Boegen | Weichen | Weichenkoerper | Dreifach/Delta/Stern |
|
|
| --- | --- | --- | --- | --- |
|
|
| K1 | Oberste H-Linie (rz=0) | Unterste V-Linie (rz=90) | Unterste V-Linie (rz=90) | Unterste V-Linie (rz=90) |
|
|
| K2 | Anderes Kettenende | Linker Bogenzweig | Linke Diagonale | Linkes H-Linienende |
|
|
| K3 | - | Rechter Bogenzweig (2+ Boegen) | Rechte Diagonale (2+ Diag.) | Rechtes H-Linienende |
|
|
| K4 | - | Oberes K1-Linienende | Oberes K1-Linienende | Sternweiche: ja |
|
|
|
|
## Umgebungsvariablen
|
|
|
|
| Variable | Verwendung |
|
|
|---|---|
|
|
| `DXFM_DATA` | Pfad zu `data/` (JSON + DXF Quelldateien) |
|
|
| `DXFM_RESULTS` | Pfad zu `results/` (Ausgabe) |
|