ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

从一句话到三维模型:text-to-cad原理与工程实践

从一句话到三维模型:text-to-cad原理与工程实践

我们CAD这行,很早就有个玩笑话:画图一小时,改图一整天,听需求一上午。干了这么多年,我见过太多人把大量精力耗在把嘴巴里的想法翻译成图纸上,而不是真正花在设计和优化上。直到近几年“text-to-cad”这个概念火起来,我第一次看到有人用一段自然语言直接生成一个可用的三维模型时,心里其实挺复杂的——一方面觉得这玩意儿终于来了,另一方面也在想,我们这些老画图匠是不是要被淘汰了。这两年我自己实际用下来,态度逐渐从“警惕”变成了“真香”。text-to-cad,简单说,就是把一句“人话”——比如“做一个外径80的法兰盘,内孔32,厚度10,上面六个均布的M6螺纹孔”——翻译成CAD能听懂、能直接执行并生成模型的指令。它不能替代专业软件,却能极大压缩“从概念到模型”的底稿时间。

这篇文章我想好好聊聊text-to-cad是什么、背后的原理怎么拆、实际怎么跑通一条工作流,以及在真实工程环境里怎么用它才不容易翻车。无论你是在学CAD制图的初学者,还是已经画了十几年图的工程师,只要你需要频繁把想法变成模型、把需求变成图纸,这篇内容都能给你一个相对完整的参考。

1. text-to-cad是谁,它在解决什么核心问题

1.1 传统CAD建模为什么总是很“重”

先说个最朴素的问题:传统CAD建模到底难在哪儿?不是软件难装,也不是快捷键记不住,而是“从无到有”的那一下特别费神。打开软件,你要先想明白用哪个基准面画草图,画完草图要选拉伸还是旋转,拉伸完要决定加不加拔模角、要不要圆角,倒完角可能还有布尔运算要处理。这一步一步的菜单点击和参数输入,本质上都是在跟软件“翻译”你的想法。可问题是,人的脑子里面想的是“一个支架,看起来稳稳的,装四个孔就行”,而软件只认“在XY平面画中心矩形,中心坐标为原点,长宽分别多少,然后向上拉伸多少毫米,再打四个通孔”。这种思考语言的转换,才是真正的学习门槛,也是日常操作中最耗时间的部分。

另一个问题是重复劳动。比如标准件、法兰、支座、钣金折弯件,这些形状你画过几百次,流程全熟,但每次还是要手动建一遍。很多老师傅有自己的一套模板库,但模板只能解决“完全一致”的东西,只要尺寸一变、孔位一变、结构稍作调整,模板就得大改。这时候text-to-cad的价值就体现出来了:它对着你的一句话,能把这个“从想法到图元”的翻译过程自动完成。

1.2 text-to-cad把我们讨厌的翻译工作接走了

text-to-cad本质上是在解决“语义鸿沟”的问题。人类描述物体时用的是功能语言和相对语言(“一个底板,四个角上有孔”),CAD系统需要的却是精确的参数化特征语言(“在原点生成100×80的矩形,在四角生成直径10的通孔,孔心距边距均为10”)。以前的CAD软件把所有翻译责任压在用户身上,而text-to-cad把这一层接了过去,让你直接说人话。

用我自己的话总结,它做的事情有三件:

  • 听懂:理解“外径”“内孔”“均匀分布”“腰部收窄”这类描述性词汇对应的几何含义。
  • 转译:把几何含义转换成一组参数化建模步骤,比如先建什么特征、后建什么特征、怎么组合。
  • 执行:生成可直接打开、可继续编辑的三维模型文件,而不是一张渲染图片。

这个变化带来的直接好处是:你不需要先把整个模型“背下来”,只需要说清楚“要什么”,剩下怎么用软件实现,交给text-to-cad去处理。这点对刚入门的新手特别友好,对有经验的工程师则是效率上的加法。

1.3 谁在真正用text-to-cad干活

我身边用text-to-cad用得最勤的是这三类人。 第一类是机械设计工程师,他们经常要在方案阶段快速出概念模型,供评审、报价、或者给客户看形态。以前画一个异形壳体可能要花一下午,现在用一句话描述关键尺寸和特征,几分钟就能出一个底稿,评审通过后再在专业CAD里精修,效率完全不一样。 第二类是创客和准工程师,包括很多学CAD制图的初学者。他们最头疼的就是“脑子有画面但手跟不上”,text-to-cad能让他们先看到模型,再对照模型反推建模步骤,学习速度反而更快。我见过有个学生用文本先“画出”一个减速器箱体的雏形,然后对照生成代码一步一步理解特征树的逻辑,这个学法比对着视频抄快多了。 第三类是经常要做采购询价、工艺评估的人。他们不需要精密的图纸,但需要快速判断某个结构可不可行、重量大概多少、能不能加工,这时候有个快速出模型的能力很值钱。

2. 核心原理拆解:一句话是怎么变成三维模型的

2.1 中间语言:自然语言先翻译成建模指令

这是text-to-cad最重要的一环。你输入的“一个带六个均布孔的圆形法兰”这类描述,不可能直接变成实体网格,中间必须经过一层“指令化”的转换。行业内现在主流做法是把自然语言先翻译成一段参数化建模脚本,也就是说,text-to-cad的模型输出并不是直接给CAD系统一个“画好的图”,而是给一段“建好模的程序”。

你拿到的脚本,可能是OpenSCAD代码、CadQuery代码,也可能是某个软件自定义的API调用序列。这段代码里会写清楚:先创建一个圆柱体,外径40毫米(对应你说的外径80是直径还是半径,工具会有一个默认约定,这点后面会讲),高度10毫米;再创建一个直径32的圆柱作为切除体;然后做一个圆周阵列的布尔减运算,把六个孔挖出来。这段代码再交给CAD内核去执行,就生成了模型。

所以初学时最容易踩的坑是:把text-to-cad当成“AI直接变出模型”的魔法。它不是魔法,它是一个语义翻译器加代码生成器。理解这层之后,你就能明白为什么它生成的模型可以再次编辑、为什么有时候会出错、为什么换一个表达方式结果就不一样。

2.2 三条主流技术路线,各有什么优劣

目前市面上的text-to-cad实现,大体可以分成三类。

第一类是基于规则模板的。开发者事先把手动建模中常见的几何体、特征和组合规则做成模板库,再用关键词匹配和实体识别把文本映射到模板上。优点是稳定、可解释性强,适合形状规范的标准件;缺点是一旦遇到描述里没有预设过的结构,就完全无能为力。常见于各种CAD插件的“智能零件库”,算是最朴素的text-to-cad。

第二类是基于大语言模型直接生成建模代码。这是目前最火的方向,把写CAD脚本这件事看作“写程序”,用训练好的语言模型来生成OpenSCAD或CadQuery代码。它的泛化能力明显强于规则模板,能处理“开口朝上的U形槽”“左右对称的底座”这种灵活描述,而且生成的是可编辑的代码,后续用户还能手动改。缺点是代码偶尔会有语法错误、尺寸单位理解错乱,或者某条命令的用法是模型幻觉出来的。这就需要实际跑一遍、检查一遍,才能进到下一环节。

第三类是直接生成三维表示的深度生成模型,比如从文本生成点云、体素或者隐式符号距离场,再拟合成网格或B-rep实体。这类方法在物体形状的复杂程度上上限更高,能生成一些很难用参数化步骤描述的自由曲面形状,但生成结果导出到传统CAD后,往往是不带特征树的“哑实体”,后期修改比较麻烦,在工程制造场景里接受度还不太高。

三种路线各有适用场景,我的看法是:现阶段要“拿来干活”,第二类最实用,因为它兼顾了自然语言理解的灵活性和CAD参数化编辑的可维护性;第三类适合做外观造型和概念探索;第一类适合标准件库这种固定场景。实际产品往往会混合用,比如先用语言模型拆解意图,再从规则库里拼装标准特征。

2.3 它怎么理解“薄壁”“开槽”“均布”这些行话

很多人好奇:text-to-cad是不是真能像老师傅一样听“行话”?我只能说,它越来越接近了,但还没有完全到那个水平。以“均布”为例。这个词在CAD里意味着圆周阵列或者矩形阵列,而且暗含“孔间距相等”的约束关系。text-to-cad要识别这个词,靠的是训练语料里有大量“均布孔”“均布螺纹孔”“阵列”的描述和对应代码,模型学到了“均布”与循环阵列指令之间的关联。但如果你说“孔要排得好看一点”,它就无从下手了。

“薄壁”这个词也很有意思。它不是一个精确到毫米的数值,而是一个工程概念,通常意味着在保证结构强度的前提下尽量减少壁厚。text-to-cad一般不会真的去帮你做强度校核,它只是把这个词映射到一个默认的经验值,比如抽壳后壁厚2毫米或者3毫米。如果没有明确指定数值,很多工具会默认取一个常见值,而不是自动优化。这也是我建议大家用text-to-cad时,不要只写“薄壁”,最好直接写“壁厚2毫米”,出来的结果才可控。

理解这层逻辑之后,你就明白为什么“会描述需求”这件事本身成了一种技能。写描述不是写作文,而是写“带约束的自然语言”,把你脑子里的尺寸、位置、数量、相对关系尽量说清楚。后面我会专门给一个描述模板。

3. 实操全流程:从一句话到一个能编辑的CAD模型

3.1 环境准备:这一步别偷懒,能省很多事

要自己动手跑通text-to-cad,最省事的方式是找一个靠谱的开源工具或在线平台。我不在这里推荐具体某一家,因为这类工具迭代非常快,今天好用的明天可能就换了。但你可以按下面这个思路去选型:

  • 看看它生成的模型是什么格式。优先支持STEP、IGES、DXF、DWG这类通用交换格式的,后续导入主流的AutoCAD、中望CAD、SolidWorks才顺畅。
  • 看看生成过程到底给不给你“中间代码”。如果能给CadQuery或OpenSCAD代码,说明你还有亲手修正的余地,而不是生成一个不可修改的死模型。
  • 看看安装环境是否依赖Python。目前大量开源text-to-cad工具都是Python生态,因为CadQuery本身就是一个Python库。你本地装一个Python 3.9以上版本,再准备一个Jupyter Notebook或者VS Code,基本就够用了。

如果你是第一次接触,我建议直接先玩在线demo,跑通一个例子,再决定要不要本地装环境。按我的经验,本地装环境最常踩的坑是依赖冲突,CadQuery依赖的OCP(Open CASCADE Python绑定)偶尔会和其它三维库冲突。这个问题的通用解法是给项目单独建一个虚拟环境,不要一股脑装进全局Python。新手图省事直接全局装,后面极有可能被各种版本冲突折腾到怀疑人生。

3.2 核心实例:生成一个带螺孔的法兰盘

下面我们直接跑一个完整的例子。假设输入描述是:

生成一个圆形法兰盘,外径80毫米,内孔直径32毫米,厚度10毫米,表面均布6个M6螺纹通孔,螺纹孔的分布圆直径为64毫米。

这个描述里包含了大部分text-to-cad需要的信息:主体形状(圆形)、关键尺寸(外径、内径、厚度)、特征(螺纹孔)、数量(6个)、排列方式(均布)、位置约束(分布圆直径)。如果用的工具是基于代码生成的,它会输出类似下面这段CadQuery风格的伪代码(具体API会因工具而异):

import cadquery as cq # 法兰主体:外径80,内孔32,厚度10 flange = ( cq.Workplane("XY") .circle(80 / 2) .extrude(10) .faces(">Z") .hole(32 / 2) ) # 六个M6螺纹通孔,均布在直径64的圆上 bolt_circle = ( flange.faces(">Z") .workplane() .circle(64 / 2, forConstruction=True) .vertices() .hole(6 / 2) )

这段代码的逻辑就很清楚:第一步,在XY平面画一个半径40的圆,拉伸10毫米得到主体;第二步,在上表面挖一个半径16的孔,对应内孔直径32;第三步,在上表面构造一个半径32的构造圆,取它的顶点(6个等分点)位置分别打直径6的孔。你不需要立刻看懂代码语法,但要能看懂这个“构建顺序”: 先主体——再主孔——再阵列孔。这个顺序很重要,因为text-to-cad生成模型的质量,很大程度就取决于它对“特征顺序”的安排是否正确。

比如说,如果工具先把六个孔打了、再去挖中心孔,倒也没啥大问题,因为布尔运算的结果基本一样。但如果在主体拉伸之前就打孔,那孔位置就不对了。特征顺序本质上反映的是建模者在思维上对“主要结构”和“次要结构”的划分,text-to-cad能把这句话拆成“主体先外后内,次级特征最后做”,说明它在语义理解上抓到了重点。

3.3 导出并接入传统CAD流程:转格式、合并图纸、布局输出

模型生成完之后,紧接着的问题就是怎么把它弄进你日常使用的CAD环境里。这一步也是网上提问最多的环节,从“cad导入layout步骤详解”到“cad图纸合并”“cad转pdf”,全是围绕“模型生成后怎么办”展开的。

我的建议是走一条最稳妥的路径:

  • 从text-to-cad里导出STEP格式。STEP是三维模型交换的通用格式,绝大多数CAD软件都认。
  • 在中望CAD或AutoCAD里通过“输入”功能导入STEP模型。导入后你会得到一个三维实体,如果你只需要二维图纸,就用视图投影功能生成三视图。
  • 做二维工程图的时候,把尺寸标注好,再用“布局”空间排好图框,最后打印或输出PDF。“cad导入layout步骤详解”里的“layout”指的就是这个布局空间,注意别在模型空间里直接标注一堆乱七八糟的尺寸,规范做法是在布局里创建视口,再为每个视口设置比例和标注层。
  • 如果公司要求提交DWG图纸,那就从三维模型投影得到二维视图后另存为DWG。整个过程里,text-to-cad帮你省掉的是“建模”这一大截,后面的出图流程依然是传统CAD的强项。

这里要特别提一句“cad图纸合并”。当你用text-to-cad生成一个零件,再和原有的装配体合并时,不要直接复制粘贴实体,正确做法是把STEP文件以“零部件”或“外部引用”方式插入装配体,保留引用关系。这样源模型如果改了,装配体里的对应零件还能联动更新。我就见过有人直接复制粘贴,结果修改源模型后装配体里全是旧版本,最后一个个重删重插,特别狼狈。

4. 在真实工作流里,text-to-cad的正确打开方式

4.1 定位是“助理”,不是“替代”

我见过不少文章吹text-to-cad要取代CAD工程师,这话听听就好。以现在的技术能力,text-to-cad最适合的定位是一个“快速出底稿的助理”,而不是能拍板的结构设计师。原因在于,真正的工程设计不只是“把形状画出来”,还包括强度、公差、材料、工艺、成本、可装配性等一系列约束。text-to-cad目前只能解决“形状生成”这一段,后面的工程决策依然要由人来完成。

具体到我的使用习惯,我把text-to-cad放在整个流程的最前面,也就是概念设计和方案对比阶段。以前做方案对比,要画三个不同结构的支座,光建模就占用大半天,现在三个描述写出来,十几分钟就出三个带尺寸的模型,先筛掉明显不合理的方案,留一个再去精修。这一步省下的时间非常明显,但前提是你心里清楚,生成结果只是一个“带尺寸的形状”,不是成品图。

4.2 和传统CAD功能配合:从模型空间到布局空间的完整接力

text-to-cad生成的模型要真正走进交付流程,还是离不开那些老生常谈的CAD操作。我列一个最常用的接力清单:

  • cad导入layout步骤详解:导入STEP模型后,在模型空间把三维实体摆正、设定好坐标系;切换到布局空间,新建多个视口,分别设置为俯视、前视、右视,比例统一;在布局里添加标题栏,标注主要尺寸。这个步骤和手动建模后的出图流程完全一致,只是模型来源变成了text-to-cad。
  • cad图纸合并:当你需要把text-to-cad生成的零件图和手绘图合并成一张总图时,最稳的方法是通过“外部参照”(XREF)把模型链接进总图,而不是复制粘贴线条。这样源图更新,总图也能同步更新。
  • cad转pdf:传统出图仍以PDF交付居多,用布局空间的“打印”功能,打印机选“DWG To PDF”,图框选ISO A系列或自己公司标准图框,输出时注意线宽样式和颜色表,黑色和彩色分别处理好。

这些传统功能够无聊但够重要。text-to-cad不会取消这些基本功,反而会让不会这些基本功的人更难交付。所以我的建议没有变过:别因为学了AI建模,就跳过cad制图初学入门这些基础操作。恰恰相反,有了text-to-cad帮你快速生成模型,你反而可以把更多时间花在学图纸规范、视图表达和标注规则上,这些才是工程的硬功夫。

4.3 扩展思路:用Python批量处理CAD,把text-to-cad接到更大流程里

热搜词里有一条是“python批量对cad修改”,这个其实也和text-to-cad天然互补。text-to-cad可以看成是一个“文本变模型”的Python函数,既然它是一个函数,你就可以把它放进循环里批量执行。比如你要生成50种不同尺寸参数的轴承座,不用一个个描述,只要写一个循环,把参数列表喂给它,一次性批量生成50个STEP文件。这种流程对做标准件库、报价系统、方案库特别有用。

我看过的真实案例里,有人用text-to-cad批量生成了一个停车位布局的概念模型组,有人用CadQuery批量生成了非标钣金件的展开示意,还有人把text-to-cad集成进内部报价平台,业务人员只要填一张表,系统就自动生成对应模型的预览图和体积重量估算。这些都不是天方夜谭,做起来也不难,核心就是把“自然语言描述”模板化,把变量位置留出来,然后用脚本去填充和调用。

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

5.1 生成结果不符合预期,先查这四个地方

我在实际使用和帮别人排查的过程中,发现text-to-cad“翻车”大多是因为下面四个原因:

第一,描述里的单位不统一或不明确。你说“外径80”,工具默认可能是毫米,也可能被理解成厘米、甚至英寸。同一句话里如果混了“20mm”和“3厘米”,某些模型就会理解错乱。我的习惯是全篇统一用毫米,而且重要尺寸前面明确写“毫米”两个字。

第二,尺寸给少了。很多工具在缺少约束时会套用一个默认值。比如你没写“同轴”,它可能把孔放在一个奇怪的位置;你没写“贯穿”,它可能生成一个盲孔。生成后一定要检查,不是看个大概造型就收工。

第三,特征顺序没表达清楚。自然语言里“先做主体再做孔”这个顺序,机器不一定分得清。你写“生成一个法兰盘,带6个孔”,它可能先打孔再生成盘体,盘体和孔之间的布尔关系一乱,最终结果就废了。解决办法是描述时尽量显式写明“在主体上打孔”“在底板上开槽”这类顺序性用语。

第四,工具生成了代码但执行报错。这种情况很常见,尤其用大语言模型生成CadQuery代码时,不免出现API名称记错、参数个数不对、语法排列错误。我的建议是:把报错信息复制回对话里,让它修正;如果连续几次都修不好,就手动改代码,别和AI较劲,改起来其实比想象中快,因为模型大部分结构已经对了。

5.2 描述词怎么写才精准:一个万能模板

说句实在话,会写描述是text-to-cad最重要的技能。我总结了一套非常好用的模板,分享出来你可以直接套:

生成一个[主体形状 + 核心名称],整体尺寸为[长×宽×高]或[外径×内径×厚度],材质/表面要求为[可选],包含[特征数量]个[特征类型],特征位置为[定位关系],特征尺寸为[具体数值],注意[关键约束]。

举个例子:

生成一个矩形底板,长120毫米,宽80毫米,高10毫米,四角各有一个直径12毫米的沉头孔,沉头孔距相邻边距离均为10毫米,底板中心有一个直径30毫米的通孔。

这个描述比“生成一个有孔的板子”好一百倍。原因很简单:它把“主体—尺寸—特征—位置—约束”全部拆碎了,机器不需要猜。少写一个约束,机器就会用一个“看似合理但实际不一定对”的默认值补上,所以别怕自己啰嗦,engineering里怕的是信息缺失,不是信息冗余。

5.3 踩过几次坑之后,我个人还有几个心得

第一,text-to-cad生成模型的速度很快,但“快”不代表“对”。不要被第一版的漂亮模型的视觉迷惑,一定用测量工具复核几个关键尺寸。数字模型看起来再直观,如果孔距差了半毫米,后期加工就是灾难。这个教训是我踩过最深刻的坑。 第二,不要把text-to-cad当PDF导出工具。它擅长的是三维建模和参数生成,最终出图还是交给专业CAD软件完成。你要“cad转pdf”,老老实实把模型导入CAD,再走布局打印,别指望text-to-cad帮你包办。 第三,学text-to-cad之前最好还是有一点工程制图基础。你知道什么叫剖视图、什么叫公差带、什么叫基准面,才能验证AI生成的模型靠不靠谱。反过来,如果你是完全新手,想通过text-to-cad直接跳过制图基础,我只能说最后吃亏的一定是你自己。工具能帮你把模型“变”出来,但不能替你理解图纸背后的工程逻辑。 第四,用惯了text-to-cad之后再回去手动建模,你会明显感觉到自己更容易忽视一些基础细节。所以我现在的做法是:重要零件仍然偶尔手动从头建一遍,保持自己对特征树的敏感度。这个习惯我建议你也养成,不然手会生。

最后再分享一个小技巧:如果你发现自己经常要用text-to-cad生成同一类零件,不妨把这几个关键描述词整理成自己的“描述模板库”,比如法兰模板、支架模板、钣金件模板。下次用时只要修改数字,不用重新组织语言,准确率会高一大截。我在团队里就是这么做的,把经过验证的高质量描述词沉淀下来,普通同事也能直接上手生成可用模型。这才是text-to-cad这个工具最值得培养的能力——不是写更长的提示词,而是把你在工程上积累的经验,翻译成它能理解的稳定语言。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进