Files
dxfmakros/doc/tools.md
T
m.stangl fd58ef612f attradd.py und add_attr.bat in set_attributs.py/.bat umbenannt
lib/attradd.py -> lib/set_attributs.py: Name besser passend zum
Skript-Zweck (setzt Attribute, analog set_einfuegepkt / set_koords).
bin/add_attr.bat -> bin/set_attributs.bat entsprechend angepasst.

cfg/attradd.cfg: Kommentar auf neuen Skriptnamen aktualisiert.
HOEHE/DREHUNG-Eintraege aus [bogen] und [weiche] entfernt, da diese
Attribute jetzt dynamisch via ssg-cfg-or aus component_defaults.json
bezogen werden (nicht mehr als statische ATTDEF-Defaults noetig).
Ebenso RADIUS aus [weiche] entfernt (war redundant zu KurvenWinkel).

doc/tools.md und CLAUDE.md: Alle Verweise auf attradd.py auf
set_attributs.py aktualisiert.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 11:25:28 +02:00

14 KiB

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

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 (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.

--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. Hier die erzeugte dxf Datei der Einfügepunkte als Beispiel 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 Hier eine Übersicht wie die gesamte Datei aussieht Übersicht

Hier die erzeugte dxf Datei mit den Koordinatensystemen 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)

set_attributs

Fuegt Attribute (ATTDEF) zu allen Omniflo DXF-Dateien hinzu. Die Attribut-Tags und deren Werte werden ueber eine Konfigurationsdatei gesteuert.

Aufruf

python lib/set_attributs.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. 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

Attribute Omniflo Kurve (Bogen)

ATTDEF-Tag Quelle Beschreibung
BESCHR ProfilTyp Profilbezeichnung aus JSON
ARTINR Sivasnr Sivas-Artikelnummer
TEILEART "Omniflo Kurve" Fester Typname
RADIUS Radius Kurvenradius in mm
WINKEL KurvenWinkel Kurvenwinkel in Grad
SIVASNR_TEF SivasnrTEF Sivas-Nr. des TEF-Antriebs (leer = kein Antrieb)
HOEHE "2000" Montagehoehe in mm (wird beim Export aus Z-Koordinate aktualisiert)
DREHUNG "0" Drehwinkel in Grad (wird beim Export aus CAD-Rotation aktualisiert)
LAYER (aus [layer]) Layer-Name gemaess Kategorisierung

Attribute Omniflo Weiche

ATTDEF-Tag Quelle Beschreibung
BESCHR ProfilTyp Profilbezeichnung aus JSON
ARTINR Sivasnr Sivas-Artikelnummer
TEILEART "Omniflo Weiche" Fester Typname
WEICHENTYP WeichenTyp Weichentyp (Einzelweiche, Doppelweiche, Dreiwegeweiche, ...)
WINKEL KurvenWinkel Kurvenwinkel in Grad
RICHTUNG KurvenRichtung Richtungskennung (1=Links, 2=Rechts, 3=Beide, 7=Dreiweg)
SIVASNR_TEF SivasnrTEF Sivas-Nr. des TEF-Antriebs (leer = kein Antrieb)
HOEHE "2000" Montagehoehe in mm (wird beim Export aus Z-Koordinate aktualisiert)
DREHUNG "0" Drehwinkel in Grad (wird beim Export aus CAD-Rotation aktualisiert)
LAYER (aus [layer]) Layer-Name gemaess Kategorisierung

CSV-Export-Felder (Merkmale)

Die Attribute werden beim CSV-Export (export_csv.py / OMNI_EXPORT) wie folgt in CSV-Merkmale ueberfuehrt. CSV-Format: Elementnummer;TeileArt;TeileId;Bezeichnung;Anzahl;Merkmale

Omniflo Kurve:

Merkmal Quelle Typ
Kurvenwinkel JSON KurvenWinkel float
Radius JSON Radius float
Höhe Attribut HOEHE / Z-Koordinate string
Drehung Attribut DREHUNG / CAD-Rotation float
SivasNummer JSON Sivasnr string

Omniflo Weiche:

Merkmal Quelle Typ
Weichentyp JSON WeichenTyp string
Richtung JSON KurvenRichtung string
Weichenwinkel JSON KurvenWinkel float
Höhe Attribut HOEHE / Z-Koordinate string
Drehung Attribut DREHUNG / CAD-Rotation float
Antrieb Kurve SivasnrTEF != null bool
SivasNummer JSON Sivasnr string

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.