Text-to-CAD 实战:从自然语言到三维模型的生成路线与避坑指南
1. 从一段文字到三维模型text-to-cad 到底在解决什么问题第一次听到 “text-to-cad” 这个词很多人脑子里蹦出来的画面可能是对着电脑敲一句“给我画一个法兰盘”然后屏幕上就自动出现一个带孔、带倒角、尺寸标注齐全的三维模型。这个想象不算离谱但也不完全准确。更贴近现实的理解是text-to-cad 是一类把自然语言描述转换成 CAD 可识别几何数据的技术方案统称它的输出通常不是某个私有格式的工程图而是 STEP、GLB、STL 这类通用中间格式然后再由 SolidWorks、Fusion 360、FreeCAD、Blender 等工具接手做后续处理。我最早接触这个方向是因为手头有一批非标零件的建模需求每个零件结构不复杂但数量多、重复性高手动在 CAD 里拉伸、打孔、倒角一天下来眼睛都花了。当时就想能不能用一段结构化描述直接生成模型文件哪怕只是初稿也能省掉大量重复劳动。后来陆续试了几条路线踩了不少坑也总结出一些相对稳定的做法。这篇文章就把我对 text-to-cad 的理解、实操路径、格式选型和避坑经验完整梳理一遍。它适合谁看如果你是机械设计、工业设计、3D 打印爱好者、机器人仿真开发者或者只是想把一段文字快速变成可用的三维模型那这篇内容应该能帮到你。不需要你精通 CAD 二次开发但至少要能看懂基本的几何概念比如拉伸、旋转、布尔运算、网格与实体的区别。下面我会从整体思路开始一步步拆到具体实现。2. 整体方案设计与技术路线选型2.1 为什么 text-to-cad 不是“一句话出图”那么简单很多人对 text-to-cad 的误解来自于把“文本生成图片”的经验直接搬过来。文本生成图片输出的是像素像素差一点人眼可能看不出来但 CAD 输出的是几何尺寸差 0.1 毫米装配就可能装不进去。这是本质区别。所以 text-to-cad 的核心难点不在“生成”而在“约束”。一段自然语言里“一个直径 50 毫米、厚 10 毫米的圆盘中心有一个直径 20 毫米的通孔”这句话对人来说很清晰但对程序来说它需要被解析成圆柱体特征、直径参数、厚度参数、同轴孔特征、布尔减运算。每一步都要求参数明确、拓扑关系明确。我试过直接让大语言模型输出 STEP 文件的文本内容结果几乎不可用因为 STEP 是 ISO 10303 标准下的严格语法任何一行实体定义出错整个文件就打不开。后来调整思路让语言模型负责“理解意图并输出结构化参数”让几何内核负责“根据参数生成精确几何”。这个分工是目前最靠谱的路线。2.2 三条主流技术路线对比在实际操作中我归纳出三条可行路线各有适用场景路线核心思路输出格式优点缺点参数化脚本路线语言模型输出 Python/OpenSCAD 代码由脚本生成模型STL、STEP可控性强参数精确需要几何内核环境结构化 JSON 路线语言模型输出 JSON 描述自研解析器转几何STEP、GLB流程清晰易调试解析器开发量大直接网格生成路线语言模型输出顶点/面片数据或调用网格生成接口STL、GLB上手快适合展示精度低不适合工程如果你只是想做视觉展示、3D 打印摆件直接网格生成路线够用但如果你要做装配、出工程图、做仿真那必须走参数化脚本或结构化 JSON 路线因为只有实体模型才能保证尺寸和拓扑的正确性。我个人的选择是OpenSCAD Python 混合路线用语言模型把自然语言转成 OpenSCAD 脚本或 CadQuery 脚本再通过命令行调用生成 STL 或 STEP。CadQuery 基于 OCCT 几何内核输出 STEP 的质量很好适合工程用途OpenSCAD 更轻量适合快速验证。2.3 格式选型STEP、GLB、STL 到底该用哪个热搜词里反复出现 STEP、GLB、STL说明很多人卡在格式选择上。我用一张表说清楚格式类型精度适用场景注意事项STEP实体/B-Rep精确工程装配、CNC、出图文件较大需要内核支持GLB网格材质近似网页展示、AR/VR不含精确尺寸STL三角网格近似3D 打印、快速预览无单位需约定毫米提示如果你后续要把模型导入 SolidWorks 或中望 CAD 做进一步编辑优先选 STEP如果只是放到网页里旋转查看GLB 更合适如果直接丢给 3D 打印机STL 最省事。这里有个容易被忽略的点STL 文件本身不记录单位。很多切片软件默认按毫米处理但如果你从某个来源拿到的 STL 是按英寸生成的尺寸就会差 25.4 倍。我踩过这个坑一个本应 50 毫米的零件打印出来只有 2 毫米不到后来在导出时强制指定单位才解决。3. 核心细节解析与实操要点3.1 自然语言到结构化参数的转换逻辑text-to-cad 的第一步是把一段话拆成机器能理解的参数。我通常要求语言模型输出类似下面的结构{ shape: cylinder, params: { diameter: 50, height: 10, unit: mm }, features: [ { type: hole, position: center, diameter: 20, through: true } ] }这个 JSON 就是“意图”和“几何”之间的桥梁。为什么不用自然语言直接驱动几何内核因为几何内核的 API 是严格的参数类型、顺序、单位都不能错而 JSON 可以做校验和默认值填充。在实际操作中我会在提示词里明确要求模型所有尺寸必须带单位所有特征必须说明位置关系布尔运算必须说明是并集还是差集。这样生成的 JSON 才能稳定被解析器消费。3.2 几何内核的选择与调用方式几何内核是 text-to-cad 的“发动机”。目前常用的有 OCCT、CGAL、Manifold 等。OCCT 功能最全支持 B-Rep 实体和 STEP 输出但学习曲线陡Manifold 轻量适合网格布尔运算但不输出 STEP。我推荐用CadQuery作为主要工具它封装了 OCCT用 Python 写起来很顺手。比如生成一个带孔圆盘import cadquery as cq result ( cq.Workplane(XY) .circle(25) .extrude(10) .faces(Z) .workplane() .hole(20) ) cq.exporters.export(result, disk.step) cq.exporters.export(result, disk.stl)这段代码里circle(25)是半径 25 毫米对应直径 50extrude(10)是拉伸 10 毫米hole(20)是直径 20 的通孔。每一步都对应自然语言里的一个描述片段。如果你用 OpenSCAD写法更接近声明式difference() { cylinder(h10, d50, centertrue); cylinder(h12, d20, centertrue); }OpenSCAD 的优点是语法简单缺点是复杂曲面能力弱且不支持 STEP 输出。所以我的做法是简单零件用 OpenSCAD 快速验证复杂零件用 CadQuery 出 STEP。3.3 单位、坐标系与公差的前置约定这是最容易被忽视、也最容易出问题的地方。text-to-cad 生成的模型如果单位不统一后续所有环节都会崩。我的经验是在项目最开始就约定“毫米、右手坐标系、Z 轴向上、原点在零件底面中心”然后把这个约定写进提示词和解析器。公差方面自然语言里很少会提到公差但工程用途必须考虑。比如“直径 20 的通孔”实际加工可能是 20 正公差 0.05。text-to-cad 阶段可以先按名义尺寸生成后续在 CAD 里再标注公差。但如果你要做装配仿真最好在 JSON 里预留tolerance字段哪怕暂时填 0。注意STL 导出时弦高偏差chordal tolerance和角度偏差angular tolerance会直接影响网格密度。默认值往往偏粗曲面会显得有棱角。我通常把弦高设为 0.01 毫米角度设为 0.1 弧度文件会大一些但曲面质量明显更好。4. 实操过程与核心环节实现4.1 环境搭建从零准备可复现的工具链我用的环境是 Python 3.10 CadQuery 2.4 OpenSCAD 2021.01。安装 CadQuery 最省事的方式是 condaconda create -n text2cad python3.10 conda activate text2cad conda install -c conda-forge cadqueryOpenSCAD 直接去官网下载安装包安装后把可执行文件路径加入环境变量方便命令行调用openscad -o output.stl input.scad如果你需要 GLB 输出可以装trimesh和pygltflib把 STL 转成 GLBimport trimesh mesh trimesh.load(disk.stl) mesh.export(disk.glb)这套工具链的好处是全部可以在命令行里跑方便批量处理和自动化。我试过用纯图形界面工具做 text-to-cad效率低很多因为每次都要手动点选和导出。4.2 从一句话到 STEP 文件的完整流程假设输入是“生成一个 80 毫米长、40 毫米宽、5 毫米厚的平板四角各有一个直径 6 毫米的孔孔中心距边缘 8 毫米。”第一步语言模型输出结构化 JSON{ shape: box, params: {length: 80, width: 40, height: 5, unit: mm}, features: [ {type: hole, diameter: 6, positions: [[8,8],[72,8],[8,32],[72,32]], through: true} ] }第二步解析器把 JSON 转成 CadQuery 脚本import cadquery as cq plate cq.Workplane(XY).box(80, 40, 5) hole_positions [(8-40, 8-20), (72-40, 8-20), (8-40, 32-20), (72-40, 32-20)] for x, y in hole_positions: plate plate.faces(Z).workplane().center(x, y).hole(6) cq.exporters.export(plate, plate.step) cq.exporters.export(plate, plate.stl)这里有个细节CadQuery 的box默认以原点为中心所以孔位坐标要减去半长半宽。这个偏移量如果算错孔就会偏。我一般会在解析器里统一做坐标转换避免每次手算。第三步运行脚本检查输出。用 FreeCAD 或在线 STEP 查看器打开确认尺寸和孔位。如果没问题这个 STEP 文件就可以导入 SolidWorks 或中望 CAD 继续做工程图。4.3 批量生成与参数化变体text-to-cad 真正体现价值的地方是批量生成。比如你有 20 个法兰盘只是直径和孔数不同手动建模要重复 20 次用脚本就是改参数的事。我的做法是写一个模板函数def make_flange(outer_d, inner_d, thickness, bolt_count, bolt_circle_d, bolt_d): flange cq.Workplane(XY).circle(outer_d/2).extrude(thickness) flange flange.faces(Z).workplane().hole(inner_d) for i in range(bolt_count): angle 2 * 3.14159 * i / bolt_count x (bolt_circle_d/2) * math.cos(angle) y (bolt_circle_d/2) * math.sin(angle) flange flange.faces(Z).workplane().center(x, y).hole(bolt_d) return flange然后从 CSV 或 JSON 里读参数循环调用批量导出 STEP 和 STL。实测下来20 个零件从参数到文件不到 10 秒比手动快太多了。实操心得批量导出时文件名一定要带参数标识比如flange_d100_h20.step否则后期根本分不清哪个是哪个。我一开始用序号命名结果对不上号返工了一次。5. 常见问题与排查技巧实录5.1 模型打不开或显示破面这是最常见的问题。STEP 文件打不开通常是几何内核在布尔运算时产生了无效拓扑。排查顺序检查是否有零厚度特征比如两个面完全重合。检查孔是否完全穿透如果孔深等于板厚可能产生共面问题。尝试用clean()方法修复result result.clean()STL 显示破面通常是网格法线方向不一致。用trimesh修复mesh trimesh.load(broken.stl) mesh.fix_normals() mesh.export(fixed.stl)5.2 尺寸不对或单位错乱如果模型尺寸差了一个数量级先检查单位。STL 无单位STEP 有单位但不同软件默认不同。我的做法是在 CadQuery 里全部用毫米导出 STEP 时确认单位是毫米导出 STL 时在切片软件里再确认一次。另一个常见原因是坐标偏移。比如box以中心为原点而你以为以角为原点。解决办法是在脚本里显式指定centered(False, False, False)或者统一做坐标转换。5.3 复杂曲面生成失败自然语言描述曲面本来就模糊比如“一个流线型的外壳”这种描述无法直接转成参数。我的处理方式是把曲面需求拆成截面轮廓 放样路径用sweep或loft实现。如果还是不行就退回到网格生成路线用 Blender 或 Meshy 这类工具先出网格再转 STL。注意网格转实体STL 转 STEP在热搜里出现频率很高但我要泼冷水STL 转 STEP 本质是逆向工程精度损失很大曲面会变成大量小平面。如果原始需求是工程用途最好从参数化路线重新生成而不是转格式。5.4 常见问题速查表问题现象可能原因排查方法解决手段STEP 打不开布尔运算产生无效拓扑用 FreeCAD 检查几何有效性clean() 修复或调整运算顺序尺寸差 25.4 倍单位混淆检查导出设置统一用毫米孔位偏移坐标系原点不一致打印关键点坐标显式指定 centered 参数STL 曲面有棱角网格精度太低查看网格面数提高弦高和角度精度批量文件混淆命名无规律检查文件名用参数命名6. 工具链扩展与进阶玩法6.1 和现有 CAD 软件配合使用text-to-cad 生成的 STEP 文件可以直接导入 SolidWorks、中望 CAD、Fusion 360。导入后你可以继续加工程图、标注公差、做装配约束。我通常把 text-to-cad 当作“初稿生成器”把重复性建模交给脚本把创造性设计留给自己。如果你用中望 CAD注意它的 STEP 导入模块对 OCCT 版本有要求太新的 STEP 可能不兼容。解决办法是在 CadQuery 导出时指定STEPControl_Writer的版本或者先导出 IGES 再转。6.2 结合 3D 打印的注意事项STL 导出后直接切片打印有几个参数要调弦高0.01 毫米曲面更光滑角度0.1 弧度圆孔更圆法线确保朝外如果打印出来孔偏小可能是切片软件的“孔补偿”没开。我一般会在设计时把孔放大 0.1 到 0.2 毫米抵消打印收缩。6.3 后续可以扩展的方向这套流程跑通后可以往几个方向扩展一是接入语音输入说话就能生成模型二是和参数化库结合比如标准件库自动调用三是做网页端用户输入文字后台生成 GLB 直接预览。我目前在做的是第二个方向把常用法兰、齿轮、轴承座的参数模板整理成 JSON 库语言模型只需要识别类型和关键尺寸生成稳定性会高很多。最后分享一个小技巧如果你不确定一段描述能不能生成先让语言模型把它拆成“形状 尺寸 特征 位置”四要素缺哪个补哪个。这个习惯能帮你避开大部分“生成失败”的情况。

相关新闻

标品零售单店损益自动化:从月末人工拼表到BI驱动精准管控

标品零售单店损益自动化:从月末人工拼表到BI驱动精准管控

1. 为什么标品零售的单店损益,不能继续靠月末人工拼表先说一个我特别熟悉的场景:每月最后一天,财务同事把十几个Excel从不同系统里导出来,POS销售、供应链结算单、租金合同台账、人力排班表、水电能耗表、营销费用明细……挨个打开…

2026/10/9 4:07:33 阅读更多 →
PyPDF2与pdfplumber:Python自动化处理PDF的完整实战指南

PyPDF2与pdfplumber:Python自动化处理PDF的完整实战指南

1. 从手工整理PDF到自动化处理:这一篇讲清楚核心脉络先说一个我自己的场景。前阵子接到一份工作,需要把手头几百份电子合同全部做一遍信息登记:提取每一份合同里的甲方、乙方、金额、日期,还要把同年度的合同合并到一个PDF文件里&…

2026/10/9 4:07:33 阅读更多 →
AI Agent可信度验证体系:行为证据链与动态信任建模

AI Agent可信度验证体系:行为证据链与动态信任建模

1. 这不是健身App,而是一套AI行为可信度验证体系“Show HN: Strava for AI agents, they train for trust instead of fitness”——这个标题刚刷出来时,我正调试一个客户部署的智能客服系统。它连续三天在凌晨2点自动触发错误重试逻辑,但日志…

2026/10/9 4:07:33 阅读更多 →

最新新闻

最新IPA在线签名系统源码 全开源版本

最新IPA在线签名系统源码 全开源版本

源码下载:download.csdn.net/download/m0_66047725/93654842简介:最新IPA在线签名系统源码 全开源版本基于Thinkphp8.0VUE3开发 配合Zsign工具签名前台vue 后台使用art design pro管理框架后台带软件源自动拉取支持自助签名 支持在线签名测试环境&…

2026/10/9 5:36:41 阅读更多 →
2026最新版短视频去水印+视频号去水印小程序版本源码

2026最新版短视频去水印+视频号去水印小程序版本源码

源码下载:download.csdn.net/download/m0_66047725/93654835简介:2026最新版短视频去水印+视频号去水印小程序版本源码图片:安装教程:环境:PHP7.4MySQL5.7域名:必须备案,申请SSL证书…

2026/10/9 5:36:41 阅读更多 →
【ENSP】技巧

【ENSP】技巧

ENSP文章合集: https://wwaul.lanzout.com/b01gid75ah 密码:4r01 设备可视化操作 连线 通常,我们使用auto自动链接,但他没法选择端口及线的类型,比如交换机和路由器之前的链接,默认使用了交换机的e 0/0/3口交换机的g 0…

2026/10/9 5:36:41 阅读更多 →
GitHub日榜高效刷法:从star陷阱到技术选型的避坑指南

GitHub日榜高效刷法:从star陷阱到技术选型的避坑指南

每天早上到工位,我第一件事不是查邮件,而是先打开GitHub的Trending页面,看一遍日期最接近的日榜。这个习惯保持了一两年,从中挖到过不少能直接落地到项目的库,也踩过不少看起来很美、实际中看不中用的坑。GitHub热榜说…

2026/10/9 5:36:41 阅读更多 →
随机化学算法在电网连锁故障N-k分析中的Matlab实现

随机化学算法在电网连锁故障N-k分析中的Matlab实现

电网连锁故障分析这件事,做过的人都知道有多头疼。系统规模一上来,想判断哪几种故障组合最容易把电网拖入大停电,暴力枚举几乎不可行,蒙特卡洛又慢得让人失去耐心。去年我在做 N-k 安全分析时接触到了“随机化学”这个思路&#x…

2026/10/9 5:36:41 阅读更多 →
学Simulink——基于反电动势过零检测的直流无刷电机(BLDC)无感控制仿真

学Simulink——基于反电动势过零检测的直流无刷电机(BLDC)无感控制仿真

目录 手把手教你学Simulink——基于反电动势过零检测的直流无刷电机(BLDC)无感控制仿真 一、 引言:当“霍尔传感器”成为过去式——反电动势过零检测如何成就真正的“无感”BLDC? 二、 问题本质:反电动势过零的“物理机制”与“协同逻辑” 1. 核心物理机制 2. 协同逻辑…

2026/10/9 5:35:40 阅读更多 →

日新闻

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 阅读更多 →