一句话生成一张能直接进CAD加工车间的图纸?说实话,我干这行十几年,第一次看到text-to-cad这个词的时候,第一反应是"又来一个AI画图的噱头"。毕竟AI画图只能出漂亮的效果图,没法给你精确尺寸,更没法让设计师在软件里改一笔就联动更新。但真正上手试了一圈之后,我发现自己低估了这件事——它不是把文字变成像素,而是把文字变成参数化建模脚本,再由脚本生成实体几何。整个工作流从"鼠标一点点画"变成了"描述需求、审查脚本、微调参数",这个转变确确实实改变了我的日常制图方式。
这篇文章不谈概念,全部是我实际折腾text-to-cad工具链的完整过程。包括它真正解决什么问题、当前有哪几类方案可选、核心原理到底是怎样工作的,以及我在真实项目里用它生成零件、配合Python批量出图、导入中望CAD等软件时的踩坑记录。如果你也是天天画重复图形的设计师、工程师,或者刚入门的CAD学习者,这篇文章能帮你判断text-to-cad值不值得用,以及怎么用才不会翻车。
1. text-to-cad到底在解决什么"真需求"
先说个扎心的事实:大多数设计师每天画的图,真正从零构思的不到两成,剩下八成都是"改尺寸、换参数、套模板"的重复劳动。轴套从直径50改成55,孔位从四孔改成六孔,底板加长30毫米,机架换个壁厚——这些操作没有任何创造性,但你必须老老实实一个特征一个特征地改,改完还得检查干涉、检查关联尺寸有没有崩。text-to-cad的价值恰恰不在"无中生有画出个惊天动地的设计",而在把重复的变体设计压缩成一段文字描述。
1.1 重复制图的真实成本
我自己统计过一周的制图时间分布:周一上午画一个新支架的草图,两小时;下午给三个旧零件改尺寸、更新工程图,三小时;周二一整天在做项目BOM表对应的零件变体,尺寸不同、孔位不同,但结构完全一样。
这些变体零件,每一个都值得从头建模吗?不值得。但传统的做法是你没法跳过——你打开CAD软件,选基准面,画草图,加约束,拉伸,打孔,每一步都省不掉。我把这个阶段称为"制图的体力活"。
text-to-cad切入的正是这个环节。它不需要你理解"草图约束"和"特征树",你只需要告诉它:我要一个长120、宽80、高60的开口盒,壁厚2,四角各一个直径5的安装孔。剩下的特征构建、布尔运算、倒角、抽壳,它自己写脚本完成。生成出来的不是一张图,是一段可以反复改参数的代码——下次要做长150的版本,改个数字重新导出就行。
1.2 从"鼠标绘图"到"语言建模"的工作流迁移
很多老设计师一听"用语言建模"就摇头,觉得那玩意儿不精确。我一开始也这么想,直到我发现text-to-cad生成的是参数化脚本,而不是一张渲染图。脚本里每一个尺寸都是显式数字,每一个特征都是明确的建模命令。
这意味着什么?意味着你完全可以审查它:打开生成的脚本,看到"box(120, 80, 60)",你知道这个盒子的主体尺寸就是120乘80乘60;看到"faces('>Z').workplane().rect(100, 60).vertices().hole(5)",你知道这是在顶面四角打了直径5的孔。这句话不对,你直接改数字,或者删掉那行重新让AI生成。整个过程跟你在CAD软件里看特征树是一样的,只是效率高得多。
1.3 谁最该关注这个工具
根据我的观察,text-to-cad的受益人群非常聚焦:
- 机械设计工程师:零件变体多、结构相似度高的,收益最大。
- 非标自动化设计:一个项目几十个定制钣金件、支架件,传统画法能累死人。
- 产品结构工程师:开案初期概念验证,用语言快速生成结构草模,比手绘草图更接近最终形态。
- CAD学习者:如果你正卡在"画草图怎么约束、怎么完全定义"这个阶段,text-to-cad生成的脚本本身就是最好的学习材料——你能看到AI怎么写特征、怎么加约束、怎么构建布尔运算。
反过来,如果你做的是艺术造型、曲面设计、复杂的自由形态,那text-to-cad目前的能力还差得远,这部分命令最好别碰。
2. 我实测过的三类text-to-cad方案:选型对比
市面上标榜"文字生成CAD"的东西不少,但实际落地路径差别很大。我自己把目前能跑的方案分成三类,各有各的脾气。
2.1 方案一:大语言模型直接生成参数化建模代码
这是我现在的主力方案,也是我认为目前最靠谱的路径。原理很简单:让大语言模型(比如GPT-4或者Claude)直接生成CadQuery、OpenSCAD或者build123d的建模脚本,然后在本地用对应工具把脚本"跑"成实体模型。
CadQuery和OpenSCAD都是免费开源的参数化建模框架,CadQuery用的是Python语法,OpenSCAD用的是自己的类C语言语法。它们的共同特点是:用代码描述几何特征,代码即模型。脚本本身是纯文本,你丢给AI去生成、修改、调试,都比在GUI界面里让AI操作软件按钮要稳定得多。
我实测下来的典型对话是:描述需求 → AI返回一大段Python脚本 → 我在编辑器里跑一遍生成三维预览 → 不合适再描述"把壁厚改成3,孔往中心移10毫米" → AI返回修改后的脚本。整个循环通常两三轮就能定稿。
2.2 方案二:生成CAD软件宏脚本/插件脚本
如果你所在的单位用的是AutoCAD、中望CAD这类传统软件,离不开DWG格式,那第二类方案更合适:让AI生成这些软件自己的脚本语言。AutoCAD用AutoLISP,中望CAD兼容AutoLISP的大部分语法,FreeCAD支持Python宏。
这条路径的好处是生成的成果能直接落在你最熟悉的软件环境里,不改变现有的图纸管理习惯。坏处是宏脚本的能力天花板比较低——你没法用它做复杂的曲面、装配、动画仿真,它就是"自动执行一串操作命令",适合处理重复性极强的批处理任务。
比如有段时间我需要把一批旧图纸的图框统一替换成新的标准图框,如果手动操作,每张图都要删旧框、插新框、调比例,一张图十分钟。后来我直接把需求描述给AI,让它生成一段AutoLISP脚本,在命令行里跑一次,全图纸的图框批量更新完成。这才是这类方案的正确打开方式。
2.3 方案三:端到端AI生成工具
这类是我说的"真正意义上宣传为text-to-cad的产品",典型代表是一些创业公司做的在线工具,输入一句话直接给你输出一个CAD格式文件。我试过几个,结论是:概念阶段非常惊艳,工程落地仍需努力。
它们的优势是门槛极低,完全不需要懂代码,描述一句"一个带四个支腿的圆桌",几秒钟就能得到一个可以旋转查看的三维模型,也可以导出STL或者STEP。用来做产品概念展示、给客户看方案方向,非常方便。
但问题也很明显:一是生成的几何精度和特征复杂度都受限制,你说"一个带加强筋的钣金支架",它能做出来,但你要求"加强筋的截面形状符合钣金折弯工艺规范",它就蒙了;二是可编辑性差,生成的是边界表示模型,你想改参数,只能重新生成或者拿去CAD软件里做几何修补,但那个缝合过程同样是体力活。
2.4 一张表结束纠结:三类方案的取舍
| 方案类型 | 代表工具/技术 | 输出物 | 精度 | 可编辑性 | 上手难度 | 推荐场景 |
|---|---|---|---|---|---|---|
| 生成建模代码 | 大语言模型 + CadQuery/OpenSCAD | STEP/STL,脚本 | 高(参数精确) | 极强(脚本即参数) | 需一点基础 | 零件变体、重复建模 |
| 生成宏脚本 | 大语言模型 + AutoLISP/Python | 在目标CAD内执行 | 高(跟随软件精度) | 中(改脚本或录宏) | 低至中 | 批处理、老图纸改造 |
| 端到端AI工具 | 在线text-to-cad产品 | 模型文件,格式有限 | 中低(细节不足) | 弱(重新生成) | 极低 | 概念草模、方案展示 |
选哪个不取决于哪个"更好",取决于你的目标格式是什么、需不需要深度编辑。我的建议是:只要你有心学一点CAD编程,方案一的长期收益最大,因为它能顺带把你的制图流程带进"代码复用"的层次。
3. 原理拆解:文字变几何的"四条流水线"
很多人好奇text-to-cad内部到底发生了什么。我最初也以为是什么神奇的"几何生成网络"直接翻译语义,实际研究了才发现,它本质是几个成熟技术的串联。我给它起了个名字叫"四条流水线"。
3.1 第一环:自然语言到约束化描述
这个环节由大语言模型负责。它把你的自然语言描述拆解成一系列约束条件:尺寸约束(长度120、直径5)、几何约束(平行、同心、对称)、位置约束(四角、中心、距边10毫米)。
这里有一个关键问题:大语言模型本身不知道"圆角直径R3"在CAD软件里应该怎么构建,它只是把这些约束翻译成下一步的"输入格式"。换句话说,它做的不是创建几何,而是信息提取和信息转写。这也解释了为什么描述越规范、越靠近工程术语,生成的脚本越可靠——你给它"一个长120宽80高60的盒子",它提取到的约束就是三个尺寸;你给它"一个好看的盒子",它就不知道约束是什么了。
3.2 第二环:约束化描述到参数化脚本
这是整个流程的核心环节。大语言模型根据提取到的约束,生成一段CadQuery或OpenSCAD脚本。表面上看,这个环节非常神奇:你说"抽壳2毫米",它知道写shell(-2);你说"四个安装孔",它知道先建一个用于构造的矩形线框,取四个角点,再逐个打孔。
实际上,这个能力来源于大语言模型在训练数据里见过海量的程序化建模代码片段,它学会了"需求词"与"建模API"之间的映射关系。因此,提示词越接近API语义,生成结果越稳定。这也是为什么我后面会说:新手用text-to-cad,一定要学一点CadQuery的基础词汇,这会让你和AI的沟通效率翻倍。
3.3 第三环:脚本到边界表示(B-rep)
脚本生成之后,剩下的就是程序化建模引擎的"苦力活"了。CadQuery底层基于OpenCASCADE几何内核,OpenSCAD底层则是自己的CSG引擎,它们把脚本里的每一个建模命令解析成实实在在的实体几何:拉伸成体、打孔减材、倒角过渡、阵列复制,最终生成一个精确的边界表示模型,也就是B-rep模型。
B-rep模型和AI画图生成的像素网格有本质区别:它由精确的数学曲面(平面、圆柱面、样条面)和拓扑边构成,尺寸误差可以控制在微米级别。这就是text-to-cad能进工程领域的根基——它不是给你一张看着像的图,而是给你一个几何上严格成立的实体。
3.4 为什么是"代码"而不是"像素"——和AI画图的本质差别
理解这一点,你才能真正理解text-to-cad的设计哲学。AI绘图工具生成的是像素矩阵,放大看就糊了,也没法量尺寸,更没法在CAD软件里继续编辑。而text-to-cad生成的脚本,本质是建模过程的完整记录。
我用一个类比来说明:AI画图像拍照片,瞬间得到一张好看的画面,但照片里的物体是没法拆开改装的;text-to-cad像菜谱,你告诉AI你想吃红烧肉,它给你一份配料和步骤清单,你照着做出来一盘具体的肉,下次想做微辣版,临时改一行配方就行。脚本就是那个配方,模型就是那盘菜。
这个设计决定了text-to-cad最擅长什么:一切有规律、有参数、可重复的几何结构。最不擅长什么:一切依赖艺术直觉、非对称、难以参数化的形状。
4. 实操:一句话生成一个能进CAD的零件
理论说多了没有用,直接上手走一遍完整流程。下面这个案例是我之前给客户做的一个塑料外壳开口盒,尺寸不大,但包含了最基本的建模操作:主体拉伸、抽壳、打孔。我把我的提示词原样列出来,你照着改参数就能用在你的场景里。
4.1 完整案例:开口塑料盒+安装孔
我的需求是做一个"长120、宽80、高60的开口塑料盒,壁厚2毫米,底部四角各有一个直径5毫米的安装孔"。喂给AI的提示词是这样:
用CadQuery创建一个开口塑料盒: - 外形尺寸:长120毫米,宽80毫米,高60毫米 - 壁厚2毫米,顶部开口 - 底部四角各有一个直径5毫米的贯穿安装孔 - 导出STEP格式AI返回的脚本,核心部分大概是这样的:
import cadquery as cq # 主体外轮廓 box_outer = cq.Workplane("XY").box(120, 80, 60) # 抽壳,顶部开口,壁厚2 box_inner = box_outer.faces(">Z").shell(-2) # 底部四角安装孔 result = ( box_inner.faces("<Z") .workplane() .rect(100, 60, forConstruction=True) .vertices() .hole(5) ) cq.exporters.export(result, "open_box.step")读懂这段脚本只需要三个关键概念:Workplane("XY")指定了工作平面,也就是草图的附着面;.box(120, 80, 60)创建一个以原点为中心的长方体;.faces(">Z").shell(-2)表示选择顶部的面并执行抽壳,-2表示保留壁厚2毫米的壳。最后一段.rect(100, 60, forConstruction=True).vertices().hole(5)的意思是:建立一个用于构造的100乘60的矩形辅助线,取其四个角点,在每个角点打直径5的孔。
提示:
forConstruction=True是CadQuery里提高效率的经典写法。如果你直接把指令翻译成"在离边10毫米的位置打四个孔",就要写四个坐标点;而用辅助矩形,代码更短、不容易出错,AI很擅长用这种优化写法。
4.2 描述词的写法:把"人话"翻译成"约束话"
我的经验是:描述越具体,生成结果越好。但"具体"不是指形容外观,而是指给出可计算的约束。对比一下:
- 差劲的描述:「做一个好看的塑料壳子,能放东西。」
- 合格的描述:「外形120乘80乘60的开口盒,壁厚2毫米,顶部开口,底部四角有5毫米安装孔。」
优秀的描述还应该补充加工意图和语义信息,比如"这是钣金件,折弯圆角不小于板厚""这是注塑件,内外壁应有拔模角度"。这些信息大语言模型能理解,并且会主动调整建模策略。虽然CadQuery脚本本身不直接处理拔模角,但AI会尝试用合适的特征去逼近。
我还建议你在描述里主动指定导出格式。不要只说"给个模型",要说"导出STEP,方便后续在CAD软件里编辑"。因为STEP是B-rep交换格式,导入到中望CAD、Fusion 360、SolidWorks都不丢精度,而STL是网格格式,导入后是"一堆三角片",编辑会非常痛苦。
4.3 从脚本到STEP再到CAD软件的导入细节
脚本跑通之后,你会得到一个STEP文件。到这一步还不算完,把STEP导入你日常用的CAD软件里,有几个坑要注意。
我自己用中望CAD和Fusion 360做过导入验证。中望CAD的STEP导入功能在文件菜单下,导入后默认会放到一个新的模型空间,单位通常能自动识别为毫米。Fusion 360则更友好一点,直接拖拽进画布就行,它会以特征列表的形式呈现,你能看到每个特征对应的历史记录。
但有一个高频问题:导入后模型的坐标系和装配原点可能不对齐。如果你的需求是"放到现有装配体的指定位置",最好在描述里专门说明基准,比如"以底面中心为原点""长度方向沿X轴"。否则你需要花额外的时间旋转、平移,这个过程虽然不复杂,但很消磨耐心。
4.4 描述词模板与参数速查表
我整理了一份自己的描述词模板,你可以直接往里面套参数:
用CadQuery创建[零件名称]: - 主尺寸:长[a]毫米,宽[b]毫米,高[c]毫米 - 壁厚[d]毫米,[顶/底]部[开口/封闭] - 特征:[打孔/倒角/抽壳/加强筋],位置[描述],尺寸[具体值] - 基准:以[底面中心/原点]为原点,[X/Y/Z]方向为[描述] - 导出格式:STEP配合模板使用的基础参数表:
| 需求短语 | CadQuery关键词 | 示例 |
|---|---|---|
| 拉伸实体 | box / extrude | box(10, 10, 10) |
| 挖孔 | hole(直径) | hole(5) |
| 抽壳 | shell(厚度) | shell(-2) |
| 倒角 | chamfer(距离) | chamfer(1) |
| 圆角 | fillet(半径) | fillet(3) |
| 阵列 | rarray / polar | rarray(20, 20, 5, 3) |
这张表不是让你背的,而是让你在描述的时候心里有数:AI能理解哪些词、会把它转成什么操作。你描述中给的约束越接近这些关键词的语义,生成准确率越高。
5. 进阶组合拳:text-to-cad + Python批量出图
text-to-cad最有想象力的用法,不是单件生成,而是和Python脚本结合做批量出图。这一点和网上很多人问的"python批量对cad修改"是同一个底层思路——把重复劳动交给代码,把判断和决策留给人。
5.1 当"单件生成"变成"序列生成"
还是回到开篇那个痛点:一套设备里有30个支架,结构一样,长度尺寸不同。用传统手动建模,你要么复制粘贴然后逐个修改草图尺寸,要么干脆重新画30遍。而有了脚本生成能力之后,做法就完全不同了:先用text-to-cad生成一个支架的CadQuery模板,确认长什么样,然后把参数抽出来,用一个Python循环批量生成30个STEP文件。
模板生成的过程和单个生成一样,但要注意:你必须在描述里刻意强调哪些尺寸是可变的、哪些是固定的。比如"支架长度是可变量L,厚度固定3毫米"这样写。否则AI可能把所有尺寸都写死,批量生成就无从谈起。
5.2 批量支架生成实战
看一个实际例子。我的一个项目里需要生成一组"一字型支架",长度从100毫米到250毫米,间隔50毫米,其余尺寸固定。那天的操作记录如下,先让AI生成单件支架的CadQuery脚本,再把长度参数提出来,合并到批量脚本里。
import cadquery as cq def bracket(length, width=20, thickness=3): """生成一个一字型支架.""" return ( cq.Workplane("XY") .box(length, width, thickness) .faces(">Z") .workplane() .center(-length/4, 0) # 加工艺槽 .slot2D(length/3, width/2) .cutThruAll() ) # 批量生成长度 100/150/200/250 的支架 for i, length in enumerate([100, 150, 200, 250]): part = bracket(length) cq.exporters.export(part, f"bracket_{length}mm.step") print(f"已生成: bracket_{length}mm.step")运行这段脚本,四秒之内就得到了四个不同长度的STEP文件,文件名还自动标了尺寸规格。如果这些支架的内部孔位还和长度有某种比例关系,比如孔距等于长度减去40毫米,同样可以在函数里写成一条公式。这就是参数化设计最令人上瘾的地方:改一个参数,全家桶联动更新。
5.3 批量修图、批量改名、批量导出的工程化扩展
批量生成的思路还能延伸到更多环节。比如你已经有一套DWG格式的旧图纸,需要批量更新图框、批量替换字体样式、批量调整图层比例。这类任务在AutoCAD和中望CAD里都能用脚本干,在AutoCAD里写AutoLISP,在中望CAD里用兼容模式运行同样的LISP脚本,或者在FreeCAD里用Python宏。
text-to-cad和这套东西的关系是互补的:前者帮你生成新零件,后者帮你治理老图纸。把它们组合起来,你基本上就是"一个人的数字化设计小组"了——接需求、出变体、更新图纸、整理交付物,一个人全包。
注意:批量操作之前一定要先导出一份备份。我吃过一次亏——批量运行一个"清理重复对象"的脚本,结果把某个当期图层的对象误删了一大半。从那以后,任何批处理脚本,我都先在小范围测试,确认无误再全量跑。
6. 边界和坑:哪些活别指望text-to-cad
吹完能力,必须泼一盆冷水。text-to-cad目前绝对做不到的事情,我一条条说出来,免得你踩坑踩得太痛。
6.1 精度和公差:AI没有"配合"概念
AI生成的尺寸数字是精确的,但工程配合却是一个复合概念,它涉及公差带、配合制、表面粗糙度。你在描述里说"这是一个销轴的安装孔,直径20,基孔制H7配合",AI会忠实地生成一个直径20毫米的孔,但它不会自己添加公差偏移,也不会告诉你孔径应该是20.021、下差是0。这需要你在CAD软件里手动补充机械设计意图。
我遇到过的真实情况是:让AI生成一个"直径20.00毫米的轴"准备插到"直径20.00毫米的孔"里,导入装配体后两个零件过盈成一坨——因为零间隙在制造上根本没法装配。从那以后我学到一句话:AI负责几何,人负责工程。
6.2 图纸体系:工程图标注、图层、线型一个都不能少
这是新手最容易忽略的坑。生成的STEP模型虽然几何精确,但它是"裸模型"——没有工程图、没有标注、没有尺寸公差标注、没有表面粗糙度符号、没有图框标题栏。
你需要把模型导入CAD软件后,继续补加工艺卡片、投影视图、剖视图、尺寸标注和数据。换句话说,text-to-cad帮你省的是"建模"的时间,不是"出图"的时间。图框、标注规范、图层颜色、线型比例这些,每家单位都有自己的企业标准,AI不了解这些标准,你也很难靠一句提示词让它遵循。
很多人在网上搜"cad图纸合并""cad导入layout步骤详解",本质上都是在补这套图纸体系的手工活。text-to-cad能让你从"画图工"升级成"审核员",但审核、签发、归档的流程一步都省不掉。
6.3 常见翻车现场记录
我把实际用text-to-cad翻车的几次事故记录在这里,每条都是真金白银换来的教训:
- 翻车一:忽略加工工艺导致模型报废。让AI生成一个钣金折弯件,结果折弯内侧半径设为0.5毫米,而板厚是3毫米,实际加工时钣金直接断裂。原因是AI不理解"折弯内径大于等于板厚"这个基本工艺规则。解决方案:描述里明确写"内部折弯圆角不小于板厚"。
- 翻车二:单位混用。有一次我描述时写了"厚度3",AI默认用了3毫米,而我心里想的是3厘米。细节直接差十倍。从那以后我的模板里每个尺寸都强制写单位。这个建议送给所有轻度强迫症患者。
- 翻车三:复杂装配体完全失控。我尝试过让AI生成一个包含螺栓、垫圈、配合孔的装配件,生成出来的一堆零件之间没有任何装配约束关系,散落一地。text-to-cad做单件还行,做装配体还是老老实实在CAD软件里完成。
6.4 我的习惯:人机分工清单
吃够了教训以后,我给自己定了一套人机分工的原则,按照这个原则用,出错的几率大大降低:
| 环节 | 交给text-to-cad | 留在自己手里 |
|---|---|---|
| 概念设计 | 快速生成多个形态的初版几何 | 评估方案、选型决策 |
| 零件建模 | 拉伸、打孔、阵列、抽壳等特征操作 | 确定壁厚、材料、工艺约束 |
| 工程规范 | 标准件变体、标准几何特征 | 公差、配合制、表面粗糙度 |
| 出图与归档 | 无 | 工程图、图层规范、图框标题栏 |
总结成一句话就是:把几何创作交给AI,把工程判断留给自己。这种分工不是对AI的不信任,而是对它能力边界的尊重。你越清楚它擅长什么、不擅长什么,越能在实际项目中扬长避短。
按我个人的经验,text-to-cad的最佳定位是"弹簧草图和参数化脚本之间的加速器"。我现在接一个重复性高的制图需求,先让AI生成初版,花20%的时间做工程校核和参数修正,比完全手动建模大概快了三四倍。如果你也想上手,我最后再分享一个小技巧:先试着让AI生成一个简单的带孔板件,把整个流程跑通,再逐步加大难度到带抽壳、带阵列的复杂件。一步步来,你会比那些一上来就问"能不能一键生成整台机器"的人走得远得多。