4.7 KiB
Dokumentation: plant2dxf
Übersicht
Das Skript plant2dxf.py dient dazu, aus einer RuleDesigner-CSV-Datei DXF-Elemente zu erzeugen. Es werden verschiedene Anlagenkomponenten anhand ihrer Typen (TeileArt) erkannt und als Blöcke in eine DXF-Zeichnung eingefügt. Je nach TeileArt werden die Elemente komplett neu erzeugt oder (teilweise) aus einer "Bibliotheks-dxf" kopiert. Die Konfiguration der Blöcke erfolgt über eine separate Konfigurationsdatei (shapes.cfg).
Funktionsweise
-
CSV-Einlesen:
Das Skript liest eine CSV-Datei ein, in der für jede Anlagenkomponente u.a. Typ, ID, Planquadrat (Koordinaten) und optionale Merkmale angegeben sind. -
Konfiguration:
Über die Dateishapes.cfgwerden für jede TeileArt die zu verwendenden Blöcke, deren Offsets und Rotationen definiert. -
Blockplatzierung:
Für jede Zeile der CSV wird anhand der TeileArt die passende Platzierungsroutine aufgerufen. Die Blöcke werden an die berechnete Position (transformiert ins DXF-Koordinatensystem) gesetzt. Je nach Teileart findet neben der Platzierung von Blöcken die Erzeugung zusätzlicher Elemente (z.B. Linien) statt. -
DXF-Ausgabe:
Am Ende wird die generierte DXF-Datei unter dem Dateinamen der Eingabedatei gespeichert.
Aufruf
python plant2dxf.py -f <input.csv> [-c <shapes.cfg>] [-l <bibliothek.dxf>] [-o <anlage.dxf>] [-v]
Argumente
-
-f, --file
(erforderlich) Pfad zur Eingabe-CSV-Datei. -
-c, --config
Pfad zur Konfigurationsdatei mit Blockdefinitionen (Standard:shapes.cfgim PROJECT_CFG-Verzeichnis). -
-l, --lib
Pfad zur DXF-Bibliothek mit Blockdefinitionen (Standard:blocks.dxfim PROJECT_DATA-Verzeichnis). -
-o, --output
Pfad zur Ausgabedatei (Standard:<inputname>.dxfim PROJECT_WORK-Verzeichnis). -
-v, --verbose
Zeigt zusätzliche Ausgaben an.
Umgebungsvariablen
PROJECT_DATA– Verzeichnis für BibliotheksdateienPROJECT_WORK– Arbeitsverzeichnis (z.B. für CSV und Ausgabedateien)PROJECT_CFG– Verzeichnis für Konfigurationsdateien
Aufbau der CSV-Datei
Die CSV-Datei muss folgende Spalten enthalten:
TeileArt– Typ der Komponente (z.B. "ILS 2.0 Kreisel")TeileId– Eindeutige ID der KomponentePlanquadrat– Koordinaten im FormatX:<Wert> Y:<Wert>(Beachte: Koordinaten hier sind "Bildschirmkoordinaten", d.h. 0/0 in der linken oberen Ecke. Transformation auf Normalkoordinaten findet im Skript statt.)Merkmale– (optional) JSON-String mit weiteren Eigenschaften
Beispiel:
TeileArt;TeileId;Planquadrat;Merkmale
ILS 2.0 Kreisel;K1;X:1000 Y:2000;{"Abstand (Kreiselachse A - Kreiselachse) in Meter": "20", "Drehung": "45"}
Aufbau der shapes.cfg
Die Datei shapes.cfg definiert für jede TeileArt die zu verwendenden Blöcke aus der Bibliotheks-dxf und deren Eigenschaften. Über die Offsets bzw. die Rotationen können die Blockursprünge auf die tatsächlichen Platzierungskoordinaten angepasst werden. Die Keys (Überschriften) müssen exakt den Bezeichner "TeileArt" der Eingabe-dxf entsprechen!
Beispiel
[ILS 2.0 Kreisel]
items = SP8, AN8
offset_symb1 = 0,0
offset_symb2 = 0,0
rot_symb1 = 0.0
rot_symb2 = 0.0
[ILS 2.0 Gefällestrecke]
items = EE DS, AE DS
offset_symb1 = 0,-330
offset_symb2 = 0,1000
rot_symb1 = 0.0
rot_symb2 = 0.0
Erklärung der Parameter
-
[TeileArt]
Abschnittsname entspricht exakt dem Wert aus der CSV-SpalteTeileArt. -
items
Kommagetrennte Liste der Blocknamen, die für diese TeileArt verwendet werden. -
offset_symbX
Offset (in mm) für den X-ten Block relativ zur berechneten Position, Format:x,y. -
rot_symbX
Rotation (in Grad °) für den X-ten Block.
Erweiterbarkeit
- Neue TeileArten können durch Hinzufügen eines neuen Abschnitts in
shapes.cfgund ggf. einer neuen Handler-Funktion im Skript (handle_<teileart>) ergänzt werden. - Die Handler-Funktion muss nach dem Schema
handle_<teileart>benannt werden (Sonderzeichen werden ersetzt, siehe Funktionnormalize_func_name).
Beispielablauf
- CSV und Konfiguration vorbereiten
- Skript mit passenden Parametern aufrufen
- DXF-Datei wird im Zielverzeichnis erzeugt
Abhängigkeiten
- Python 3.x
- ezdxf (DXF-Bibliothek)
- Standardbibliotheken: os, sys, csv, json, re, argparse, configparser, math, pathlib
- pydantic(Klassenerstellung)
Hinweise
- Die Blockbibliothek (
blocks.dxf) ist optional, wird aber für komplexe Blöcke benötigt. - Fehlerhafte oder fehlende Koordinaten/Merkmale werden übersprungen und als Warnung ausgegeben.
- Die Transformation der Koordinaten erfolgt so, dass (0,0) im DXF unten links ist.