
根据仓库里的代码CAD Python 没有使用 sklearn 等通用聚类库如 KMeans、DBSCAN而是采用一套基于几何距离的自定义线段聚类再叠加包围盒与下游业务处理。1. 核心聚类算法cluster_lines实现位置AutoCAD 主线my_python/ptools/cad_server/dal_cluster_obb.pyDXF 处理线my_python/ptools/ezdxf_server/seg_part2dxf.py、seg_part2dxf_name_by_text.py脚本版my_python/ptools/ezdxf_server/seg_part.py内联同类逻辑算法本质可概括为带距离阈值的区域生长Region Growing AABB 合并。def cluster_lines(lines, distance_threshold50.0): 对线段进行聚类基于您之前成功的算法 ... while remaining_lines: seed remaining_lines.pop(0) current_cluster [seed] ... while True: # 扩展边界 expanded_min_x min_x - distance_threshold ... # 寻找在扩展边界内的线段 for line in list(remaining_lines): for point in line: if (expanded_min_x point[0] expanded_max_x and expanded_min_y point[1] expanded_max_y): in_cluster True break ... # 检查是否有其他聚落被当前聚落完全包含如果有则合并 for cluster in clusters: if (min_x cluster.min_x and min_y cluster.min_y and max_x cluster.max_x and max_y cluster.max_y): current_cluster.extend(cluster.lines) ... return clusters步骤简述步骤做法种子从未处理线段中取一条作为种子生长将当前簇 AABB 四向扩展distance_threshold凡任一端点落入扩展框的线段并入簇迭代更新 AABB 后重复扩展直到无法再吸收合并若新簇 AABB完全包含已有簇则合并线段与经典聚类的对应关系类似连通分量 / 洪水填充但连通判据是「端点落在扩展矩形内」不是严格的端点重合。distance_threshold控制「间隙多大仍算同一零件/图块」。不是基于特征向量的 KMeans / 层次聚类 / DBSCAN。两版实现的细微差别dal_cluster_obb.py只做「新簇包含旧簇」的合并。ezdxf版额外支持「新簇被旧簇包含」时并入旧簇双向 AABB 包含合并。2. 聚类前的几何预处理get_lines_from_entities()把 AutoCAD 实体转为线段再聚类AcDbLine→ 直接线段AcDbCircle→ 圆周采样 80 点 → 折线段AcDbArc→ 弧上采样 40 点 → 折线段圆/弧被离散成线段后才能用同一套cluster_lines逻辑。3. 聚类后的应用不是聚类算法本身模块文件聚类之后做什么OBB 标注dal_cluster_obb.pyget_points_from_cluster→get_oriented_bounding_box_approx→ 在obb_clusters图层画旋转包围盒分簇打印 PDFcombined_cluster_print.pycluster_lines(..., 2000.0)→ 按 X 排序 → 每簇窗口打印为cluster_N.pdfDXF 拆分导出seg_part2dxf.py等每簇导出独立 DXF并算 OBB/AABB仅 OBB不聚类OBB_box.py、obb_and_rotate.py对选中对象算 OBB/AABB不做cluster_lines典型阈值dal_cluster_obb.py主流程distance_threshold200.0combined_cluster_print.py2000.0大图/多零件间距更大ezdxf5图纸单位更小4. 相关辅助逻辑非聚类get_cluster_x_position按簇最小 X 排序打印顺序。get_cluster_boundaries从簇内点算打印窗口边界。OBBPCA 旋转搜索近似最小面积有向包围盒numpy属于簇内几何分析不是聚类方法。5. 总结本仓库 CAD Python 的「聚类」可以概括为唯一实际使用的聚类方法cluster_lines— 基于distance_threshold的2D 空间邻近线段聚类区域生长 AABB 合并。未使用KMeans、DBSCAN、层次聚类、谱聚类等sklearn仅出现在yolo_skill与 CAD 无关。主要应用场景零件/图块分离 → OBB 标注、按簇导出 DXF、按簇打印 PDF。若要调效果关键参数就是各脚本里的distance_threshold过小会碎成很多簇过大则不同零件被并在一起。需要的话我可以按你的图纸尺度帮你估一版推荐阈值范围。