diff --git a/lib/dxf2lib b/lib/dxf2lib index 9f61079..7d8f196 100644 --- a/lib/dxf2lib +++ b/lib/dxf2lib @@ -23,18 +23,31 @@ def get_bbox(entities): max_x, max_y = float('-inf'), float('-inf') for e in entities: try: - box = e.bbox() - if box: - (x1, y1), (x2, y2) = box.extmin, box.extmax - min_x, min_y = min(min_x, x1), min(min_y, y1) - max_x, max_y = max(max_x, x2), max(max_y, y2) - except Exception: + # 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) + else: + # Für andere Entity-Typen: Standard bbox() verwenden + box = e.bbox() + if box: + (x1, y1), (x2, y2) = box.extmin, box.extmax + min_x, min_y = min(min_x, x1), min(min_y, y1) + max_x, max_y = max(max_x, x2), max(max_y, y2) + 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) x_offset = 0 +y_offset = 0 +blocks_in_row = 0 for filename in os.listdir(INPUT_DIR): if not filename.lower().endswith(".dxf"): @@ -47,6 +60,9 @@ for filename in os.listdir(INPUT_DIR): src_doc = ezdxf.readfile(filepath) src_msp = src_doc.modelspace() entities = list(src_msp) + allowed_types = {"LINE", "LWPOLYLINE", "POLYLINE", "SPLINE", "CIRCLE", "ARC"} + filtered_entities = [e for e in entities if e.dxftype() in allowed_types] + entities = filtered_entities except Exception as e: print(f"Fehler beim Lesen von {filename}: {e}") continue @@ -67,9 +83,14 @@ for filename in os.listdir(INPUT_DIR): except Exception as err: print(f"Fehler in {filename}: {err}") - # Optional Vorschau - msp.add_blockref(name, insert=(x_offset, 0)) - x_offset += 200 # Abstand zwischen Blöcken + # Platzierung in Reihen und Spalten + msp.add_blockref(name, insert=(x_offset, y_offset)) + blocks_in_row += 1 + x_offset += 250 # Abstand zwischen Blöcken in einer Reihe + if blocks_in_row == 20: + blocks_in_row = 0 + x_offset = 0 + y_offset -= 500 # Neue Zeile, nach unten versetzt print(f"Bibliotheks-DXF gespeichert: {OUTPUT_FILE}") doc.saveas(OUTPUT_FILE)