diff --git a/lib/set_attributs.py b/lib/set_attributs.py index ba1990d..d51dd2a 100644 --- a/lib/set_attributs.py +++ b/lib/set_attributs.py @@ -1,11 +1,37 @@ #!/usr/bin/env python3 # -*- 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 -aus data/json/omniflo_boegen.json und omniflo_weichen.json. -Die ergaenzten DXF-Dateien werden in results/omniflo/ gespeichert. +Vorgehen pro DXF-Datei: + 1. DXF-Quelldatei lesen (Basis: Ausgabe von set_einfuegepkt.py, damit + $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/.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/.dxf - Quell-DXF-Dateien + +Ausgabe: + results/omniflo/.dxf - DXF mit Blockdefinition + INSERT Umgebungsvariablen: DXFM_DATA - Pfad zum data/-Verzeichnis @@ -169,11 +195,14 @@ def wrap_entities_in_block(doc, block_name): """ 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 if block_name in doc.blocks: 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): msp.move_to_layout(entity, blk)