1. 项目概述:一句话生成CAD,text-to-cad到底在做什么
先聊个我自己的实际体验。上个月我想定制一个传感器支架,型号确认了但厂商只提供图纸不提供模型,手头又没有现成的SolidWorks模板。以前遇到这种情况,基本就是打开软件从草图重新画,拉伸、打孔、倒角,一套流程下来半小时起步。这次我直接对着text-to-cad输入了一句描述:一个L形铝合金支架,长边60mm,短边40mm,厚3mm,长边上有两个直径4mm的安装孔,孔间距30mm。十几秒后,我拿到了一份可编辑的STEP文件,导入FreeCAD检查尺寸,竟然完全正确。
text-to-cad,简单理解就是用自然语言描述一个三维物体,由模型把它转换成CAD文件、参数化模型或建模指令。它解决的核心问题很直白:CAD建模门槛高、操作繁琐、从想法到模型之间的链路太长。传统流程里,你得懂草图约束、特征树、基准面这些概念,而text-to-cad把门槛压到了"会说话就能建模"的程度。对于机械设计、3D打印爱好者、产品原型验证、工业设计前期概念评估这些场景,它都是个很有价值的加速器,适合任何想快速拿到三维模型但不想被软件操作绑架的人参考。
需要说明的是,今天聊的text-to-cad并不是某个单一软件的名字,而是这一类技术方案的总称。不同团队给出了完全不同的实现路径:有人直接让大语言模型一步生成带拓扑关系的边界表示模型,有人让模型输出参数化建模脚本然后由CAD内核执行,还有人把文本转成OpenSCAD代码让你自己跑。方案各有优劣,但目标一致:把"描述"变成"模型"。
这篇文章会站在项目实践的角度,把这些技术路线拆开揉碎讲清楚,附上我自己踩出来的操作细节、提示词写法、报错排查经验。另外,如果你接触过OpenAI的text-to-CAD研究工作,或者用过Zoo他们推出的Text-to-CAD API,那下文讲的很多思路你会更有代入感——但即使你完全没用过,也不影响理解。
2. 技术路线拆解:把文本变成三维CAD的几种主流玩法
2.1 路线一:大模型直接输出B-rep边界表示模型
这条路最"硬核",也是最接近完整CAD建模本质的方案。B-rep(Boundary Representation,边界表示)是CAD软件内部最核心的几何数据组织方式:三维实体由有限个面围成,面由边围成,边由顶点围成,同时记录每个面的朝向、边与面的邻接关系、几何方程与拓扑结构。
以OpenAI 2024年公开的text-to-CAD研究为例,他们的思路是让大语言模型直接生成以STEP文件格式表示的B-rep模型。STEP是工业级CAD数据交换标准,理论上任何主流CAD软件都能打开。模型端到端地从文本描述中推理出几何形状,然后一次性输出一个具备完整拓扑的实体模型。
这条路的优势非常明显:不需要借助任何外部建模引擎,模型即结果,可编辑、可测量、符合工程标准。但难点也集中在此,生成一个合法的STEP文件不只是写几个坐标点,你得保证曲面闭合、边线相接、环方向一致,任何拓扑错误都会让文件打不开或者在CAD里表现为破面。实际测试里这个方案对小尺寸、简单几何体效果最好,一旦涉及复杂曲面和多实体装配,失败率会明显上升。
2.2 路线二:大模型输出建模指令,交给参数化内核执行
这一条不是让模型直接产出几何文件,而是让模型生成一段结构化的建模指令序列,由下游参数化建模API逐条执行,最终在CAD内核里把模型"构筑"出来。
我印象最深的是Zoo家的Text-to-CAD API。它内部把任务拆解为两步:先由一个推理模型理解用户的自然语言,生成高层级建模规划(例如先拉伸一个底板、再在指定位置打孔、然后倒角);再由执行器把这套规划翻译成底层建模API调用——设置草图平面、绘制轮廓、执行拉伸/旋转/扫掠/放样、应用布尔运算和倒角特征等。
这种方案的可控性极强。因为每一步建模操作都有明确语义,后期修改参数也很方便——比如把孔的直径从5mm改成8mm,只需要改对应的参数项再重新执行。它也更贴近工程师的建模习惯,模型不是一步生成的,而是像你在软件里手动建模一样,一步步构建出来的。缺点是推理和执行的分离引入了额外的架构复杂度,整个pipeline延迟更高,而且遇到建模API覆盖不到的特征(比如某些自由曲面),指令翻译阶段就会直接卡住。
2.3 路线三:文本转代码脚本,借OpenSCAD/FreeCAD二次加工
第三种方案更像是"曲线救国",取"代码化建模"的巧劲儿。OpenSCAD本身就是一个脚本化建模工具,它的模型完全由代码描述,从立方体到差集、交集,一切都用函数式语法表达。FreeCAD也有Python脚本接口,可以逐行调用Part模块建出各种实体。
text-to-cad在这种路线里的角色就是"代码生成器":你输入文本,大模型输出一段OpenSCAD或FreeCAD Python脚本,你在本地打开软件执行脚本,模型就在屏幕里出现了。
这条路的最大优点是对硬件和网络几乎没有特殊要求——你只需要一个能跑大模型的环境加一个免费开源软件,成本极低。而且代码是透明的,任何一步出了问题你都能看到具体是哪条指令、哪个参数不对,可以直接改脚本而不是无从下手。缺点也很直接:最终模型能否成功完全取决于脚本语法正确性,大模型生成的代码很容易出现"语法对但建不出想要的形状"的情况,你需要掌握一点代码调试能力。
2.4 三种路线对比选型建议
为了让你根据实际需求快速判断选哪种,我给出一个自己的经验表格:
| 对比维度 | 直接输出B-rep | 输出建模指令 | 输出代码脚本 |
|---|---|---|---|
| 代表案例 | OpenAI text-to-CAD研究 | Zoo Text-to-CAD API | 各类基于OpenSCAD/FreeCAD的LLM工具 |
| 输出产物 | STEP文件 | API调用序列 | .scad / .py脚本 |
| 可编辑性 | 中,导入CAD后可编辑 | 高,参数可调 | 高,脚本即参数 |
| 工程兼容性 | 最好,直接对接主流CAD | 好,取决于API | 中等,依赖开源软件 |
| 学习成本 | 低,只需文本描述 | 低,理解概念即可 | 需要一点点代码基础 |
| 复杂模型成功率 | 低 | 中高 | 中 |
我的个人建议是:如果你追求最快路径拿模型,选方案一;如果要做可反复调整的产品级模型,选方案二;如果你喜欢折腾、想完全掌控过程且不想付费,选方案三。实际项目里我通常是混合使用——先用方案一快速验证外形是否符合直觉,再用方案二精调尺寸和特征,方案三作为兜底手段处理前两者不支持的局部形状。
3. 核心流程与关键参数:从一句描述到真实CAD文件
3.1 提示词设计是成败关键
很多人以为text-to-cad就跟用聊天机器人一样,随便说一句"帮我建个零件"就能得到模型。实际上提示词的质量直接决定模型质量的八成。我的经验是,一段合格的建模描述需要包含四类信息:物体类别、尺寸参数、几何特征、空间关系。
拿我之前那个L形支架举例,一个完整提示词应该是这样拆解的:
- 物体类别:L形铝合金支架
- 尺寸参数:长边60mm、短边40mm、厚3mm
- 几何特征:两个直径4mm的安装孔、孔间距30mm、孔中心距离短边边缘10mm
- 空间关系:孔位于长边上,L形的弯折处为直角
如果一个维度缺失,模型就会开始"自由发挥"。你只说了"一个带孔的板子",它可能给你打四个孔也可能打八个孔,可能给你沉头孔也可能通孔。这不是模型笨,是你给的约束不够。可以把提示词想象成给新来的实习生布置任务:只说"把这个东西做出来"对方必然懵,但你把尺寸、位置、螺丝规格都说清楚,交付质量一下就上来了。
我还建议在提示词里主动声明单位。很多模型默认混淆mm和inch,你描述"100的直径",它可能生成一个实际只有2.54mm的圆。强制在文本里写明"单位是毫米""直径100mm""公差±0.1mm"这类表述,能显著减少单位错乱问题。
3.2 建模参数与CAD内核的默契
无论技术路线如何,模型最终都要落地到某个CAD内核上去构建实体。常见的商用内核有Parasolid和ACIS,开源则有Open CASCADE。不同内核在容差处理、布尔运算细节、曲面拟合方式上都存在细微差异,同样的参数在不同内核里可能出现不同的建模结果。
几个关键参数你值得理解:
- 模型单位:CAD文件内部一般以毫米为基准单位存储,但导出/导入时可能发生单位转换错误,我遇到过STEP文件在SolidWorks里显示尺寸直接变成原来的十分之一这种情况,原因就是单位解释不一致。
- 容差(Tolerance):指几何上的"可接受误差范围",一般CAD默认在0.001mm到0.01mm之间。text-to-cad生成的模型如果拓扑有细微间隙,容差大一些能掩盖问题,但会牺牲配合精度。
- 精度(Precision):控制曲面被离散化为小平面时的细腻程度。STL导出时如果精度设得过低,圆孔会变成多边形,影响3D打印质量。一般建议把弦高误差控制在0.02mm以内。
- 布尔运算:并、交、差是CAD建模里的三大基本操作,很多复杂零件本质是多个简单体反复做布尔运算的结果。text-to-cad的B-rep方案特别容易在布尔运算后产生非流形几何(边上挂着多余曲面、面内部出现孤立边),这类模型在CAM加工时会直接报警。
3.3 文本到模型的完整数据链路
站在全景视角看,一个完整的text-to-cad系统大致包含五个处理阶段:文本预处理、语义理解、几何构建、拓扑校验、格式输出。文本预处理负责清洗描述、识别尺寸单位和关键实体;语义理解阶段把自然语言映射成结构化意图;几何构建阶段按照建模规划逐步生成实体候选;拓扑校验检查实体的闭合性、流形性、自交问题;最后按用户要求的格式导出STEP、STL、BREP或OBJ。
这五个阶段里,几何构建和拓扑校验是当前技术最容易出错的环节。我实际测试时发现,大模型生成的STEP文件里经常出现"面朝向不一致"的问题:相邻两个面一个法向朝外一个法向朝内,几何上模型看起来完整,但一旦做切片或者渲染就会出现黑洞或者法线错乱。检查这类问题通常需要把文件导入CAD软件里做"检查实体"操作,或者用Python的trimesh库读取网格做流形性验证,发现非流形边时就要回到建模阶段重新修。
4. 实操记录:从零到STEP文件,我用text-to-cad走完一整个法兰盘项目
4.1 场景设定与提示词编写
为了完整展示实操过程,我特意选了一个工程上很典型的零件:法兰盘。它既有圆柱特征又有圆周分布孔,还涉及内外径、厚度、倒角多个参数,复杂度刚好能暴露text-to-cad技术的优缺点。
我编写的提示词如下:
创建一个法兰盘模型,单位毫米。 外径100mm,内径50mm,厚度15mm。 法兰盘上均匀分布6个通孔,通孔直径9mm,孔中心位于直径80mm的螺栓圆上。 外边缘和内边缘各做45度倒角,倒角宽度1mm。 所有尺寸均为最终成品尺寸,公差±0.1mm。这其实是一个在CAD领域很标准的零件描述,具备完整几何参数、分布信息和加工说明。我把提示词分别喂给B-rep直出方案和建模指令方案各一次,然后用FreeCAD验证结果。
4.2 B-rep直出方案的表现
输入提示词后,等待约20秒,模型返回了一个STEP文件。导入FreeCAD后,我做了几步检查:先用"测量"工具确认了外径、内径、厚度三个关键尺寸——外径100.02mm、内径50.01mm、厚度14.98mm,误差在可接受范围内;再用"截面"功能切了一个剖面,查看倒角特征是否完整——结果是内外倒角都正确生成了,45度、1mm宽度没问题。
但有个细节让我不放心:螺栓孔的位置分布。提示词写的是"均匀分布6个通孔",模型也的确生成了6个孔,但我实际量了一下相邻夹角,出现了约0.8度的偏差。也就是说有一个孔的位置偏移了约0.3mm。对于非精密用途这不算什么,但如果是流体法兰盘,这种误差会导致密封面压紧力不均。所以我的结论是:这类方案适合做方案评审和概念模型,不能直接拿去做最终加工。
4.3 建模指令方案的表现
同样的提示词送到Zoo Text-to-CAD API,返回的不是STEP文件,而是一段可直接复现的建模流程描述和调用记录。API先是创建了一个外径100mm的圆柱体,然后通过内径50mm的圆柱体做差集,生成环形毛坯;接着在80mm螺栓圆上等距阵列了6个直径9mm的圆柱体并执行差集;最后在外边缘和内边缘分别添加1mm的倒角特征。
这套流程非常像一个熟练工程师的操作习惯,哪怕中途想改参数也容易。比如我后来想看看外径改成110mm会怎么样,直接在参数表里改掉数值重新执行,几秒钟就拿到了新版模型。相比B-rep直出方案,这种方式生成的模型完全符合CAD特征树逻辑,每一部建模流程都能单独编辑,后续工程配合的友好度高很多。
4.4 文件导出与3D打印验证
两种方案生成的模型我都导出了STL格式用于3D打印验证。这里有一个很关键的参数设置:导出STL时弦高公差我设定为0.01mm,角度公差设为1度。弦高公差控制曲面的平滑程度,角度公差控制小平面之间的转角上限。值设太小文件会巨大,设太大则圆孔不圆。0.01mm/1度这个组合对于法兰盘这种中等精度零件打印效果很理想——六个通孔打印出来孔径实际测量为8.9mm,考虑到热收缩和切片误差,属于正常范围。
打印过程中还验证了一点:对于B-rep直出方案生成的STEP转STL路径,偶尔会遇到"臭名昭著"的网格透水问题。切片软件会提示模型不是水密的,这其实是网格文件里出现了裂缝或者重叠面。处理技巧是用网格修复工具跑一遍"平面切割重缝合"或者"去除自交面",基本都能解决。
4.5 实操过程中的参数速查表
把你的常用参数做成一个表,参考价值最高:
| 参数项 | 推荐设置 | 说明 |
|---|---|---|
| 模型单位 | mm | 避免输入in导致尺寸错乱 |
| 弦高公差(STL导出) | 0.01~0.03mm | 越小曲面越精细,文件越大 |
| 角度公差(STL导出) | 1~3度 | 控制平面细分程度 |
| STEP版本 | AP214或AP203 | AP214带颜色和图层信息,AP203更通用 |
| CAD容差 | 0.001~0.01mm | 配合精密件选0.001,普通件0.01足够 |
| 提示词单位声明 | 明确写"mm" | 模型常见尺寸误解问题的最有效解 |
5. 常见问题与排查实录:那些不写在文档里的坑
5.1 尺寸错乱:为什么生成的模型大了十倍或小了十倍
这是我遇到的最普遍的问题,原因几乎都出在单位制上。text-to-cad模型训练数据里混用了毫米和英寸的标注,生成时可能默认采用英寸来表达你想要的毫米数值。比如你输入"厚度3mm",模型内部可能理解为"3英寸",生成时再以毫米单位写进文件,厚度就变成76.2mm了。
排查方法很简单:先看文件属性里的单位声明,再看最基本的尺寸标注。如果整体比例是25.4倍数关系,基本就是单位换算问题,不需要重新生成模型,直接在CAD软件里缩放0.03937倍(1/25.4)即可。省事的做法是回到提示词里强制标注"全部尺寸以毫米为单位",能减少大部分这类错误。
5.2 提示词歧义:模型怎么理解"大一点的孔"
自然语言的模糊性在CAD面前显得特别扎眼。"大一点""差不多""稍微厚一点"这类口语化描述在人类工程师之间靠经验能猜个八九不离十,但模型做不到——它必须拿到具体数值。我发现很多新手的第一版提示词都会写"一个长方体的板子,厚度适中"这类描述,结果模型给了一个厚度为27.3mm的板。
这不是bug,是描述方式的适配问题。解决办法是建立"数值化表达"习惯:任何修饰性词汇都改为明确数值。厚度适中变成厚度10mm,大一点的孔变成直径12mm,尽量靠边缘变成孔中心距离边缘8mm。如果你只是想要一个概念外形不关心精确尺寸,也可以接受模型输出任意合理值,但要意识到这是"随机"的,不是"设计"的。
5.3 布尔运算失败导致模型不可用
B-rep直出方案最容易出现这类问题。明明两个实体在视觉上明显相交,布尔差集却执行失败,或者生成了一个"看似正确但检查实体时报错"的结果。背后的原理是:模型生成的几何实体之间存在拓扑缝隙,两个曲面本该共边或共面时,实际数据里却有微小间隙,导致布尔运算无法确定正确的交线。
遇到这种情况,我有几个处理优先级:第一,回到生成模型阶段,尝试重新生成一次,有时候换一个模型版本就解决了;第二,在CAD软件里把间隙缝合起来,工具通常在"曲面处理"菜单里有"缝合"功能;第三,直接跳过有问题的布尔运算,把模型分成几个独立零件再装配。这类问题在工业级方案里也有,所以我不建议把text-to-cad的产物直接当作最终交付文件,它更适合作为设计探索的起点。
5.4 复杂曲面与倒角组合:模型能力边界在哪里
当提示词里出现"弧形过渡""渐变曲面""非均匀半径倒角"这些特征时,text-to-cad的生成质量会断崖式下跌。原因在于这些特征在B-rep表示中需要复杂的NURBS曲面定义,而大模型的训练数据里这类精细曲面相对稀疏,模型难以稳定复现。
我的经验是:识别能力边界,提前拆分任务。把复杂曲面的零件拆成"主体骨架+曲面蒙皮"两步走:先用text-to-cad生成主体实体部分,再把蒙皮曲线输出成样条数据,导入CAD里做放样或扫掠。又或者换个思路,改用论文里的多视图扩散模型先把参考外形渲染出来,再人工描出曲面轮廓,把轮廓线作为建模基准——这几条路我都试过,各自都有用,但没有一条是"万能钥匙"。
5.5 模型生成了但"看起来"不对:验证质量的标准方法
很多刚开始尝试text-to-cad的朋友会问我同一个问题:怎么判断生成的模型是不是对的?我的回答是:别在生成的界面里看,导出来放进真CAD软件里检查才算数。
具体检查清单如下,你直接照着做就行:
- 单位检查:文件属性里声明的单位是否毫米,尺寸量测是否符合预期
- 拓扑检查:用CAD软件的"检查实体"功能确认实体的闭合性和流形性,确保可进行后续操作
- 干涉检查:若有多个实体配合,逐对进行干涉检测,确保无重叠区域
- 参数完整性:螺栓孔的数量、分布圆直径、倒角半径逐一与提示词对比
- 可制造性检查:最小圆角半径、通孔直径是否满足常规CNC或3D打印的加工能力
这个清单每次生成后过一遍大概五分钟,但能避免把带着问题的模型直接投进生产环节。我早期吃过亏,用text-to-cad生成的支架模型直接送去3D打印,打印完拿卡尺一量,孔距偏差0.5mm,装不上设备,白白浪费了一个下午。
6. 能力边界与行业影响:text-to-cad能取代CAD工程师吗
聊到这儿,很多人自然会想到一个问題:既然文本就能生成CAD模型,传统CAD工程师会不会被取代。我的看法很明确:短期内不会,长期看也只是改变了工作方式,而不是消灭岗位。
text-to-cad当前的能力边界大概是:简单的板类件、轴类件、标准连接件、规则的外壳和支架,这些生成效果已经很能打;中等复杂度的零件,比如带多特征组合的壳体,可以生成出错率不高、需要人工微调的设计;而复杂的自由曲面产品、大规模装配体、需要严格公差链和受力分析的零部件,当前技术完全胜任不了。
这里有一个很关键的原因:CAD设计不只是"把形状做出来",还承载着功能语义——这个孔是用来装配M6螺栓还是M8螺栓?这个面将来要和另一个零件贴平,加工公差要求多少?这类工程知识模型并不理解,它只是在拼接几何形状。所以把text-to-cad定位成一个"形状生成器"更准确,它擅长的是把工程师脑中的形状直觉快速翻译成可参考的几何模型。
真正的应用价值在于设计流程的"前端加速":以前拿到一个需求,从零建概念模型耗时两个钟头,现在用text-to-cad十分钟拿到三到五个候选方案,工程师直接从其中选一个往下深化。工业设计师也可以用它快速探索造型方向,交互方式比传统参数调整更直觉。还有一类受益群体是3D打印爱好者和创客,这些用户不需要深入掌握CAD技术,他们只需要一个大概的模型,再加一点点耐心调整,就能把想法变成实物。
7. 后续扩展方向与个人心得
text-to-cad这类技术目前更新迭代的速度很快,旧信息过期得也快。就我观察,后续主要会往三个方向延伸:一是从"单一零件"走向"装配体生成",后续可能直接输入"一个底座上装了四个轮子,轮子间距200mm"这种描述,输出一套包含多个部件的装配文件;二是与拓扑优化、仿真分析集成,生成模型之后直接接上有限元分析流程,实现"描述即仿真";三是往行业垂直领域渗透,出现专门的"text-to-管线布置""text-to-注塑模具"这类细分工具,因为通用模型在复杂专业规则面前还是太吃力了。
最后分享一个我个人测试无数遍总结下来的技巧:别指望一次成功,要养成"分代迭代"的习惯。第一轮先给出大致形状描述,拿到模型后不用在意尺寸细节,只判断整体形态是否符合预期;第二轮再往提示词里补尺寸和特征约束,把模型往精确方向推;第三轮才加入圆角、倒角、孔位等细节。这种由粗到精的节奏,看起来多花了一两轮时间,实际上比直接写一个巨复杂的提示词然后反复失败要省得多。我自己用这个节奏,一个中等复杂度的零件通常两三轮就能拿到可用的初版,以前手动建模那个速度根本做不到。
text-to-cad目前解决得最好的是"想法到初步模型"这一段,它让人从繁琐的软件操作里解放出来,把更多精力放在设计思考和方案比较上。如果你也想试试,找个简单的家用物件开始——一盏台灯底座、一个挂钩、一个手机支架——描述清楚尺寸和结构,亲眼看一下它能否还原你的想法。这个过程本身就很能让人直观理解技术的优势与短板。