From e4222d699c9d977da242e587345d685c431533c7 Mon Sep 17 00:00:00 2001
From: Paul Wolok
Date: Fri, 12 Sep 2025 10:40:26 +0200
Subject: [PATCH] Die endBox hat nun ein layer in omniflo system
---
lib/plant2dxf.py | 52 +++++++++++++++++++++++++++++++++++-------------
1 file changed, 38 insertions(+), 14 deletions(-)
diff --git a/lib/plant2dxf.py b/lib/plant2dxf.py
index 4d7c07a..d6a94a5 100644
--- a/lib/plant2dxf.py
+++ b/lib/plant2dxf.py
@@ -92,22 +92,19 @@ def import_block(block_name: str, from_doc, to_doc) -> None:
# 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:
+ used_layer_names = {e.dxf.layer for e in src if hasattr(e.dxf, "layer")}
+ for layer_name in used_layer_names:
+ if layer_name and 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"),
+ color=getattr(src_layer.dxf, "color", None),
+ linetype=getattr(src_layer.dxf, "linetype", None),
+ lineweight=getattr(src_layer.dxf, "lineweight", None),
)
except Exception:
+ # Fallback: Layer mit Standardwerten anlegen
to_doc.layers.add(name=layer_name)
except Exception:
pass
@@ -128,7 +125,7 @@ def import_block(block_name: str, from_doc, to_doc) -> None:
import_block(ent.dxf.name,from_doc, to_doc)
tgt.add_entity(ent.copy())
-
+
def berechne_hoehe(csv_path, logger=None):
y_werte = []
try:
@@ -252,6 +249,7 @@ def draw_kreisel_drehrichtung_markierung(msp, pos1, pos2, merkmale, lib_doc, doc
if drehrichtung == "GUZS":
rotation += 180
import_block("S-LP", lib_doc, doc)
+
bref = msp.add_blockref("S-LP", (px, py), dxfattribs={"rotation": rotation})
if verbose:
print(f"[INFO] Drehrichtung '{drehrichtung}': S-LP oben bei ({px:.1f}, {py:.1f}), rot={rotation:.1f}")
@@ -363,6 +361,33 @@ def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols)
print(f"[WARN] Omniflo-Block '{blockname}' nicht in Bibliothek {lib_doc.filename}. Überspringe {teileid}.")
return
import_block(blockname, lib_doc, doc)
+ src = lib_doc.blocks[blockname]
+ try:
+ used_layer_names = {e.dxf.layer for e in src if hasattr(e.dxf, "layer")}
+ for layer_name in used_layer_names:
+ if layer_name and layer_name not in doc.layers:
+ try:
+ src_layer = lib_doc.layers.get(layer_name)
+ doc.layers.add(
+ name=layer_name,
+ color=getattr(src_layer.dxf, "color", None),
+ linetype=getattr(src_layer.dxf, "linetype", None),
+ lineweight=getattr(src_layer.dxf, "lineweight", None),
+ )
+ except Exception:
+ # Fallback: Layer mit Standardwerten anlegen
+ doc.layers.add(name=layer_name)
+ except Exception:
+ pass
+ layer_counts = {}
+ for e in src:
+ ln = getattr(e.dxf, "layer", None)
+ if not ln:
+ continue
+ if ln != "BOUNDING_BOX":
+ layer_counts[ln] = layer_counts.get(ln, 0) + 1
+ if layer_counts:
+ blockref_layer = max(layer_counts.items(), key=lambda kv: kv[1])[0]
lib_block = lib_doc.blocks.get(blockname)
imported_block = doc.blocks.get(blockname)
if hasattr(lib_block.block.dxf, "base_point"):
@@ -370,9 +395,8 @@ def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols)
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, "layer": imported_block.block.dxf.layer })
+
+ bref = msp.add_blockref(blockname, (x, y), dxfattribs={"xscale": 1.0, "yscale":1.0,"rotation": drehung, "layer": blockref_layer})
bref.add_attrib(
tag= "NAME",