Files
plant2dxf/doc/plant2dxf_doku.md
T

4.7 KiB
Raw Blame History

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

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

  2. Konfiguration:
    Über die Datei shapes.cfg werden für jede TeileArt die zu verwendenden Blöcke, deren Offsets und Rotationen definiert.

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

  4. 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.cfg im PROJECT_CFG-Verzeichnis).

  • -l, --lib
    Pfad zur DXF-Bibliothek mit Blockdefinitionen (Standard: blocks.dxf im PROJECT_DATA-Verzeichnis).

  • -o, --output
    Pfad zur Ausgabedatei (Standard: <inputname>.dxf im PROJECT_WORK-Verzeichnis).

  • -v, --verbose
    Zeigt zusätzliche Ausgaben an.

Umgebungsvariablen

  • PROJECT_DATA Verzeichnis für Bibliotheksdateien
  • PROJECT_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 Komponente
  • Planquadrat Koordinaten im Format X:<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-Spalte TeileArt.

  • 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.cfg und 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 Funktion normalize_func_name).

Beispielablauf

  1. CSV und Konfiguration vorbereiten
  2. Skript mit passenden Parametern aufrufen
  3. 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.