news 2026/10/8 23:13:40

text-to-cad 实战:从自然语言到 STEP/STL/GLB 三维模型生成全链路拆解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
text-to-cad 实战:从自然语言到 STEP/STL/GLB 三维模型生成全链路拆解

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

第一次听到 "text-to-cad" 这个词,很多人脑子里浮现的画面大概是:对着电脑敲一行字,屏幕上就自动长出一个三维零件,然后直接导出拿去加工。这个想象不算离谱,但也没那么简单。我接触这个方向有一段时间了,从最早的参数化脚本生成,到后来用大模型驱动几何建模,踩过的坑比想象中多得多。这篇文章就把我理解的 text-to-cad 完整拆开讲一遍——它是什么、底层靠什么跑通、实际落地时会遇到哪些问题、以及怎么把它接进你现有的 CAD 工作流里。

先把概念说清楚。text-to-cad,字面意思就是"文本到 CAD 模型",指的是用自然语言描述一个零件的形状、尺寸、特征,由系统自动生成可编辑或可制造的三维 CAD 数据。这里的 CAD 数据不是随便一个网格模型,而是带有几何语义的实体或曲面,最终往往要落到STEP、STL、GLB这几种格式上。这三种格式恰好代表了三条不同的下游路径:STEP 面向精确制造和后续编辑,STL 面向 3D 打印和网格处理,GLB 面向可视化、渲染和 Web 展示。理解这三者的差异,是理解整个 text-to-cad 价值链的起点。

为什么这件事值得关注?因为传统 CAD 建模的门槛实在不低。一个熟练的工程师建一个中等复杂度的零件,从草图到拉伸、倒角、打孔、阵列,动辄半小时起步;如果需求方只是想要一个"大概长这样"的概念模型,这个投入产出比就很低了。text-to-cad 想解决的,正是"想法到模型"这一段最耗时的翻译过程。它适合的人群也很明确:做概念设计的工业设计师、需要快速出原型的硬件创业者、做仿真前处理的工程师,以及大量需要批量生成标准件的开发者。

但我要先泼一盆冷水:目前没有任何一个 text-to-cad 系统能做到"你说人话,它出完美工程图"。它更像一个能力很强但需要引导的实习生——你描述得越结构化、越接近它训练时见过的表达方式,产出质量越高。所以这篇文章不会给你画大饼,而是把真实的能力边界、技术原理和实操方法讲透,让你知道什么能做、什么暂时别指望。

2. 三种输出格式决定了三条完全不同的技术路线

很多人做 text-to-cad 项目时,第一步就卡在"我到底该输出什么格式"上。这个问题看似是格式选择,实际上决定了你整个技术栈的走向。我见过太多人一开始没想清楚,做到一半发现 STEP 转 STL 丢特征、GLB 拿去做打印尺寸不对,返工成本极高。所以这一节先把三种格式的定位讲明白。

2.1 STEP:精确边界表示,制造与再编辑的基准

STEP(Standard for the Exchange of Product Data)是工业界公认的精确几何交换格式,它基于B-Rep(Boundary Representation,边界表示)来描述实体。简单说,B-Rep 记录的是一个实体由哪些面、哪些边、哪些顶点组成,每个面背后还有精确的数学曲面方程(平面、圆柱面、NURBS 曲面等)。这意味着 STEP 里的一个圆孔,是真的"圆",而不是用很多小三角面拼出来的近似圆。

这个特性决定了 STEP 是 text-to-cad 里最"值钱"的输出。因为只有 STEP 能被重新导入到 SolidWorks、中望 CAD、Fusion 360 这类参数化软件里继续编辑——你可以改孔径、加特征、做装配。如果你的目标是生成可制造的零件,STEP 几乎是唯一选择。代价是生成难度最高:系统必须真正理解几何拓扑关系,而不是生成一堆三角面片糊弄过去。

2.2 STL:三角网格,3D 打印与网格处理的主力

STL 是 3D 打印领域的事实标准,它用大量三角面片逼近物体表面。优点是简单、通用、几乎所有切片软件都认;缺点是没有单位、没有拓扑、没有曲面信息。一个 STEP 里的光滑圆柱,转成 STL 后就变成了一圈多边形棱柱,精度取决于你导出时的弦高公差设置。

在 text-to-cad 场景里,STL 通常不是直接生成的,而是从 STEP 或内部实体模型转换出来的。这里有个高频坑:STL 本身不带单位信息,很多系统默认按毫米导出,但有些按米,导入切片软件后模型要么大得离谱要么小得看不见。我一般会在导出时明确指定单位,并在切片软件里二次确认尺寸。

2.3 GLB:面向渲染与 Web 的轻量格式

GLB 是 glTF 的二进制版本,主打 Web 展示和实时渲染。它支持材质、颜色、贴图,加载快,浏览器原生友好。如果你的 text-to-cad 是要做一个"输入文字、网页里实时预览模型"的产品,GLB 是最佳选择。但它不适合制造——GLB 里的几何精度和单位都不保证,拿去做打印基本会出问题。

下面这张表是我总结的选型对照,实际项目里直接照着选基本不会错:

格式几何类型是否可再编辑典型用途生成难度
STEPB-Rep 精确实体是制造、装配、参数化编辑高
STL三角网格否3D 打印、网格仿真中
GLB网格+材质否Web 预览、渲染展示低

提示:如果你的项目既要展示又要制造,正确做法是内部维护一份精确实体模型,展示时转 GLB,制造时转 STEP 或 STL,而不是分别生成三份。

3. 文本如何变成几何:拆解 text-to-cad 的核心链路

搞清楚输出格式之后,下一个问题就是:一句话是怎么变成几何体的?这条链路其实可以拆成几个相对独立的环节,每个环节都有成熟方案,也有各自的坑。我把它拆成"语义解析—参数化表达—几何生成—格式转换"四段来讲。

3.1 语义解析:把自然语言翻译成结构化参数

大模型在这里扮演的是"翻译官"角色。用户说"一个 50 毫米长、20 毫米宽、10 毫米厚,四角带 R3 圆角的底板,中间开一个直径 8 毫米的通孔",模型需要把它解析成结构化数据,比如:

{ "type": "plate", "length": 50, "width": 20, "thickness": 10, "fillets": {"radius": 3, "corners": "all"}, "holes": [{"diameter": 8, "position": "center", "through": true}] }

这一步的关键在于约束模型的输出格式。如果你直接让模型输出代码或几何,它很容易胡编;但如果让它输出一个定义良好的 JSON schema,可靠性会高很多。我的经验是:schema 设计得越贴近 CAD 的建模特征树(草图、拉伸、孔、圆角、阵列),后续生成越顺。

3.2 参数化表达:用代码描述几何的几种主流方式

拿到结构化参数后,需要一种"可执行的几何描述"。目前主流有三条路:

  • OpenSCAD 风格:用类似编程的语言描述 CSG(构造实体几何),比如cube([50,20,10])再difference()挖孔。优点是简单直观,缺点是复杂曲面能力弱。
  • CadQuery / build123d:基于 Python 的参数化建模库,底层是 OpenCASCADE 几何内核,能生成真正的 B-Rep 实体,直接导出 STEP。这是目前 text-to-cad 项目里最常用的方案。
  • 直接调用 CAD 内核 API:比如通过 Parasolid、ACIS 或 OpenCASCADE 的底层接口,灵活但开发成本高。

对绝大多数项目,我推荐CadQuery 或 build123d。原因很直接:它们能输出 STEP,Python 生态成熟,大模型对 Python 代码的生成质量也明显高于其他 DSL。让模型生成 CadQuery 脚本,再执行脚本得到实体,这条链路目前最稳。

3.3 几何生成与校验:为什么必须做"可执行性检查"

大模型生成的代码不一定能跑通。常见错误包括:参数单位混乱、布尔运算顺序错误导致空实体、圆角半径大于边长导致失败。所以生成之后必须有一道执行与校验环节:跑一遍脚本,捕获异常,检查生成的实体体积是否大于零、包围盒尺寸是否符合预期。

我一般会加一个自动重试机制:如果执行失败,把报错信息回传给模型,让它修正后重试,通常两三次就能收敛。这一步是 text-to-cad 从"玩具"变成"能用"的分水岭,很多 demo 好看但一用就崩,就是因为跳过了校验。

3.4 格式转换:STEP 到 STL、GLB 的落地细节

实体生成后,导出 STEP 基本是一行代码的事。转 STL 时要注意弦高公差(linear deflection)和角度公差(angular deflection):公差越小网格越密、文件越大。做 3D 打印一般弦高设 0.01~0.05 毫米足够;做 Web 预览可以放宽到 0.1 毫米以上以减小体积。转 GLB 则通常借助 trimesh 或 assimp 这类库,顺便可以带上材质和颜色。

4. 把 text-to-cad 接进真实工作流的实操步骤

原理讲完,这一节上干货。假设你要从零搭一个能用的 text-to-cad 小系统,下面是我实际跑通过的步骤,按顺序做基本不会翻车。

4.1 环境准备:几何内核与依赖安装

核心依赖是 OpenCASCADE 的 Python 封装。用 CadQuery 的话,推荐直接用 conda 装,能省掉大量编译问题:

conda create -n text2cad python=3.11 conda activate text2cad conda install -c conda-forge cadquery pip install trimesh openai

这里有个坑:CadQuery 依赖的 OCP 库对 Python 版本和系统架构比较敏感,Windows 上直接用 pip 装经常失败,conda-forge 的预编译包最省心。如果你要用 build123d,装法类似,它和 CadQuery 共享底层内核。

4.2 设计提示词模板:让模型稳定输出可执行代码

不要指望一句大白话就能出好结果。我通常会给模型一个固定的系统提示,明确要求它输出 CadQuery 代码,并规定好单位、坐标系、导出方式。模板大致长这样:

你是一个 CAD 建模助手。请根据用户描述生成 CadQuery Python 代码。 要求: 1. 所有尺寸单位为毫米。 2. 模型以原点为中心,Z 轴向上。 3. 代码最后将结果赋值给变量 result。 4. 只输出代码,不要解释。

实测下来,加了这套约束后,代码一次通过率能从三成提到七成以上。剩下的靠重试机制兜底。

4.3 执行、校验与自动重试的完整闭环

把生成、执行、校验串成一个循环,是整个系统的心脏。伪代码逻辑如下:

for attempt in range(3): code = llm_generate(prompt, error_feedback) try: result = execute_cadquery(code) if result.volume > 0 and bbox_ok(result): break except Exception as e: error_feedback = str(e)

bbox_ok是我自己加的包围盒检查,用来防止模型生成一个尺寸离谱的实体。比如用户要 50 毫米的板子,结果生成了 5000 毫米,体积检查通不出问题,但包围盒一量就露馅了。

4.4 导出与下游对接:STEP、STL、GLB 一次生成

校验通过后,一次性导出三种格式,供不同下游使用:

import cadquery as cq cq.exporters.export(result, "part.step") cq.exporters.export(result, "part.stl", tolerance=0.02) # GLB 用 trimesh 从 STL 或网格转换 import trimesh mesh = trimesh.load("part.stl") mesh.export("part.glb")

这样一套下来,用户输入一句话,几秒内就能拿到可编辑的 STEP、可打印的 STL 和可预览的 GLB。我实测过一个中等复杂度的支架类零件,从输入到三种格式齐全,大概 10 到 20 秒,取决于模型调用延迟。

5. 实测中最容易翻车的几个地方

前面讲的是"应该怎么做",这一节讲"实际会怎么坏"。这些坑我基本都亲自踩过,写出来帮你省时间。

5.1 单位与坐标系混乱:最常见的低级错误

大模型对单位极不敏感。你说"长 5 厘米",它可能按 5 毫米建模,也可能按 5 米。解决办法只有一个:在提示词里强制统一为毫米,并在校验环节检查包围盒。坐标系同理,有的模型习惯 Z 轴向上,有的习惯 Y 轴向上,导出到下游软件后模型躺倒的情况非常普遍。我一般固定要求 Z 轴向上、模型居中,减少对接摩擦。

5.2 布尔运算顺序错误导致空实体

挖孔、切除这类操作,如果顺序或方向搞反,很容易得到一个体积为零的空壳。比如先挖孔再拉伸,孔就被填回去了。这类错误不会报异常,但结果明显不对。所以体积检查是必须的,result.volume > 0这一条能拦下大部分逻辑错误。

5.3 圆角与薄壁特征:几何内核的经典雷区

圆角半径大于相邻边长、薄壁厚度小于内核容差,都会导致建模失败。OpenCASCADE 在这类情况下经常直接抛异常。我的处理方式是:在提示词里提醒模型"圆角半径不得超过最小边长的三分之一",并在失败重试时把具体报错喂回去,让它自动调小参数。

5.4 复杂曲面的能力天花板

必须承认,当前 text-to-cad 对自由曲面、有机形状的支持很弱。你让它生成一个"流线型外壳",结果往往是几个拉伸体拼出来的方块。这不是提示词的问题,而是参数化建模本身对自由曲面的表达就吃力。如果你的需求以曲面为主,建议走另一条路——用隐式建模或网格生成方案,而不是硬套 CSG。

6. 关于精度、性能与批量生成的进阶思考

如果你只是做 demo,前面几节够了。但如果你要把它做成生产工具,还有几个维度必须考虑。

6.1 精度控制:STEP 与 STL 的精度不是一回事

STEP 的精度由几何内核的容差决定,通常是 1e-6 米级别,足够精确。STL 的精度则由你导出时的公差参数决定,是"可调"的。很多人误以为 STL 精度是固定的,其实同一份 STEP 可以导出不同精度的 STL。做打印件我一般用 0.02 毫米弦高,做展示用 0.1 毫米,文件体积能差好几倍。

6.2 批量生成时的稳定性与并发

批量场景下,最大的敌人是个别请求失败拖垮整批。我的做法是把每个生成任务隔离在独立进程里执行,设置超时,失败就跳过并记录,不让它阻塞队列。另外几何内核不是线程安全的,多线程并发建模容易崩,用多进程更稳。

6.3 缓存与复用:相同描述不必重复生成

如果系统有大量重复或相似的描述(比如标准件),加一层缓存能省下大量算力。我一般对结构化参数做哈希,命中就直接返回已生成的模型文件。对于参数只差一点点的需求,还可以做参数化模板,只改数值不重新生成代码。

7. 我在这条路上攒下的几点实在经验

做 text-to-cad 这段时间,最大的体会是:它不是一个纯 AI 问题,而是一个 AI 加几何工程的复合问题。光会调模型不够,你得懂 B-Rep、懂布尔运算、懂格式转换,否则生成的东西看着像那么回事,一到下游就废。

第二个体会是,约束比自由更重要。给模型越明确的 schema、越严格的提示词、越完善的校验,产出越可靠。放任它自由发挥,结果往往不可控。这跟带新人是一个道理,边界划清楚了,反而效率高。

第三个是别追求一步到位。先从简单的板类、轴类、支架类零件做起,把链路跑通,再逐步加复杂度。我见过太多项目一上来就想生成复杂装配体,结果卡在基础几何上动弹不得。把 STEP、STL、GLB 三条输出路径都打通,把校验和重试做扎实,这套系统就已经能解决相当一部分真实需求了。至于自由曲面和复杂装配,那是下一阶段的事,急不来。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 23:07:24

隔一堵墙,WiFi 为什么慢一半:它不是听不清,是换了个说法

隔一堵墙,WiFi 为什么慢一半:它不是听不清,是换了个说法 先拆开两件事:格数掉一格,和速度掉一半,不是同一个东西 你可能从没想过这个问题,但你每天都在遇到:手机 WiFi 图标只掉了一…

作者头像 李华
网站建设 2026/10/8 23:04:54

市面上有哪些是真正安全的AI智能降重工具(轻松压低AI生成疑似率)

最崩溃的不是查重难题,而是查重达标却AI率超标亮红灯。很多工具只会简单同义词替换、浅层改字,根本不敢动AI的句式和逻辑。结果你辛辛苦苦降了重复,却在AIGC检测里原形毕露,学校一查就翻车。 本篇结合全网实测数据,精选…

作者头像 李华
网站建设 2026/10/8 23:04:54

算法日常・每日刷题--<动态规划>11

面试题 17.16. 按摩师 - 力扣(LeetCode)面试题 17.16. 按摩师 - 一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列&#…

作者头像 李华
网站建设 2026/10/8 23:03:31

LLM直接生成PTX:新型AI编译器范式解析

1. 这不是比喻,是正在发生的编译器范式迁移“AI 就是编译器”——这句话在标题里听起来像一句技术圈的修辞,甚至带点挑衅意味。但如果你最近关注过NVIDIA GTC大会的前沿动向、Hugging Face上突然爆火的ptx-gen项目仓库,或者翻过几篇来自UC Be…

作者头像 李华
网站建设 2026/10/8 23:03:12

27届降AIGC率测评:6款工具逐项打分,谁更稳

论文查完AIGC标红那一刻,比查重超标还让人头疼。降重软件一堆,但能同时处理“AI痕迹”的工具并不多。花了三周时间,用同一批文科和理工科论文样本,把市面上讨论度较高的6款降AIGC率工具挨个测了一遍。不吹不黑,直接上打…

作者头像 李华
网站建设 2026/10/8 23:02:17

VAM 最新2026公认高质量整合包 内置DLSS+本体+场景+人物+UI快捷插件

此整合包为 质量内容,非无脑乱堆,在保证高质量人物的同时涵盖了最新的场景V2整合包,是在V1整合包基础上面增加了部分资源,并内置了DLSS。实际上比V1资源少了一些,精简化了很多。人物已经全部做完预设,可以直…

作者头像 李华