Layer farben werden in plant2dxf angenommen (Layer selber nicht), dxf2lib wurde refrectored für die Leserlichkeit
This commit is contained in:
+46
-9
@@ -78,13 +78,51 @@ def parse_merkmale(merkmale_str: str) -> dict:
|
||||
return {}
|
||||
|
||||
def import_block(block_name: str, from_doc, to_doc) -> None:
|
||||
"""Importiert Blockdefinition block_name von from_doc nach to_doc."""
|
||||
"""Importiert Blockdefinition block_name von from_doc nach to_doc.
|
||||
|
||||
- Kopiert alle Entities des Blocks
|
||||
- Stellt sicher, dass benutzte Layer im Ziel existieren (mit Eigenschaften)
|
||||
- Übernimmt Basispunkt und Block-Layer, falls vorhanden
|
||||
"""
|
||||
if block_name in to_doc.blocks:
|
||||
return
|
||||
if block_name not in from_doc.blocks:
|
||||
raise ValueError(f"Block '{block_name}' nicht in Bibliothek gefunden.")
|
||||
src = from_doc.blocks[block_name]
|
||||
|
||||
# Sicherstellen, dass alle verwendeten Layer existieren
|
||||
try:
|
||||
used_layers = set()
|
||||
for ent in src:
|
||||
ln = getattr(getattr(ent, "dxf", object()), "layer", None)
|
||||
if ln:
|
||||
used_layers.add(ln)
|
||||
for layer_name in used_layers:
|
||||
if layer_name not in to_doc.layers:
|
||||
try:
|
||||
src_layer = from_doc.layers.get(layer_name)
|
||||
to_doc.layers.add(
|
||||
name=layer_name,
|
||||
color=getattr(src_layer.dxf, "color"),
|
||||
linetype=getattr(src_layer.dxf, "linetype"),
|
||||
lineweight=getattr(src_layer.dxf, "lineweight"),
|
||||
)
|
||||
except Exception:
|
||||
to_doc.layers.add(name=layer_name)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
tgt = to_doc.blocks.new(name=block_name)
|
||||
# Basispunkt/Layer des Blocks übernehmen, wenn vorhanden
|
||||
try:
|
||||
tgt.block.dxf.base_point = src.block.dxf.base_point
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
tgt.block.dxf.layer = src.block.dxf.layer
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
for ent in src:
|
||||
tgt.add_entity(ent.copy())
|
||||
|
||||
@@ -311,9 +349,6 @@ def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols)
|
||||
print(f"[INFO] Omniflo Gerade → {teileid} Linie von ({start[0]:.1f}, {start[1]:.1f}) nach ({ende[0]:.1f}, {ende[1]:.1f})")
|
||||
return
|
||||
# Sonst wie gehabt: Block mit SivasNummer
|
||||
|
||||
|
||||
|
||||
if not lib_doc:
|
||||
print("[WARN] lib_doc nicht verfügbar, Block wird nicht eingefügt.")
|
||||
return
|
||||
@@ -329,19 +364,21 @@ def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols)
|
||||
imported_block = doc.blocks.get(blockname)
|
||||
if hasattr(lib_block.block.dxf, "base_point"):
|
||||
imported_block.block.dxf.base_point = lib_block.block.dxf.base_point
|
||||
|
||||
if hasattr(lib_block.block.dxf, "layer"):
|
||||
imported_block.block.dxf.layer= lib_block.block.dxf.layer
|
||||
drehung = merkmale.get("Drehung")
|
||||
if drehung not in (0.0, 180.0):
|
||||
drehung = drehung -180
|
||||
bref = msp.add_blockref(blockname, (x, y), dxfattribs={"xscale": 1.0, "yscale":1.0,"rotation": drehung })
|
||||
bref = msp.add_blockref(blockname, (x, y), dxfattribs={"xscale": 1.0, "yscale":1.0,"rotation": drehung, "layer": imported_block.block.dxf.layer })
|
||||
|
||||
bref.add_attrib(
|
||||
tag= "NAME",
|
||||
text= merkmale.get("bezeichner"),
|
||||
insert = (x,y),
|
||||
invisible =True
|
||||
|
||||
)
|
||||
|
||||
|
||||
|
||||
)
|
||||
bref.add_auto_attribs({ATTR_TAG: teileid})
|
||||
if verbose:
|
||||
print(f"[INFO] Block '{blockname}' (Omniflo) → {teileid} ({x:.1f}, {y:.1f})")
|
||||
|
||||
Reference in New Issue
Block a user