From 812c39b00da9701d7d1d140690ec1290c63d404d Mon Sep 17 00:00:00 2001 From: lertlmaier Date: Mon, 30 Jun 2025 13:53:55 +0200 Subject: [PATCH] =?UTF-8?q?methodik=20f=C3=BCr=203d=20Polylinine=20implmen?= =?UTF-8?q?tiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/getpositions.py | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/lib/getpositions.py b/lib/getpositions.py index e6e984a..09e83e1 100644 --- a/lib/getpositions.py +++ b/lib/getpositions.py @@ -329,8 +329,8 @@ def get_rack_positions(msp): #print_polyline(e) rack_key = f"Rack_{rack_counter}" ret[rack_key] = list() - for x, y, start_width, end_width, bulge in e.get_points(): # Gibt Tuple (x, y, start_width, end_width, bulge) - p = [round(x,1), round(y,1)] + for x, y, z, start_width, end_width, bulge in e.get_points(): # Gibt Tuple (x, y, start_width, end_width, bulge) + p = [round(x,1), round(y,1), round(z,1)] ret[rack_key].append(p) rack_counter +=1 return ret @@ -343,26 +343,42 @@ def get_rack_positions_iter(dxf_path): all_layers = config.items('GetPos-Layer_Racks') for entity in iterdxf.modelspace(dxf_path): - if entity.dxftype() != "LWPOLYLINE": - continue - layer = entity.dxf.layer if not any(layer == cfg_layer for cfg_layer, _ in all_layers): - continue + continue rack_key = f"Rack_{rack_counter}" - ret[rack_key] = [] - - # Verwende entity.vertices() statt get_points() - for point in entity.vertices(): # (x, y, start_width, end_width, bulge) - x, y, *_ = point # wir interessieren uns nur für x und y - ret[rack_key].append([round(x, 1), round(y, 1)]) + + if entity.dxftype() == "LWPOLYLINE": + handle_lwpolyline(entity, rack_key, ret) + elif entity.dxftype() == "POLYLINE": + handle_polyline(entity, rack_key, ret) + else: + continue rack_counter += 1 return ret +def handle_lwpolyline(entity, rack_key, ret): + """Verarbeitet eine 2D LWPOLYLINE mit globalem Z-Wert (elevation).""" + z = getattr(entity.dxf, "elevation", 0.0) # hole "Erhebung" (gilt für gesamte Polyline!) aus Attributen + + ret[rack_key] = [] + for point in entity.vertices(): # returns (x, y, start_width, end_width, bulge) + x, y, *_ = point + ret[rack_key].append([round(x, 1), round(y, 1), round(z, 1)]) + +def handle_polyline(entity, rack_key, ret): + """Verarbeitet eine klassische POLYLINE – inklusive 3D-Polylinien mit individuellen Z-Werten.""" + ret[rack_key] = [] + for vertex in entity.vertices: + x = vertex.dxf.location.x + y = vertex.dxf.location.y + z = vertex.dxf.location.z + ret[rack_key].append([round(x, 1), round(y, 1), round(z, 1)]) + def scan(dxf_source:ezdxf.document.Drawing): layer_names_inside = dxf_source.layers.entries.keys() alle_block_defs = set(dxf_source.blocks.block_names())