From 4033fcbd5adc5e088e14d8542df5be54027d4e81 Mon Sep 17 00:00:00 2001 From: lertlmaier Date: Wed, 30 Jul 2025 11:31:51 +0200 Subject: [PATCH] Optimierung der Bounding Box-Berechnung in `dxf2lib.py`: Vereinfachung der POLYLINE- und LWPOLYLINE-Logik, um die Berechnung der minimalen und maximalen Koordinaten zu verbessern. Anpassung der Blockerstellung, um die Geometrie korrekt zu verschieben. --- lib/dxf2lib.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/lib/dxf2lib.py b/lib/dxf2lib.py index f72b2c5..61e06b6 100644 --- a/lib/dxf2lib.py +++ b/lib/dxf2lib.py @@ -17,14 +17,16 @@ def get_bbox(entities): max_x, max_y = float('-inf'), float('-inf') for e in entities: try: - # Für POLYLINE-Entities: Bounding Box manuell berechnen if e.dxftype() == "POLYLINE": - if hasattr(e, 'vertices') and len(e.vertices) > 0: - for vertex in e.vertices: - if hasattr(vertex, 'dxf') and hasattr(vertex.dxf, 'location'): - x, y = vertex.dxf.location.x, vertex.dxf.location.y - min_x, min_y = min(min_x, x), min(min_y, y) - max_x, max_y = max(max_x, x), max(max_y, y) + for vertex in e.vertices: + if hasattr(vertex.dxf, 'location'): + x, y = vertex.dxf.location.x, vertex.dxf.location.y + min_x, min_y = min(min_x, x), min(min_y, y) + max_x, max_y = max(max_x, x), max(max_y, y) + elif e.dxftype() == "LWPOLYLINE": + for x, y, *_ in e.get_points("xy"): + min_x, min_y = min(min_x, x), min(min_y, y) + max_x, max_y = max(max_x, x), max(max_y, y) else: # Für andere Entity-Typen: Standard bbox() verwenden box = e.bbox() @@ -35,8 +37,10 @@ def get_bbox(entities): except Exception as err: print(f" BBox Fehler für {e.dxftype()}: {err}") continue + if min_x == float('inf'): return None + return Vec2((min_x + max_x) / 2, (min_y + max_y) / 2) if __name__ == "__main__": @@ -101,11 +105,13 @@ if __name__ == "__main__": if name in doc.blocks: doc.blocks.delete_block(name) - blk = doc.blocks.new(name=name, base_point=center) + blk = doc.blocks.new(name=name, base_point=(0,0)) for e in entities: try: - blk.add_entity(e.copy()) + cp = e.copy() + cp.translate(-center.x, -center.y, 0) # Geometrie verschieben! + blk.add_entity(cp) except Exception as err: print(f"Fehler in {filename}: {err}")