资讯动态

text-to-cad 实战:从自然语言到 STEP/STL/GLB 三维模型

发布时间:2026/10/8 17:35:09 来源:尧图企业网站定制
1. 从一句话到三维模型text-to-cad 到底在解决什么问题第一次听到 text-to-cad 这个词我的反应是这不就是把“用嘴画图”这件事给工程化了么。干了十几年机械设计和参数化建模我太清楚传统 CAD 工作流的痛点在哪——脑子里有个结构想法得先打开软件、选基准面、画草图、约束、拉伸、倒角一套流程下来半小时起步改一个尺寸还得回头找特征树。text-to-cad 想干的事情很直接你用自然语言描述一个零件或装配体系统直接吐出可用的三维模型文件常见格式就是 STEP、GLB、STL 这几种。它解决的核心问题不是“替代 CAD 工程师”而是把从想法到第一版几何这段最耗时的路给压缩掉。适合谁来用我梳理了三类人一是做概念设计的产品经理和工业设计师需要快速把脑暴变成可视化的三维形体二是机械/结构工程师想用脚本批量生成标准件、支架、法兰这类重复性结构三是做 3D 打印、游戏资产、AR 展示的开发者需要 STL 或 GLB 这种轻量格式直接进下游管线。这里必须先厘清三种格式的分工很多人一上来就搞混。STEP是精确的边界表示B-rep格式带完整的曲面数学定义是 CAD 之间交换的“普通话”能保留圆角、螺纹、孔位这些工程特征适合后续做 CAM 加工、装配干涉检查。STL是三角网格只有表面三角形面片没有单位、没有特征、没有拓扑关系是 3D 打印和快速预览的通用格式但精度靠网格密度控制。GLB是 glTF 的二进制封装专为实时渲染和 Web 展示设计带材质、贴图、层级适合放进网页、游戏引擎或 AR 场景。text-to-cad 这类工具的价值就在于它能根据你的用途把同一份几何意图输出成不同格式。你要拿去加工就导出 STEP你要丢进切片软件打印就导出 STL你要放到网页里给客户转着看就导出 GLB。这个“一次描述、多格式落地”的能力才是它区别于传统建模的真正意义。2. 拆解 text-to-cad 的技术链路从文字到几何到底发生了什么2.1 自然语言理解层把“一个带四个安装孔的方形法兰”翻译成结构化参数text-to-cad 的第一步不是画图是语义解析。你输入的那句话系统得先判断出这是哪一类几何体、有哪些关键尺寸、有哪些特征操作。比如“一个 100x100x10 的方形底板四角各有一个直径 8 的通孔孔中心距边缘 15”这句话里藏着的信息量其实很大基体是长方体尺寸三个维度都给了特征是四个圆柱孔孔的定位方式是相对边缘的偏置。我实测过几款工具发现它们对自然语言的处理策略分两派。一派是模板匹配派内置大量常见零件模板法兰、支架、齿轮毛坯、外壳你描述的关键词命中模板后再抽取数字填参数。这派的好处是稳定、可预测坏处是超出模板就抓瞎。另一派是代码生成派把自然语言转成 CadQuery、OpenSCAD 或 build123d 这类参数化建模脚本再执行脚本生成几何。这派灵活度高理论上能表达任意结构但对语言模型的代码能力要求高容易生成跑不通的脚本。从工程实践角度看代码生成派更值得关注因为它把“描述”和“几何”之间的中间层暴露出来了。你能看到它生成的脚本能改、能复用、能版本管理。这比黑盒直接吐模型要可控得多。下面是一段典型的 CadQuery 风格脚本描述的就是上面那个法兰import cadquery as cq result ( cq.Workplane(XY) .box(100, 100, 10) .faces(Z).workplane() .rect(70, 70, forConstructionTrue) .vertices() .hole(8) )这段代码的逻辑很清晰先建 100x100x10 的盒子选顶面作为工作平面画一个 70x70 的构造矩形因为孔中心距边缘 15所以 100-2×1570取四个顶点打直径 8 的孔。你看自然语言里的“孔中心距边缘 15”被翻译成了构造矩形的尺寸这就是语义到参数的映射过程。2.2 几何内核层为什么 STEP 比 STL 难生成得多很多人不理解为什么 text-to-cad 工具导出 STEP 往往比导出 STL 慢甚至有些工具只支持 STL。原因在几何内核。STL 只需要把表面三角化本质上是采样离散点连成三角形任何网格都能表达对内核要求低。STEP 要求的是精确的 B-rep 表示每个面得是解析曲面平面、圆柱面、球面、样条面面与面之间要有精确的交线还要维护拓扑关系哪个面属于哪个实体、哪条边连接哪两个面。这就好比 STL 是拿乐高积木拼一个球远看像球近看全是棱角STEP 是直接用数学公式定义一个真正的球面。前者谁都能拼后者需要一套完整的几何引擎。主流的内核有 OpenCASCADE开源CadQuery、FreeCAD 都用它、Parasolid西门子SolidWorks、NX 用、ACIS达索部分产品用。text-to-cad 工具如果底层接的是 OpenCASCADE那 STEP 导出基本没问题如果只是自己写了个网格生成器那大概率只能出 STL。这里有个实操经验如果你拿到的 STEP 文件在别的 CAD 里打开后特征树是空的、只有一个死实体说明它是从网格反向拟合出来的不是原生 B-rep。这种 STEP 能看不能改做装配还行做参数化修改就废了。判断方法很简单在 FreeCAD 里打开看模型树里是不是只有一个“Solid”节点没有 Pad、Pocket 这些特征。2.3 格式转换层STL 转 STEP 为什么是个坑热搜词里有个“sw中stl转stp”这其实是很多人的真实需求也是 text-to-cad 工作流里绕不开的一环。STL 转 STEP 本质上是逆向工程从三角网格拟合出解析曲面。这个过程分几步走——先做网格去噪和简化再识别平面区域和曲面区域然后对每个区域拟合出平面或样条面最后缝合成分片的 B-rep。问题在于拟合出来的曲面和原始设计意图往往对不上。一个原本是圆柱面的孔网格化之后变成一圈三角形拟合回来可能变成一个 NURBS 曲面虽然形状接近但不再是标准的圆柱特征你没法直接改它的直径参数。所以我的建议是能用原生 text-to-cad 直接出 STEP 的就别走 STL 转 STEP 这条路。转换只适合那种“只有 STL 但必须进 CAD 做装配”的救急场景。如果非转不可SolidWorks 的 ScanTo3D 插件、FreeCAD 的“从网格创建形状”功能、以及一些在线转换服务都能做。但转换后一定要做几何校验测量关键尺寸是否和原始设计一致检查有没有破面、自交、法线翻转。我踩过的坑是一个带内螺纹的 STL 转成 STEP 后螺纹全变成了光滑圆柱因为网格精度根本不足以表达螺纹牙型。3. 实操用 text-to-cad 思路从零生成一个可打印的支架3.1 需求拆解与描述撰写假设我要做一个 L 形支架用来把一个小电机固定在桌面上。这个需求用自然语言怎么描述我总结了一个五要素描述法基体形状、关键尺寸、特征操作、定位关系、用途约束。套进去就是“一个 L 形支架底板 60x40x5立板高 50、厚 5底板和立板垂直。底板上开两个直径 4.5 的沉头孔孔中心距底板左右边缘各 10距后边缘 10。立板上开一个直径 22 的电机轴孔孔中心距立板顶面 15距立板左右居中。所有外角倒 R3 圆角。”这段话里基体是 L 形两个长方体布尔并集尺寸全给了特征是沉头孔和通孔定位用边缘偏置和居中描述用途约束是“可打印”意味着不能有悬垂超过 45 度的面、壁厚不能太薄。3.2 生成脚本与参数计算如果用 CadQuery 来实现脚本大概长这样import cadquery as cq # 底板 base cq.Workplane(XY).box(60, 40, 5) # 立板沿 Y 轴后边缘立起 wall ( cq.Workplane(XY) .box(60, 5, 50) .translate((0, -17.5, 25)) ) bracket base.union(wall) # 底板沉头孔 bracket ( bracket.faces(Z).workplane() .pushPoints([(-20, 10), (20, 10)]) .cboreHole(4.5, 9, 2.5) ) # 立板电机孔 bracket ( bracket.faces(Y).workplane() .center(0, 10) .hole(22) ) # 倒圆角 bracket bracket.edges(|Z).fillet(3) cq.exporters.export(bracket, bracket.step) cq.exporters.export(bracket, bracket.stl)这里有几个参数计算需要说明。立板的 Y 方向位置底板 Y 范围是 -20 到 20立板厚 5要贴在底板后边缘所以立板中心 Y -20 2.5 -17.5。立板 Z 方向底板顶面在 Z5立板高 50所以立板中心 Z 5 25 30但上面代码写的是 25因为 box 的 translate 是相对原点的实际应该按立板底面在 Z5 算中心在 Z52530。这种细节就是实操中容易翻车的地方布尔运算的坐标系一定要在脑子里过一遍。电机孔的位置立板顶面在 Z55孔中心距顶面 15所以孔中心 Z40。立板 Y 方向中心是 -17.5孔要打在立板面上所以工作平面选Y面center 的偏移量按立板局部坐标算。3.3 导出与下游验证生成完 STEP 和 STL 后别急着丢切片软件。我的验证流程是三步STEP 回灌 CAD把 STEP 拖进 FreeCAD 或 SolidWorks检查实体是否有效不是壳、没有自交测量关键尺寸。STL 网格检查用 Meshmixer 或 Netfabb 打开 STL看有没有非流形边、翻转法线、孔洞。3D 打印最怕的就是模型不水密切片出来全是洞。切片预览丢进 Cura 或 PrusaSlicer看悬垂角度、支撑需求、打印时间。L 形支架的立板和底板交界处是内直角打印时容易翘边可以考虑在脚本里加一个 R3 的根部圆角。这里补一句GLB 导出在 CadQuery 里不是原生支持的得先导出 STL 再用 Blender 或 trimesh 转 GLB。如果 text-to-cad 工具直接支持 GLB那它内部多半是走了一遍网格化加材质打包。4. 踩坑实录text-to-cad 实操中最容易翻车的六个地方4.1 单位问题你的 10 到底是毫米还是英寸这是最隐蔽的坑。自然语言里说“一个 10 的孔”系统默认单位可能是毫米也可能是英寸还可能是无量纲的单位。STEP 文件本身带单位定义但 STL 不带——STL 只有数值没有单位。我见过有人生成的 STL 丢进切片软件发现模型只有 0.4 毫米高因为工具默认单位是英寸10 英寸被当成 10 毫米处理了。解决办法在描述里显式带单位比如“直径 10mm 的孔”“底板长 60mm”。如果工具支持配置在设置里锁定单位为毫米。导出 STL 后在切片软件里先看包围盒尺寸和预期对不上就检查单位缩放。4.2 布尔运算失败为什么你的孔打不穿text-to-cad 生成复杂结构时布尔运算是重灾区。两个实体做差集如果面与面恰好共面、或者交线退化成一个点内核就可能报错或产生无效几何。比如你在底板边缘打一个孔孔壁和底板侧面恰好相切这种“临界接触”最容易出问题。我的经验是留冗余孔不要打在正好和边缘相切的位置往里缩 0.5mm两个实体做并集时让它们有明确的重叠体积不要只是面贴面。如果工具生成的脚本能改就在布尔操作前加一个微小的偏移量。4.3 圆角顺序先倒角还是先打孔这个顺序问题在传统 CAD 里是老生常谈在 text-to-cad 里同样存在。如果你先给底板四角倒 R3 圆角再在靠近角落的位置打孔孔可能会切到圆角面导致几何复杂化甚至失败。正确的顺序通常是先做主体形状再打孔和开槽最后倒圆角。因为圆角是“收尾操作”它需要处理的是已经确定的边。但也不是绝对。有些圆角必须在打孔前做比如孔口倒角那是孔的特征的一部分。判断标准是这个圆角属于哪个特征属于主体的主体做完就倒属于孔的打完孔再倒。4.4 网格精度STL 的弦高和角度公差怎么设导出 STL 时工具通常会让你设两个参数线性偏差弦高和角度偏差。弦高控制曲面被三角化的精细程度值越小三角形越多、模型越精细、文件越大。角度偏差控制相邻三角形法线的最大夹角。对于 3D 打印我的常用设置是弦高 0.01mm、角度偏差 1 度。对于只做预览的 GLB弦高 0.1mm 就够了。设得太细STL 文件几百兆切片软件卡死设得太粗圆柱变成多边形装配时孔轴配合直接卡住。有个快速判断方法看圆柱面的三角形数量直径 10mm 的孔圆周至少要有 32 个分段才看起来圆。4.5 特征树丢失为什么改不了参数前面提过text-to-cad 如果输出的是“死实体”STEP你在 CAD 里是改不了参数的。但即使是原生 B-rep如果工具没有保留特征历史你也只能改整体尺寸改不了单个孔的直径。这是目前这类工具的通病——它们生成的是最终几何不是参数化特征树。如果你需要后续可编辑有两条路一是让工具输出建模脚本CadQuery/OpenSCAD你在脚本层面改参数重新生成二是把 STEP 导入 CAD 后用“特征识别”功能把孔、圆角、拉伸识别成特征。后者成功率看模型复杂度简单零件还行复杂装配基本没戏。4.6 常见问题速查表问题现象可能原因排查与解决导出的 STL 尺寸不对单位不一致检查工具单位设置描述中显式带 mmSTEP 在 CAD 里打开是空壳只导出了曲面没导出实体检查是否闭合实体重新导出孔打不穿或布尔失败临界接触、共面留 0.5mm 冗余避免相切圆角处破面圆角半径大于相邻壁厚减小圆角半径或加厚壁厚STL 切片后全是洞网格不水密、法线翻转用 Netfabb 修复检查流形性GLB 在网页里显示全黑法线或材质缺失重新计算法线补默认材质模型能看不能改特征树丢失改用脚本输出或做特征识别生成速度极慢网格精度设太高降低弦高和角度偏差5. 工具选型与工作流搭建把 text-to-cad 接进现有管线5.1 三类工具的定位差异市面上的 text-to-cad 工具我大致分成三类。第一类是对话式建模助手你一句句描述它一步步生成适合概念探索但精度和可复现性一般。第二类是脚本生成器把自然语言转成 CadQuery/OpenSCAD 代码适合工程师可控性最强。第三类是专用零件生成器针对齿轮、法兰、支架等特定品类输入参数直接出模型精度最高但适用范围窄。选型逻辑很简单要精度和可编辑性选脚本生成器要速度和易用性选对话式要批量做标准件选专用生成器。我个人的主力工作流是脚本生成器加 CadQuery因为生成的脚本能进 Git 做版本管理改一个参数重新跑一遍比在 GUI 里点来点去快得多。5.2 与现有 CAD 的衔接text-to-cad 生成的 STEP最终多半要进 SolidWorks、Fusion 360、中望 CAD 这些软件做后续处理。衔接时注意两点一是坐标系对齐生成的模型原点最好在零件的某个基准角或中心方便装配时定位二是命名规范导出的文件按“零件名_版本_日期”命名别用默认的 output.step不然十个文件放一起分不清。如果要做装配建议在 text-to-cad 里分别生成每个零件导出 STEP 后在 CAD 里做配合。不要试图用一句话描述整个装配体目前的工具对多体装配的支持还很弱容易生成一堆位置错乱的实体。5.3 批量生成的思路text-to-cad 真正体现效率的地方是批量生成。比如你要做一系列不同长度的支架长度从 50 到 200每 10mm 一档。用脚本生成器写一个循环改一个参数跑十六次十六个 STEP 文件就出来了。这在传统 CAD 里得手动改尺寸、另存为重复十六遍。import cadquery as cq for length in range(50, 201, 10): bracket ( cq.Workplane(XY) .box(length, 40, 5) .faces(Z).workplane() .rect(length - 20, 20, forConstructionTrue) .vertices() .hole(4.5) ) cq.exporters.export(bracket, fbracket_{length}mm.step)这段代码跑完你就有了十六个不同长度的支架 STEP 文件。这种批量能力才是 text-to-cad 对工程师最大的价值——把重复劳动交给脚本把精力留给真正的设计决策。6. 我对 text-to-cad 的实际使用体会用了大半年这类工具我的真实感受是它现在的能力边界很清晰——适合做第一版几何、适合做标准件批量生成、适合做概念可视化但不适合做最终交付的精密工程图。你让它生成一个带公差配合、表面粗糙度标注、形位公差的零件它做不到这些还是得回传统 CAD。但它在工作流前端的位置已经站稳了。我现在接到一个新需求第一反应不是打开 SolidWorks而是先写一段描述让 text-to-cad 出个大概形状看看比例和结构合不合理。确认方向对了再导 STEP 进 CAD 精修。这个习惯帮我省掉了大量“打开软件-建草图-发现方向不对-删掉重来”的循环。最后分享一个小技巧描述零件时先描述整体再描述局部最后描述修饰。整体是基体和主要尺寸局部是孔、槽、凸台这些特征修饰是圆角、倒角、拔模。这个顺序和大多数建模脚本的执行顺序一致生成的几何也最稳定。反过来如果你一上来就说“四个角倒 R3 圆角”系统可能还没搞清楚主体是什么圆角就无处可倒。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑