当前位置: 首页 > news >正文

我仓库内cad python 有哪些应用到聚类的方法

根据仓库里的代码,CAD Python 没有使用 sklearn 等通用聚类库(如 KMeans、DBSCAN),而是采用一套基于几何距离的自定义线段聚类,再叠加包围盒与下游业务处理。

1. 核心聚类算法:cluster_lines

实现位置:

  • AutoCAD 主线my_python/ptools/cad_server/dal_cluster_obb.py
  • DXF 处理线my_python/ptools/ezdxf_server/seg_part2dxf.pyseg_part2dxf_name_by_text.py
  • 脚本版my_python/ptools/ezdxf_server/seg_part.py(内联同类逻辑)

算法本质可概括为:带距离阈值的区域生长(Region Growing)+ AABB 合并

def cluster_lines(lines, distance_threshold=50.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_clusterget_oriented_bounding_box_approx→ 在obb_clusters图层画旋转包围盒
分簇打印 PDFcombined_cluster_print.pycluster_lines(..., 2000.0)→ 按 X 排序 → 每簇窗口打印为cluster_N.pdf
DXF 拆分导出seg_part2dxf.py每簇导出独立 DXF,并算 OBB/AABB
仅 OBB(不聚类)OBB_box.pyobb_and_rotate.py选中对象算 OBB/AABB,不做cluster_lines

典型阈值:

  • dal_cluster_obb.py主流程:distance_threshold=200.0
  • combined_cluster_print.py2000.0(大图/多零件间距更大)
  • ezdxf:5(图纸单位更小)

4. 相关辅助逻辑(非聚类)

  • get_cluster_x_position:按簇最小 X 排序(打印顺序)。
  • get_cluster_boundaries:从簇内点算打印窗口边界。
  • OBB:PCA + 旋转搜索近似最小面积有向包围盒(numpy),属于簇内几何分析,不是聚类方法。

5. 总结

本仓库 CAD Python 的「聚类」可以概括为:

  1. 唯一实际使用的聚类方法cluster_lines— 基于distance_threshold2D 空间邻近线段聚类(区域生长 + AABB 合并)
  2. 未使用:KMeans、DBSCAN、层次聚类、谱聚类等(sklearn仅出现在yolo_skill,与 CAD 无关)。
  3. 主要应用场景:零件/图块分离 → OBB 标注、按簇导出 DXF、按簇打印 PDF。

若要调效果,关键参数就是各脚本里的distance_threshold:过小会碎成很多簇,过大则不同零件被并在一起。需要的话我可以按你的图纸尺度帮你估一版推荐阈值范围。

http://www.zskr.cn/news/1382993.html

相关文章:

  • taotoken token plan套餐在实际开发中的成本节省感受
  • 拒绝API依赖!为什么“看懂屏幕”才是AI数字员工的终极形态?
  • SQLMap入门笔记:从漏洞原理到自动化数据提取的保姆级教程
  • 一份来自 Karpathy 的 AI 编程 skill
  • Pytest运行方式扫盲:从‘右键运行’到‘命令行高手’的避坑指南(附常见报错解决)
  • 从零开始:Icarus Verilog 开源硬件仿真器完全指南 [特殊字符]
  • 短视频矩阵系统的技术演进:当AI Agent重新定义全域内容运营
  • BiliBiliCCSubtitle深度解析:高效自动化B站字幕下载与转换的专业解决方案
  • 团队协作中如何使用 Taotoken CLI 工具一键统一所有成员的开发环境配置
  • 一些SVG小图标去哪里找
  • 投资者网:2026年GEO服务商五强:领航者的制胜逻辑与实战分析 - 罗兰艺境GEO
  • DyberPet桌面宠物框架:打造属于你的数字伙伴,让桌面互动更有温度
  • 气体涡轮流量计厂家排行榜 - 仪表品牌榜
  • 告别鼠标点击,微博图片批量下载的轻松方案
  • 如何快速将B站缓存视频转为MP4:3步实现永久保存的终极免费工具
  • 泰拉瑞亚地图编辑器终极指南:如何用免费开源工具重塑你的游戏世界
  • Windows服务器风扇狂转的挖矿病毒排查指南
  • 户外热潮来袭——AI赋能冲锋衣设计新潮流
  • 终极解决方案:5步实现WeMod完整功能解锁与远程控制
  • WSL2图形化不止一种玩法:除了VcXsrv,试试这些更轻量的远程桌面方案(含RDP/Wayland)
  • 突破性架构革命:RPFM如何用Rust+Qt6重塑Total War模组开发范式
  • 3种高效玩法:用DRG存档编辑器重塑你的《深岩银河》冒险体验
  • 批量安装Windows系统(WDS + DHCP 独立模式)
  • 靠谱的1688陪跑公司怎么找?立誉企业管理咨询值得信赖 - 品牌企业推荐师(官方)
  • Icarus Verilog:为什么这个开源仿真器成为数字电路验证的首选?
  • 研途灵伴——联调我修了七个 Bug
  • DeepSeek性能基线测试不达标?2024最新《LLM服务端压测白皮书》仅开放72小时下载(含CUDA 12.4适配校验表)
  • GitMemo 安卓版发布了:现在可以随时随地查看和记录自己的笔记
  • 好用还专业!2026年最流行AI论文软件榜单,高质初稿轻松写
  • 别让细节毁了你的论文:从TII投稿要求看IEEE期刊对学术写作的“强迫症”式规范