Compare commits
2 Commits
2f583a96cb
...
2ceea62262
| Author | SHA1 | Date | |
|---|---|---|---|
| 2ceea62262 | |||
| b9a33def8b |
+48
-8
@@ -35,11 +35,14 @@ Diese Werkzeuge ermöglichen die massenhafte Aufbereitung von einzelnen dxf Date
|
|||||||
- [--number SIVASNR](#--number-sivasnr-1)
|
- [--number SIVASNR](#--number-sivasnr-1)
|
||||||
- [Uebersicht K-Zuordnung](#uebersicht-k-zuordnung)
|
- [Uebersicht K-Zuordnung](#uebersicht-k-zuordnung)
|
||||||
- [Umgebungsvariablen](#umgebungsvariablen-1)
|
- [Umgebungsvariablen](#umgebungsvariablen-1)
|
||||||
- [set_attributs](#set_attributs)
|
- [set\_attributs](#set_attributs)
|
||||||
- [Aufruf](#aufruf-2)
|
- [Aufruf](#aufruf-2)
|
||||||
- [Datenquellen](#datenquellen-2)
|
- [Datenquellen](#datenquellen-2)
|
||||||
- [Ablauf](#ablauf-2)
|
- [Ablauf](#ablauf-2)
|
||||||
- [Konfiguration (attradd.cfg)](#konfiguration-attraddcfg)
|
- [Konfiguration (attradd.cfg)](#konfiguration-attraddcfg)
|
||||||
|
- [Attribute Omniflo Kurve (Bogen)](#attribute-omniflo-kurve-bogen)
|
||||||
|
- [Attribute Omniflo Weiche](#attribute-omniflo-weiche)
|
||||||
|
- [CSV-Export-Felder (Merkmale)](#csv-export-felder-merkmale)
|
||||||
- [Schalter](#schalter-2)
|
- [Schalter](#schalter-2)
|
||||||
- [--number SIVASNR / -n SIVASNR](#--number-sivasnr---n-sivasnr)
|
- [--number SIVASNR / -n SIVASNR](#--number-sivasnr---n-sivasnr)
|
||||||
- [--dry-run / -d](#--dry-run---d)
|
- [--dry-run / -d](#--dry-run---d)
|
||||||
@@ -276,7 +279,12 @@ Nur die angegebene 9-stellige Sivasnr verarbeiten. Kombinierbar mit jedem Schalt
|
|||||||
|
|
||||||
# set_attributs
|
# set_attributs
|
||||||
|
|
||||||
Fuegt Attribute (ATTDEF) zu allen Omniflo DXF-Dateien hinzu. Die Attribut-Tags und deren Werte werden ueber eine Konfigurationsdatei gesteuert.
|
Fuegt Attribute (ATTDEF) zu allen Omniflo DXF-Dateien hinzu und verpackt die
|
||||||
|
gesamte Geometrie in eine benannte Blockdefinition. Die Attribut-Tags und deren
|
||||||
|
Werte werden ueber eine Konfigurationsdatei gesteuert.
|
||||||
|
|
||||||
|
**Voraussetzung:** Die Quelldateien in `data/omniflo/` sollten zuvor durch
|
||||||
|
`set_einfuegepkt.py` verarbeitet worden sein, damit `$INSBASE` korrekt gesetzt ist.
|
||||||
|
|
||||||
## Aufruf
|
## Aufruf
|
||||||
|
|
||||||
@@ -291,7 +299,7 @@ python lib/set_attributs.py [--number SIVASNR] [--dry-run]
|
|||||||
| `cfg/attradd.cfg` | Attribut-Konfiguration (Tags und Quellfelder je Elementtyp) |
|
| `cfg/attradd.cfg` | Attribut-Konfiguration (Tags und Quellfelder je Elementtyp) |
|
||||||
| `data/json/omniflo_boegen.json` | Liste aller Boegen mit Metadaten |
|
| `data/json/omniflo_boegen.json` | Liste aller Boegen mit Metadaten |
|
||||||
| `data/json/omniflo_weichen.json` | Liste aller Weichen mit Metadaten |
|
| `data/json/omniflo_weichen.json` | Liste aller Weichen mit Metadaten |
|
||||||
| `data/omniflo/*.dxf` | DXF-Quelldateien |
|
| `data/omniflo/*.dxf` | DXF-Quelldateien (Basis: Ausgabe von `set_einfuegepkt.py`) |
|
||||||
|
|
||||||
## Ablauf
|
## Ablauf
|
||||||
|
|
||||||
@@ -299,7 +307,35 @@ python lib/set_attributs.py [--number SIVASNR] [--dry-run]
|
|||||||
2. JSON-Daten laden und Lookup-Tabelle (Sivasnr -> Typ + Eintrag) erstellen
|
2. JSON-Daten laden und Lookup-Tabelle (Sivasnr -> Typ + Eintrag) erstellen
|
||||||
3. Fuer jede Sivasnr die DXF-Datei oeffnen, bestehende ATTDEFs entfernen
|
3. Fuer jede Sivasnr die DXF-Datei oeffnen, bestehende ATTDEFs entfernen
|
||||||
4. Neue ATTDEFs gemaess Config einfuegen (Layer `ATTRIB`, unterhalb der Geometrie)
|
4. Neue ATTDEFs gemaess Config einfuegen (Layer `ATTRIB`, unterhalb der Geometrie)
|
||||||
5. Ergebnis nach `results/omniflo/` speichern
|
5. Alle Entities (Geometrie + ATTDEFs) in eine Blockdefinition verschieben:
|
||||||
|
- Blockname = Sivasnummer (identisch mit dem Dateinamen ohne `.dxf`)
|
||||||
|
- Basispunkt der Blockdefinition = `$INSBASE` aus dem DXF-Header
|
||||||
|
6. Im Modelspace einen INSERT auf den neuen Block einfuegen, mit ATTRIB-Entities
|
||||||
|
befuellt aus den ATTDEF-Standardwerten (ermoeglicht Attributanzeige per Klick in BricsCAD)
|
||||||
|
7. Ergebnis nach `results/omniflo/` speichern
|
||||||
|
|
||||||
|
## Ausgabestruktur (DXF)
|
||||||
|
|
||||||
|
```
|
||||||
|
BLOCKS
|
||||||
|
BLOCK "<sivasnr>" (Basispunkt = $INSBASE)
|
||||||
|
<Geometrie-Entities>
|
||||||
|
ATTDEF BESCHR = "..."
|
||||||
|
ATTDEF ARTINR = "..."
|
||||||
|
...
|
||||||
|
ENDBLK
|
||||||
|
|
||||||
|
ENTITIES (Modelspace)
|
||||||
|
INSERT "<sivasnr>" at (0, 0)
|
||||||
|
ATTRIB BESCHR = "..."
|
||||||
|
ATTRIB ARTINR = "..."
|
||||||
|
...
|
||||||
|
SEQEND
|
||||||
|
```
|
||||||
|
|
||||||
|
Der INSERT im Modelspace traegt die konkreten Attributwerte und ist in BricsCAD
|
||||||
|
per Klick editierbar. Die Blockdefinition mit ATTDEFs dient als Vorlage fuer
|
||||||
|
den Block-Import via `import_element_as_block` (omniflo_utils.py).
|
||||||
|
|
||||||
## Konfiguration (attradd.cfg)
|
## Konfiguration (attradd.cfg)
|
||||||
|
|
||||||
@@ -319,8 +355,6 @@ Quellwerte koennen sein:
|
|||||||
| `RADIUS` | `Radius` | Kurvenradius in mm |
|
| `RADIUS` | `Radius` | Kurvenradius in mm |
|
||||||
| `WINKEL` | `KurvenWinkel` | Kurvenwinkel in Grad |
|
| `WINKEL` | `KurvenWinkel` | Kurvenwinkel in Grad |
|
||||||
| `SIVASNR_TEF` | `SivasnrTEF` | Sivas-Nr. des TEF-Antriebs (leer = kein Antrieb) |
|
| `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 |
|
| `LAYER` | *(aus [layer])* | Layer-Name gemaess Kategorisierung |
|
||||||
|
|
||||||
### Attribute Omniflo Weiche
|
### Attribute Omniflo Weiche
|
||||||
@@ -334,8 +368,6 @@ Quellwerte koennen sein:
|
|||||||
| `WINKEL` | `KurvenWinkel` | Kurvenwinkel in Grad |
|
| `WINKEL` | `KurvenWinkel` | Kurvenwinkel in Grad |
|
||||||
| `RICHTUNG` | `KurvenRichtung` | Richtungskennung (1=Links, 2=Rechts, 3=Beide, 7=Dreiweg) |
|
| `RICHTUNG` | `KurvenRichtung` | Richtungskennung (1=Links, 2=Rechts, 3=Beide, 7=Dreiweg) |
|
||||||
| `SIVASNR_TEF` | `SivasnrTEF` | Sivas-Nr. des TEF-Antriebs (leer = kein Antrieb) |
|
| `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 |
|
| `LAYER` | *(aus [layer])* | Layer-Name gemaess Kategorisierung |
|
||||||
|
|
||||||
### CSV-Export-Felder (Merkmale)
|
### CSV-Export-Felder (Merkmale)
|
||||||
@@ -365,6 +397,14 @@ CSV-Format: `Elementnummer;TeileArt;TeileId;Bezeichnung;Anzahl;Merkmale`
|
|||||||
| `Antrieb Kurve` | `SivasnrTEF` != null | bool |
|
| `Antrieb Kurve` | `SivasnrTEF` != null | bool |
|
||||||
| `SivasNummer` | JSON `Sivasnr` | string |
|
| `SivasNummer` | JSON `Sivasnr` | string |
|
||||||
|
|
||||||
|
|
||||||
|
Höhe und Drehung werden beim Export selbst aus den Blockinformationen entnommen und dann ins json geschrieben.
|
||||||
|
|
||||||
|
| ATTDEF-Tag | Quelle | Beschreibung |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `HOEHE` | `"2000"` | Montagehoehe in mm (wird beim Export aus Z-Koordinate aktualisiert) |
|
||||||
|
| `DREHUNG` | `"0"` | Drehwinkel in Grad (wird beim Export aus CAD-Rotation aktualisiert) |
|
||||||
|
|
||||||
## Schalter
|
## Schalter
|
||||||
|
|
||||||
### --number SIVASNR / -n SIVASNR
|
### --number SIVASNR / -n SIVASNR
|
||||||
|
|||||||
+34
-5
@@ -1,11 +1,37 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""
|
"""
|
||||||
set_attributs.py - Fuegt Attribute (ATTDEF) zu allen Omniflo DXF-Dateien hinzu.
|
set_attributs.py - Fuegt Attribute (ATTDEF) zu Omniflo DXF-Dateien hinzu
|
||||||
|
und verpackt die Geometrie in eine benannte Blockdefinition.
|
||||||
|
|
||||||
Liest die Attribut-Konfiguration aus cfg/attradd.cfg und die Element-Daten
|
Vorgehen pro DXF-Datei:
|
||||||
aus data/json/omniflo_boegen.json und omniflo_weichen.json.
|
1. DXF-Quelldatei lesen (Basis: Ausgabe von set_einfuegepkt.py, damit
|
||||||
Die ergaenzten DXF-Dateien werden in results/omniflo/ gespeichert.
|
$INSBASE bereits gesetzt ist).
|
||||||
|
2. Vorhandene ATTDEF-Entities aus dem Modelspace entfernen (Re-Run-sicher).
|
||||||
|
3. Neue ATTDEFs gemaess cfg/attradd.cfg und JSON-Daten einfuegen.
|
||||||
|
Attributwerte werden aus omniflo_boegen.json / omniflo_weichen.json
|
||||||
|
aufgeloest; der Layer-Name kommt aus dem [layer]-Abschnitt der Config.
|
||||||
|
4. Alle Entities (Geometrie + ATTDEFs) in eine Blockdefinition verschieben.
|
||||||
|
Der Blockname entspricht der Sivasnummer (= Dateiname ohne .dxf).
|
||||||
|
Als Basispunkt der Blockdefinition wird $INSBASE aus dem DXF-Header
|
||||||
|
verwendet (gesetzt von set_einfuegepkt.py).
|
||||||
|
5. Im Modelspace einen INSERT auf den neuen Block einfuegen, mit
|
||||||
|
ATTRIB-Entities befuellt aus den ATTDEF-Standardwerten. Dadurch zeigt
|
||||||
|
BricsCAD beim Klick auf den Block alle Attributwerte an.
|
||||||
|
6. Ergebnis in results/omniflo/<sivasnr>.dxf speichern.
|
||||||
|
|
||||||
|
Voraussetzung:
|
||||||
|
Die Quelldateien in data/omniflo/ sollten bereits durch set_einfuegepkt.py
|
||||||
|
verarbeitet worden sein, damit $INSBASE korrekt gesetzt ist.
|
||||||
|
|
||||||
|
Eingaben:
|
||||||
|
cfg/attradd.cfg - Attribut-Konfiguration
|
||||||
|
data/json/omniflo_boegen.json - Bogendaten (Masse, Sivasnr, ...)
|
||||||
|
data/json/omniflo_weichen.json - Weichendaten
|
||||||
|
data/omniflo/<sivasnr>.dxf - Quell-DXF-Dateien
|
||||||
|
|
||||||
|
Ausgabe:
|
||||||
|
results/omniflo/<sivasnr>.dxf - DXF mit Blockdefinition + INSERT
|
||||||
|
|
||||||
Umgebungsvariablen:
|
Umgebungsvariablen:
|
||||||
DXFM_DATA - Pfad zum data/-Verzeichnis
|
DXFM_DATA - Pfad zum data/-Verzeichnis
|
||||||
@@ -169,11 +195,14 @@ def wrap_entities_in_block(doc, block_name):
|
|||||||
"""
|
"""
|
||||||
msp = doc.modelspace()
|
msp = doc.modelspace()
|
||||||
|
|
||||||
|
# Einfuegepunkt aus DXF-Header lesen (gesetzt von set_einfuegepkt.py)
|
||||||
|
base_point = doc.header.get("$INSBASE", (0, 0, 0))
|
||||||
|
|
||||||
# Vorhandene Blockdefinition entfernen
|
# Vorhandene Blockdefinition entfernen
|
||||||
if block_name in doc.blocks:
|
if block_name in doc.blocks:
|
||||||
doc.blocks.delete_block(block_name, safe=False)
|
doc.blocks.delete_block(block_name, safe=False)
|
||||||
|
|
||||||
blk = doc.blocks.new(block_name)
|
blk = doc.blocks.new(block_name, base_point=base_point)
|
||||||
|
|
||||||
for entity in list(msp):
|
for entity in list(msp):
|
||||||
msp.move_to_layout(entity, blk)
|
msp.move_to_layout(entity, blk)
|
||||||
|
|||||||
Reference in New Issue
Block a user