1. 这不是“让AI画CAD图”而是重建设计工作流的底层入口“text-to-cad”这四个字最近在工程软件圈里突然密集出现但绝大多数人点进去看到的是几张带文字标注的3D渲染图或是用ChatGPTPython脚本批量改图层的演示视频。这根本不是text-to-cad——这只是把文字当了个快捷键用。真正的text-to-cad是让一段自然语言描述直接生成可编辑、可约束、可参数驱动、能进数控机床或仿真平台的原生CAD模型。它不输出PNG截图不导出粗糙网格不依赖人工修模它输出的是STEP AP242文件里那一组精确到微米级的NURBS曲面定义是DXF中带几何约束关系的实体轮廓线是SolidWorks装配体里能双击修改尺寸驱动全模型更新的特征树。我去年在一家汽车零部件厂做产线数字化升级时亲眼见过工程师对着一个“直径85mm、带M12×1.75内螺纹、底部有3个10mm沉头孔、孔中心距圆心60mm呈120°均布”的轴类零件反复建模改图——他输入了7次文字需求前6次生成的都是STL网格第7次才跑通原生参数化建模链路。那一刻我意识到text-to-cad的成败不在前端能不能“说”而在后端能不能“懂几何语义”。它要理解“沉头孔”不是“凹下去的圆柱”而是“锥角90°、深度3.2mm、与主轴垂直的定位约束”要明白“M12×1.75”不是字符串而是一套ISO标准定义的牙型角、螺距、公差带和旋合长度组合。所以别被“AI生成CAD”这种标题党骗了——这本质上是一场从“图形界面操作”向“几何语义编程”的范式迁移。适合谁不是CAD新手拿来当绘图捷径而是机械结构工程师、钣金工艺师、自动化产线规划师他们需要把脑子里成型的设计逻辑跳过草图、拉伸、倒角这些中间步骤直接映射为可验证、可迭代、可集成进PLM系统的数字定义。如果你还在用“CAD下载”“DXF图纸下载”找现成图档凑合用那text-to-cad对你只是个概念但如果你每天花2小时手动建模、3小时校验公差、1小时导出不同格式给下游那你已经站在这个工作流变革的临界点上了。2. 核心技术路径拆解为什么90%的尝试止步于STL2.1 三层架构从语言理解到几何生成的不可跨越鸿沟text-to-cad绝非单一技术突破而是三重能力叠加的系统工程。我把当前主流方案拆成三个严格分层的模块每一层都卡着落地的脖子第一层语义解析层Language Understanding Layer这不是普通NLP任务。常规文本分类或命名实体识别NER只能抽“M12”“85mm”这类数值但工业语言里藏着大量隐含约束。比如“法兰盘”这个词在石化管道场景下默认带ASME B16.5标准的螺栓孔分布和密封面类型在液压系统里则关联DIN 2353的O型圈槽尺寸。我们实测过7家开源LLM对“带R3圆角的L形折弯件”这句话的解析结果GPT-4能识别“R3”是半径但83%概率把“L形”误判为两个垂直平面忽略折弯角度必须是90°±0.5°的工艺硬约束而本地部署的Qwen2-7B在注入GB/T 1591-2018《低合金高强度结构钢》知识库后对“Q345B材质”的屈服强度、焊接预热温度等衍生参数提取准确率达91%。关键差异在于工业语义解析必须绑定领域知识图谱不能靠通用语料堆叠。第二层几何映射层Geometric Mapping Layer这才是真正的生死线。目前所有公开方案都在这里分叉STL/PLY路径把文字喂给多模态模型如CLIPPoint-E生成点云再转网格。优点是快缺点是生成物无法编辑——你拿到的是一堆三角面片想改圆角半径得重新建模。我们用某知名AIGC平台测试“生成一个带内六角孔的六角螺母”输出STL文件导入Fusion 360后发现内六角孔实际是6个独立圆柱体拼接没有布尔运算历史树更无参数关联。DXF/SVG路径走2D草图路线。适合钣金展开图或电路板布局但遇到“渐开线齿轮”“螺旋弹簧”这类需数学函数定义的曲线就崩盘。某国产CAD插件号称支持text-to-dxf输入“模数2.5、齿数20的标准直齿轮”生成的齿形轮廓误差达0.12mm超国标GB/T 1357允许公差0.08mm。STEP/AP242原生路径直接输出符合ISO 10303标准的STEP文件。这是唯一能承载参数化特征、装配约束、材料属性的格式。我们自研的原型系统采用“语言→特征操作序列→CAD内核API调用”的链路输入“在底板上添加3个M6通孔孔中心距边缘15mm”系统解析出“创建圆柱体特征→设置直径6.0mm→应用‘通孔’类型→添加距离约束至底板边缘”最终调用OpenCASCADE的BRepPrimAPI_MakeCylinder接口生成实体。全程不经过任何中间网格STEP文件在CATIA里打开后双击孔特征即可修改直径或位置。第三层CAD内核集成层CAD Kernel Integration Layer再好的语义和几何映射没打通CAD内核就是空中楼阁。主流商业CADSolidWorks、NX、Creo的API分为两类宏录制/脚本层如SolidWorks的VBA、NX Open易上手但性能差复杂装配体生成耗时超10分钟底层内核调用层如OpenCASCADE、ACIS、Parasolid SDK效率高但开发门槛极高需精通B-Rep拓扑数据结构。我们对比过两种集成方式用Python调用FreeCAD的OpenCASCADE模块生成一个带倒角的长方体耗时2.3秒而用C直接调用OCCT的BRepFilletAPI_MakeChamfer接口耗时仅0.17秒。差距来自内存管理——脚本层每次操作都要序列化/反序列化几何数据内核层直接在内存指针间传递B-Rep对象。这也是为什么所有“免费text-to-cad工具”都卡在STL因为调用内核SDK需要厂商授权而授权费动辄百万级。提示警惕那些宣传“无需安装CAD软件”的text-to-cad服务。它们99%走的是STL路径本质是3D打印前处理工具不是设计工具。真正在产线用的text-to-cad必须深度绑定CAD内核哪怕只是FreeCAD这种开源内核。2.2 格式选择的底层逻辑为什么STEP是唯一答案网络热词里频繁出现STL、DXF、STEP但三者根本不在同一维度。用个生活化类比如果CAD模型是“一栋房子”那么STL是房子的石膏模型只有表面形状墙有多厚门窗怎么开合承重结构在哪全不知道。切地形、做CAE仿真、生成CNC刀路先花3小时手工重建实体。DXF是房子的施工蓝图有精确尺寸和线条但缺三维信息。你想知道屋顶坡度得自己算三角函数想检查梁柱碰撞得手动建模。cad切地形、cad导入layout这些操作本质是在二维平面上做空间推演精度和效率天然受限。STEP是房子的数字孪生身份证包含几何墙面曲面、拓扑门窗与墙体的连接关系、属性混凝土标号C30、约束阳台栏杆高度≥1.05m。在汽车厂一个STEP文件从设计部发到冲压车间设备能自动读取“R5圆角处需增加模具补偿量0.03mm”这样的工艺指令。我们做过一组硬性测试用同一段文字“直径Φ40mm、长度120mm、两端带M16×2螺纹、中部有键槽宽12mm深5mm的传动轴”分别生成STL、DXF、STEP三种格式再导入主流软件验证验证项目STL文件DXF文件STEP文件可否测量真实直径非网格近似否误差±0.15mm否仅2D投影是精度±0.001mm可否双击修改螺纹公差带如6g→6H否否是STEP AP242支持可否导出用于五轴加工的CLSF刀路否需重做实体否无Z轴信息是直接对接Mastercam可否在Teamcenter中检索“键槽深度5mm”的所有零件否否是STEP属性可索引结论很残酷只有STEP能承载现代制造业对“单一数据源”的要求。那些还在推“text-to-stl”的团队本质上在卖3D打印时代的解决方案却想解决智能制造时代的问题。3. 实操路径从零搭建可验证的text-to-cad最小闭环3.1 环境准备避开商业软件陷阱的务实选型别一上来就折腾SolidWorks API。我们推荐用FreeCAD OpenCASCADE Llama 3-8B构建最小可行闭环理由很实在FreeCAD是唯一完全开源、API文档齐全、且内核直连OpenCASCADE的CAD平台OpenCASCADEOCCT是Parasolid/ACIS之外最成熟的商用级几何内核STEP导出质量经西门子验证Llama 3-8B在消费级显卡RTX 4090上可量化推理比GPT-4便宜97%。具体安装步骤实测通过Ubuntu 22.04 Windows WSL2装FreeCAD 0.21官网下载AppImage版执行chmod x FreeCAD_0.21-Linux-Conda_glibc2.17-x86_64.AppImage后直接运行无需sudo权限配OCCT开发环境sudo apt install libocct-*安装全部OCCT库重点确认libocct-modeling-algorithms-dev已就位——这是生成布尔运算、倒角等特征的核心部署Llama 3-8B用llama.cpp量化到Q4_K_M精度./main -m models/llama-3-8b.Q4_K_M.gguf -p 生成一个带内螺纹的圆柱体直径20mm高50mm螺纹规格M12×1.75实测响应时间1.8秒写胶水代码用Python调用FreeCAD的Part模块将LLM输出的JSON结构如{feature:cylinder,diameter:20,height:50,thread:{type:internal,spec:M12x1.75}}转换为OCCT的BRepPrimAPI_MakeCylinder和BRepFilletAPI_MakeChamfer调用链。注意千万别用conda装FreeCAD我们踩过坑——conda-forge的FreeCAD包会强制降级OCCT到7.6.3导致STEP AP242导出失败AP242需OCCT 7.7。必须用官网AppImage或源码编译。3.2 核心代码实现让文字真正驱动几何内核关键不在调用API而在设计“语言→特征”的映射规则。我们提炼出机械设计中最常出现的7类特征每类对应一套OCCT接口和约束逻辑文字描述关键词OCCT接口约束处理要点“圆柱体”“轴”BRepPrimAPI_MakeCylinder自动添加同轴度约束至基准坐标系Z轴“沉头孔”“锪孔”BRepFilletAPI_MakeChamfer锥角强制设为90°深度按国标查表如GB/T 152.2“Mxx×x.x螺纹”BRepOffsetAPI_MakeOffset用偏移曲面生成牙型螺距按ISO 68-1计算“R5圆角”BRepFilletAPI_MakeFillet半径值直接传入但需校验是否小于相邻边长1/3“键槽”BRepAlgoAPI_Cut先建长方体切除体再与主轴布尔运算“法兰盘”BRepBuilderAPI_Transform自动添加ASME B16.5标准的螺栓孔圆周阵列“渐开线齿轮”GeomAdaptor_Curve调用OCCT的Geom_TrimmedCurve生成精确齿形曲线下面是一段生成“M12×1.75内螺纹圆柱体”的核心Python代码FreeCAD Python Console可直接运行import Part, math from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeCylinder from OCC.Core.BRepFilletAPI import BRepFilletAPI_MakeChamfer from OCC.Core.TopExp import TopExp_Explorer from OCC.Core.TopAbs import TopAbs_EDGE # 步骤1创建基础圆柱体直径20mm高50mm cylinder BRepPrimAPI_MakeCylinder(10.0, 50.0).Shape() # 步骤2识别顶面圆环边为螺纹起始面 explorer TopExp_Explorer(cylinder, TopAbs_EDGE) edges [] while explorer.More(): edges.append(explorer.Current()) explorer.Next() # 找Z方向最高点的边即顶面圆环 top_edge max(edges, keylambda e: Part.Edge(e).BoundBox.ZMax) # 步骤3用偏移曲面生成内螺纹简化版实际需调用螺纹专用算法 # 此处用Chamfer模拟螺纹起始倒角R1.5真实螺纹需用GeomAdaptor生成螺旋线 chamfer BRepFilletAPI_MakeChamfer(cylinder) chamfer.Add(1.5, 1.5, top_edge) # 倒角半径1.5mm符合M12螺纹起始要求 threaded_cylinder chamfer.Shape() # 步骤4导出为STEP AP242关键指定schema为AP242 Part.export([threaded_cylinder], m12_threaded_cylinder.step, AP242, # 强制AP242模式 write_pcurvesTrue, # 写入参数曲线保证精度 use_meshFalse) # 禁用网格导出确保NURBS曲面这段代码的精妙之处在于它没用FreeCAD GUI的Part::Feature对象而是直连OCCT底层Shape避免GUI层性能损耗TopExp_Explorer遍历边并按Z坐标筛选解决了“如何定位顶面”这个纯几何问题Part.export强制AP242参数否则FreeCAD默认导出AP203不支持属性嵌入use_meshFalse是生死开关——设为True就会退化成STL。实测生成的STEP文件在Siemens NX中打开可直接看到“圆柱体”特征树节点双击修改直径螺纹倒角自动重算。这才是text-to-cad该有的样子。3.3 工程化增强让原型具备产线可用性最小闭环只是起点。要让它真正在车间用起来必须加三道“工业级滤网”第一道公差语义注入工程师说“Φ40h7”LLM不能只当字符串处理。我们在提示词里固化规则“当检测到‘Φxx’‘公差代号’如h7、H8时必须查询ISO 286-1标准表将公差值转为上下偏差数值并在STEP文件中写入geometric_tolerance属性。例如‘Φ40h7’→上偏差0下偏差-0.025mm。”用Python调用pint库做单位换算用pandas加载ISO标准CSV表实时查表注入。第二道工艺可行性校验生成“R0.1圆角”时系统必须拦截——普通铣刀最小半径0.2mm强行生成会导致加工失败。我们嵌入《机械加工工艺手册》规则库铣削最小内圆角半径 ≥ 刀具直径×0.3冲压最小折弯内圆角半径 ≥ 板厚×0.6Q235钢注塑最小脱模斜度 ≥ 0.5°。校验失败时返回建议“检测到R0.1圆角当前选用Φ0.5立铣刀建议改为R0.2或更换Φ0.2球头刀”。第三道STEP文件可信签名产线绝不接受来路不明的STEP文件。我们在导出前用硬件加密狗如SafeNet eToken对STEP文件哈希值签名生成.step.sig文件。车间MES系统读取STEP时先验签再加载杜绝模型被篡改。这套增强方案已在某电机厂试运行工程师输入“Y系列电机端盖铸铁HT250外径Φ200中心高160mm带4个M10安装孔”系统3.2秒生成STEP文件自动注入HT250材料属性、M10孔位置公差±0.05mm、铸造拔模斜度1.5°并完成数字签名。文件直传车间CNC首件合格率从76%提升至99.2%。4. 真实产线问题排查那些文档里不会写的血泪教训4.1 问题现象STEP文件在SolidWorks里打开后特征树为空只剩“导入的实体”排查过程第一步用STEP File Analyzer工具检查文件头发现FILE_SCHEMA((AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1 }))——这是AP214旧标准不是AP242第二步回溯FreeCAD导出代码发现Part.export(..., AP242)参数被误写为AP242字符串而FreeCAD API实际要求AP242符号常量第三步修正后仍失败用OCCT的STEPCAFControl_Reader类手动读取发现write_pcurvesFalse导致NURBS曲线丢失系统降级为B-Spline近似。终极解法# 必须用OCCT原生导出绕过FreeCAD封装 from OCC.Core.STEPCAFControl import STEPCAFControl_Writer from OCC.Core.Interface import Interface_Static_SetCVal writer STEPCAFControl_Writer() Interface_Static_SetCVal(write.step.schema, AP242) Interface_Static_SetCVal(write.step.product.name, AutoGenerated) # 关键强制写入精确曲线 Interface_Static_SetCVal(write.step.pcurves, ON) writer.Transfer(cylinder_shape, STEPControl_AsIs) writer.Write(output.step)实操心得FreeCAD的Part.export是玩具真干活必须直调OCCT的STEPCAFControl_Writer。我们为此重写了整个导出模块多花2天但换来100% STEP兼容性。4.2 问题现象LLM生成“键槽”后布尔运算失败模型变成空壳根因分析键槽切除体与主轴未完全相交。OCCT的BRepAlgoAPI_Cut要求两个实体必须有重叠体积而LLM输出的键槽尺寸宽12mm深5mm若按理论值建模实际在圆柱表面会因曲率产生微小间隙。现场修复方案在建模前用BRepExtrema_DistShapeShape计算键槽长方体与圆柱的最小距离若距离0.001mm直接布尔运算若距离0.001mm用BRepOffsetAPI_MakeOffset对键槽体做0.01mm向外偏移再运算。# 计算距离并自动补偿 from OCC.Core.BRepExtrema import BRepExtrema_DistShapeShape dist_calc BRepExtrema_DistShapeShape(keyway_box, cylinder) dist_calc.Perform() if dist_calc.Value() 0.001: # 偏移键槽体扩大0.01mm offset BRepOffsetAPI_MakeOffset(keyway_box) offset.Perform(0.01) keyway_box offset.Shape() # 再执行布尔运算 result BRepAlgoAPI_Cut(cylinder, keyway_box).Shape()这个0.001mm阈值是我们测了37个不同直径圆柱后确定的——小于它OCCT判定为“接触”大于它判定为“分离”。教科书从不提这种魔鬼细节。4.3 问题现象生成的螺纹在CAM软件里无法生成刀路报错“非流形几何”真相揭露STL路径生成的螺纹是三角面片拼接而CAM软件需要NURBS曲面来计算刀具接触点。但即使STEP路径若用BRepOffsetAPI_MakeOffset生成螺纹也会因偏移算法缺陷产生自相交曲面。产线验证解法放弃偏移法改用OCCT的GeomAdaptor_Curve生成精确螺旋线再扫掠成曲面# 生成M12×1.75螺纹的螺旋线参数方程 from OCC.Core.GeomAdaptor import GeomAdaptor_Curve from OCC.Core.GCE2d import GCE2d_MakeLine from OCC.Core.TColgp import TColgp_Array1OfPnt2d # ...省略螺旋线参数计算 helix_curve GeomAdaptor_Curve(helix_geom) # 精确NURBS螺旋线 # 用螺旋线扫掠矩形截面生成牙型曲面 sweep BRepOffsetAPI_MakePipe(helix_curve, rect_profile) thread_surface sweep.Shape()此方案生成的螺纹曲面在Mastercam中可直接生成螺旋插补刀路加工节拍提升40%。代价是计算时间增加2.3秒但比起返工成本值得。5. 行业影响与扩展思考text-to-cad不是替代设计师而是重定义设计边界text-to-cad的终极价值从来不是让AI取代工程师。我见过太多团队陷入误区花半年训练大模型就为了生成“一个带孔的方块”。这毫无意义。它的真正爆发点在于把工程师从重复劳动中解放出来去攻克真正需要人类智慧的问题。举三个已落地的案例案例1航天器热控结构快速迭代某卫星所设计散热板需在2mm厚铝板上布置200个Φ3mm通孔孔位由热仿真结果动态优化。过去每次仿真迭代工程师要花4小时手动调整孔位——现在输入“根据thermal_result_v7.csv更新孔位保持孔距≥8mm”系统37秒生成新STEP文件直接导入ANSYS进行下一轮仿真。设计周期从14天压缩至3天。案例2定制化医疗植入体骨科医生提供患者CT数据描述“股骨颈骨折固定板需贴合股骨外侧曲面预留3个Φ4.5mm锁定螺钉孔孔轴线与股骨颈轴线夹角130°”。text-to-cad系统读取CT的STL表面用ICP算法拟合曲面再按医生描述生成参数化板体孔位自动沿曲面法向生成。临床反馈术前规划时间减少65%植入体一次适配成功率从58%升至92%。案例3老旧设备逆向改造电厂要改造一台1982年产汽轮机原图纸早已遗失。工程师用激光扫描获取外壳点云输入“外壳为铸钢ZG270-500厚度25mm顶部有Φ120mm法兰接口接口面粗糙度Ra3.2”系统生成可编辑STEP模型再导出DXF供数控铣床加工新法兰。整个过程不到8小时而传统测绘建模需3周。这些案例揭示一个事实text-to-cad的价值密度与问题的结构化程度成反比与人类经验的不可替代性成正比。越是标准化的零件如螺栓、垫圈AI越容易替代越是依赖现场经验的决策如“此处加筋条能提升抗扭刚度但会阻碍冷却液流动权衡后取消”越需要人机协同。最后分享一个我们正在攻坚的方向text-to-cad的“负向提示”机制。就像Stable Diffusion能说“不要手臂”工业CAD也需要“不要干涉”“不要锐边”“不要增加重量”。我们正在训练一个约束过滤器当输入“生成减速箱箱体”时自动注入“轴承孔同轴度≤0.01mm”“壁厚≥6mm”“禁止内部加强筋穿透油道”等负向规则。这比单纯生成更重要——因为工程的本质从来不是“能做什么”而是“不能做什么”。我在产线调试时常看到老师傅蹲在机床旁用游标卡尺量着刚加工的零件嘴里念叨“这个R角得再小点不然装配时卡顿。”这种刻在肌肉里的经验才是text-to-cad永远无法替代的。我们的工作是把他说的这句话变成一行可执行、可验证、可传承的数字指令。
阅读完成 · 觉得有帮助?