text-to-cad 实战:从自然语言到 STEP/STL 的几何生成流水线
1. 从一段文字到三维实体text-to-cad 到底在解决什么问题第一次听到 text-to-cad 这个词很多人会下意识地把它理解成用嘴画图——说一句话软件自动帮你生成一张工程图纸。这个理解只对了一半。真正的 text-to-cad核心链路是把一段自然语言描述转换成可被 CAD 软件识别、可被下游制造流程消费的三维几何数据最终落地成 STEP、GLB、STL 这类标准格式文件。它解决的不是画图快不快的问题而是从想法到可制造模型之间那道鸿沟的问题。我接触这个方向最初是因为一个很具体的场景手头有一批非标零件客户只给了一段文字描述和几张手绘草图要求快速出三维模型用于报价和打样。传统做法是打开 CAD 软件一个特征一个特征地拉伸、旋转、倒角一个中等复杂度的零件从理解需求到出图熟练工也要一两个小时。如果需求方改一次尺寸整个模型可能要重做。这种重复劳动逼着我去研究能不能让机器理解一个直径 50mm、高 80mm 的圆柱顶部开一个深 20mm、宽 10mm 的槽这种描述直接吐出几何体这就是 text-to-cad 的起点。它适合几类人做快速原型的产品经理和工业设计师、需要批量生成参数化零件的工程师、做 AI 辅助设计工具的开发者和研究者以及想把设计流程自动化的制造从业者。哪怕你只是偶尔需要把一段描述变成 STL 去 3D 打印这套思路也能帮你省下大量手动建模时间。需要先明确一个边界text-to-cad 目前不是一个说完就完美的魔法。它更像一个高起点草稿生成器——把 60% 到 80% 的基础几何自动搭出来剩下的精度修正、装配约束、工程标注仍然需要人来把关。理解这个定位后面的所有技术选型和实操才不会跑偏。2. 拆解 text-to-cad 的技术链路文字是怎么变成几何体的2.1 自然语言理解层把口语翻译成结构化参数文字描述最大的问题是模糊。一个差不多拳头大的方块这种话人听了能脑补机器不行。所以链路的第一环是把自然语言解析成结构化的几何参数。这一步通常靠大语言模型来完成因为它擅长从非结构化文本里抽取实体、尺寸、关系和约束。举个实际处理的例子输入是一个长 100mm、宽 60mm、厚 10mm 的底板四角各有一个直径 6mm 的圆孔孔中心距边缘 8mm。模型需要抽取出基础形状是长方体三个维度尺寸分别是 100、60、10特征操作是打孔孔的数量是 4直径 6位置约束是距边缘 8mm。这些信息会被组织成一份 JSON 或类似的结构化描述作为下一阶段的输入。这里有个容易被忽略的细节单位。自然语言里经常省略单位或者混用毫米厘米寸。我的做法是在解析层强制统一到毫米并在提示词里明确要求模型输出带单位标注的数值。如果输入里出现寸这种歧义词宁可让模型反问也不要猜——猜错一次后面整个模型都是废的。2.2 几何生成层从参数到实体模型拿到结构化参数后就要真正生成几何体了。这一层有两条主流路线选哪条直接决定了你后续能走多远。第一条是参数化建模路线代表工具是 OpenCASCADE简称 OCCT这类几何内核。它的逻辑是把每个特征翻译成内核的 API 调用比如创建一个长方体、在指定位置打一个圆柱孔、做布尔减运算。这条路线的最大优势是生成的模型是真的 B-Rep边界表示实体精度高、可编辑、能导出 STEP 这种工程级格式。缺点是每一步都要精确指定参数容错性差一个坐标算错整个特征就废了。第二条是网格生成路线代表是各类基于深度学习的三维生成模型直接输出三角网格。它的优势是能处理复杂、有机的形状比如一个流线型的外壳参数化路线很难描述这种形状。缺点是生成的网格精度有限表面是三角面片拼出来的不适合做精密工程导出 STEP 时还需要做逆向转换会丢失特征信息。我的经验是规则零件走参数化自由曲面走网格生成。一个带孔带槽的机械件用 OCCT 生成尺寸精确到微米级一个艺术造型的摆件用网格生成然后导出 STL 直接打印。两者不是替代关系而是互补。2.3 格式转换层STEP、GLB、STL 各自的分工生成完几何体最后一步是导出成下游能用的格式。这三种格式经常被混用但它们的定位完全不同选错了会带来一堆麻烦。格式本质精度典型用途是否保留特征STEPB-Rep 实体精确工程制造、CNC 加工、装配是GLB三角网格 材质中等网页展示、AR/VR、渲染否STL三角网格中等3D 打印、快速原型否STEP 是工程界的通用语言几乎所有主流 CAD 软件都能读写它保留的是数学精确的曲面和实体信息所以适合拿去加工。GLB 是给展示和交互用的带材质和贴图适合放到网页或 AR 场景里。STL 是 3D 打印的事实标准只描述表面三角面片简单粗暴但通用。提示如果你的下游是 CNC 加工或者需要二次编辑务必导出 STEP。STL 转 STEP 是一个逆向重建过程会丢失圆角、孔位等特征信息转出来的模型往往没法直接用。3. 动手搭一条最小可用的 text-to-cad 流水线3.1 环境准备几何内核和运行时的选择要自己跑通一条流水线第一步是把几何内核装起来。OCCT 是最成熟的开源选择Python 侧可以用pythonocc-core这个绑定库它把 OCCT 的能力封装成了 Python 接口写起来比 C 友好太多。安装方式我推荐用 conda因为 OCCT 依赖一堆底层库pip 装经常缺依赖conda install -c conda-forge pythonocc-core装完之后验证一下from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox box BRepPrimAPI_MakeBox(100, 60, 10).Shape() print(几何内核工作正常)如果这行能跑通说明内核没问题。这里有个坑pythonocc-core的版本要和 OCCT 主版本对应装错版本会出现各种诡异的段错误。我一般锁定 conda-forge 上的稳定版本不追最新。自然语言解析这一层可以用任意一个支持结构化输出的语言模型 API。关键不是用哪个模型而是提示词的设计——必须强制模型输出严格的 JSON字段名固定数值带单位。我通常会在提示词里给两三个示例让模型照着格式填。3.2 把一句话翻译成建模指令假设输入是一个 80×40×5mm 的矩形板中心有一个直径 20mm 的通孔。解析层要输出这样的结构{ base: {type: box, length: 80, width: 40, height: 5}, features: [ {type: hole, diameter: 20, position: [40, 20], through: true} ], unit: mm }拿到这份结构几何生成层就可以按部就班地执行先建一个 80×40×5 的长方体再在 (40, 20) 位置建一个直径 20 的圆柱做布尔减运算最后导出。from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox, BRepPrimAPI_MakeCylinder from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Cut from OCC.Core.gp import gp_Pnt, gp_Ax2, gp_Dir # 建底板 base BRepPrimAPI_MakeBox(80, 40, 5).Shape() # 建圆柱通孔高度给大一点保证穿透 axis gp_Ax2(gp_Pnt(40, 20, -1), gp_Dir(0, 0, 1)) cyl BRepPrimAPI_MakeCylinder(axis, 10, 7).Shape() # 布尔减 result BRepAlgoAPI_Cut(base, cyl).Shape()这段代码里圆柱的半径是 10直径 20高度给 7 而不是 5是为了保证布尔运算时圆柱完全穿透底板避免出现零厚度的残留面。这是实操中非常容易踩的坑——如果圆柱高度刚好等于板厚布尔运算可能因为浮点误差留下一个极薄的壳导出的模型在切片软件里会报错。3.3 导出 STEP 与 STL 的实操细节几何体建好后导出这一步看似简单其实细节不少。导出 STEP 用STEPControl_Writerfrom OCC.Core.STEPControl import STEPControl_Writer, STEPControl_AsIs from OCC.Core.Interface import Interface_Static_SetCVal writer STEPControl_Writer() Interface_Static_SetCVal(write.step.unit, MM) writer.Transfer(result, STEPControl_AsIs) writer.Write(part.step)注意write.step.unit这一行如果不显式设置单位有些下游软件读进去会按英寸解释尺寸直接差 25.4 倍。这个坑我在一个项目里踩过客户拿到模型说怎么大了这么多排查了半天才发现是单位问题。导出 STL 用StlAPI_Writer关键参数是网格精度from OCC.Core.StlAPI import StlAPI_Writer from OCC.Core.BRepMesh import BRepMesh_IncrementalMesh # 先做网格化精度决定三角面片的密度 BRepMesh_IncrementalMesh(result, 0.1) stl_writer StlAPI_Writer() stl_writer.Write(result, part.stl)BRepMesh_IncrementalMesh的第二个参数是线性偏差值越小网格越密、文件越大、表面越光滑。0.1mm 对于大多数 3D 打印够用了如果做精细手办可以调到 0.02。但别一味调小网格太密会让切片软件卡死我见过一个模型因为精度设成 0.001STL 文件直接飙到 200MB。4. 实测中那些文档不会告诉你的坑4.1 布尔运算失败最常见也最头疼布尔运算失败是参数化建模里出现频率最高的问题。表现是运算后模型出现破面、丢失特征或者干脆返回空结果。根本原因通常是两个实体在边界处擦边——比如两个面刚好重合、两个顶点刚好重合浮点精度一抖动内核就判断不出到底该保留哪部分。我的应对策略有三条。第一让相交的实体充分重叠就像前面圆柱高度给 7 而不是 5 那样宁可多切一点也不要刚好贴着。第二避免共面如果两个特征的面恰好在一个平面上稍微偏移 0.01mm 就能绕开。第三分步做布尔运算不要一次性把五个特征全减掉一个一个来出问题好定位。排查的时候可以先把中间结果导出 STL 看一眼确认每一步的几何体是不是符合预期。很多时候问题不在布尔运算本身而是前一步的实体就没建对。4.2 自然语言里的隐含约束最容易被漏掉语言模型解析文字时最容易漏的是那些没说出口但默认成立的约束。比如四角各有一个孔人一看就知道是四个角对称分布但模型可能只理解成有四个孔位置随便放。再比如中心孔模型可能把中心理解成几何中心也可能理解成某个基准点。解决办法是在提示词里把这些隐含约束显式化。我会在解析规则里加一条凡是涉及对称均布中心边缘这类位置词必须输出明确的计算公式或坐标。比如四角孔要展开成孔中心坐标分别为 (8,8)、(72,8)、(8,32)、(72,32)而不是留给下游去猜。这一步多花的功夫能省掉后面反复返工的时间。我现在的习惯是解析结果出来后先人工扫一眼坐标确认位置逻辑对得上再进几何生成。4.3 单位、坐标系和朝向的连锁错误单位问题前面提过这里补充坐标系和朝向。CAD 里默认的坐标系是右手系Z 轴朝上但不同软件、不同导出格式对上的定义可能不一样。STL 导出时如果朝向反了打印出来的模型是倒的虽然切片软件能自动摆正但如果是装配体朝向错了整个装配关系就乱了。我的做法是在流水线里固定一套内部坐标系约定Z 轴朝上模型底面在 Z0 平面。所有生成的特征都按这个约定来导出前再做一次朝向检查。对于需要特定朝向的场景在导出参数里显式指定不依赖下游软件的自动纠正。5. 从能跑到好用让 text-to-cad 真正进工作流5.1 参数化模板把重复需求沉淀下来跑通单次生成只是第一步真正提升效率的是把高频需求做成模板。比如我经常要生成各种规格的法兰盘就把外径、内径、螺栓孔数量、螺栓孔分布圆直径、厚度这几个参数抽出来做成一个模板函数。下次只要填参数不用重新描述。def make_flange(outer_d, inner_d, bolt_count, bolt_circle_d, thickness): # 建外圆盘 # 挖内孔 # 按分布圆均布螺栓孔 # 返回实体 ...模板化的好处不只是快更重要的是一致性。同一类零件用同一个模板生成尺寸逻辑、倒角习惯、孔位规则都统一下游装配不会出现莫名其妙的干涉。这在批量出图的场景里价值极大。5.2 批量生成与命名规范当需求变成生成 50 个不同规格的支架时单次调用就不够了需要批量处理。我的做法是把需求整理成一张 CSV 表每行一个零件的参数然后循环调用生成函数按规范命名输出文件。命名规范这件事看着小实际影响很大。我用的格式是{零件类型}_{关键尺寸}_{版本}.step比如bracket_100x60x5_v2.step。这样在文件夹里一眼就能找到想要的不用一个个打开看。批量生成时如果命名混乱几百个文件堆在一起找起来能让人崩溃。批量生成还要注意异常处理。某个零件因为参数不合理导致布尔运算失败时不能让整个批处理中断。我会用 try-except 包住单个生成逻辑失败的记录到日志里继续处理下一个最后统一看哪些失败了、为什么失败。5.3 和现有 CAD 工具的衔接生成的模型最终要进到实际工作流里和现有工具的衔接很关键。STEP 文件可以直接被主流 CAD 软件打开做二次编辑这是最通用的方式。如果下游是 3D 打印STL 直接丢进切片软件。如果要做网页展示GLB 配合 three.js 这类库就能在浏览器里渲染。有个细节值得注意从 text-to-cad 生成的 STEP 导入到某些 CAD 软件后特征树是哑的——它是一堆曲面和实体的集合没有参数化的特征历史。这意味着下游想改一个孔的直径不能像原生建模那样双击改参数而要重新做布尔运算。如果下游需要频繁改参数更好的做法是把参数化模板也一起交付让对方在源头改。6. 这套东西的边界在哪里以及我踩过的真实教训text-to-cad 不是万能的认清它的边界比学会用它更重要。它擅长的是规则明确、参数可枚举的零件——板、轴、法兰、支架、简单的壳体。这些零件的几何逻辑清晰文字描述能覆盖绝大部分信息。它不擅长的是高度依赖工程判断和隐性知识的设计比如一个需要考虑散热、应力、装配公差链的复杂结构这些信息文字里根本写不全模型也无从生成。我踩过最深的一个坑是早期太信任自动生成的结果没有做几何校验就直接把 STEP 发给加工厂。结果一个零件的孔位因为解析时把距边缘 8mm理解成了距中心 8mm整批零件孔位全错报废了一批材料。从那以后我在流水线里加了一道自动校验生成后检查关键尺寸是否在合理范围内、孔位是否落在实体内部、壁厚是否大于最小加工厚度。这些检查用简单的几何计算就能做但能拦住大部分低级错误。另一个教训是关于精度预期。自然语言描述天然是粗粒度的直径 50mm可能实际是 50.0 也可能是 50.5文字里没写。如果下游对精度要求高必须在输入阶段就把公差明确写出来或者生成后人工标注。指望从一句模糊描述里得到精密工程模型是不现实的。我现在的工作流是这样的文字描述进模型出然后人工在 CAD 里过一遍确认关键特征和尺寸再导出正式文件。这套流程下来一个中等复杂度的零件从描述到可用模型大概十分钟比纯手工建模快了三到五倍。省下来的时间花在真正需要工程判断的地方这才是 text-to-cad 的正确用法。如果你刚开始尝试我的建议是先从一个最简单的零件跑通全链路——建一个带孔的板导出 STEP 和 STL用 CAD 软件和切片软件分别验证一遍。链路通了再逐步加复杂度。别一上来就挑战复杂装配体那样只会在布尔运算的坑里反复挣扎最后怀疑整个方向。

相关新闻

客户拜访总是记不全?我用这招把客户需求摸得透透的

客户拜访总是记不全?我用这招把客户需求摸得透透的

做销售、做客户对接的朋友,多少都有过这样的经历:跟客户聊了快两小时,对方说了七八个需求点,当场听了全明白,回来一复盘——咦,第三个点到底是什么来着?那个报价细节是客户自己说的还是我记混了…

2026/10/9 4:37:56 阅读更多 →
粤语会议听不懂、记不全?这款录音转文字工具,彻底解放你的耳朵和双手

粤语会议听不懂、记不全?这款录音转文字工具,彻底解放你的耳朵和双手

说实话,做了这么多年办公效率工具测评,我见过太多人因为“语言障碍”而头疼。你是不是也有过这样的经历?开一场粤港澳大湾区的项目对接会,对方全程粤语沟通,你一边要听内容一边要记重点,稍微一走神就漏掉关…

2026/10/9 4:37:56 阅读更多 →
工位午休五分钟正念白噪音:Web Audio API 与秋雨竹林声景陪伴

工位午休五分钟正念白噪音:Web Audio API 与秋雨竹林声景陪伴

国庆假期结束后的第一个工作日午后,很多人都会遇到一阵强烈的疲倦感袭来:电脑屏幕上的代码和需求文档开始在眼前发虚,长时间佩戴工牌和耳机的耳朵隐隐发涨,晨间积攒的紧绷感在下午一点半左右达到了峰值。 在这个时候,强…

2026/10/9 4:36:55 阅读更多 →

最新新闻

Vulkan固定功能阶段详解:从顶点输入到颜色混合的管线配置

Vulkan固定功能阶段详解:从顶点输入到颜色混合的管线配置

很多朋友学到 Vulkan 管线的可编程阶段,写完了顶点着色器和片元着色器,就以为万事大吉。结果在创建VkGraphicsPipelineCreateInfo的时候,突然冒出一大堆结构体要填:顶点输入、输入装配、光栅化、深度模板、颜色混合。这就是 Vulka…

2026/10/9 5:12:22 阅读更多 →
并网逆变器VSG预同步控制Matlab仿真模型搭建与调试

并网逆变器VSG预同步控制Matlab仿真模型搭建与调试

做过微电网和分布式电源并网仿真的朋友,十有八九都遇到过这个画面:预同步没做好的模型一合闸,直流母线电压瞬间被拉垮,电流波形上冲出一个尖峰,直接把过流保护和示波器刻度一起顶飞。这个标题很直白——VSG预同步控制M…

2026/10/9 5:12:22 阅读更多 →
PS消失点滤镜:透视贴图与空间绘图完全指南

PS消失点滤镜:透视贴图与空间绘图完全指南

1. 从“贴图透视总画歪”说起:消失点滤镜到底在解决什么问题做设计或者修图的朋友,大概都遇到过这种场景:手里有一张带透视的实景照片,比如一面斜着拍的砖墙、一张有纵深感的桌面、一个带角度的包装盒,你想在上面贴个l…

2026/10/9 5:12:22 阅读更多 →
CAXA电子图板2026功能区全解析:从布局到自定义实战

CAXA电子图板2026功能区全解析:从布局到自定义实战

说实话,我第一次接触CAXA电子图板2026的时候,第一反应是盯着顶部那条又宽又密的“功能区”发了好一会儿呆。作为从老版本菜单栏一路用过来的设计人员,看到所有图标被重新分门别类地塞进好几个选项卡,心里多少有点别扭。但用了一个…

2026/10/9 5:12:22 阅读更多 →
城市生命线物联网年度实践:从硬件选型到平台闭环的工程复盘

城市生命线物联网年度实践:从硬件选型到平台闭环的工程复盘

2025年,我在恒星物联主要做的事情,就是围着“城市生命线”转:地下管网的压力传感器、燃气井里的可燃气体探测器、桥梁上的位移监测节点、智慧城市运营中心里的那块大屏。年终写下这篇回顾,既是替团队做个交代,也是给还…

2026/10/9 5:12:21 阅读更多 →
SpringBoot瑜伽馆管理系统毕设:设计实现与答辩要点全解析

SpringBoot瑜伽馆管理系统毕设:设计实现与答辩要点全解析

每年到了毕设季,总有一大批人被“选什么题目”卡住。Java方向的项目来来去去就是管理系统、商城、博客这三板斧,但真正能把一个管理系统讲到明白、做出亮点的人其实不多。这次我完整走了一遍SpringBoot瑜伽馆管理系统的设计与实现,从选题、建…

2026/10/9 5:11:21 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →