点击链接加入群聊【solidworks神经网络自动标注小白群】:https://qm.qq.com/q/ymo3ydyZkQ
训练一个神经网络来识别 SolidWorks 中哪些面之间会出现标注(即预测"智能尺寸"或 DimXpert 的标注逻辑),是一个非常有挑战性但也极具应用价值的任务。这本质上是一个基于3D几何特征和工程语义的图神经网络(GNN)或点云深度学习问题。
目前并没有公开的、直接针对"SolidWorks 标注逻辑"的现成数据集,因为这是 SolidWorks 内部基于规则(Rule-based)和启发式算法(Heuristics)的核心功能(如 DimXpert 和 Smart Dimension)。
要完成这个任务,你需要遵循以下技术路线:
1. 核心难点分析
- 非公开算法:SolidWorks 的自动标注逻辑(DimXpert)是基于 ASME Y14.41 和 ISO 16792 标准的复杂规则系统,并非简单的统计规律。它依赖于特征识别(孔、槽、凸台)、基准参考框架(DRF)和设计意图。
- 数据获取困难:没有公开的"模型-标注对"数据集。你需要自己构建。
- 输入表示 :神经网络无法直接读取
.SLDPRT文件。你需要将 B-Rep(边界表示)数据转换为网络可接受的格式(如点云、体素、或面邻接图)。
2. 数据集构建策略(最关键的一步)
既然没有现成数据,你必须通过自动化脚本从现有模型中生成数据。
- 数据源 :
- GrabCAD 、TraceParts 等网站上有数百万个免费的 SolidWorks 模型。
- 企业内部的历史模型库(包含已标注的工程图或 MBD 模型)。
- 数据采集方法(使用 SolidWorks API) :
- 编写 C# 或 Python (pywin32) 脚本,批量打开模型。
- 提取几何信息:遍历所有面(Face),记录其类型(平面、圆柱面、圆锥面等)、法向量、面积、相邻边、拓扑连接关系。
- 提取标注信息(Ground Truth) :
- 利用
IDimXpertFeature接口读取现有的 DimXpert 尺寸。 - 或者读取工程图中的尺寸(
IDimension),反向追踪其引用的面(GetEntities)。
- 利用
- 构建样本对 :对于每一个存在的尺寸,记录
(Face_A, Face_B, Dimension_Type)作为正样本。 - 负采样:随机选择未标注的面组合作为负样本(需注意类别平衡)。
3. 模型输入表示 (Representation Learning)
你需要将 CAD 模型转换为张量。推荐以下几种方式:
- 方案 A:面邻接图 (Face Adjacency Graph, FAG) + 图神经网络 (GNN) ------ 最推荐
- 节点 (Node):每个面是一个节点。特征包括:面类型 (One-hot)、面积、曲率、法向量 (x,y,z)、是否被选为基准等。
- 边 (Edge):如果两个面共享一条边或存在几何关系(平行、垂直、同轴),则连边。边特征包括:夹角、距离、边的凸/凹性。
- 任务:链接预测 (Link Prediction)。预测哪两个节点之间应该有一条"尺寸边"。
- 方案 B:点云 (PointNet++ / DGCNN)
- 将模型表面采样为点云,每个点附带法向量和曲率。
- 缺点:丢失了精确的拓扑连接信息,对于判断"同轴度"或"对称面"较难。
- 方案 C:体素网格 (Voxel Grid) + 3D CNN
- 将模型体素化。
- 缺点:分辨率受限,计算量大,难以捕捉微小的倒角或孔特征。
4. 网络架构建议
- 骨干网络 :使用 Graph Neural Networks (GNN) ,如 GraphSAGE, GAT (Graph Attention Network), 或专门针对 CAD 设计的 UV-Net (基于 B-Rep 的神经网络)。
- 参考论文: "UV-Net: Learning from Boundary Representations" (CVPR 2021),它可以直接处理 B-Rep 数据,非常适合此类任务。
- 输出层 :
- 二分类头:判断 Face iii 和 Face jjj 之间是否有尺寸。
- 多分类头:如果有尺寸,是什么类型(线性距离、角度、直径、半径等)。
5. 替代方案:模仿学习 (Imitation Learning) vs 规则逆向
如果你的目标仅仅是"复现"SolidWorks 的功能,而不是发现新的标注逻辑,纯深度学习可能不是最高效的。
- 路径 1:逆向工程规则(专家系统)
- SolidWorks 的逻辑很大程度上是确定性的。例如:"两个平行的圆柱面 -> 标注距离","一个圆柱面 -> 标注直径"。
- 你可以尝试通过大量数据分析,提取出这些高频规则树,用决策树或随机森林即可达到很高的准确率,且可解释性强。
- 路径 2:利用 SolidWorks MBD API 直接调用
- 如果你只是想在软件里实现自动标注,直接使用
DimXpertManager的AutoDimensionScheme功能即可,无需训练神经网络。 - 代码思路 :
swDimXpertMgr.AutoDimensionScheme(swDimXpertSelectionEnum.swDimXpertSelAllFeatures, ...)
- 如果你只是想在软件里实现自动标注,直接使用
6. 实施步骤总结
- 环境准备:安装 SolidWorks,配置 C# 或 Python API 开发环境。
- 数据爬取与清洗:下载 1000+ 带有完整标注的零件模型(最好是使用了 DimXpert 的 MBD 模型)。
- 特征提取器开发 :编写脚本导出每个模型的 JSON 数据:
{faces: [...], edges: [...], dimensions: [{face_id_1, face_id_2, type}]}。 - 图构建 :将 JSON 转换为 PyTorch Geometric 的
Data对象。 - 模型训练:搭建 GNN 模型进行链接预测训练。
- 验证:在未见过的模型上测试,对比网络预测的尺寸与 SolidWorks 自动生成的尺寸是否一致。
关键参考文献与资源搜索建议
建议在学术数据库(Google Scholar, IEEE Xplore)搜索以下关键词获取具体网络结构代码:
- "B-Rep deep learning"
- "CAD feature recognition neural network"
- "UV-Net CAD"
- "Engineering drawing dimensioning automation machine learning"
注意 :目前工业界更多是将 AI 用于特征识别 (这是标注的前提),而具体的标注位置选择往往仍结合了硬编码的工程标准规则。建议采用 "AI 识别特征 + 规则引擎生成标注" 的混合架构,成功率会远高于端到端的黑盒神经网络。