- [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) - [attradd](#attradd) - [Aufruf](#aufruf-2) - [Datenquellen](#datenquellen-2) - [Ablauf](#ablauf-2) - [Konfiguration (attradd.cfg)](#konfiguration-attraddcfg) - [Schalter](#schalter-2) - [--number SIVASNR / -n SIVASNR](#--number-sivasnr---n-sivasnr) - [--dry-run / -d](#--dry-run---d) - [Umgebungsvariablen](#umgebungsvariablen-2) # set_einfuegepunkt Setzt den Einfuegepunkt (`$INSBASE`) von Omniflo DXF-Dateien anhand geometrischer Kriterien. ## 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` (27 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: ![Boegen](images/einfuegepunkte-boegen.png). ### --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 (1 Item). **Kriterium:** Mittelpunkt der laengsten horizontalen Linie. ### --dreifachweiche Dreifachweichen (6 Items). **Kriterium:** Mittelpunkt der laengsten horizontalen Linie. ### --sternweiche Sternweiche (1 Item). **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 ![Weichen](images/einfuegepunkte-weichen.png). Hier die erzeugte [dxf Datei der Einfügepunkte als Beispiel](dxf/omniflo_uebersicht.dxf) des letzte Laufs ## Abdeckung Alle 107 Items (27 Boegen + 80 Weichen) sind exklusiv genau einem Schalter zugeordnet. Keine Ueberlappungen, keine Luecken. ## Uebersicht aller Schalter | Schalter | Items | WeichenTyp | KurvenWinkel | Einfuegepunkt-Kriterium | |---|---|---|---|---| | `--boegen` | 27 | - | 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` | 6 | Dreifachweiche | 90 | Mittelpunkt laengste Horizontale | | `--delta` | 1 | Deltaweiche | 90 | Mittelpunkt laengste Horizontale | | `--sternweiche` | 1 | Sternweiche | 0 | Zentrum (Mittelpunkt laengste Horizontale) | | **Gesamt** | **107** | | | | ## 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 ``` python lib/set_koords.py [--schalter] [--number SIVASNR] [--force] ``` ## 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:![Markierungen über K1, .. K4](images/omniflo-setkoords1.png) Hier eine Übersicht wie die gesamte Datei aussieht ![Übersicht](images/omniflo-setkoords2.png) 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) | --- # attradd Fuegt Attribute (ATTDEF) zu allen Omniflo DXF-Dateien hinzu. Die Attribut-Tags und deren Werte werden ueber eine Konfigurationsdatei gesteuert. ## Aufruf ``` python lib/attradd.py [--number SIVASNR] [--dry-run] ``` ## Datenquellen | Pfad | Inhalt | |---|---| | `cfg/attradd.cfg` | Attribut-Konfiguration (Tags und Quellfelder je Elementtyp) | | `data/json/omniflo_boegen.json` | Liste aller Boegen mit Metadaten | | `data/json/omniflo_weichen.json` | Liste aller Weichen mit Metadaten | | `data/omniflo/*.dxf` | DXF-Quelldateien | ## Ablauf 1. Konfiguration aus `cfg/attradd.cfg` lesen 2. JSON-Daten laden und Lookup-Tabelle (Sivasnr -> Typ + Eintrag) erstellen 3. Fuer jede Sivasnr die DXF-Datei oeffnen, bestehende ATTDEFs entfernen 4. Neue ATTDEFs gemaess Config einfuegen (Layer `ATTRIB`, unterhalb der Geometrie) 5. Ergebnis nach `results/omniflo/` speichern ## Konfiguration (attradd.cfg) Die Config-Datei ist im INI-Format mit Abschnitten je Elementtyp: ```ini [bogen] BESCHR = ProfilTyp ARTINR = Sivasnr TEILEART = "Omniflo Kurve" LAYER = "A-OF-Bogen" RADIUS = Radius WINKEL = KurvenWinkel SIVASNR_TEF = SivasnrTEF [weiche] BESCHR = ProfilTyp ARTINR = Sivasnr TEILEART = "Omniflo Weiche" LAYER = "A-OF-Weiche" WEICHENTYP = WeichenTyp WINKEL = KurvenWinkel RADIUS = Breite SIVASNR_TEF = SivasnrTEF ``` Quellwerte koennen sein: - **JSON-Feldname** (z.B. `ProfilTyp`) - Wert wird aus dem JSON-Eintrag gelesen - **Fester Text** in Anfuehrungszeichen (z.B. `"Omniflo Kurve"`) - **Platzhalter** `{sivasnr}` - wird durch die Sivasnr ersetzt ## Schalter ### --number SIVASNR / -n SIVASNR Nur die angegebene Sivasnr verarbeiten. ### --dry-run / -d Nur anzeigen welche Attribute gesetzt wuerden, ohne DXF-Dateien zu schreiben. ## Umgebungsvariablen | Variable | Verwendung | |---|---| | `DXFM_DATA` | Pfad zu `data/` (JSON + DXF Quelldateien) | | `DXFM_CFG` | Pfad zu `cfg/` (attradd.cfg) | | `DXFM_RESULTS` | Pfad zu `results/` (Ausgabe nach `results/omniflo/`) | Alle drei haben Fallback auf relative Pfade vom Projektverzeichnis.