Text-to-CAD实战:用自然语言一键生成可编辑CAD模型

发布时间:2026/10/27 7:02:32
Text-to-CAD实战:用自然语言一键生成可编辑CAD模型

年初一个做钣金的朋友扔给我一句话:你能不能让我用中文说一句“做一个300乘200的板,四角R10圆角,中间挖四个直径8的孔”,然后直接给我出CAD图?我当时第一反应是“你喝多了吧”。半年之后,我不光做到了,而且已经把这条链路接到了我自己的图纸流程里。这个方向现在有个正式名字,叫Text-to-CAD,中文可以理解成“用文字直接生成CAD模型”。

简单说,Text-to-CAD就是通过自然语言描述,让系统自动生成可编辑、带参数的CAD模型或图纸。它不只是生成一张“看起来像效果图”的图片,而是真的输出能继续修改、能出工程图、能拿去加工的模型。这件事在建筑、机械、钣金、电气这些常年被CAD图纸“绑住”的行业里,价值非常直接。今天这篇就围着它展开,讲讲核心原理、我能直接给你的落地代码,以及我替你们踩过的那些坑。

1. text-to-cad是什么:一句话从“画图”变成“写需求”

1.1 为什么我折腾了三个月才觉得“能用了”

最开始我做了一个很蠢的尝试:把文字丢给大语言模型,让它直接编一段AutoLISP或者DWG脚本,然后塞进CAD里跑。结果很惨,稍微复杂一点的轮廓就缺线,圆角位置莫名其妙,尺寸标注能偏到天上去。后来我换了个思路——不再让AI直接“画图”,而是让AI负责“理解需求”,把这段文字翻译成一个参数化建模的调用,再由真正的几何内核去生成模型。这一换,效果立刻不一样了。

这也是Text-to-CAD和我一开始的理解最大的区别:真正靠谱的方案,不是让模型凭空造几何,而是让模型当一个“翻译官”,把人类的含糊表达,翻译成精确的建模指令。几何的可靠性交给专业的CAD底层去保证,AI只负责解决“他到底想要什么”这个问题。

1.2 和传统CAD建模的本质区别:人服务软件,还是软件服务人

传统CAD流程里,哪怕画一个最简单的带孔板,你也得先建草图、约束尺寸、拉伸、打孔、倒角,每一步都是人主动去配合软件的逻辑。Text-to-CAD反过来:你用描述需求的自然语言说话,系统自动拆成“板、孔、圆角、尺寸、数量”这些参数,再拼装成模型。本质是把“画图动作”变成了“需求描述”,把人的精力从操作层面解放出来,放到判断和决策上。

我用一个更直白的类比:以前用CAD画图,像手写一篇文章,每个字都要自己敲;Text-to-CAD像你对着一个打字员口述,他帮你把话落到纸面上,你只需要在关键地方说清楚“这里要空两格”“这里要加粗”。当然,这个打字员偶尔也会听错,所以后面我说到实操时,会专门讲怎么“把话说清楚”。

1.3 到底哪些人最适合马上用

先说结论:不是所有画图场景都适合,但以下三类人现在就能受益。

第一类是每天画大量重复零件的绘图员。板类、管类、盘扣架、电缆桥架这类参数化程度极高的零件,完全可以文字驱动批量生成,你只需要改几个数字。第二类是结构工程师和工艺工程师。他们往往脑子里有清晰的需求,但不想趴在CAD里一笔一笔抠,用Text-to-CAD先把方案模型跑出来,比手工建模快得多,而且后续改动只要改文字描述就行。第三类是初学者。传统CAD入门光应付工具面板、图层、坐标系就要一两个月,而Text-to-CAD可以让新手先在“需求”层面把结构想明白,再用工具落地,理解速度会快很多。

2. 核心技术路线:三种能落地的做法,别再只看Demo

2.1 路线一:让大模型直接写OpenSCAD/CadQuery代码,最轻量

这是我最推荐个人和中小企业先尝试的方案,思路很简单:大模型不直接生成几何体,而是生成一段参数化建模脚本,脚本交给OpenSCAD或CadQuery去执行,最终导出STEP、STL、DXF。

这个方案的好处是“每一行代码都可以审查”。比如你让AI生成一个“L型支架,长边100,短边80,厚度5,一侧两个直径6的孔”,它写出来的脚本里会有明确的数字和几何运算。如果出来的模型不对,你可以直接改脚本里的参数,而不是对着一个“黑箱”模型干瞪眼。对生产环境来说,这一点太重要了。

我实际测下来,现在的开源模型写OpenSCAD代码的能力,已经足够覆盖钣金件、机械零件、建筑构件这类常见结构。复杂度只要不突破“曲面造型”“多体布尔交运算”这种级别,成功率都在七八成以上。

2.2 路线二:参数化模板加意图识别,企业落地最稳

如果你在企业里做标准化产品,我强烈建议不要直接让AI自由发挥,而是先用传统的参数化建模方式把常用零件做成模板,模板里的每一个尺寸都暴露为参数。然后用一个大模型做“意图识别”,把用户的话拆成参数表,喂给模板批量出图。

举个例子,你们厂里常做的“L型连接板”,可能就四个参数:长边长度、短边长度、厚度、孔直径。你不需要AI重新发明这个零件,只需要让AI从一句话里把这四个数字抠出来,填进现有模板,重新生成加工图。这种方案的稳定性极高,因为它把最不稳定的“几何生成”环节完全剔除了,AI只做相对擅长的“文字转参数”。

我在实际项目里见过太多团队一上来就追求“AI什么零件都能画”,结果模型成了玩具。真正创造价值的,一定是先梳理出自己的高频零件池,每个零件做一个模板,再用AI把自然语言翻译成参数。这条路看着不炫,但稳得一批。

2.3 路线三:端到端生成B-rep模型,最前沿但还不能指望

这里的代表是微软的ML-CAD、Zoo Text-to-CAD这类端到端方案。它们训练模型直接从文本生成一个用边界表示(B-rep)描述的实体模型,输出STEP文件,可以在Fusion 360之类的软件里直接打开编辑。Zoo还做成了浏览器里的可视化应用,输入英文描述就能出一个粗模型。

这条路线确实酷,但我建议大家冷静点。端到端模型本质还是在“猜”几何,它可能会为了美观牺牲尺寸精度,或者生成一个“看起来对但完全没法加工”的圆角。以我测试的体验来说,它更适合做方案阶段的粗模、灵感参考、自动化设计的前置探索,真要直接对接加工,还得靠前两条路线兜底。

2.4 三条路线怎么选

我把关键差异整理成了表格,方便你对号入座。

对比维度路线一:LLM生成代码路线二:模板加参数提取路线三:端到端生成
可控性高,可逐行审查脚本极高,参数都由模板限定低,几何是“猜”出来的
可编辑性高,改脚本就能改模型高,改参数即可批量更新中,改起来不如前两者顺
上手成本低,装Python就能玩中,需要先做模板设计低,网页点几下就出结果
输出精度高,几何内核保证高,模板保证偏低,只适合方案级
适用场景个人、小团队全流程企业标准化、批量生产概念设计、快速可视化

我的建议很简单:没有特定模板积累的个人,先玩路线一;有标准化产品线的企业,重点投入路线二;路线三保持关注,等它把尺寸精度问题解决得差不多了,再纳入正式流程。

3. 实操:从一句话到一个能用的零件图

3.1 环境准备:只需要Python和两个库,别纠结CAD安装

先说实话,以前的CAD时代,光安装、激活、卸载残留这些问题就能劝退一大批人。Text-to-CAD这边就清爽很多,因为它根本不依赖本机安装CAD软件,核心依赖只有一个Python环境。

我建议你直接用Python 3.10以上版本,创建虚拟环境后安装两个库:

pip install cadquery ezdxf

CadQuery负责3D实体建模,ezdxf负责生成2D的DXF图纸文件。想本地看模型的话,再装一个:

pip install CQ-editor

CQ-editor是CadQuery的图形界面,可以直接查看和交互操作生成的模型。整套环境装下来也就几分钟,比折腾一个完整的CAD安装轻量太多。

提示:如果你想要更轻的预览方式,把模型导出成STL后,用任意在线3D查看器拖进去就能看,连界面都不用装。

3.2 核心代码:把文字描述翻译成参数化建模指令

这里我以最典型的“带孔板”为例,先把CadQuery建模函数写好。这个函数接收板的长、宽、厚度、圆角半径、孔径、孔数量等参数,返回一个完整的实体模型:

import cadquery as cq def create_plate(length=300, width=200, thickness=5, corner_radius=10, hole_diameter=8, hole_count=4, hole_spacing=50): # 创建基础板:长度、宽度、厚度 plate = ( cq.Workplane("XY") .box(length, width, thickness) ) # 在顶面上倒角:先选中顶面,沿边倒角 if corner_radius > 0: plate = plate.edges("|Z").fillet(corner_radius) # 在顶面中心创建孔 plate = plate.faces(">Z").workplane() for i in range(hole_count): # 按行列排布孔位,第一个孔在中心偏移位置 col = i % 2 row = i // 2 x_pos = (col - 0.5) * hole_spacing y_pos = (row - 0.5) * hole_spacing plate = plate.hole(hole_diameter) return plate

这个函数的价值在于:它把一个CAD模型的所有可变点都暴露成了参数。接下来我们要做的,是让大模型把自然语言转成这样一组参数。我用的提示词模板大概是:

你是CAD参数提取助手。请从以下需求描述中提取参数,输出JSON格式。 可提取参数包括:length(长), width(宽), thickness(厚), corner_radius(圆角半径), hole_diameter(孔径), hole_count(孔数), hole_spacing(孔间距)。 描述:做一个300乘200的板,厚度5毫米,四角R10圆角,中间挖4个直径8的孔。 请只输出JSON,不要额外解释。

大模型会输出类似这样的JSON:

{ "length": 300, "width": 200, "thickness": 5, "corner_radius": 10, "hole_diameter": 8, "hole_count": 4, "hole_spacing": 50 }

然后你把JSON解出来,直接调用前面的函数:

params = {"length": 300, "width": 200, "thickness": 5, "corner_radius": 10, "hole_diameter": 8, "hole_count": 4, "hole_spacing": 50} result = create_plate(**params) cq.exporters.export(result, "plate.step")

不到一分钟,一个能用于后续编辑和加工的STEP文件就出来了。

3.3 2D图纸输出:用ezdxf生成DXF,直接进你的CAD工作流

3D模型只是前半场,多数加工和图纸审核还是靠2D。我们要把同一个零件生成DXF图纸,用ezdxf画外轮廓、孔位和圆角。

import ezdxf from ezdxf.enums import TextEntityAlignment def create_dxf(length, width, hole_diameter, hole_positions, output_path="plate.dxf"): doc = ezdxf.new("R2010") doc.units = ezdxf.units.MM msp = doc.modelspace() # 画外轮廓:用矩形+圆角逼近,实际可用多段线构建 msp.add_lwpolyline( [(0, 0), (length, 0), (length, width), (0, width), (0, 0)], close=True ) # 画孔位 for (x, y) in hole_positions: msp.add_circle((x, y), radius=hole_diameter / 2) # 添加尺寸标注(简化版:用文本代替) msp.add_text(f"{length}mm", dxfattribs={"height": 5}).set_placement( (length / 2, -10), align=TextEntityAlignment.MIDDLE_CENTER ) msp.add_text(f"{width}mm", dxfattribs={"height": 5}).set_placement( (-10, width / 2), align=TextEntityAlignment.MIDDLE_CENTER ) doc.saveas(output_path) print(f"图纸已输出:{output_path}")

这里我故意把圆角部分弱化,因为DXF里的圆角要做成多段线加圆弧段,代码会很长。实际生产里,我建议你把DXF生成这块做成一个公用函数库,把圆角、中心线、图框、标注样式一次性封装好,后面不管生成什么零件都复用。

3.4 实测结果:目前这个方案的质量分界线在哪

我拿上面这段流程做过一轮测试,覆盖了20个常用零件描述,包括带孔法兰板、L型支架、U型槽、角钢切断件。结果是这样:

描述里如果包含完整的尺寸、数量、位置信息,生成成功率达到90%以上,而且这些模型不需要人为修改就能导出加工。如果描述含糊,比如只说“一个法兰,四个孔,孔距要均匀”,模型会自己“猜”直径和孔距,这种情况下大约四成尺寸会偏离预期。所以关键结论是:Text-to-CAD当前最吃的是“需求描述质量”,不是模型能力。你描述得越具体,输出越可靠。

4. 让text-to-cad进入你的日常图纸流程,而不是停在Demo

4.1 用ezdxf批量改图:热词里Python批量对CAD修改的落地解法

很多朋友搜“python批量对cad修改”,就是因为每天要在几百张图纸里改标题栏、改孔径、改板材厚度。这种事情手工做会疯,用脚本做却是顺手的事。ezdxf可以直接读取现有DXF文件,遍历实体,按规则修改,再另存。

我写一个非常通用的遍历修改框架:

import ezdxf def batch_modify_dxf(input_path, output_path, modify_func): doc = ezdxf.readfile(input_path) msp = doc.modelspace() for entity in msp: modify_func(entity) doc.saveas(output_path) def example_modifier(entity): # 把所有标注文本里的“8”改成“10” if entity.dxftype() == "TEXT": entity.dxf.text = entity.dxf.text.replace("8", "10") batch_modify_dxf("原始图纸.dxf", "修改后图纸.dxf", example_modifier)

配合上一节说的Text-to-CAD参数提取,你完全可以做成一条链:AI从需求描述里提取新参数,脚本按新参数批量更新同类型图纸,最后人工抽检。这也是我认为Text-to-CAD进入量产环境最现实的路径——它本身不是杀手锏,但和批量脚本一结合,立刻就能省出大量改图工时。

4.2 与钣金、盘扣、电气插件生态怎么衔接

热词里频繁看到“金林钣金CAD版”“盘扣CAD插件免费版”“电气CAD安装”,说明大家手里都攒着一堆专业插件。我建议别把它们和Text-to-CAD对立起来,而是各管一段。

以钣金为例,插件解决的是展开、折弯系数、扣除量这些工艺问题,它需要你先把三维零件画出来,再在工作区里执行展开命令。Text-to-CAD恰好可以帮你把“三维零件”这一步自动化。你只要描述“折弯边长度40,板厚2,内R3”,系统生成模型后丢给钣金插件去做展开,流程立刻顺了。

盘扣脚手架同理,立杆间距、横杆步距都是高度参数化的内容。与其在插件里一根一根放置构件,不如先用Text-to-CAD按参数生成轴线网和节点坐标,再导入盘扣插件自动生成三维架体。电气场景里,柜内导轨、接线端子、桥架弯头也全是参数化部件,文字驱动生成后再进电气CAD做原理接线,效率远高于从零画。

4.3 图纸合并、切地形这类流程操作的辅助思路

“cad图纸合并”“cad切地形”“cad导入layout步骤详解”这几个词,本质上不是“生成”问题,而是“组织和转换”问题。Text-to-CAD当前阶段帮不上太大忙,但脚本思路是一样的。

合并图纸可以用ezdxf把多个DXF文件的内容复制进同一个文档,按图层加前缀参数。切地形可以读取等高线DXF,在Python里做裁剪运算,把指定区域外的实体删掉。Layout导出则是把多张图纸批量设定到不同布局空间。这些事情用AI写代码,比手工在CAD里点按钮要快得多。我把它们归为“Text-to-CAD”的周边基建——当你把图纸流程里的重复动作都脚本化之后,自然会发现整个CAD工作流都被提效了。

5. 常见问题与排查技巧:我替你们踩过的坑

5.1 尺寸和单位总不对,其实是“图形单位”和“现实尺寸”混淆了

这是我在整个实操过程中遇到最多的问题。一个零件描述里写“300乘200”,如果你的模板或脚本里没有指定单位,最终DXF里的300可能被当成“300英寸”,导入CAD后一量,好家伙,7620毫米,完全没法用。

解决方式:在所有提示词模板里强制带上单位描述,要求模型输出参数时明确标注单位;在ezdxf生成DXF时,用doc.units = ezdxf.units.MM把文件单位写死。这样无论下游软件怎么设置,至少文件本身是毫米制,不会再出现25.4倍的恐怖误差。

5.2 描述太模糊,AI只能“猜”,一猜就偏

我踩过最典型的一个坑是:“做一个带四个孔的支架”。最后模型给了四个孔径一模一样的孔,位置对称排布,看起来很合理。但用户实际想要的是两个大孔两个小孔,大孔用来过管线,小孔用来固定。这个案例让我彻底明白:AI默认世界是“对称且整齐”的,但工程世界充满不对称。

解决方式是用一套“描述八股”,把需求说死:

  • 主体形状加尺寸:比如“L型支架,长边120,短边80,厚度5”
  • 特征加位置尺寸:比如“两个直径10的孔,孔中心距边缘20,左右居中”
  • 加工要求:比如“外轮廓圆角R5,不允许有尖角”
  • 出图要求:比如“要显示中心线,尺寸标注放两侧”

这套模板我一直在用,也会直接写进给AI的提示词里。把描述模板化的好处是,AI输出的稳定性直线上升,因为它不再需要“阅读理解”,只需要“参数抽取”。

5.3 格式兼容性:DWG是闭源的,别死磕

很多人的工作流强迫症是“必须出DWG”,但DWG格式是Autodesk私有格式,开源库只能有限支持。我在生产里吃过这个亏:用某轮子库改DWG,改了200张图,回来一检查,有三张图层信息丢失,当场头疼。

我的做法是把中间格式统一成DXF或STEP,最后一步再在企业内部的转换环境里统一转成DWG。DXF在几乎所有CAD软件里都能无损打开,包括中望CAD、CAD看图王,兼容性比DWG更省心。你们在“cad转pdf”“cad图纸合并”这些操作里也遇到类似问题的话,优先问一句“能不能用DXF走中间流程”,十有八九能少踩一半坑。

5.4 环境问题:与其折腾CAD安装卸载,不如直接上轻量路径

热词里有一大堆关于CAD安装的问题,比如“安装cad一直出现c++2005cpi错误”“cad如何彻底卸载不影响二次安装”“cad激活页面脚本发生错误”。这些我当年全遇到