From d0d8880dc03201a8cef20b35a839df8156a2c247 Mon Sep 17 00:00:00 2001
From: Paul Wolok
Date: Mon, 8 Dec 2025 05:57:22 +0100
Subject: [PATCH] =?UTF-8?q?ge=C3=A4ndert=20wie=20ich=20den=20vorderen=20bl?=
=?UTF-8?q?ock=20layer=20definiere?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lib/Elemente/Kreisel.py | 10 +++----
lib/plant2dxf.py | 61 +++++++++++------------------------------
2 files changed, 21 insertions(+), 50 deletions(-)
diff --git a/lib/Elemente/Kreisel.py b/lib/Elemente/Kreisel.py
index 7eb23b6..09752fb 100644
--- a/lib/Elemente/Kreisel.py
+++ b/lib/Elemente/Kreisel.py
@@ -3,7 +3,7 @@ from ezdxf.entities import Line
import math
from pydantic import BaseModel, Field, field_validator
from typing import Optional
-from plant2dxf import import_block, get_layer
+import plant2dxf
ATTR_TAG = "TeileId" # Attributtag im Block
@@ -218,8 +218,8 @@ class Kreisel(BaseModel):
rotation = math.degrees(math.atan2(p2_oben[1] - p1_oben[1], p2_oben[0] - p1_oben[0]))
if drehrichtung == "GUZS":
rotation += 180
- import_block("Richtungspfeil", lib_doc, doc)
- blockref_layer = get_layer(doc, lib_doc, "Richtungspfeil")
+ plant2dxf.import_block("Richtungspfeil", lib_doc, doc)
+ blockref_layer, color = plant2dxf.get_insert_color_layer(lib_doc, "Richtungspfeil")
bref = msp.add_blockref("Richtungspfeil", (px, py,z1), dxfattribs={"rotation": rotation,"layer": blockref_layer})
if verbose:
print(f"[INFO] Drehrichtung '{drehrichtung}': Richtungspfeil oben bei ({px:.1f}, {py:.1f}), rot={rotation:.1f}")
@@ -231,8 +231,8 @@ class Kreisel(BaseModel):
rotation = math.degrees(math.atan2(p2_unten[1] - p1_unten[1], p2_unten[0] - p1_unten[0]))
if drehrichtung == "UZS":
rotation += 180
- import_block("Richtungspfeil", lib_doc, doc)
- blockref_layer = get_layer(doc, lib_doc, "Richtungspfeil")
+ plant2dxf.import_block("Richtungspfeil", lib_doc, doc)
+ blockref_layer, color = plant2dxf.get_insert_color_layer( lib_doc, "Richtungspfeil")
bref = msp.add_blockref("Richtungspfeil", (px, py, z1), dxfattribs={"rotation": rotation , "layer": blockref_layer})
if verbose:
print(f"[INFO] Drehrichtung '{drehrichtung}':Richtungspfeil unten bei ({px:.1f}, {py:.1f}), rot={rotation:.1f}")
\ No newline at end of file
diff --git a/lib/plant2dxf.py b/lib/plant2dxf.py
index e834215..4de0253 100644
--- a/lib/plant2dxf.py
+++ b/lib/plant2dxf.py
@@ -238,7 +238,7 @@ def handle_ils_2_0_kreisel(msp, teileid, merkmale, x, y, doc, lib_doc, verbose,
if i < len(positions):
pos = (positions[i][0] + offset[0], positions[i][1] + offset[1], kreisel.hoehe)
import_block(blockname, lib_doc, doc)
- blockref_layer = get_layer(doc, lib_doc, blockname)
+ blockref_layer, color = get_insert_color_layer(lib_doc, blockname)
bref = msp.add_blockref(blockname, pos, dxfattribs={"layer" : blockref_layer})
bref.add_auto_attribs({ATTR_TAG: teileid})
if verbose:
@@ -249,15 +249,6 @@ def handle_ils_2_0_kreisel(msp, teileid, merkmale, x, y, doc, lib_doc, verbose,
Kreisel.Kreisel.draw_kreisel_lines(msp, pos1, pos2, kreisel)
Kreisel.Kreisel.draw_kreisel_drehrichtung_markierung(msp, pos1, pos2, kreisel, lib_doc, doc, verbose)
-def handle_standard(msp, blocknames, teileid, x, y, lib_doc, doc, verbose):
- for blockname in blocknames:
- import_block(blockname, lib_doc, doc)
- blockref_layer = get_layer(doc, lib_doc, blockname)
- bref = msp.add_blockref(blockname, (x, y), dxfattribs={"layer": blockref_layer})
- bref.add_auto_attribs({ATTR_TAG: teileid})
- if verbose:
- print(f"[INFO] Block '{blockname}' (Standard) → {teileid} "
- f"({x:.1f}, {y:.1f})")
def handle_ils_2_0_eckrad(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, strecken_nachbarn,config,config_allgemein):
import_block("AN8",lib_doc,doc)
@@ -322,11 +313,13 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
block_separatoren = "S-LP"
import_block(block_scanner,lib_doc,doc)
import_block(block_separatoren,lib_doc,doc)
+ layer_scan, color_scan = get_insert_color_layer(lib_doc, block_scanner)
+ layer_separatioren, color_separatioren = get_insert_color_layer(lib_doc, block_separatoren)
einsatz_zwischen =[ einsatz_fest[0],einsatz_fest[1],einsatz_fest[2]]
anzahl =0
while anzahl < separatoren:
anzahl = anzahl + 1
- msp.add_blockref(block_separatoren,einsatz_zwischen)
+ msp.add_blockref(block_separatoren,einsatz_zwischen, dxfattribs={"layer": layer_separatioren,"color": color_separatioren})
if anzahl % modular == 0:
einsatz_fest[1] = einsatz_fest[1] - 150
einsatz_zwischen = einsatz_fest.copy()
@@ -339,7 +332,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
anzahl =0
while anzahl < scanner:
anzahl = anzahl + 1
- msp.add_blockref(block_scanner,einsatz_zwischen)
+ msp.add_blockref(block_scanner,einsatz_zwischen,dxfattribs={"layer": layer_scan,"color": color_scan})
if anzahl % modular == 0:
einsatz_fest[1] = einsatz_fest[1] - 150
einsatz_zwischen = einsatz_fest.copy()
@@ -601,7 +594,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
else:
blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}_{unterschiedlich}_{richtung2}_{verbunden_am_einen}"
as_es_methoden.gefaellegerade_erstellung(x, y, doc, lib_doc, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung2,drehung0, drehung1, laenge, hight_position,blockname,config)
- blockref_layer = get_layer(doc, lib_doc, blockname)
+ blockref_layer, color = get_insert_color_layer(lib_doc, blockname)
bref =msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation, "layer": blockref_layer })
a = bref.add_attrib(
@@ -1417,38 +1410,16 @@ def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols,
# Layer, auf dem der Insert liegt
-def get_layer(doc, lib_doc, blockname):
- if blockname in lib_doc.blocks:
- src = lib_doc.blocks[blockname]
- else:
- src = 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]
- return blockref_layer
+def get_insert_color_layer(lib_doc, blockname):
+ msp_lib = lib_doc.modelspace()
+ color = 0
+ layer = 0
+ for insert in msp_lib.query("INSERT"):
+ if insert.dxf.name == blockname:
+ color = insert.dxf.color
+ layer = insert.dxf.layer
+ return layer, color
+
def normalize_func_name(name):
return (