set_attributes.py baut jetzt einen Block der bei Klick alle seine Attribute anzeigt.

This commit is contained in:
2026-06-12 17:57:48 +02:00
parent b9a33def8b
commit 2ceea62262
+34 -5
View File
@@ -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/<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:
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)