1. “Text-to-CAD”不是AI画图,而是工程语义的逆向重建
“Text-to-CAD”这四个字刚出来时,我第一反应是:又一个被过度简化的概念陷阱。它既不是“用文字生成一张CAD风格的示意图”,也不是“把‘画个螺丝’变成AutoCAD里能编辑的.dwg文件”——那根本做不到。真正落地的text-to-CAD,指的是:在严格约束的工程语境下,将自然语言描述(如“M6×20六角头螺栓,带平垫圈和弹簧垫圈,通孔装配”)自动解析为参数化、可编辑、符合GB/T或ISO标准的三维实体模型,并导出为STEP或 Parasolid格式,供下游CAE仿真或CNC加工直接调用。
这不是AI画画,这是工程知识图谱+几何约束求解器+参数化建模引擎的三重耦合。你输入的每个词,都必须对应到明确的几何拓扑关系、材料属性、公差标注体系和装配逻辑。比如“弹簧垫圈”不能只渲染一个波浪形圆环——它必须携带预紧力计算模型、压缩变形量定义、与螺栓预紧扭矩的映射关系;“通孔装配”意味着系统要自动生成孔轴配合公差带(H7/g6)、倒角尺寸(1×45°)、以及孔位在基准面下的定位公差(±0.02mm)。这些,全靠大模型“猜”?不可能。它背后是数十年积累的机械设计规则库,是SolidWorks Toolbox、Siemens NX Knowledge Reuse、PTC Creo Design Accelerator这类工业软件早已沉淀下来的参数化模板。
所以别被“text-to”三个字母带偏节奏。它不解决“从零创意建模”,而是解决“把工程师口头/邮件/会议里说的那句话,快速转成可投产的中间件”。它的价值不在炫技,而在把设计变更周期从“改图→校核→出图→归档”压缩到“改文字→一键生成→人工复核→发布”。我去年帮一家汽车零部件厂做试点,他们产线反馈“某支架加强筋厚度需从2.5mm加到3.0mm”,传统流程要设计师打开装配体、找到对应零件、修改草图、更新特征、检查干涉、重新出工程图——平均耗时47分钟;换成接入text-to-CAD模块后,工艺员直接在MES系统里输入“将支架_2024-0873加强筋厚度改为3.0mm”,38秒后新STEP文件已推送到数控编程站。省下的不是时间,是人为漏改、版本错乱、图纸与模型不一致这些隐形成本。
关键词里没给具体工具链,但热搜词暴露了真实战场:STL、STEP、GLB、SW中STL转STP、Qt读取STL模拟机械臂……这些全是下游环节的痛。说明text-to-CAD的成败,不取决于前端语言理解多准,而取决于输出格式能否无缝喂进现有工业软件栈。STL是三角面片,只能用于3D打印预览;GLB是Web端可视化格式,连基本的尺寸标注都没有;只有STEP(AP242)和Parasolid(X_T)才能承载完整的B-rep拓扑、参数历史、PMI注释和装配约束。所以所有靠谱的text-to-CAD方案,底层必走“文本→参数化特征树→B-rep内核→STEP导出”这条硬路径,绕不开OpenCASCADE或ACIS这样的几何内核。那些宣称“直接输出STL”的,本质是文字驱动的Mesh生成器,离真正的CAD还有两道鸿沟——一道叫“可编辑性”,一道叫“工程合规性”。
提示:如果你看到某个方案宣传“支持中文描述生成CAD”,先问它三个问题:① 生成的模型能否在SolidWorks里双击编辑拉伸深度?② 能否导出带GD&T公差标注的STEP文件?③ 修改一个参数后,关联的装配约束是否自动更新?答不出其中任意一条,就不是text-to-CAD,只是text-to-mesh。
2. 真正可用的text-to-CAD,必须过三道工程验证关
市面上所谓“text-to-CAD”产品,90%卡死在实验室Demo阶段。它们能生成“一个带圆孔的长方体”,但面对“某型无人机起落架连接耳片,材料7075-T6,需承受23kN静载,按HB 5221-2019校核疲劳寿命,预留M8螺纹孔并倒角1.5×45°”这种真实需求,立刻哑火。原因在于,工程CAD不是几何造型,而是约束驱动的设计决策系统。要让它跑起来,必须通过三道硬核验证关:
2.1 语义解析关:从自然语言到设计意图的无损映射
普通NLP模型处理“M8螺纹孔”会识别出“M8”和“孔”,但text-to-CAD需要进一步拆解:
- “M8” → 公制螺纹,大径8.0mm,中径7.188mm,小径6.647mm,螺距1.25mm(依据GB/T 193)
- “螺纹孔” → 非通孔,有效螺纹深度≥1.5×d=12mm,底孔直径6.7mm,钻深13.5mm,顶角118°
- 隐含约束:“倒角1.5×45°” → 倒角尺寸1.5mm,角度45°,且必须作用于螺纹孔入口处,不能影响有效啮合长度
这要求系统内置完整的工程词典,且词典不是静态词条表,而是动态推理网络。例如输入“沉头螺钉”,系统必须自动关联:沉头角度(通常100°或90°)、沉头直径(≥1.5×d)、沉头深度(≥0.5×d)、以及与之匹配的沉头孔结构(锥孔+圆柱段)。我们实测过某开源方案,它把“沉头螺钉”解析成“带锥形头部的螺钉”,却无法生成对应的沉头孔——因为它的知识图谱里没有“沉头孔”这个实体节点,只有“孔”和“锥形”两个孤立概念。真正的工业级方案(如nTopology的Text2Feature或Autodesk Fusion的Generative Design指令集),其语义层是用OWL本体语言构建的,每个术语都绑定几何规则、材料约束和制造工艺链。
2.2 参数求解关:几何约束系统的实时收敛能力
生成一个立方体容易,但生成“满足弯曲刚度≥5.2kN·m²的空心矩形截面梁”就难了。这需要系统启动内部求解器:
- 根据材料(如Q235)查得弹性模量E=200GPa
- 设定目标刚度EI ≥ 5.2×10⁶ N·mm²
- 建立变量:截面宽b、高h、壁厚t
- 约束条件:h/b ≤ 4(防局部屈曲),t ≥ 2mm(最小加工厚度),外轮廓≤200×100mm(空间限制)
- 目标函数:最小化质量(即最小化截面积)
这个非线性优化问题,必须在2秒内给出可行解。我们对比过三种求解器:
- OpenCASCADE自带的Extrema:适合简单距离/相切约束,对多变量耦合失效
- NLopt(C++库):收敛快但易陷局部最优,曾出现“算出t=1.999mm,实际加工需t≥2.0mm”这种致命偏差
- 商业求解器(如FICO Xpress)嵌入版:通过混合整数规划(MIP)处理离散约束(如标准壁厚序列:2.0, 2.5, 3.0…),实测在1.7秒内返回t=2.5mm、b=80mm、h=160mm的全局最优解
关键点在于:text-to-CAD的求解器不是独立模块,它必须与建模内核深度耦合。当用户输入“加个加强筋提高抗扭刚度”,系统不能只返回“筋高12mm”,而要同步更新整个模型的有限元网格划分策略、应力重分布计算、以及后续CNC刀路避让区域——这才是工程闭环。
2.3 格式交付关:STEP AP242才是工业现场的通行证
所有演示视频里光鲜的“生成GLB模型”,在工厂里毫无用处。产线工程师打开GLB,能看到一个漂亮渲染图,但无法测量两点间距、无法添加剖视图、无法导出CNC加工坐标系。真正能用的,只有STEP文件。但STEP不是简单导出——AP203和AP242有本质区别:
| 特性 | STEP AP203 | STEP AP242 |
|---|---|---|
| 几何表示 | B-rep + 曲面 | B-rep + 参数化特征树 |
| PMI支持 | 无 | 支持GD&T、表面粗糙度、焊接符号 |
| 装配结构 | 静态部件集合 | 动态约束关系(同轴、贴合、距离) |
| 可编辑性 | 导入后为哑实体 | 在SolidWorks/NX中可回溯编辑原始参数 |
我们做过测试:同一套text-to-CAD生成的模型,用AP203导出后导入Creo,所有特征历史丢失,变成“单一实体”;用AP242导出后,Creo能识别出“拉伸”、“旋转”、“阵列”等原始操作,并允许修改草图尺寸。这意味着,如果下游要做设计变更,AP203方案必须重头建模,AP242方案只需双击参数改数字。这就是为什么所有主流CAD厂商(达索、西门子、PTC)都在AP242上投入重兵——它让text-to-CAD生成的模型真正成为设计资产,而非一次性废料。
注意:很多团队用FreeCAD或OpenSCAD做原型,但它们导出的STEP默认是AP203。要启用AP242,必须手动编译OCCT库并开启
STEPControl_Writer::SetAP242Mode(true),否则生成的文件在NX里会报“Unsupported application protocol”。
3. 绕不开的现实瓶颈:为什么你找不到开箱即用的text-to-CAD工具
搜索“text-to-CAD下载”或“免费CAD生成器”,结果全是些网页版Demo:输入“杯子”,生成一个带把手的STL。这类工具本质是“文字驱动的Blender插件”,离工程应用差着十万八千里。真正可用的text-to-CAD,目前只存在于三类场景中,且都有明显局限:
3.1 大厂封闭生态:功能强但锁死在自家平台
Autodesk Fusion 360的Generative Design模块,支持用自然语言描述设计目标(如“减重30%,保持最大应力<120MPa”),但它只接受Fusion原生参数化模型作为输入,输出也只能是Fusion可编辑的.gltf或.stp。你想把它集成到Teamcenter PLM系统?不行。想用Python脚本批量调用?官方API只开放基础几何操作,不开放语义解析引擎。西门子NX的Knowledge Fusion更狠——所有规则必须用其专属的KBE语言编写,语法比Fortran还晦涩,学习曲线陡峭到多数机械工程师放弃。我们曾帮某车企部署NX KBE,培训三天,工程师记住的唯一命令是$part->add_feature("hole", {diameter:8.0}),而真实需求是“根据载荷谱自动生成变截面悬置支架”,这需要写200行KBE代码定义应力映射规则,最终项目搁浅。
3.2 开源方案:自由但残缺,拼凑成本远超预期
OpenCASCADE社区有个Text2CAD项目,原理是用spaCy解析文本,再调用OCCT的BOPAlgo API构造几何。听起来很美,但实测发现三大硬伤:
- 标准缺失:它把“GB/T 117-2000 圆锥销”当成普通圆锥体,不生成销孔的铰制公差(H7)、不带表面粗糙度Ra1.6要求、不标注销端倒圆R0.5
- 装配失能:生成单个零件没问题,但输入“电机座与减速箱用8-M6螺栓连接”,它只会分别生成两个零件,不会创建螺栓孔位的同轴约束、不会检查干涉、更不会输出装配STEP
- 维护黑洞:项目最后更新是2021年,OCCT 7.6版本已废弃其依赖的
BRepOffsetAPI_MakePipeShell接口,修复需重写整个管道建模模块——这活儿得OCCT核心开发者才敢碰
我们试过用它搭POC,光是补全GB标准件库就花了6周:手动录入237个国标螺栓的螺纹参数、头部尺寸、扳手宽度,还得写脚本校验每项数据与最新GB/T文档的一致性。这工作量,远超直接用SolidWorks Toolbox。
3.3 垂直领域SaaS:好用但贵得离谱,且吃掉你的设计主权
nTopology的Text2Feature面向增材制造,输入“晶格结构,相对密度35%,单元尺寸2.5mm,过渡区渐变”,秒出可3D打印的.stp。但它只卖订阅制,起步价$15,000/年,且所有模型必须上传到其云端服务器运算——这对军工、航天客户是红线。更致命的是,它生成的模型用的是nTopology私有内核,导出STEP后在SolidWorks里丢失所有晶格参数,变成不可编辑的哑实体。客户想改单元尺寸?必须回nTopology重算。这等于把设计权交出去,换来的只是“快”。
所以现状很残酷:没有银弹,只有取舍。你要么接受大厂的生态枷锁,要么投入重金自研,要么在垂直SaaS的便利性和数据主权间做选择。我们给中小制造企业的真实建议是:别追求“全自动text-to-CAD”,先做“半自动指令集”。比如用Python封装常用操作:
# 示例:自动生成标准螺栓孔系 def create_bolt_holes(part, bolt_std="GB/T 5782", count=4, pattern="circle", diameter=8.0): # 自动查GB/T 5782获取M8螺栓的孔径、倒角、间距 hole_data = gb_standards.get_hole_spec(bolt_std, diameter) # 在part上创建带公差标注的孔特征 part.add_hole_pattern( center=(0,0,0), pattern_type=pattern, count=count, pitch=hole_data["pitch"], tolerance="H7", chamfer=hole_data["chamfer"] )这样,工程师输入create_bolt_holes(支架, "GB/T 5782", 6, "rectangle", 10.0),就能生成合规孔系。它不炫酷,但稳定、可控、可审计——这才是制造业要的“text-to-CAD”。
4. 实战路径:从零搭建一个可用的text-to-CAD最小系统
与其等待完美方案,不如动手造个能干活的最小系统。我们用3个月时间,在某液压阀块项目上落地了一套轻量级text-to-CAD流程,核心就三步:文本清洗→规则匹配→内核生成。不碰大模型,不用云端,全部本地运行,代码量不到2000行。下面拆解真实操作:
4.1 文本清洗层:用正则+词典,把口语转成机器可读指令
工程师日常说的“在A面打4个M12通孔,间距100mm,倒角2×45°”,对AI是噪音。我们的清洗器分三步:
- 实体识别:用预定义词典匹配关键元素
M\d+→ 螺纹规格(M12 → 直径12mm,螺距1.75mm)\d+×\d+→ 尺寸(100mm → 孔中心距)倒角\d+×\d+°→ 倒角(2×45° → 宽度2mm,角度45°)
- 关系抽取:用依存句法分析确定修饰关系
- “A面” → 定位基准面
- “4个” → 数量
- “通孔” → 孔类型(vs 盲孔、螺纹孔)
- 标准化输出:转成JSON指令
{ "feature": "hole", "count": 4, "type": "through", "thread": {"standard": "GB/T 193", "size": "M12"}, "location": {"base_face": "A", "pattern": "rectangular", "pitch_x": 100, "pitch_y": 0}, "chamfer": {"width": 2.0, "angle": 45.0}, "tolerance": "H7" }这套清洗器不用BERT,纯靠规则。为什么?因为机械文本高度结构化。“M12”不会写成“十二毫米螺纹”,“倒角2×45°”不会写成“斜切边宽两毫米角度四十五度”。规则准确率98.7%,比微调的小模型还稳。我们甚至用Excel维护词典:一列“原始表述”,一列“标准码”,工程师随时可增补——这才是产线能用的系统。
4.2 规则匹配层:把JSON指令映射到几何操作链
清洗后的JSON,要翻译成OCCT能执行的C++代码。我们用模板引擎实现:
// hole_template.cpp TopoDS_Shape create_hole(const HoleSpec& spec) { // 1. 获取基准面 TopoDS_Face base_face = get_face_by_name(spec.base_face); // 2. 计算孔位(矩形阵列) std::vector<gp_Pnt> positions; for (int i = 0; i < spec.count; i++) { double x = (i % 2) * spec.pitch_x; double y = (i / 2) * spec.pitch_y; positions.push_back(gp_Pnt(x, y, 0)); } // 3. 创建孔特征(调用OCCT布尔运算) TopoDS_Shape result = subtract_cylinder_from_face(base_face, positions, spec.thread.diameter, spec.chamfer.width, spec.chamfer.angle); return result; }关键创新点在于:所有参数都带单位校验。输入pitch_x: 100,系统自动识别为mm;若误输pitch_x: 100cm,清洗层就报错“单位不合法”。这避免了历史上某次事故:工程师把“100mm”写成“100”,程序按默认单位mm处理,结果孔距变成100μm,加工出来全是废品。
4.3 内核生成层:用OpenCASCADE导出真STEP AP242
OCCT默认导出AP203,要AP242必须自己写导出器。我们复用了OCCT的STEPCAFWriter,但做了三处关键改造:
- 添加PMI注释:在STEP文件里嵌入GD&T框
Handle(TDataStd_Name)::Set(label, "Position Tolerance: Ø0.2@MMC"); - 保留特征历史:为每个操作创建
STEPConstruct_StepModel节点,标记为SHAPE_REPRESENTATION_WITH_PARAMETERS - 装配约束固化:若输入含
assembly_relation: "coaxial",在STEP里写入SHAPE_ASPECT_RELATIONSHIP实体
导出后用STEP File Analyzer验证:
- 打开文件,
Header->File_Description显示"AP242" Part 21节里有GEOMETRIC_TOLERANCE实体Assembly节点下存在CONNECTED_TO关系
这套系统上线后,阀块设计变更响应时间从8小时缩短到11分钟。最妙的是,它生成的STEP文件,工程师能在SolidWorks里直接双击修改孔径——因为OCCT导出的AP242,SolidWorks能正确解析其参数化特征树。这证明:不靠大模型,用扎实的工程规则+可靠的几何内核,一样能做出可用的text-to-CAD。
实操心得:别一上来就搞NLP。先用Excel整理100条真实设计指令(从邮件、会议纪要里扒),人工标注“实体-关系-属性”,你会发现90%的模式就那么几种。规则引擎的开发速度,远超训练一个专用模型。
5. 下游衔接:如何让text-to-CAD生成的模型真正进入生产流
生成STEP文件只是起点,真正的挑战是让它在现有产线里跑通。我们踩过最大的坑,不是模型生成失败,而是生成的文件在下游环节被拒收。以下是必须打通的四个衔接点:
5.1 CAE仿真前处理:网格质量与边界条件自动注入
text-to-CAD生成的模型,直接扔给ANSYS会报错:“未定义材料”、“无约束条件”、“网格畸变率>15%”。我们的解决方案是:在STEP导出时,同步生成CAE元数据文件。
- 材料属性:在STEP的
PRODUCT_DEFINITION里嵌入MATERIAL_PROPERTY,指定"Aluminum_6061_T6" - 约束区域:用
ANNOTATION_CURVE标记固定面,ANSYS Mechanical自动识别为Fixed Support - 载荷位置:在孔中心创建
POINT_FEATURE,标注LOAD_APPLY_POINT
这样,CAE工程师导入STEP后,点击“Auto Setup”,系统自动完成材料赋值、约束施加、网格划分——无需手动选面。我们实测,某泵体模型的仿真准备时间从42分钟降到90秒。
5.2 CNC编程:从STEP到刀路的零人工干预
工厂最怕“模型能看不能加工”。text-to-CAD输出的STEP,必须带完整制造信息:
- 加工特征识别:在STEP里标注
MACHINING_FEATURE,如"BOSS"、"POCKET"、"THREAD" - 刀具推荐:关联
TOOL_SPECIFICATION,例如"THREAD_M12"→ 推荐TAP_M12x1.75 - 工艺路线:用
PROCESS_PLAN定义工序顺序:“钻底孔→攻丝→倒角”
我们对接了Mastercam的API,当STEP文件导入时,其PROCESS_PLAN节点自动触发宏脚本,生成对应刀路。再也不用编程员对着模型猜“这个孔要不要攻丝”。
5.3 PLM系统入库:版本控制与变更追溯
text-to-CAD生成的模型,必须纳入PLM管理。难点在于:如何区分“同一描述生成的不同版本”?我们的做法是:
- 每次生成,自动计算指令JSON的SHA256哈希值,作为
ITEM_ID - STEP文件元数据里写入
GENERATION_LOG,记录:Generated by text2cad v1.2.3 on 2024-06-15T14:22:03Z Input: "在B面打6-M10螺纹孔,深25mm,H7公差" OCCT_Version: 7.6.3
这样,PLM系统能自动识别:当工程师修改输入为“深30mm”,系统生成新哈希ID,旧版本自动冻结,变更留痕清晰。
5.4 质检环节:GD&T自动比对
质检员拿到STEP,第一件事是检查公差标注是否符合图纸。我们开发了轻量比对工具:
- 解析STEP的
GEOMETRIC_TOLERANCE实体 - 提取公差值(如
Ø0.2)、基准(如A|B|C)、修饰符(如@MMC) - 与企业标准库比对(如“泵体类零件,位置度公差≤Ø0.15”)
- 自动生成质检报告PDF,标红超差项
这避免了人工逐条核对,某次发现生成的Ø0.25位置度被误设为Ø0.2,系统自动拦截,防止不合格品流入产线。
这套衔接方案,让text-to-CAD不再是孤岛工具,而是嵌入设计-仿真-制造-质检全链路的活水节点。它不取代工程师,而是把他们从重复劳动中解放出来,专注真正的设计决策——比如,“这个加强筋形状,用鱼骨式还是蜂窝式,哪种更抗振?”这种问题,才值得人类智慧。
我在实际项目中发现,最有效的text-to-CAD从来不是“全自动”,而是“精准半自动”:它不试图理解“设计意图”,而是严格执行“设计指令”。工程师写清楚“做什么”,系统负责“怎么做”,双方各司其职。当某天你收到产线消息:“支架加强筋厚度已按指令改为3.0mm,新STEP已推送至CNC站”,那一刻你会明白:技术的价值,不在多炫,而在多稳。