最近不少朋友在问我:“输入一句‘创建一个法兰盘,外径50,内孔25,厚度8’,能不能直接生成一张CAD图纸?”说实话,这个方向就是Text-to-CAD——用自然语言驱动CAD建模。我最早接触这个思路是在一个自动化设计项目里,当时每天要出几十个简单零件的图纸,手工画又慢又容易错,后来我把描述文本和参数化脚本结合起来,几分钟就能搞定一批模型。这篇文章就把我实际走通的流程、踩过的坑,以及和日常CAD操作(安装、合并图纸、批量改图)的衔接经验整理出来,给想入门Text-to-CAD的朋友做参考。
这不是什么玄学技术,核心思路很简单:让大语言模型理解你的中文描述,再把它翻译成CAD建模代码,最后在CAD软件里生成实体。适合刚接触CAD制图的初学者,也适合每天重复做相似结构的工程师。下面我从原理讲到实操心法,争取让你看完就能自己上手。
1. Text-to-CAD是什么,能解决什么问题
1.1 从“画图”到“说图”:Text-to-CAD的核心价值
传统CAD制图流程是:你先在脑子里想好一个零件的样子,然后用鼠标在绘图区里画线条、拉伸、打孔,或者用参数化建模软件填写一堆尺寸约束。这个过程的瓶颈不是你画图的能力,而是从“想法”到“几何表达”之间的转化成本。Text-to-CAD想做的,就是把这个转化成本降到最低:你直接用自然语言说出来,模型自动生成代码和图纸。
举个最直白的例子。我想做一个带四个螺栓孔的安装底板,尺寸是100mmx60mmx5mm,孔距边缘10mm,孔径8mm。用传统方式,我得画矩形、拉伸实体、再画四个圆、拉伸切除,至少五个步骤。如果用Text-to-CAD工作流,我只需要写一句描述,让大模型输出一段CadQuery脚本,然后执行脚本,DXF文件直接生成,我再用CAD软件打开确认一遍就行了。省掉的是重复劳动,留下来的是设计判断。
这项技术真正解决的不只是“快”,还有“批量”和“一致性”。当你有几十个结构相似但尺寸不同的零件时,手工逐个改参数容易出错,而文本描述配合模板代码可以批量生成,还能保证每个零件的特征逻辑完全一致,不会出现某个孔忘记打的情况。对非标自动化、机械非标件设计来说,这个价值非常实在。
1.2 谁需要Text-to-CAD:适用人群与场景
首先是机械设计师和结构工程师。他们每天处理大量零件图,尤其是三维转二维、工程图出图这种繁琐环节,Text-to-CAD能帮他们快速搭出基础模型,把精力留给核心结构强度分析和装配逻辑。
其次是硬件创客和3D打印爱好者。这些人不一定精通CAD软件,但很清楚自己要做的物件长什么样。比如“做一个能放进GoPro的支架,宽度40,卡扣间距20”,这类需求用Text-to-CAD就很合适,生成出来直接转STL拿去打印。
还有一类是CAD二次开发者和自动化流程的搭建者。他们不是最终用户,而是把Text-to-CAD的能力封装成工具,供没有建模基础的人使用。比如企业内部做一个“口述零件生成图纸”的网页应用,前端输入描述,后端调大模型再调CadQuery,最后返回一个文件下载链接。这种场景下,Text-to-CAD就不仅仅是绘图工具,而是一个设计系统的核心引擎。
当然,它也不是万能的。复杂曲面、装配体配合关系、钣金展开这类高难度建模,目前直接靠文本描述生成还不稳定。我的经验是,Text-to-CAD最适合规则几何体、孔槽特征清晰的机械零件,把它当作“设计起点加速器”而不是“全自动设计员”,预期就合理多了。
2. 技术原理与主流实现路线
2.1 基于大语言模型直接生成DXF/DWG脚本
这条路线的逻辑是:让大模型输出CAD软件能识别的脚本语言,比如AutoLISP、DXF文件内容,或者更直接的Python脚本(使用ezdxf库)。大语言模型通过大量代码训练,已经具备生成这些脚本的能力,关键在于怎么约束它生成的内容是可安全执行的。
我测试过的一种做法是:让模型直接输出DXF实体条目。用ezdxf库,模型可以写出“添加一条直线从(0,0)到(100,0)再加入一个圆”的代码。执行之后就能得到DXF文件,AutoCAD、中望CAD、FreeCAD都能打开。这个方案的好处是输出的文件是标准格式,兼容性极好;坏处是,当图形复杂到几百条线时,让模型全程掌控坐标容易出错,而且没有参数化关系,后面想改尺寸只能重新生成。
因此我更推荐混合方案:不是让模型逐条生成线条,而是让模型输出一个Python脚本框架,用变量控制尺寸,再用ezdxf或者CadQuery把几何体构建出来。这就是第二类路线。
2.2 基于参数化建模库(CadQuery/OpenSCAD)的文本驱动
参数化建模的核心是“尺寸由变量决定,几何由代码逻辑决定”。CadQuery就是这个领域的利器,它用Python描述建模步骤,类似于“在底面上加一个圆角矩形,在顶面挖一个圆孔”。OpenSCAD则用函数式语法描述CSG(构造实体几何)。大模型非常擅长把这套语法生成出来,因为语法规则明确,样例丰富。
具体流程是:用户输入文本 -> 大模型解析出特征、尺寸、约束 -> 根据预先写好的模板,生成CadQuery代码 -> 执行代码输出STEP或DXF文件。这里的“模板”非常关键,它把大模型的自由度限制在安全范围内。比如我的模板里定义了“底板”、“螺栓孔”、“中心孔”等特征函数,大模型只需要填参数,而不是自由发明代码调用方式,这样生成结果稳定得多。
我自己实测,一个中等复杂的底座零件,用LibreCAD的DXF模板生成要写300行代码,而用CadQuery模板只要30行,而且修改参数后模型自动更新。所以如果你要构建自己的Text-to-CAD流程,我会优先推荐CadQuery。
2.3 主流工具选型对比
我把目前能直接上手的几条路线做了个对比,方便你选:
| 路线 | 生成结果 | 参数化程度 | 上手难度 | 适用场景 |
|---|---|---|---|---|
| 大模型直接写DXF文件 | 2D图纸(DXF) | 低 | 中 | 简单轮廓、板件展开 |
| 大模型 + CadQuery | 3D实体(STEP)和2D投影 | 高 | 中高 | 机械零件、规则特征建模 |
| 大模型 + OpenSCAD | 3D实体(STL/STEP) | 高 | 低 | 创客、快速原型 |
| 大模型 + FreeCAD宏 | 3D实体与文档 | 高 | 高 | 需要FreeCAD原生环境的场景 |
如果你已经熟练使用AutoCAD,但它又贵又重,可以考虑中望CAD或FreeCAD作为查看端,没必要在生成环节依赖盗版软件。至于“cad下载”这个需求,建议去官网下载个人版或者试用版,安全又干净,省的后面各种激活报错。
3. 从零搭建Text-to-CAD环境(实操篇)
3.1 安装Python与依赖库时避开那些坑
Text-to-CAD最基础的环境就是Python。我建议直接用Anaconda创建一个独立环境,别一股脑装在系统Python里,不然以后库之间冲突很麻烦。具体命令:
conda create -n text2cad python=3.11 conda activate text2cad pip install cadquery ezdxfCadQuery安装时有个常见问题:如果你的操作系统缺C++运行库,会报“OCP module缺失”之类的错。这时候不是改装某个库能解决的,得先装好Microsoft Visual C++ Redistributable。这跟安装AutoCAD时老是提示“C++2005运行库错误”很像,实际都是系统组件缺失或版本冲突。解决办法是去微软官网下载最新的vc_redist.x64.exe安装,装完重开命令行就正常了。
还要注意版本兼容性。CadQuery目前对Python 3.11支持良好,3.12可能遇到依赖编译问题。如果你只是想处理DXF而不需要3D实体,那直接用ezdxf就行,轻量得多。ezdxf可以读写DXF文件,还支持线段、圆、块、图层等对象,做“python批量对cad修改”完全够用。
3.2 用CadQuery+LLM生成第一个文本描述的零件
这里我演示一个最简流程:输入描述“创建一个法兰盘,外径60,内径25,厚度8,四个均匀分布的安装孔,孔圆心分布圆直径45,孔径6。”然后让大模型输出CadQuery代码。
我们先写好提示词模板,核心要求是“只输出代码,不要解释,不要Markdown格式”,避免解析麻烦。大模型通常会输出类似这样的代码:
import cadquery as cq def flange(od, id, thick, pcd, hole_d): result = ( cq.Workplane("XY") .circle(od / 2) .extrude(thick) .faces(">Z") .circle(id / 2) .cutBlind(-1) .faces(">Z") .workplane() .circle(pcd / 2, forConstruction=True) .vertices() .hole(hole_d) ) return result part = flange(60, 25, 8, 45, 6) cq.exporters.export(part, "flange.step")你把这段代码保存成flange.py,再执行:
python flange.py就会生成flange.step文件。用FreeCAD打开,旋转查看,确认无误后,如果要出2D图纸,我会用CadQuery的投影功能导出DXF,或者直接在FreeCAD里转工程图。
这里有个小技巧:为了让大模型每次生成结果稳定,我建议在提示词里把关键特征拆开,逐个描述,比如“外径”、“内径”、“厚度”、“孔分布”都用单独短句,不要一句长难句。实测下来,短句的识别率远高于复杂的定语从句,而且生成速度更快。
3.3 生成结果如何导入/合并/转换到常用CAD平台
生成STEP之后,很多朋友习惯用AutoCAD看图。AutoCAD原生不支持STEP,需要先转成DXF或DWG。推荐用FreeCAD免费转换,打开STEP后导出DXF即可。如果你要最终用中望CAD,它也支持直接打开STEP,就少一步转换。
再说说“cad图纸合并”和“cad导入layout步骤”的实操。在Text-to-CAD批量生成几十个零件图之后,往往需要把多张图纸合并到同一张DWG里方便打印或存档。我的做法是用ezdxf配合Python脚本做合并:
import ezdxf msp_src = ezdxf.readfile("part1.dxf").modelspace() doc_dst = ezdxf.new("DXF2018") msp_dst = doc_dst.modelspace() for entity in msp_src: msp_dst.add_entity(entity) doc_dst.saveas("merged.dxf")如果要放到Layout(布局空间)里排版,你可以打开DXF后在AutoCAD里使用MV(视口)命令,将模型空间内容按比例放入布局。或者直接写脚本用ezdxf创建Layout视口,复杂程度会高一些,但自动化程度也高。这里不建议一开始就追求纯脚本布局,手动摆一次视口就几秒钟的事,效率比调脚本高。
4. 排查与避坑:Text-to-CAD常见问题速查
4.1 安装CAD时反复出现C++运行库错误与卸载残留
这个坑我有发言权。之前帮同事装中望CAD,反复弹“C++2005运行库错误”,装了好几遍都失败,最后查出来是因为电脑里老的CAD卸载不干净,残留的旧运行库和新的打架。正确的做法是:彻底卸载旧CAD,比“控制面板卸载”深一层。你需要手动删除以下几类内容:
- 安装目录(默认在C:\Program Files\Autodesk或对应品牌目录);
- AppData里与CAD相关的文件夹(C:\Users\用户名\AppData\Roaming和Local);
- 注册表里与CAD相关的项,用regedit删除时要小心,只删明确属于对应品牌的键。
删完之后再装新CAD,一般就不会再报C++错误。如果是全新安装,建议直接打上最新的VC++运行库合集,然后把系统Windows Update跑一遍,再装CAD。这个经验不仅适用于正规CAD,也适用于Text-to-CAD环境里的依赖库。
4.2 生成图纸坐标错乱/比例失真怎么办
用大模型生成CadQuery代码时,最容易出现的问题就是坐标和比例不对。比如把公制单位写成了英制,或者旋转方向反了。我之前生成一个带六边形孔的板子,出来的孔位置整体偏移了2毫米,就是因为模型里误用了换算系数。
我的排查步骤是:先打开STEP文件,用FreeCAD的测量工具检查关键尺寸是否与描述一致;如果不一致,检查大模型生成的代码里小数点和单位换算部分;再不行就在提示词里明确要求“所有尺寸以毫米为单位,坐标原点设在左下角”,这样会大大减少错位。
另外,如果是生成DXF后导入AutoCAD发现图纸尺寸不对,很可能是导入时默认单位设置不对。AutoCAD里有INSUNITS变量,导入DXF前把它设为毫米(值为4),再导入就正常了。这个问题在“cad图纸合并”时尤其常见,因为每张源图纸可能用了不同单位,合并时一定要先统一。
4.3 文本描述识别不准:提示词工程的经验
Text-to-CAD的上限在很大程度上取决于你怎么描述。大模型不是读心术,它需要足够精确的约束。比如“一个圆形的法兰”就太模糊了,你需要提供外径、内径、厚度、孔数量、孔距、孔直径、倒角半径等。
我总结的提示词模板是:
请生成一段CadQuery代码,创建一个零件,要求: 1. 基体为圆盘,外径D,中心孔直径d,厚度h; 2. 在基体上均匀分布N个螺栓孔,螺栓孔所在分布圆直径为P,孔径为H; 3. 基体侧面有倒角c。 参数:D=60, d=25, h=8, N=4, P=45, H=6, c=0 请只输出Python代码,不要额外解释。这种结构化描述后面,大模型的准确率能上到九成以上。如果你要求模型自由发挥,比如“做一个有点复杂的外壳”,那生成结果基本不能用。所以我在项目里会给用户提供标准描述字段,而不是开放文本框。这在工程化部署时非常重要。
5. 站在实用角度:Text-to-CAD与现有CAD工作流结合的建议
5.1 从加速设计迭代的角度看Text-to-CAD
很多设计师担心Text-to-CAD会取代CAD制图,我觉得完全不必。它更像是“把CAD的输入方式从鼠标变成了键盘”。你可以快速验证多个结构方案,比如修改厚度的描述,代码自动更新,马上又能出一个新模型。如果用手工画,改一版可能半小时,Text-to-CAD只要一分钟。
我实际管过的小型非标设备项目里,新人负责出零件图,容易出错。后来我搭了一个内部小工具:在Excel里填零件参数,脚本读取参数生成CadQuery代码,自动输出STEP和DXF。这其实就是Text-to-CAD的变体——把文本换成了表格,本质上都是从抽象描述到参数模型。这样做之后,新人只负责填表,输出错误率降了80%以上。
5.2 给初学者的三条实操建议
第一,不要一开始就指望大模型生成整台机器。从单个简单零件练起,比如垫片、法兰、支架,把这些基础特征的文本生成跑通,再尝试更复杂的特征组合。
第二,学会读懂生成的代码。即使你主要用文本交互,也要了解CadQuery的基本函数含义:Workplane是定义草图平面,extrude是拉伸,cutBlind是切除,hole是打孔。懂一点代码,排查问题时就不会一头雾水。
第三,组合好手里的工具链。我的标配是:大模型生成CadQuery代码 + FreeCAD查看和转格式 + ezdxf做DXF批处理 + AutoCAD/中望CAD做最终出图打印。这个组合免费、稳定、可扩展,适合个人和小团队。
关于“cad制图初学入门”的读者,我建议先掌握手工CAD的基本绘图逻辑和图纸规范,再接触Text-to-CAD。因为文本生成不只是“点一下生成”就完事,你需要能判断生成的模型是否符合设计意图。没有基础的人拿到错误图纸也看不出问题,反而容易埋下隐患。
按照我上面的流程搭一套环境,跑通第一个法兰零件,你就能体会到“说一句话出图”的爽快。后续如果想把生成结果做得更精细,可以研究自定义CadQuery特征库,把常用零件族固化下来,用文本只调参数。这条路走下去,很多重复性建模工作就再也不用自己动手画了。