☰
text-to-cad 实战:从文字描述到 STEP/STL/GLB 三维模型
2026/10/9 6:52:19 网站建设 项目流程

1. 从一段文字到三维模型:text-to-cad 到底在解决什么问题

第一次听到 "text-to-cad" 这个词,很多人脑子里冒出来的画面是:在输入框里敲一句"给我画一个法兰盘",然后屏幕上就自动出现一个可以旋转、可以导出、可以拿去加工的实体模型。这个画面听起来像是科幻,但它背后对应的其实是一个非常具体的工程痛点——从设计意图到几何模型之间的那道手工翻译鸿沟。

传统 CAD 工作流是这样的:你脑子里有一个零件的形状,或者客户给你一段文字描述"一个外径 80mm、内径 40mm、厚度 10mm 的圆环,边缘倒角 2mm",你需要打开 SolidWorks、Fusion 360 或者中望 CAD,手动建草图、拉伸、倒角、标注,一步步把这个描述"翻译"成几何。这个过程对于简单零件可能只要几分钟,但对于批量、重复、参数化的零件,或者需要快速验证几十种尺寸组合的场景,手工建模的时间成本会迅速膨胀。

text-to-cad 要做的,就是把这段"文字描述 → 几何模型"的翻译过程自动化。它的核心价值不在于替代设计师做复杂曲面造型,而在于把结构清晰、参数明确的零件描述,快速转成可用的三维几何文件,输出格式通常落在 STEP、GLB、STL 这几个上。这三个格式各有各的用途,后面我会专门拆开讲。

这篇文章适合几类人看:一是做机械设计、钣金、工装夹具的工程师,想看看能不能用文字驱动的方式加速建模;二是做 3D 打印、手办、模型的朋友,想从一段描述直接拿到 STL;三是做软件开发、想在自己的工具链里集成"文字生成模型"能力的同学。我会从原理、格式选型、实操链路、踩坑经验几个角度,把这件事讲透。

需要先说明一点:text-to-cad 目前不是一个单一软件的名字,而是一类能力的统称。市面上有基于大模型直接生成 CAD 脚本的方案,也有基于参数模板填充的方案,还有基于程序化几何(procedural geometry)的方案。它们的能力边界、输出质量、适用场景差别很大。下面我按我实际接触和测试过的思路来展开。

2. 文字是怎么变成几何的:三条主流技术路线拆解

要把"一段话"变成"一个 STEP 文件",中间必须有一座桥。这座桥怎么搭,决定了整个方案的精度、可控性和适用范围。我把它归纳成三条路线,每条都有自己的脾气。

2.1 路线一:大模型生成 CAD 脚本,再由内核执行

这是目前最"性感"的一条路。核心思路是:让大语言模型读你的文字描述,输出一段 CAD 建模脚本(比如 OpenSCAD 的脚本、CadQuery 的 Python 代码、或者 FreeCAD 的宏命令),然后由对应的几何内核去执行这段脚本,最终导出 STEP 或 STL。

为什么这条路可行?因为 OpenSCAD、CadQuery 这类工具本身就是"代码即模型"的范式。一个立方体就是cube([10,10,10]),一个圆柱就是cylinder(r=5,h=20)。大模型在训练数据里见过大量这类代码,它能把"一个边长 10 的立方体上面挖一个半径 3 的孔"翻译成对应的脚本。

这条路的优点是可控性强——脚本是透明的,你能看到模型是怎么一步步构造出来的,改一个参数就能重新生成。缺点是对描述的结构性要求高。如果你的描述是"一个看起来很结实的支架",模型大概率会瞎编;但如果你说"一个 L 形支架,底板 60×40×5mm,立板高 50mm 厚 5mm,底板上开两个直径 6mm 的孔,孔心距底板边缘 10mm",生成质量会高很多。

2.2 路线二:参数模板 + 自然语言槽位填充

这条路没那么炫,但工程上最稳。做法是:预先针对某类零件(法兰、齿轮、支架、外壳)写好参数化模板,模板里留出若干参数槽位(外径、内径、厚度、孔数、孔距等)。然后用自然语言处理把用户描述里的数值和意图提取出来,填进槽位,驱动模板生成几何。

它的优点是精度可控、结果可预测。因为几何逻辑是你自己写的,不会出现模型"自由发挥"的情况。缺点是覆盖面窄,只能处理你预先定义好的零件类型。遇到模板外的形状就无能为力。

我个人的判断是:如果你要做的是生产级的工具,路线二应该是主力,路线一作为补充。因为工程场景里,绝大多数需求其实是"已知零件类型,只是尺寸在变",模板化能覆盖 80% 的高频需求,而且稳定。

2.3 路线三:程序化几何 + 规则引擎

这条路介于两者之间。它不依赖大模型,而是用一套几何构造规则(比如 CSG 布尔运算、扫掠、放样)配合规则引擎,把结构化的描述转成几何。你可以把它理解成"用代码写一个专门的建模 DSL"。

举个例子,你可以定义一套语法:box(60,40,5) - cylinder(d=6, h=5) at (10,10),表示从一块 60×40×5 的板上,在坐标 (10,10) 处减去一个直径 6 的通孔。规则引擎解析这套语法,调用几何内核执行。

这条路适合对精度和可复现性要求极高的场景,比如批量生成标准件库。它的门槛在于你需要自己设计语法和解析器,前期投入大,但一旦搭好,后续扩展很顺。

三条路线的对比如下:

路线核心机制精度可控性覆盖范围上手门槛适合场景
大模型生成脚本LLM 输出建模代码中广低快速原型、探索性建模
参数模板填充模板 + 槽位提取高窄中标准件、批量变型设计
程序化几何规则DSL + 规则引擎高中高标准件库、可复现生产

选哪条路,取决于你要解决的是"偶尔快速出个模型"还是"稳定批量产出可用几何"。前者可以激进一点用大模型,后者必须把可控性放在第一位。

3. STEP、GLB、STL 到底该选哪个:格式选型的底层逻辑

text-to-cad 生成出来的模型,最终要落到一个文件格式上。STEP、GLB、STL 这三个是最常被提到的,但它们服务的目标完全不同。选错格式,后面整条链路都会别扭。

3.1 STEP:面向制造的精确边界表示

STEP(Standard for the Exchange of Product model data)是工业界做 CAD 数据交换的事实标准。它用的是B-rep(边界表示),也就是说,模型是由精确的数学曲面(平面、圆柱面、NURBS 曲面)和它们的边界定义的。一个圆柱在 STEP 里就是一个真正的圆柱面,半径是精确的 5.000mm,不是一堆小三角面拼出来的近似。

这意味着什么?意味着 STEP 文件可以被 SolidWorks、UG、Creo、中望 CAD 这些软件直接打开,可以继续做特征编辑、可以出工程图、可以拿去 CAM 编程加工。如果你生成的模型最终要进入制造环节,STEP 是唯一正确的选择。

但 STEP 也有代价:它体积大、解析复杂、对几何质量要求高。如果生成的几何有自相交、面不闭合、拓扑错误,STEP 导出会直接失败或者产生一个坏模型。所以走 STEP 这条路,几何内核的健壮性是关键。

3.2 STL:面向 3D 打印的三角网格

STL 是 3D 打印领域最通用的格式。它把模型表面全部离散成三角形面片,只记录每个三角形的三个顶点坐标和法向量。没有曲面概念,没有单位概念(很多 STL 是无单位的,需要切片软件自己判断),没有颜色和材质。

STL 的优点是简单、通用、几乎所有切片软件和 3D 打印工具链都认。缺点是精度是近似的——一个圆柱面被离散成多少个三角形,直接决定了它的圆滑程度。离散太粗,打印出来是棱柱;离散太细,文件体积爆炸。

从 text-to-cad 的角度看,STL 是最容易输出的格式,因为大多数几何内核都能做网格离散。但要注意网格质量和流形性:如果生成的网格有孔洞、有非流形边,切片软件会报错或者打印出问题。这是实操中最常见的坑之一。

3.3 GLB:面向展示和交互的轻量格式

GLB 是 glTF 的二进制版本,主打 Web 和实时渲染场景。它支持材质、颜色、动画、层级结构,文件体积小,加载快。如果你要把生成的模型放到网页上做在线预览、放到 AR/VR 场景里展示、或者做产品配置器,GLB 是最合适的。

但 GLB 不适合制造。它的几何精度和 STEP 没法比,也不携带工程语义。它就是一个"看起来对"的展示模型。

3.4 格式选型的决策表

目标推荐格式原因注意事项
进入 CAD 继续编辑STEP精确 B-rep,可特征编辑几何必须闭合无拓扑错误
3D 打印STL切片软件通用注意网格流形性和离散精度
网页/AR 展示GLB轻量、支持材质不追求制造精度
数控加工STEPCAM 需要精确几何单位必须明确
快速预览GLB 或 STL加载快仅用于看形状

我踩过的一个典型坑是:用某个工具生成了模型,直接导出 STL 去打印,结果切片软件提示"模型不是流形的"。排查半天发现是布尔运算后留下了重合面。后来改成先导出 STEP,用 CAD 软件检查一遍几何,确认无误再转 STL,问题就没了。STEP 是"体检报告",STL 是"成品照片",中间加一道 STEP 检查能省很多事。

4. 搭一条能跑通的 text-to-cad 链路:从描述到文件的完整实操

光讲原理不够,下面我把一条实际能跑通的链路拆开讲。我用的思路是"大模型生成 CadQuery 脚本 → 执行导出 STEP → 再转 STL/GLB",这条链路门槛低、可控性够、输出格式全。

4.1 环境准备:几何内核和依赖

CadQuery 是一个基于 Python 的参数化 CAD 库,底层用的是 OpenCASCADE 几何内核。它的好处是纯代码建模、能导出 STEP 和 STL、社区活跃。

安装大致是这样:

pip install cadquery

如果你要用 GLB,还需要额外的网格转换工具,比如trimesh:

pip install trimesh

注意:CadQuery 依赖 OpenCASCADE,在某些系统上安装会遇到编译问题。如果 pip 装不上,可以考虑用 conda 装,或者用官方提供的 Docker 镜像。这一步卡住的人不少,别硬刚,换 conda 通常能解决。

4.2 让大模型输出可执行的建模脚本

这一步的关键是提示词的结构。你不能只说"生成一个支架",要给出明确的几何约束。我常用的提示词模板是这样的:

你是一个 CAD 建模助手。请用 CadQuery 的 Python 代码描述以下零件: - 零件类型:L 形支架 - 底板:长 60mm,宽 40mm,厚 5mm - 立板:高 50mm,厚 5mm,位于底板一条长边上 - 底板开孔:两个直径 6mm 的通孔,孔心距底板两短边各 10mm,距长边 10mm - 所有外角倒圆角 R2 请只输出可执行的 Python 代码,不要解释。

模型会输出类似这样的代码:

import cadquery as cq # 底板 base = cq.Workplane("XY").box(60, 40, 5) # 立板 upright = ( cq.Workplane("XY") .center(0, 20) .box(60, 5, 50) .translate((0, 0, 25)) ) # 合并 part = base.union(upright) # 开孔 part = ( part.faces(">Z").workplane() .pushPoints([(-20, -10), (20, -10)]) .hole(6) ) # 倒圆角 part = part.edges("|Z").fillet(2) # 导出 cq.exporters.export(part, "bracket.step") cq.exporters.export(part, "bracket.stl")

这段代码能不能直接跑,取决于模型对 CadQuery API 的掌握程度。实测下来,简单零件一次通过率还行,稍微复杂一点就需要人工修。所以我的做法是:把生成的代码当成"草稿",人工检查坐标、布尔运算顺序、倒角选择器这些容易出错的地方。

4.3 执行、验证、导出

代码跑通后,你会得到 STEP 和 STL 两个文件。这时候别急着用,先做三件事:

第一,用 CAD 软件打开 STEP 检查几何。看有没有多余的面、有没有没合并的实体、尺寸对不对。中望 CAD、FreeCAD 都能打开 STEP。

第二,检查 STL 的网格质量。可以用trimesh快速看一下:

import trimesh mesh = trimesh.load("bracket.stl") print("是否水密:", mesh.is_watertight) print("是否流形:", mesh.is_winding_consistent) print("体积:", mesh.volume)

is_watertight为 True 才说明网格是封闭的,能正常打印。

第三,如果要 GLB,用 trimesh 转一下:

mesh.export("bracket.glb")

4.4 参数化改造:让脚本可复用

一次生成一个模型没意思,真正有价值的是把脚本参数化。把尺寸抽成变量,你就能批量生成一系列变型:

def make_bracket(base_l=60, base_w=40, base_t=5, up_h=50, up_t=5, hole_d=6): base = cq.Workplane("XY").box(base_l, base_w, base_t) upright = ( cq.Workplane("XY") .center(0, base_w/2) .box(base_l, up_t, up_h) .translate((0, 0, up_h/2)) ) part = base.union(upright) part = ( part.faces(">Z").workplane() .pushPoints([(-base_l/2+10, -base_w/2+10), (base_l/2-10, -base_w/2+10)]) .hole(hole_d) ) return part

这样你就能用一个循环生成 20 种尺寸组合,每个导出独立的 STEP。这才是 text-to-cad 在工程上真正省时间的地方——不是省一次建模,而是省掉几十次重复建模。

5. 实测中那些让人抓狂的坑:几何、单位、拓扑与命名

上面讲的链路听起来顺,但实际跑起来,坑一个接一个。我把踩过的、见过的典型问题整理出来,这些是文档里基本不会写、但实操中一定会遇到的东西。

5.1 布尔运算失败:最常见的拦路虎

布尔运算(并、交、差)是 CAD 建模的核心操作,也是最容易失败的地方。失败的原因通常有几类:

  • 面重合:两个实体有一个面完全贴合,布尔运算时内核无法判断该保留哪个面,直接报错。解决办法是让两个实体有轻微重叠(比如多伸进去 0.01mm),或者先合并再处理。
  • 自相交:生成的几何自己和自己相交,这在倒角、扫掠操作后很常见。
  • 精度问题:OpenCASCADE 有容差概念,当两个面的距离小于容差时会被认为是重合,导致意外结果。

我的经验是:布尔运算的顺序很重要。先做大的合并,再做小的开孔,最后做倒角。倒角一定放最后,因为倒角会改变边的拓扑,如果先倒角再开孔,孔的位置可能就找不到正确的面了。

5.2 单位混乱:一个让模型大 1000 倍的隐形杀手

CAD 里单位是个大坑。STEP 文件本身可以携带单位信息,但很多工具默认按毫米处理。STL 更麻烦,它不携带单位,切片软件默认按毫米读。如果你生成的模型实际是按米算的,导入切片软件就会变成一个巨大的物体。

我遇到过一次:用某个库生成的模型,导出 STL 后在切片软件里显示尺寸是 60000mm。排查发现那个库内部用的是米,导出时没做单位转换。解决办法是在导出前统一乘 1000,或者用 STEP 导出(STEP 带单位),再在 CAD 里转 STL。

提示:养成习惯,生成模型后第一件事就是量一下关键尺寸,确认单位对得上。别等到打印出来才发现大了 1000 倍。

5.3 网格离散精度:STL 圆不圆的秘密

STL 把曲面离散成三角形,离散精度直接决定模型质量。精度太低,圆柱变棱柱;精度太高,文件几百 MB。CadQuery 导出 STL 时可以指定公差:

cq.exporters.export(part, "part.stl", tolerance=0.01, angularTolerance=0.1)

tolerance是线性公差(单位 mm),angularTolerance是角度公差(弧度)。对于一般 3D 打印,tolerance=0.01到0.05就够了。对于精细手办,可以到0.005。但要注意,公差越小文件越大,处理越慢。

5.4 命名和版本管理:批量生成后的灾难

当你批量生成 50 个模型后,文件名管理会变成灾难。part1.step、part2.step这种命名,过两天你自己都不知道哪个是哪个。我的做法是用参数组合命名,比如bracket_L60_W40_T5_H50.step,一眼就能看出尺寸。同时把生成脚本和参数表一起存档,这样任何时候都能复现。

5.5 常见问题速查表

现象可能原因排查方向解决思路
布尔运算报错面重合/自相交检查实体是否贴合增加重叠量,调整运算顺序
模型尺寸异常单位不一致量关键尺寸统一为毫米,导出前转换
STL 打印报错网格非流形检查 is_watertight修复网格或重新导出
圆柱不圆离散精度低看三角形数量减小 tolerance
倒角失败边选择器选错检查边拓扑调整选择器,倒角放最后
文件打不开几何拓扑错误用 CAD 检查重新生成或修复

6. 这套东西到底能用在哪些场景:从标准件到批量变型

text-to-cad 不是万能的,它有明确的能力边界。搞清楚它能干什么、不能干什么,比盲目吹捧它有用得多。

6.1 最适合的场景:参数化标准件批量生成

这是 text-to-cad 的甜蜜区。法兰、垫片、支架、齿轮、外壳、连接件,这类零件的特点是结构固定、参数可变。你写一个模板,输入不同参数,就能批量产出。传统方式下,工程师要一个个改尺寸、重新建模、重新导出,一天可能就做几十个。用脚本化方式,几分钟就能生成几百个。

我见过一个实际案例:某工装夹具厂需要为不同型号的产品生成对应的定位块,每个定位块的孔位和外形都不同。以前是设计师一个个画,后来改成参数化脚本,输入产品尺寸表,自动生成全部定位块的 STEP,效率提升非常明显。

6.2 可以尝试的场景:快速原型和概念验证

当你需要快速验证一个设计想法时,text-to-cad 能帮你跳过繁琐的建模步骤,直接拿到一个可看、可打印的模型。比如你想验证一个外壳的握持手感,用文字描述生成一个粗略模型,打印出来拿在手里感受一下,比在屏幕上转来转去直观得多。

但要注意,这种场景下不要追求精度,追求的是"快速看到形状"。用 GLB 或低精度 STL 就够了。

6.3 不太适合的场景:复杂曲面和自由造型

text-to-cad 目前处理不了复杂的自由曲面,比如汽车车身、消费电子的流线型外壳、艺术雕塑。这类造型需要设计师的审美判断和曲面控制能力,文字描述根本无法精确表达。硬要用文字生成,结果大概率是四不像。

6.4 场景适配对照表

场景适配度推荐格式关键考量
标准件批量生成高STEP模板稳定性
工装夹具变型高STEP参数表驱动
快速原型验证中STL/GLB速度优先
3D 打印手办中STL网格质量
复杂曲面造型低-不适合
艺术雕塑低-不适合

7. 我在这条路上踩出来的几条经验

做了一段时间的 text-to-cad 实践,有几个体会是文档里不会写、但我觉得最值钱的。

第一,别指望大模型一次生成完美代码。它的定位是"帮你写初稿",不是"替你做设计"。你要有能力读懂它生成的代码,知道哪里可能有问题,能改。如果你完全不懂 CadQuery 或几何建模,生成出来的代码你连错在哪都看不出来,那这条路对你来说就是黑盒,不可靠。

第二,模板比模型更值钱。与其花时间调提示词让大模型生成各种形状,不如花时间把几个高频零件类型做成稳定的参数化模板。模板一旦稳定,后面就是纯参数输入,效率和可靠性都远超每次让模型现生成。

第三,STEP 是中间枢纽。不管最终要 STL 还是 GLB,我都建议先导出 STEP,检查几何无误后再转其他格式。STEP 是精确的、可检查的,STL 和 GLB 是派生产物。把 STEP 当成"源文件",其他格式当成"发布产物",这个心智模型能帮你避开很多坑。

第四,单位、单位、单位。重要的事情说三遍。我见过太多因为单位问题导致的返工。生成模型后第一件事就是量尺寸,确认单位。这个习惯能救你无数次。

第五,批量生成一定要有参数表和日志。生成 100 个模型,如果中间有一个失败了,你得知道是哪个、为什么失败。我的做法是每次生成都记录参数组合和结果状态,失败的单独拎出来排查。没有日志的批量生成,出了问题就是一团乱麻。

最后分享一个小技巧:如果你要生成的零件有对称性,只生成一半或四分之一,然后用镜像操作补全。这样脚本更简单,布尔运算更少,出错概率更低。对称零件全尺寸建模,很多时候是自找麻烦。

这套东西还在快速演进,工具链每个月都在变。但底层的逻辑——文字描述结构化、几何构造参数化、输出格式按用途选——这几条短期内不会变。把这几条吃透,工具怎么换你都能接得住。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询