AI 3D建模工具: Tripo 3D | Meshy AI

一句话结论:从 Printables / Thingiverse 下载一个支架 STL,想把其中一个孔放大 2 mm,你会发现没有"孔"可改——STL 只是一堆三角面,CAD 把它读成成千上万个碎面。2026 年 10 月开源的 mesh2cad 专门解决这类简单机械件:它从三角面里找出平面、圆柱、球、圆锥,生成真正的 B-rep STEP;对简单的板类零件,还能输出一份每个尺寸都是命名变量的 CadQuery 脚本——把 hole_1_d = 6.0 改成 8.0,重跑脚本就得到新的 STEP。它还提供一个诚实的失败模式:拟合不出来就什么都不写,并告诉你原因。

披露:本文编译自 mesh2cad 作者 Emir Mrkaljević 的发布文(dev.to,2026-10-16)。作者是工具维护者,基准数据与限制均来自其公开 README 与自测;文中所有数字以其仓库记录为准,建议按自己的零件复测。


一、问题:STL 里没有"孔"

下载的支架、法兰、外壳,通常只有 STL。CAD 打开它,得到的是:

  • 平面被切成很多狭长三角面;
  • 圆孔变成一圈多边形;
  • 圆柱面是几十条窄带;
  • 没有特征树、没有草图、没有可编辑的孔径参数。

于是"把孔放大 2 mm"这件事,在传统流程里只有三条路:

路线 代价 风险
重新建模 几十分钟到几小时 尺寸靠卡尺量,容易引入新误差
扫描反求(专业软件) 软件与学习成本高 对碎面/噪声敏感,仍需人工清理
直接用网格编辑 快 孔不再是圆、装配面不再平,CAM/打印出问题

mesh2cad 走的是第四条:把三角面重新拟合回解析曲面,再缝合成实体。

二、它到底做什么

输入 STL / OBJ / PLY,输出:

  1. B-rep STEP:可以进任意 CAD/CAM;
  2. 参数化 CadQuery 脚本(仅简单板类件):每个尺寸是命名变量,改完重跑即生成新 STEP;
  3. 一份报告:双边 Hausdorff、RMS 偏差、体积误差,以及本次用的是精确 B-rep 还是回退的 faceted solid。

命令行:

pip install mesh2cad
mesh2cad convert part.stl -o part.step --tol 0.1 --report report.md

--tol 0.1 是拟合容差(毫米)。孔径的"取整"也受它约束:

数值只有在取整后仍能落在 --tol 内时才会被取整,5.997 才会变成 6.0。

生成的参数段长这样:

# --- parameters ---
base_x           = 40.0  # base length (X)
base_y           = 30.0  # base width (Y)
base_t           = 6.0   # base thickness (Z)
hole_1_d         = 6.0   # diameter
hole_1_csk_d     = 12.0  # countersink diameter
hole_1_csk_angle = 90.0  # countersink angle

把 hole_1_d 改成 8.0,python bracket.py,得到新 STEP。在脚本写出来之前,mesh2cad 会先运行它,并把结果与输入网格比对;如果零件不符合支持的形状,或脚本结果偏离网格,它什么都不写,并告诉你为什么。 作者的原话是:"我宁愿拒绝,也不愿给你一份看起来对、其实不对的脚本。"

三、五步原理

步骤 做什么 关键点
1. 清理网格 用 trimesh 清理,并保留一份 Taubin 平滑副本只用于法线 噪声不毁掉法线估计
2. 区域生长 把三角面生长成平面区域;剩余条带再尝试圆柱、球、圆锥 每个拟合做稳健非线性精修
3. 构建精确 B-rep 通过 OCP 调 OpenCascade:三平面交得平面多边形、平面-圆柱/球交得圆、圆锥台;缝合为实体并校验 这是"可编辑"的来源
4. 诚实回退 精确缝合失败时,输出有效 faceted solid,顶点吸附到拟合曲面上,并在报告中说明 不假装成功
5. 报告保真度 双边 Hausdorff、RMS 偏差、体积误差、所用方法 让"像不像"变成数字

四、噪声下的基准:0.2 mm 是什么水平

真实扫描与导出的网格都有噪声,所以作者用已知真值的 CadQuery 零件做基准:先离散化,再叠加高斯顶点噪声,每个用例跑 3 个随机种子,取最差的一次。

零件 噪声 σ 精确 B-rep Hausdorff 体积误差
带孔板 0.2 mm 3/3 0.078 mm 0.18%
带筋板 0.2 mm 3/3 0.108 mm 0.12%
球顶 0.2 mm 3/3 0.241 mm 0.25%
带倒角凸台 0.2 mm 3/3 0.511 mm 0.49%
沉头板 0.05 mm 3/3 0.055 mm 0.07%
沉头板 0.2 mm 1/3 0.590 mm 0.54%

两个值得记住的细节:

  1. 窄圆锥最难。 0.2 mm 噪声下,2 mm 倒角或沉头会碎成一圈平面条带,圆锥拟合器根本看不到圆锥。0.4.2 版把这些条带重新聚成一个圆锥,并锁定到相邻孔/凸台的轴线上——带倒角凸台现在在 0.2 mm 噪声、3 个种子上都精确。
  2. 90° 沉头在 0.2 mm 噪声下只有 1/3 种子精确。 另外两个种子得到的是有效的 faceted solid,不是解析曲面。这不是"失败",而是报告会告诉你的降级——能不能接受,取决于你要拿它做什么。

五、四条限制(作者自己列的)

  • 只支持平面、圆柱、球、圆锥。 没有圆角,没有自由曲面——有机模型和大多数手办不在范围内。
  • 圆柱必须在垂直于其轴线的平面上结束(通孔、凸台、销)。
  • CadQuery 脚本路径只覆盖 Z 向上的盒/板 + 凸台、竖直孔、竖直凸台。 其它形状只给 STEP。
  • 沉头在 0.2 mm 噪声下不保证解析精确(见上表)。

这四条决定了它适合什么:支架、法兰、垫块、简单外壳、带孔板件这类"工程件";不适合人物、雕塑、有机曲面。

六、从 AI 助手里调用:MCP

mesh2cad 同时是一个 MCP 服务器,Claude Desktop、Cursor 或任意 MCP 客户端可以调用 convert、analyze、report、to_cadquery:

{ "mcpServers": { "mesh2cad": { "command": "mesh2cad", "args": ["mcp"] } } }

安装:pip install "mesh2cad[mcp]"。

这意味着一个常见工作流可以变成:Agent 拿到 STL → 调 analyze 看拟合可行性 → 调 convert 出 STEP → 调 report 读偏差 → 你只做验收。但要注意:这仍然是几何转换,不是"AI 帮你改设计";改参数、判断装配是否合理,仍然要人。

七、收到 STEP 之后:验收清单

转换工具最容易骗人的地方,是"文件能打开"被当成"转换正确"。建议按下面顺序验收:

检查 怎么做 通过标准
单位与尺寸 在 CAD 里量最大外形、孔距、板厚 与原始 STL 一致(注意 mm/inch)
实体有效性 检查是否为有效实体(无自由边、无自交) B-rep 校验通过
孔是否为真圆 量孔径、看圆柱面 不是多边形近似
关键装配面 检查平面度与法向 与设计意图一致
偏差报告 读 report.md 的 Hausdorff / RMS / 体积误差 在你零件的公差内
降级标记 报告里写的是精确 B-rep 还是 faceted 关键件不接受降级
下游可用性 导出 STEP 进 CAM / 切片 / 装配 无修复警告

在浏览器里快速看一眼:把生成的 STEP 或原始 STL 丢进 CAD 查看器 检查外形与孔位;如果是打印件,再用 3D 查看器 看网格是否有翻面、非流形边。浏览器查看不能替代 CAD 校验,但能在三十秒内发现"孔变成六边形""单位错十倍"这类明显问题。

八、和另外两条路线怎么选

场景 建议
简单工程件,只改几个尺寸 mesh2cad(参数化脚本路线)
复杂曲面/有机形状 重新建模或专业反求软件
只是想打印、不改设计 直接切片,不要转换
要进 CAM、要改装配尺寸 必须拿到有效 B-rep,并做上面的验收

一句话:mesh2cad 把"重画一遍"变成"改几个变量",代价是它只认四类解析曲面,并且会在做不到时明确拒绝。


Sources

同主题阅读

本文属于「CAD / 制造」专题。BimAnt 编译整理,转载请注明出处。转换结果与公差是否可接受,需按你的零件与下游工序自行验收。