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}")