text-to-cad这个词,第一次看到的人很容易觉得它又是一个“AI生成图片”的变种,但真正跑一遍流程就会发现完全不是一回事。它要解决的问题很直接:把一段自然语言描述,变成带工程语义的CAD模型。你输入“外径40毫米、内径22毫米、厚度6毫米的圆环,外圆上有四个直径4毫米的均布通孔”,它返回的不是一张好看的渲染图,而是一个能下载STEP文件、打开特征树、修改尺寸、拿去仿真或进入加工流程的几何体。过去画这种零件,熟练建模师怎么也得十分钟起步,现在几十秒就能拿到候选结果。我觉得它最适合三类人:想做快速结构方案对比的机械工程师、做3D打印和手板的创客玩家,以及想在自家产品里嵌入“文本建模”能力的AI应用开发者。这篇内容我尽量把原理、工具选型、两条实操路径和避坑经验一起聊透。
1. 先讲清楚text-to-cad是什么,为什么这两年突然热起来
1.1 从一句描述到可编辑模型,到底省掉了哪几步
传统CAD建模的链路大家都很熟:先看需求,然后在脑海里把文字变成几何,再打开软件画草图,拉伸、旋转、打孔、倒角,最后标注尺寸、检查干涉。真正耗时间的不是鼠标点那几下,而是“把语言翻译成几何操作”这个过程。你脑子里得同时装着尺寸、约束、特征顺序、加工余量,一个环节想错,后面全得推翻。
text-to-cad做的事情,就是把翻译成本从人身上卸到模型身上。它先用语言模型理解语义,再用几何生成模块把语义变成候选实体,最后输出带参数特征或至少是干净封闭曲面的结果。人不再从零开始画,而是从候选模型里挑一个最接近的,然后做参数修正。我实际用了之后最大的感受是:它没有让我丢掉建模能力,而是把起点提前了。原来面对一个空白草图,思路是从无到有;现在面对的是AI给的多个方案,思路变成“哪个更接近需求、哪些特征要改”。
我自己第一次用的时候没抱太大期望,想着给它一个法兰盘的描述,能出个轮廓就算成功。结果它真的给我生成了一个带孔位阵列的实体,我量了一下关键尺寸,虽然有偏差,但整体比例是对的。那种感觉很像当年第一次用参数化软件时的冲击:不是工具变聪明了,是工作流被重写了。
1.2 三类典型用户和五个高价值场景
机械工程师是最直接的用户群。设计前期做结构方案对比时,经常要同时出好几版支架、底座、外壳来讨论。过去出一版就要几小时,现在把“L形支架,带四个安装孔,板厚3mm”敲进去,等几十秒就有候选模型,方案对比的时间成本被压得很低。我自己更常用的是把生成结果当成沟通工具:跟供应商或者跨部门同事对齐需求时,用一张快速生成的三维图比一段文字描述直观得多。
创客和3D打印玩家也绕不开它。很多人做FDM打印时,缺的不是打印能力,而是建模能力。一个入门的Arduino外壳、一个传感器支架、一个相机转接件,用传统CAD学起来有门槛,但用自然语言描述反而不难。输入“一个能固定20x20铝型材的相机支架”,模型给出底稿,导进切片软件就能打。
程序员和AI应用开发者是第三类。他们不直接画图,但想把“文本到模型”能力接进自己的产品里。这类人更关心API、输出格式、二次开发接口,而不是自己手动建模。所以后面的实操部分,我会同时给公网工具的用法和本地代码方案,照顾两类不同需求。
1.3 和AI生图是两码事,别用同一个思路去评价
AI生图的评价标准是“看起来像”,哪怕手指数错了,只要风格对就能接受。CAD生成完全不同,任何一个破面、一条不闭合的边、一个布尔运算失败,都会让模型直接变成废品。给你一句生动的类比:让AI画一辆自行车很容易,画面里轮子是圆的就行;但要生成一辆能骑的自行车,轮圈必须闭合、辐条必须连上、链条必须啮合,几何上不能有任何裂缝。CAD里没有一个叫“大约”的选项,只有“是”和“不是”。
这也是很多第一次接触的人容易踩坑的地方。他们在提示词里写“看起来科技感”“工业风”,模型确实会给你一堆装饰性特征,但那些东西对装配和加工没有任何意义。text-to-cad能处理的是明确几何语义,不是美学语义。理解了这一点,后面的提示词写法才聊得下去。
2. 技术路线全景:从文本到CAD不止一条路
2.1 路线一:端到端生成式,一切交给模型
端到端方案的思想很直白:文本进来,经过编码器变成向量,再通过生成网络直接输出三维形状。早期研究多集中在分类模型和文本引导的网格生成上,后来扩散模型火了,Point-E和Shap-E这类项目把整个流程做成“文本→点云/网格”,让普通人一句话也能生成三维资产。这类方案在通用物体上效果可观,但用在CAD上有一个绕不开的问题:输出大多是网格或点云,不是带参数特征的实体。
要让它适合CAD场景,就得用CAD数据集重新训练或微调。公开的ABC数据集、Fusion 360 Gallery这类带参数特征的模型集就是干这个的。模型学会的不只是“猫长什么样”,而是“法兰盘的孔位规律”“支架的厚度比例”。微调之后的模型能生成更接近真实机械零件的形状,但依然很难保证输出件能直接进加工。它适合的思路是“草案生成”,先把形态和大致比例定下来,后续再去正式CAD软件里重构参数。
而且这类模型最麻烦的一点是幻觉。它会把文本里的尺寸数字当成大概参考,而不是严格约束。你说直径40mm,它可能给你一个38.4mm的圆。从研究角度不算错,因为指标是语义对齐度;但从工程角度这不能接受。所以端到端方案的定位要摆正:它是灵感生成器,不是误差为零的投产工具。
2.2 路线二:代码翻译式,让大模型先写建模脚本
还有一条非常务实的路:不让模型直接输出几何,而是让模型写建模代码。OpenSCAD、CadQuery、FreeCAD的Python API都是目标。大模型对代码的生成能力远比对三维隐式场的控制能力强,而且代码天然具备可编辑性。
举个例子,你要一个法兰盘,它可以给你一段OpenSCAD代码,里面有外径、内径、孔数的变量。你拿到代码后改参数,模型自动更新,这比在GUI里一步步点还快。这条路线的优势是参数化、可追溯,每个特征都有明确逻辑,不像端到端模型那样是黑箱;劣势在于复杂几何会让代码的布尔运算出错,尤其是曲面和倒角较多的时候,生成的代码往往要人工改几轮才能编译通过。
我自己现在更偏向后一种路线来做日常零件。它没有云端排队,不依赖公网服务,完全本地可控。代价是你要会一点代码读写,至少得能读懂OpenSCAD里的差集和循环。但对工程师或者有一定编程底子的玩家来说,这个门槛比想象中低很多。
2.3 当前主流工具横向对比
| 工具/方案 | 输入 | 输出 | 亮点 | 适合场景 |
|---|---|---|---|---|
| Text-to-CAD(Zoo.dev) | 自然语言 | STEP/网格 | 浏览器即开即用,输出工业格式 | 快速方案草案、结构沟通 |
| OpenAI Point-E / Shap-E | 自然语言 | 点云/网格 | 通用物体生成,研究活跃 | 概念视觉化、通用3D资产生成 |
| CadQuery + LLM | 自然语言→Python代码 | STEP | 真参数化、可复用 | 程序化建模、零件族设计 |
| OpenSCAD + LLM | 自然语言→脚本 | STL/STEP | 本地离线、零依赖 | 桌面端创客、快速验证 |
| 通用3D生成平台 | 文本/图片 | 网格 | 视觉质量高 | 游戏CG资产,不建议直接用于CAD |
选型时先问自己一句:拿到模型之后是要看,还是要用?如果只是看个大概形态,端到端工具足够。如果要进CAM、做仿真、跟其他标准件配合,那就必须保证输出格式是STEP或可编辑的代码脚本。
2.4 为什么CAD方向比通用3D生成难这么多
通用3D生成可以容忍不完美,CAD不能。第一,CAD要求拓扑正确。网格模型可能有几千个三角形,但它们必须组成一个封闭流形,不能有洞、不能有自交面,否则后续实体化必然失败。第二,CAD要求可制造性。壁厚不能低于打印极限,孔位必须配合公差,脱模需要考虑拔模角,这些约束普通生成模型很难从语义中自动推导。第三,CAD要求参数可编辑。一个没有特征树的网格,对机械设计师来说等于一张不能改的图片。
最后还有一个现实问题:数据。自然图像数据集有上亿张,但带参数特征和标注的高质量CAD模型数据集远远没有那么多。工业界的模型又涉及版权和保密,很难像开源图片那样自由流通。所以单纯比“训练数据规模”,CAD方向天然吃亏。这也是为什么它比隔壁AI生图成熟得慢。
3. 实操一:用公网Text-to-CAD工具,从零生成一个法兰盘
3.1 完整流程跑一遍
先用最简单的路径感受一下,浏览器打开Text-to-CAD的官方页面,用账号登录后就能在网页里输入提示词。第一次用的建议直接输入一个最熟悉的零件,比如“一个外径80mm、内径40mm、厚度10mm的环形法兰盘,有四个直径为8mm的均布螺栓孔”。生成需要排队等待,时间从几十秒到几分钟不等,取决于服务器负载。
生成结果出来后会显示在预览窗口里,你可以拖拽旋转、缩放检查。这里有两个选项要注意:一是下载格式,尽可能选STEP,不要选STL;二是单位,确保输出单位和你自己的软件一致,默认是公制毫米,但有的工具会提供英寸选项,搞错了后期非常痛苦。下载完STEP文件后,建议先用FreeCAD或者任意一款你习惯的CAD软件打开,检查特征树和基本尺寸。
第一次跑通时的感觉是:它真的输出了一组孔,而且孔的位置是按圆周均布排列的,不是随便乱放。这个结果已经能当沟通草案用。但请一定管理好预期,这个工具更适合“快速形成候选方案”,而不是“一键给你加工级模型”。如果对尺寸精度有要求,走后面的代码路线更稳。
3.2 提示词工程的关键:别写感觉,写结构
用公网工具能不能出好东西,提示词起八成作用。我自己总结了五个要素,按优先级排列:基本形体、关键尺寸、孔位阵列、边角处理、装配约束。
基本形体要写在前面,比如“圆环”“L形支架”“矩形外壳”,让模型先定大框架。尺寸要带单位、带明确数字,不能只写“大一点的孔”,要写“直径8mm的孔”。孔位和阵列关系要描述准确,“四个均布螺栓孔”和“四个位于四角的安装孔”说的是完全不同的结构。边角处理可以写“外缘倒角1mm”“底边圆角R2”,如果不需要就干脆不提。装配约束要尽量写清配合对象,比如“通孔,用于安装M6螺栓”,模型会据此调整孔的尺寸。
我试过的最差提示词是“设计一个好看的花瓶支架,要现代感强一点”。生成结果是一堆艺术性曲面,好看,但没法用。改成“一个矩形底座,长120mm、宽80mm、高10mm,四角各有一个直径5mm的沉头通孔,中心有一个直径30mm的圆形安装台”之后,得到的结果才是能落地的支架。记住一条铁律:把美学词换成几何词,把修饰语换成数字和结构关系。
3.3 拿到模型之后的快速合法性检查
从云端拿到模型不要立刻去打印或加工,先花三分钟做合法性检查。第一,用标注工具量一遍关键尺寸,确认直径、板厚、孔距跟提示词一致,偏差超过5%就要考虑重新生成。第二,看特征树或层级结构,判断这些孔是真正的特征还是表面凹陷,后者在后续编辑时会非常麻烦。第三,检查单位,确认导入你本地软件后是毫米而不是英寸。
提示:如果发现总体方向没问题但局部不对,不要反复修改同一段提示词期待它自己变对。更有效的方式是把描述拆开:先把基本形体重生成一版,确认形状正确后再分步添加孔位和倒角。一次生成完全正确的概率不高,但“先生成底稿,再逐步细化”的成功率会高很多。
4. 实操二:用LLM生成OpenSCAD代码,走一条完全可控的轻量路线
4.1 为什么我更推荐本地代码方案
如果你要把模型真正用起来,公网工具往往不够用,因为它生成的结果是一个黑箱,尺寸有偏差你只能重跑。本地方案则完全不一样:模型输出的是源代码,每个尺寸都是变量,每处错误都能精确定位修改。我是从第二次尝试就直接转向代码方案的,原因很现实:工作量没有增加,可控性却大幅提升。
OpenSCAD是免费的参数化建模工具,用纯脚本描述几何体。它不需要图形界面拖拽,运行后实时渲染,一键导出STL或STEP。更关键的是,当代大模型对OpenSCAD代码的生成能力相当强,因为它的语法简单、库函数稳定、网上示例代码很多。你只需要给模型一段清晰的描述,它就能生成一段可编译的脚本。这个方案完全离线,不依赖公网服务,也没有排队和配额限制。
4.2 一个完整的法兰盘示例
用之前那个法兰盘需求为例,给LLM的提示词可以这样写:
“用OpenSCAD写一个法兰盘:外径D=40mm,内孔直径d=22mm,厚度t=6mm。六个螺栓孔,半径r=3.5mm,均布在节圆直径bcd=30mm上。所有圆用$fn=96保证平滑。”
模型会给出一段类似下面的代码:
module flange(D=40, d=22, t=6, n=6, bcd=30, bolt_r=3.5, $fn=96) { difference() { cylinder(h=t, r=D/2); // 中心孔,多给0.01mm避免共面问题 translate([0, 0, -0.01]) cylinder(h=t+0.02, r=d/2); // 螺栓孔均布 for (i=[0:n-1]) { angle = i * 360 / n; translate([bcd/2*cos(angle), bcd/2*sin(angle), -0.01]) cylinder(h=t+0.02, r=bolt_r); } } } flange();把这串代码复制进OpenSCAD编辑器,按F5预览,F6渲染,再导出STL或通过插件转STEP,一个参数化法兰盘就生成了。需要注意的是代码里那些“0.01mm”“0.02mm”的偏移量不是随手写的,而是为了在差集运算时避免两个圆柱共面导致布尔运算失败。这是CG建模里非常常见的一个细节,新手如果不加,经常会出现渲染时看不到孔、或导出后模型有碎面的问题。
4.3 把代码方案升级成参数化零件族
代码方案真正的威力在于,它输出的不是“一个零件”,而是一个“零件族”。你只要改模块函数里的一个参数,整个模型就会自动跟着变。比如把孔数从6改成8,整圈孔位自动重新均布;把外径从40改成60,壁厚比例如果保持不变,你甚至可以用变量联动,比如 t=0.15*D 这样定义。
我通常会让LLM按照“可复用模板”的方式输出:每个关键尺寸都定义成模块变量,每个特征都在模块内部用注释标明用途。这样下次遇到类似零件,我不需要重新描述,复制旧脚本改几个参数就行。批量生成零件族时这种效率优势更加明显:比如要设计五个不同孔数的法兰盘,直接脚本循环导出,比在GUI里手工复制改尺寸快一个量级。
CadQuery是另一个可以关注的库。它是Python原生接口,比OpenSCAD更接近工业CAD的“草图+拉伸+打孔”逻辑,输出STEP文件也更标准。如果你本来就熟悉Python,直接让LLM生成CadQuery代码,可能比OpenSCAD更顺手。但入门门槛稍高,OpenSCAD胜在简单,适合先把流程跑通。
5. 从AI生成到真正能用的零件,后处理一步都逃不掉
5.1 先分清网格和实体:STL和STEP是两套东西
不管哪条路线生成的结果,先检查输出格式。STL/OBJ这类网格格式,本质是三角面片拼成的“外壳”,里面是空的。它适合3D打印和渲染,因为打印本来就是一层层堆积外壳;但到了CNC加工、有限元仿真、装配干涉检查的环节,网格会带来大量麻烦,因为数据里没有任何实体拓扑信息,每个面都是孤立的三角形。
STEP/IGES这类模型格式,里面是关于几何实体的描述,有面、边、顶点的拓扑关系,还可能在导入软件后带特征历史。所以AI工具如果能直接输出STEP,优先选STEP。如果拿到的只有网格,也不要硬着头皮往下走,先用FreeCAD的“Part工作台 → 转换为实体”功能做一次实体化尝试。有些复杂的网格无法自动转换,这时最快的方法反而是照着网格在CAD软件里重新描一遍,把关键尺寸抄过去。看着有点繁琐,但往往比重建拓扑更可控。
5.2 3D打印场景的修复清单
打印场景的检查顺序可以固定下来。第一查壁厚,FDM打印通常最小壁厚不能低于1mm,薄了切片会直接忽略或打印出来就断。第二查流形性,网格必须封闭且边数正确,切片器如果报“模型不闭合”“法线反转”,大概率是布尔运算残留问题。第三查细节,孔道如果太小,0.4mm喷嘴就会打穿,必要时生成时就把孔径放大到适配打印的公差。
我用OpenSCAD方案时几乎不会遇到网格问题,因为代码生成的模型天然封闭。但用公网工具生成的STL,就经常出现底部缺一块或者孔洞被填充的情况。遇到这种事别慌,用Meshlab打开,重新计算法线、删掉内部坏面、运行表面修复,大部分情况能救回来。终极方案还是回到代码流程:能参数化生成的东西,就用参数化方法重新生成,别在网格修复上耗太多时间。
5.3 机加工场景的修复清单
如果目标零件需要进CNC或走后续装配,检查清单更严格。第一批要查的是公差:AI生成的孔可能只是示意,实际尺寸要配合标准钻头或铰刀的精度,所以加工图上必须按标准公差表重新标注。第二批是拔模角和倒角:铸造或注塑件需要拔模角,机加工件需要倒角去毛刺,这些特征AI很难自动做对,需要手工在CAD里补。第三批是装配干涉:尤其是有多个零件配合时,一个一个单独生成很容易出现“单个都对,装配打架”的情况。
所以我把AI方案定位成“生成单体零件草案”,做装配时一定要导入装配体环境做干涉检查。检查出干涉不要慌,回到参数函数里调整尺寸,重新生成,循环几轮就能得到可装配的零件。这种迭代思路跟传统手工建模一模一样,只是每次迭代的时间从一小时变成了几分钟。
5.4 我现在的固定工作流
聊一下我日常做法。第一步,输入提示词,一次性生成三到六个候选草案。第二步,挑一个最接近的,进行实体化或直接保留STEP格式。第三步,导入FreeCAD或自己熟悉的CAD软件,按实际需求重标尺寸、补倒角、加公差。第四步,做装配检查,确认配合没问题后再进切片或CAM。整个过程里,AI帮我干掉了“从零开始画草稿”的部分,而尺寸修正、特征补全、装配验证这些关键判断全部由我做。这个分工目前看是效率最高、风险最低的。
6. 常见问题、排查技巧与踩坑实录
6.1 问题速查表
| 现象 | 常见原因 | 解决办法 |
|---|---|---|
| 输出尺寸和描述差很多 | 端到端模型对数字敏感度不足 | 改用代码方案;或在提示词中把尺寸写成变量表达式 |
| 模型有破面、孔洞 | 布尔运算共面冲突、网格拓扑错误 | 加0.01mm偏移补偿;用Meshlab修复;重新生成 |
| 生成的文件打不开 | 格式不兼容或单位错误 | 统一用STEP;确认导入单位是毫米 |
| 模型能看但不能编辑 | 拿到的是网格而非参数特征 | 转实体;或退回代码方案 |
| 提示词描述很丰富但结果很差 | 美学词太多,几何约束太少 | 全部换成数字和结构描述 |
| 生成速度慢、排队久 | 云端负载高 | 本地跑OpenSCAD/CadQuery方案 |
| 多个零件装配干涉严重 | AI不适合直接生装配体 | 一次只生成一个零件,人工装配约束 |
6.2 三个我反复踩过的坑
第一个坑是提示词里带过多风格化修饰。我最初做“电机支架”时写了一句“工业感强、线条流畅”,结果模型给了一堆莫名其妙的异形凹槽,完全没法装电机。从那以后我把所有跟“风格”沾边的词从提示词里剔掉,只留几何和加工约束。
第二个坑是一开始为了省事下载了STL,后面想转STEP花了两小时也没转干净。几个平台之间格式来回转换,原本都没问题的模型硬是被整出破面。现在我的原则很简单:能选STEP绝不选STL,最后需要网格时再从实体转过去,而不是反过来。
第三个坑是试图让AI一次性生成整个装配体。我曾输入“一个带盖子的接线盒,里面有四个安装柱”,结果输出的是一个盒子里塞了四个柱子的抽象雕塑,零件之间全干涉。后来我改变策略:传感器支架就单独生成支架,外壳就单独生成外壳,销钉、螺丝这种标准件自己在CAD库里调。装配关系永远是人来定义,不要让生成模型理解“配合”,它目前理解不了。
6.3 我更看好的扩展方向
如果已经跑通基础流程,可以往三个方向延伸。第一是接入标准件库:自己在OpenSCAD或CadQuery里封装一些常用件模板,比如“M6螺栓通孔”“压铆螺母柱”“导轨固定槽”,提示词直接调用,生成精度和效率都会大幅提升。第二是做插件集成:部分CAD软件已经可以通过插件调用大模型接口,你在SolidWorks或FreeCAD里选中一个面,输入文字就能生成特征底座,这类融合还处于早期,但方向很明确。第三是把生成当成灵感工具而不是终稿工具:方案初期用text-to-cad批量产出候选形态,从中挑出值得细化的方向,再走传统建模流程做工程化。这个用法不炫技,但最稳妥。
最后再说一个个人体会。我不觉得text-to-cad会取代CAD工程师,它更像一个永远不嫌烦的助手,帮你把脑子的结构快速变成屏幕上的底稿。真正的价值在于你能在同样的时间里尝试更多方案,而方案对比的广度会直接影响设计质量。如果刚开始尝试,建议别一上来就折腾复杂装配体,先从法兰、支架、外壳这类单件参数化零件跑通流程。少踩几个坑,比追求一次生成就完美要实在得多。