☰
text-to-cad 实战:从自然语言到 STEP/GLB/STL 三维模型
2026/10/8 17:15:37 网站建设 项目流程

1. 从一句话到三维模型:text-to-cad 到底在解决什么问题

第一次听到 text-to-cad 这个词,我的反应是:这不就是把“用嘴画图”这件事往前推了一大步吗。传统 CAD 工作流里,不管是做机械零件、建筑构件还是简单的产品外壳,你都得先打开软件,然后一步步拉伸、旋转、倒角、打孔。一个熟练的工程师画一个法兰盘可能只要五分钟,但一个不会 CAD 的人想改一个尺寸,可能连从哪下手都不知道。text-to-cad 想做的事情,就是让你用自然语言描述你想要的形状,系统直接吐出一个可用的三维模型文件,常见格式包括 STEP、GLB、STL 这几类。

这件事的意义不在于“替代工程师”,而在于把建模的门槛从“会操作软件”降到“能说清楚需求”。我实测下来,它最适合三类人:一是需要快速验证外观的产品经理或独立开发者,二是需要批量生成简单几何体的程序员,三是做 3D 打印但不想学复杂建模的爱好者。你只要说“一个边长 40 毫米、中心有直径 8 毫米通孔的立方体”,它就能给你一个 STEP 文件,你拿去切片或者导入其他软件继续加工都行。

但这里有个关键点必须提前说清楚:text-to-cad 生成的模型质量,高度依赖你描述的精确程度和系统对几何语义的理解能力。它不是魔法,你说“做个好看的杯子”,它给你的东西大概率不能用;你说“外径 60、内径 50、高 80 的圆筒,底部封闭,壁厚均匀”,它才有可能给你一个能直接用的东西。所以这篇内容我会从整体设计思路、核心格式差异、实操流程、常见坑四个层面,把这件事讲透,让你看完就能自己动手跑一遍。

2. 整体设计与思路拆解:为什么是 STEP、GLB、STL 这三种格式

2.1 三种格式各自的定位与选型逻辑

很多人第一次接触 text-to-cad,最困惑的不是怎么生成,而是生成之后该选哪个格式。我一开始也踩过这个坑,随便选了一个 STL 丢进 CAD 软件,结果发现根本没法编辑尺寸。后来才明白,这三种格式对应的是完全不同的使用场景。

STEP是工业界通用的边界表示格式,它记录的是精确的几何曲面信息,包括圆柱面、平面、倒角面这些数学定义。你把它导入 SolidWorks、Fusion 360、中望 CAD 或者 FreeCAD,都能识别出实体特征,甚至可以做后续的布尔运算和参数修改。如果你要做的是机械零件、装配体、需要出工程图的东西,STEP 是首选。它的缺点是文件体积相对大,而且不同软件之间的兼容性偶尔会有小问题,比如某些倒角面在导入后变成碎面。

GLB是面向渲染和展示的格式,它把几何、材质、纹理打包在一起,适合放到网页、游戏引擎或者 AR 场景里。你如果只是想让别人在浏览器里旋转查看你的模型,GLB 是最省事的。但它不适合做精密加工,因为它的几何精度通常会被压缩,而且很多 CAD 软件根本不支持导入 GLB 做编辑。

STL是 3D 打印领域的事实标准,它用三角面片来近似表达模型表面。优点是几乎所有切片软件都认,缺点是它丢失了曲面信息,一个圆柱体在 STL 里就是一堆小三角形。你没法在 STL 上直接改孔径,只能重新生成或者用网格编辑工具硬修。

下面这张表是我自己总结的选型对照,你可以直接抄作业:

格式核心用途是否可编辑精度典型软件
STEP机械设计、工程图可编辑实体精确曲面SolidWorks、Fusion 360、中望 CAD
GLB网页展示、AR、渲染不可编辑中等Blender、Three.js、Unity
STL3D 打印、快速原型仅网格编辑三角近似Cura、PrusaSlicer、MeshLab

注意:如果你拿到的是 STL 但需要转成 STEP,不要指望一键完美转换。STL 转 STEP 本质上是从三角网格重建曲面,市面上有些工具能做,但复杂模型转换后会出现大量碎面,后续编辑非常痛苦。我建议的做法是回到 text-to-cad 重新生成 STEP,而不是硬转。

2.2 从文本到几何:系统内部大概在做什么

虽然不同实现的技术栈差异很大,但一个典型的 text-to-cad 流程大致会经历三个阶段。第一个阶段是语义解析,系统需要从你的自然语言里提取出几何意图,比如“立方体”“圆柱”“通孔”“倒角”“阵列”这些关键词,以及对应的尺寸和位置关系。这一步的难点在于,人类描述几何时经常省略信息,你说“一个带孔的板”,系统得猜孔在哪、多大、几个。

第二个阶段是几何构建,系统根据解析结果生成参数化的几何体。如果是基于规则的系统,它会调用 CAD 内核的 API,比如用 OpenCASCADE 或者 Parasolid 来创建实体。如果是基于学习的系统,它可能会先生成一个隐式表示,再通过 Marching Cubes 之类的算法提取网格,最后拟合曲面输出 STEP。

第三个阶段是格式导出,把内部表示转换成 STEP、GLB 或 STL。这一步看似简单,但实际上不同格式对几何的要求不一样。STEP 要求实体是封闭的、拓扑正确的,GLB 要求法线正确、材质坐标合理,STL 要求三角面片没有自交和缝隙。我遇到过好几次生成出来的模型在预览里看着没问题,导出 STL 之后切片软件报错说“模型不是流形”,就是因为内部几何有微小的裂缝。

2.3 为什么不用传统参数化建模替代

有人可能会问,既然最后还是要描述尺寸和特征,那我直接学 CAD 参数化建模不就行了。这个问题我认真想过,结论是:两者解决的不是同一个问题。参数化建模适合“我需要精确控制每一个特征和约束”的场景,比如设计一个要批量生产的零件,你需要考虑公差、配合、加工工艺。而 text-to-cad 适合“我只需要一个大概形状,快速验证想法”的场景,比如你想看看某个外壳握在手里是什么感觉,或者你需要给一个演示文稿配一个 3D 插图。

另外,text-to-cad 有一个传统建模不具备的优势:批量生成。你可以写一个脚本,循环读取 CSV 里的尺寸数据,批量生成几十个不同规格的模型。这种任务在传统 CAD 里要么手动改参数一个个导出,要么写复杂的宏脚本,门槛都不低。而 text-to-cad 的接口通常更简单,一个 HTTP 请求或者一个 Python 函数调用就能搞定。

3. 核心细节解析与实操要点:描述、生成、验证三步走

3.1 怎么描述才能让系统听懂

描述几何这件事,我总结了一个原则:先定坐标系,再定基本体,最后加特征。很多人一上来就说“一个复杂的支架”,系统根本不知道从哪开始。你应该先说“以原点为中心”,然后说“创建一个 100x60x20 的长方体”,再说“在顶面中心打一个直径 10 的通孔”,最后说“四个角做 R5 的圆角”。这样系统每一步都有明确的几何输入,出错概率会低很多。

尺寸单位也要明确。我见过有人输入“一个 10 厘米的立方体”,结果系统按毫米处理,生成了一个 10 毫米的小方块。保险的做法是统一用毫米,并且在描述里带上单位,比如“边长 100 毫米”。如果你用的是某个具体的 text-to-cad 工具,先看它的文档里默认单位是什么,不要凭感觉。

还有一个技巧是用相对位置而不是绝对坐标。比如“在长方体顶面的中心”比“在坐标 (50, 30, 20) 处”更不容易出错,因为系统自己会计算顶面中心的位置。如果你非要指定绝对坐标,一定要确认你的坐标系和系统的坐标系一致,有些系统 Y 轴朝上,有些 Z 轴朝上,搞反了孔就打在了侧面。

3.2 生成参数里最容易被忽略的几个选项

大部分 text-to-cad 工具都会暴露一些生成参数,比如网格精度、曲面拟合容差、是否合并共面。这些参数看起来不起眼,但对最终模型的质量影响很大。

网格精度决定了 STL 的三角面片密度。精度太高,文件巨大,切片软件打开卡顿;精度太低,圆柱面看起来像多边形,打印出来有明显的棱角。我的经验值是:如果你要 3D 打印一个直径 20 毫米的圆柱,网格精度设置在 0.05 到 0.1 毫米之间比较合适。你可以这样算:圆柱周长约 62.8 毫米,如果精度是 0.1 毫米,大概需要 628 个三角面片来围一圈,视觉上已经足够圆滑了。

曲面拟合容差主要影响 STEP 导出时的曲面质量。容差太大,圆柱面会被拟合成多个小平面;容差太小,文件里会出现大量微小的曲面片,导入 CAD 后容易报错。一般默认值在 0.001 到 0.01 毫米之间,如果你没有特殊需求,不要随便改。

是否合并共面这个选项,我建议开启。它会把相邻的共面三角面片合并成一个大的平面,减少 STL 的文件体积,也让模型看起来更干净。但如果你后续要做网格简化或者有限元分析,可能需要保留原始网格,这时候就要关掉。

3.3 生成后的验证:不要直接丢进切片软件

我踩过最大的坑就是:生成完 STL 直接丢进切片软件,结果打印到一半发现模型中间是空的,或者某个面缺失。后来我养成了一个习惯,生成之后先做三件事。

第一,用 MeshLab 或者 Blender 打开,检查是否有非流形边和自交面。MeshLab 里有一个 “Select Non-Manifold Edges” 的功能,如果选出来有红色的边,说明模型拓扑有问题,需要修复或者重新生成。

第二,检查法线方向。STL 文件里的三角面片是有方向的,如果法线朝内,切片软件会认为那是内部空腔。在 Blender 里按 Shift+N 可以重新计算法线,但最好还是在生成阶段就保证法线正确。

第三,测量关键尺寸。用 Blender 的测量工具或者 MeshLab 的测量功能,确认孔径、壁厚、总长这些关键尺寸和你的描述一致。我遇到过系统把“直径 8”理解成“半径 8”的情况,生成出来的孔大了一倍。

提示:如果你用的是在线 text-to-cad 服务,生成后通常会提供一个预览窗口。不要只看预览就下载,预览的渲染精度往往比实际文件低,有些小缺陷在预览里看不出来。

4. 实操过程与核心环节实现:从零跑通一个带孔法兰盘

4.1 环境准备与工具选型

为了让你能跟着做一遍,我用一个具体的例子来演示:生成一个外径 80 毫米、内径 30 毫米、厚度 10 毫米、带四个直径 6 毫米安装孔的法兰盘。这个模型足够简单,但包含了圆柱、通孔、阵列这几个典型特征。

工具方面,我假设你用的是某个提供 API 的 text-to-cad 服务,本地用 Python 调用。你需要准备的东西不多:一个能跑 Python 的环境,一个 HTTP 请求库,一个用来查看模型的软件。查看软件我推荐 FreeCAD,它免费、跨平台,能直接打开 STEP 和 STL,还能测量尺寸。

如果你不想写代码,很多 text-to-cad 工具也有网页界面,你直接在输入框里描述就行。但网页界面通常不支持批量生成,也不方便把参数记录下来。所以我建议至少把描述文本和生成参数保存到一个文本文件里,方便以后复现。

4.2 描述文本的编写与参数计算

法兰盘的描述我写成这样:

创建一个法兰盘,坐标系原点在底面中心。 外径 80 毫米,内径 30 毫米,厚度 10 毫米。 在顶面沿直径 60 毫米的圆周上均匀分布四个直径 6 毫米的通孔。 所有边缘做 R1 的圆角。 单位:毫米。

这里有几个参数是我算过的。四个安装孔分布在直径 60 毫米的圆周上,意味着每个孔的中心到法兰盘中心的距离是 30 毫米。相邻两个孔之间的角度是 90 度,所以第一个孔在 0 度方向,第二个在 90 度,以此类推。如果你想让孔的位置避开某个区域,可以调整起始角度。

圆角 R1 是经验值。对于厚度 10 毫米的法兰盘,R1 的圆角既能去掉锐边,又不会明显削弱结构。如果你要做承重件,圆角可以适当加大到 R2 或 R3,但不要超过厚度的一半,否则边缘会变得很薄。

4.3 调用生成接口并导出文件

假设服务提供了一个 Python SDK,代码大概长这样:

from text_to_cad import generate description = """ 创建一个法兰盘,坐标系原点在底面中心。 外径 80 毫米,内径 30 毫米,厚度 10 毫米。 在顶面沿直径 60 毫米的圆周上均匀分布四个直径 6 毫米的通孔。 所有边缘做 R1 的圆角。 单位:毫米。 """ result = generate( text=description, output_format="step", mesh_precision=0.05, merge_coplanar=True ) with open("flange.step", "wb") as f: f.write(result.data)

如果你用的服务没有 SDK,只有 REST API,那就用 requests 库发一个 POST 请求,把描述文本和参数放在 JSON body 里。返回的可能是文件流,也可能是下载链接,具体看文档。

生成时间取决于模型复杂度和服务负载,简单模型通常几秒到十几秒。如果超过一分钟还没返回,可能是描述里有歧义导致系统在反复尝试,这时候可以简化描述重新提交。

4.4 导入 FreeCAD 做最终检查

STEP 文件下载下来之后,用 FreeCAD 打开。FreeCAD 会把它识别成一个 Part 对象,你可以用 “Measure” 工具测量外径和内径。我实测下来,外径 80 毫米的圆柱,测量结果通常在 79.98 到 80.02 之间,这是正常的浮点误差。

然后检查四个安装孔的位置。在 FreeCAD 里切换到顶视图,用测量工具量一下相邻两个孔的中心距。按照直径 60 毫米的圆周计算,相邻孔的中心距应该是 30 乘以根号 2,约 42.43 毫米。如果测量结果偏差超过 0.1 毫米,说明阵列参数可能有问题。

最后检查圆角。在 FreeCAD 里选中边缘,看属性栏里的 Fillet 半径是不是 1 毫米。如果圆角没生成或者半径不对,可能是描述里的 “R1” 被系统忽略了,你可以试着改成 “半径 1 毫米的圆角” 再生成一次。

5. 常见问题与排查技巧实录

5.1 生成失败或结果完全不对怎么办

这是最常见的问题,我把它分成几种情况。第一种是描述太模糊,比如 “做一个支架”,系统不知道支架长什么样。解决办法是把描述拆成基本几何体,先做一个长方体,再加特征。第二种是尺寸矛盾,比如 “外径 50、内径 60 的圆筒”,内径比外径还大,系统无法生成。这时候要检查你的描述里有没有逻辑错误。第三种是单位混淆,你说 “10 厘米”,系统按 10 毫米处理。解决办法是统一用毫米,并且在描述末尾加上 “单位:毫米”。

还有一种情况是系统生成了模型,但形状和你想象的完全不一样。这通常是因为自然语言里的空间关系有歧义。比如 “在长方体上面打一个孔”,系统可能理解成在顶面打孔,也可能理解成在侧面打一个贯穿到顶面的孔。我的经验是,用 “顶面”“底面”“侧面”“中心” 这些明确的方位词,避免用 “上面”“旁边” 这种模糊表达。

5.2 导出的 STL 切片报错怎么排查

切片软件报错通常有几种提示:“模型不是流形”“存在自交面”“法线方向不一致”。我整理了一个排查顺序,你可以按这个流程走。

报错类型可能原因排查方法解决方式
非流形边两个面共享一条边但方向不一致MeshLab 选非流形边重新生成或手动缝合
自交面几何体有重叠或穿插Blender 的 3D Print Toolbox调整描述避免重叠特征
法线不一致部分面法线朝内Blender 重算法线生成时开启法线校正
模型为空导出时没有选中实体检查导出设置确认导出范围

我遇到最多的是非流形边,通常发生在两个特征相交的地方,比如孔和圆角同时存在的时候。如果重新生成还是有问题,可以试着先不加圆角,生成一个干净的模型,再在 CAD 软件里手动加圆角。虽然多了一步,但成功率会高很多。

5.3 批量生成时怎么保证一致性

如果你要批量生成几十个模型,最大的挑战不是单个模型的质量,而是一致性。我试过用循环调用接口,结果发现不同批次的模型在圆角处理上略有差异,有的批次圆角大一点,有的小一点。后来我固定了所有生成参数,并且在描述里把每一个尺寸都写死,不再依赖系统的默认值,一致性才稳定下来。

另外,批量生成时建议加一个校验步骤。每生成一个模型,就用脚本检查文件大小和三角面片数量。如果某个模型的面片数量明显偏离平均值,很可能是生成过程中出了问题,需要单独检查。这个技巧帮我省了很多事后返工的时间。

5.4 从 STL 转 STEP 的替代思路

如果你手里只有 STL,但需要 STEP,直接转换的效果通常不好。我的替代思路是:用 STL 作为参考,在 text-to-cad 里重新描述一遍。比如你有一个别人给的 STL 支架,你可以测量它的关键尺寸,然后写一段描述重新生成 STEP。这样得到的 STEP 是干净的参数化实体,比从网格重建的曲面质量高得多。

具体操作是:用 MeshLab 打开 STL,测量总长、总宽、总高、孔径这些关键尺寸,然后在 text-to-cad 里用这些尺寸重新描述。如果形状比较复杂,可以拆成几个基本体分别生成,再在 CAD 软件里装配。虽然多花几分钟,但后续编辑和修改会轻松很多。

6. 我个人的实操心得与后续扩展方向

踩了这么多坑之后,我最大的体会是:text-to-cad 的价值不在于替代 CAD 软件,而在于把 “想法到模型” 的路径缩短了。以前你要么学几个月 CAD,要么找人帮忙画图,现在你只要能把需求说清楚,就能拿到一个可用的模型。这对于快速验证、批量生成、教学演示这些场景来说,效率提升是实实在在的。

如果你已经跑通了基本流程,我建议你试试两个扩展方向。第一个是结合参数化脚本,把常用的模型做成模板,每次只改几个关键尺寸,批量生成不同规格的系列产品。第二个是结合 3D 打印,把生成的 STL 直接切片打印,验证实际手感。我试过用这种方式做了一批定制化的收纳盒,从描述到打印完成只用了不到一个小时,比传统建模快了很多。

最后分享一个小技巧:把你成功的描述文本保存下来,按 “基本体 + 特征 + 尺寸 + 单位” 的格式整理成一个模板库。下次遇到类似的模型,直接改尺寸就行,不用从头想描述。这个习惯让我在批量生成的时候少犯了很多低级错误。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询