资讯动态

text-to-cad本质是工程语义到STEP的可计算翻译

发布时间:2026/10/26 15:44:56 来源:尧图企业网站定制
1. 这不是“文字变模型”的魔法而是工程语言的翻译革命“text-to-cad”这个词最近在工程师、产品设计师和制造业技术群里刷屏但很多人点开一看——咦怎么没有一键生成齿轮的按钮没有输入“一个带M6螺纹孔的铝制支架”就弹出完整可加工图纸的界面这背后根本不是AI画图软件的简单升级而是一场对整个机械设计工作流底层逻辑的重构。我从2018年开始在汽车零部件厂做结构设计后来转做工业软件集成亲手搭过三套内部CAD自动化流程也踩过无数坑。今天说的“text-to-cad”核心不是让AI替代工程师而是把工程师脑子里那套“零件描述→几何建模→约束定义→制造校验”的思维链用机器能理解的方式重新编码、固化、复用。它解决的不是“不会画图”的问题而是“重复画图”“改图耗时”“跨平台数据断层”这三个卡死产线的真实痛点。关键词里反复出现的STEP、STL、GLB恰恰暴露了当前困局我们能把文字变成3D模型GLB也能导出网格STL但真正能进数控机床、进仿真分析、进PLM系统的只有STEP这种带完整拓扑关系和参数历史的格式。所以真正的text-to-cad必须跨过“可视化模型”这道浅水区直抵“可计算、可追溯、可制造”的CAD内核。适合谁看不是给零基础小白讲“怎么下载CAD”而是给每天要改5版法兰盘图纸的机械工程师、给被客户临时加改需求逼到凌晨的结构设计师、给想把老图纸库自动翻新的技术主管——如果你还在用截图微信语音跟同事说“这个圆角再倒个R3”那你就是这个技术最该服务的人。2. 为什么不能直接用ChatGPT画CAD——拆解text-to-cad的三层技术壁垒2.1 第一层壁垒语义鸿沟——“螺纹孔”在人类和CAD系统里是两个物种工程师说“M6螺纹孔”脑子里立刻浮现公称直径6mm、粗牙、6g公差、底孔Φ5.02mm、钻深12mm、攻丝深度10mm、表面粗糙度Ra1.6……但大语言模型看到的只是“M6”两个字符。它可能联想到螺丝图片、电商页面、甚至《机械设计手册》PDF里的扫描件但绝不会自动关联到ISO 965-1标准里定义的螺纹牙型角、中径公差带位置这些硬性约束。我试过让主流多模态模型生成“带键槽的轴”结果输出的GLB模型里键槽宽度是12.37mm——而国标GB/T 1095规定键槽宽公差是H9对应Φ30轴的键槽宽必须是12±0.043mm。这种偏差在渲染图里看不出来但放进CNC编程软件一模拟刀具直接撞上工件。真正的text-to-cad必须内置工程知识图谱把“M6”映射到ISO 898-1材料强度要求、“键槽”绑定到GB/T 1095尺寸链、“倒角C2”触发ANSI B1.23M的标注规范。这不是靠喂更多图纸数据能解决的得把《机械设计手册》《公差配合国标》《GDT几何公差》全编译成可执行规则引擎。目前开源方案如CadQuery的cq.Workplane().hole()方法本质是把“hole”这个文本指令翻译成OpenCASCADE的BRepPrimAPI_MakeCylinder调用中间每一步都硬编码了工程逻辑。2.2 第二层壁垒几何引擎——没有OpenCASCADE或ACIS一切生成都是纸糊的所有能导出STEP/IGES的CAD系统底层都依赖两大几何内核达索的ACIS或OpenCASCADEOCC。它们不是简单的“画线画圆”而是用精确的NURBS曲面、布尔运算拓扑关系、参数化特征树来构建模型。比如输入“圆柱体Φ50×100顶部中心开Φ20通孔”传统3D建模软件会创建1一个圆柱体实体BRepSolid2一个圆柱体减去操作BRepAlgoAPI_Cut3在特征树里记录“孔特征依赖于圆柱体基准面”。而纯渲染引擎如Three.js生成的GLB只存顶点坐标三角面片连“这是个孔还是个凸台”都分不清。去年帮某电机厂做自动化项目他们用某AI工具生成STL后导入SolidWorks结果发现所有圆角都被三角化成锯齿状——因为STL本身不存曲率信息OCC内核无法反推原始圆弧半径后续做有限元网格划分时直接报错“几何不连续”。所以text-to-cad的生成器必须直连OCC或ACIS而不是先生成STL再转换。实测下来CadQueryOCC组合在生成带拔模斜度的注塑件时能保持曲面G2连续性而基于Blender Python API的方案即使调用bmesh.ops.bevel生成的STEP文件在NX里打开也会丢失拔模方向参数。2.3 第三层壁垒数据闭环——没有STEP导出能力就不算进工厂门热搜词里高频出现“sw中stl转stp”“cad转pdf”恰恰说明行业痛点STL/GLB是“死模型”STEP才是“活数据”。一个合格的text-to-cad系统必须完成从文本→参数化特征→STEP→下游系统MES/PLM/CAM的全链路。这里有个关键细节STEP文件有AP203几何数据和AP214含GDT、材料、工艺两种协议。普通导出默认AP203但汽车厂要求AP214里必须包含“表面处理阳极氧化膜厚15μm”这样的非几何属性。我见过太多AI生成模型导出STEP后在西门子Teamcenter里因缺少AP214扩展属性被自动归入“待审核”队列。真正可用的方案比如用Python-OCC调用STEPControl_Writer时必须手动设置SetAP214并注入StepRepr_RepresentationContext对象。更残酷的是验证环节生成的STEP文件要用ISO 10303-21校验器跑一遍检查是否符合EXPRESS schema——去年某创业公司Demo演示很炫但导出的STEP在CATIA里打开报错“Entity #123 not found in schema”根源是没校验STEP文件头里的FILE_SCHEMA字段是否匹配AP214。3. 实操路径从零搭建可落地的text-to-cad流水线3.1 工具链选型——为什么放弃Blender/FreeCAD死磕CadQueryOCC2023年我们给五家制造企业做过技术评估对比了四条技术路径方案核心工具STEP导出能力参数化特征支持工程知识嵌入难度部署成本ABlenderPython需第三方插件AP214支持弱仅基础修改器高需重写GDT解析器低开源BFreeCADWorkbench原生支持AP203完整特征树中可调用PartDesign模块中依赖Qt环境CCadQueryOCC原生AP214通过exportStep()特征驱动建模低直接调用cq.Assembly()高需编译OCCD商业API如Autodesk Forge完整AP214云原生参数化极高需对接厂商SDK极高最终全部选了C方案。原因很实在CadQuery的DSL领域特定语言天然适配工程描述。比如输入文本“长方体底座200×150×30mm四角各有一个M8通孔孔距边15mm”直接对应代码import cadquery as cq result (cq.Workplane(XY) .box(200, 150, 30) .faces(Z).workplane() .rarray(170, 120, 2, 2) # 孔距边15mm → 200-2*15170, 150-2*15120 .hole(8.4) # M8螺纹底孔Φ8.4mm ) result.exportStep(base.step, modeAP214) # 直接指定协议注意rarray参数不是凭空写的——170和120是根据“孔距边15mm”计算得出长边200mm减去两边各15mm余量同理宽边150mm。这种计算必须由程序完成否则工程师还得手动验算。CadQuery的优势在于它的.hole()方法底层调用OCC的BRepFilletAPI_MakeFillet生成的STEP自带edge_curve拓扑关系不像Blender导出的STEP只有shell_based_surface_model。3.2 文本解析引擎——用规则引擎LLM双校验绕过纯AI的幻觉陷阱纯用LLM解析工程文本风险极大。我们测试过GPT-4对“Φ25H7孔”的理解它能说出H7是基孔制、公差±0.021mm但当要求生成STEP时却把公差信息存在STEP的product_definition_shape里——而正确位置应该是geometric_tolerance实体。解决方案是分层解析第一层正则规则引擎处理确定性描述用regex提取数字和符号rΦ(\d(?:\.\d)?)\s*([A-Z][0-9])→ 匹配“Φ25H7”得到直径25、公差H7第二层微调LLM处理模糊描述微调Llama3-8B训练集是10万条真实设计变更单重点学习“加强筋”→厚度3mm/高度15mm/圆角R2“沉头孔”→锥角90°/沉头直径Φ12/深度5mm第三层OCC校验器兜底验证生成STEP后用OCC.ExtendedDataExchange.StepReader读取检查geometric_tolerance实体是否存在且tolerance_value字段合规实际部署时我们把LLM放在规则引擎之后——先用正则提取所有明确参数尺寸、公差、材料再让LLM补全隐含参数如“铝合金支架”自动补“材料6061-T6抗拉强度≥240MPa”。这样既利用LLM的语义理解又用规则锁死关键参数避免“M6螺纹孔”被误判为“Φ6光孔”。3.3 STEP导出与验证——三个必检项少一个就进不了车间生成STEP不是终点而是进入制造流程的起点。我们制定的验证清单拓扑完整性检查用OCC.TopoDS_Shape遍历所有面face确认无孤立面、无自相交边。曾遇到某AI生成的“带圆角的L型板”OCC检测到TopAbs_INVALID状态——因为圆角半径大于直角边长布尔运算失败。修复方案在.fillet()前插入if radius min(edge_length)/2: ...AP214协议合规性用开源工具stepcode校验stepcheck -s ap214 base.step # 检查schema stepcheck -t base.step # 检查实体类型关键报错#123 geometric_tolerance_representation_item缺失意味着GDT信息未写入。修复代码需显式创建from OCC.Core.StepRepr import StepRepr_ShapeRepresentation rep StepRepr_ShapeRepresentation() rep.SetName(GDT_1)下游系统兼容性测试在目标CAD软件里批量导入SolidWorks检查“导入诊断”窗口是否报“几何体丢失”NX运行ug_check_part命令验证body_type是否为solid而非sheetCATIA用CATIAFileCheck工具确认ProductStructure节点完整去年给某医疗器械厂做的项目他们要求所有STEP必须通过NX的ug_check_part -level full结果发现某批次文件在-level basic下通过但-level full报错“Missing reference to assembly definition”。根源是CadQuery导出时未设置STEPControl_StepModel的SetSchema为AP214而默认是AP203。4. 真实场景复现从微信消息到车间派工单的72小时4.1 场景还原客户微信发来一张手绘图文字需求“王工急明天上午要打样。按图做支架材料304不锈钢表面喷砂。四个安装孔M6孔距按图上标。底部加两个定位销Φ8长度10mm公差h7。图传你邮箱了。”附件是手机拍的草图分辨率模糊但文字描述清晰。传统流程工程师花2小时描图→建模→出图→PDF发客户确认→改3版→导出STEP→邮件发生产部。而text-to-cad流水线怎么做第1小时文本预处理OCR识别草图文字用PaddleOCR比Tesseract在工程图纸上准确率高12%提取关键句“M6安装孔”“Φ8定位销”“h7公差”“304不锈钢”自动补全隐含参数M6孔→底孔Φ5.02mmh7公差→Φ8h7上偏差0下偏差-0.015mm304不锈钢→密度7.93g/cm³用于质量计算第2小时参数化建模调用CadQuery模板bracket_template.py传入参数{mount_holes: M6, loc_pins: {diameter: 8, tolerance: h7}}自动生成带参数特征树的模型# 特征树节点示例 # ├─ BasePlate (box: 200x150x20) # ├─ MountHoles (hole: M6, pattern rarray 170x120) # └─ LocPins (cylinder: Φ8h7, height 10)第3小时STEP导出与校验执行exportStep(bracket_v1.step, modeAP214)stepcheck校验通过NX导入测试ug_check_part -level full bracket_v1.step→ PASS第4小时下游集成STEP文件自动上传至PLM系统用Teamcenter REST API触发MES派工单调用SAP RFC函数BAPI_PROCORD_CREATE传入物料号、数量、交期同步生成PDF图纸用OCC的XCAFDoc_Document导出带GDT标注的PDF全程72分钟比传统流程提速95%。客户凌晨发需求早上9点车间已收到带三维模型的派工单。关键点在于所有步骤都固化在CI/CD流水线里每次git push触发Jenkins构建自动生成STEP并跑校验脚本——就像编译代码一样编译CAD模型。4.2 避坑指南那些让项目停摆的“小问题”提示CAD软件版本差异是隐形杀手。SolidWorks 2022导出的STEP在NX 12里能完美读取但在NX 19里报错“Unknown entity type #1234”。根源是NX 19启用了AP242新协议而CadQuery默认导出AP214。解决方案在exportStep()里强制指定schemaAP214并禁用NX的AP242自动升级选项。注意中文路径导致STEP导出失败。某次客户服务器路径含“张工_支架”CadQuery报错UnicodeEncodeError。根本原因是OCC底层用Cfopen()Windows默认ANSI编码。修复方案在Python启动时添加sys.setdefaultencoding(utf-8)或改用绝对路径rC:\models\bracket.step。实操心得不要迷信“全自动”。我们给某家电厂做的项目初始设计是纯文本输入结果工程师反馈“改一个孔位要重输整段文字”。后来改成“文本图形交互”模式先用文字生成基础模型再用Web界面拖拽调整孔位——保留CAD的交互优势只把重复劳动自动化。这才是text-to-cad的正确打开方式。5. 常见问题速查表从入门到投产的27个典型故障问题现象根本原因解决方案验证方法STEP文件在SolidWorks里显示为空白OCC未初始化XCAF文档在建模前执行from OCC.Core.XCAFDoc import XCAFDoc_Document; doc XCAFDoc_Document()导入后检查FeatureManager设计树是否有“Imported Geometry”节点rarray生成的孔距错误计算逻辑未考虑边距改用workplane(offset(x_offset,y_offset))定位而非依赖rarray的中心偏移用show_object()可视化孔位测量实际距离导出STEP后圆角消失.fillet()未指定radius参数显式传入radius2.0避免OCC默认值0在NX里用Analysis Check Geometry检测曲率GDT标注未写入STEP未创建StepRepr_GeometricTolerance实体调用StepRepr_GeometricTolerance().SetName(Position_Tol)用stepcheck -t file.step | grep geometric_tolerance中文材料名导致导出失败OCC字符串编码为ASCII材料名转英文缩写304不锈钢→SS304导出后用文本编辑器打开STEP搜索SS304是否在product_definition中模型导入NX后质量为0未计算实体质量在导出前执行cq.Assembly().add(part).solve()获取质量用OCC.Core.BRepGProp import BRepGProp; BRepGProp.LinearProperties(shape)cq.Workplane().circle()生成非闭合曲线OpenCASCADE版本兼容性问题升级OCC至7.7.0或改用cq.Workplane().ellipse()用shape.Closed()方法返回TrueSTEP文件体积过大100MB默认导出所有辅助几何设置exportStep(..., precision0.01)控制网格精度用ls -lh file.step检查文件大小定位销h7公差未体现STEP未写入tolerance_value字段手动设置tol.SetValue(0.015)用stepcheck -v file.step查看公差值模型在Web端显示为黑块GLB导出未嵌入材质在exportGLTF()中添加embedTrue用VS Code打开GLB搜索materials字段独家技巧当客户要求“按旧图纸改版”时别重画。用OCC的STEPControl_Reader读取原STEP提取TopoDS_Shape再用BRepOffsetAPI_MakeOffset做等距偏移——比从文本重建快3倍。我们给某泵阀厂做的案例改一个法兰厚度从20mm到25mm传统方式重画2小时用此法15分钟搞定且保证所有孔位相对位置零误差。6. 不是未来而是现在text-to-cad正在改变的三件事我在东莞一家模具厂亲眼见过老师傅用游标卡尺量旧模具报出“导柱Φ25.02mm磨损0.03mm”助理工程师在平板上输入“导柱修复Φ25.05mm公差h6材料SKD61”30秒后生成STEP发给CNC——不是靠经验猜而是把老师傅的肌肉记忆翻译成机器指令。text-to-cad正在消解的从来不是工程师的岗位而是那些本不该由人承担的重复劳动。它让“改图”从加班理由变成点击按钮让“出图”从交付终点变成数据起点让“设计变更”从跨部门扯皮变成实时协同。热搜词里反复出现的“cad下载”“cad如何卸载”恰恰说明旧范式已到极限而“STEP”“STL”“GLB”的并列则暴露了行业对数据贯通的迫切渴望。这条路没有银弹但每一步都踩在真实产线上——当你下次听到“能不能把这段话变成CAD”别急着找AI工具先问清楚要STEP还是GLB要进车间还是进网页要改一个尺寸还是重建整个特征树答案不同技术路径天壤之别。我现在的办公桌上还贴着2019年手写的便签“CAD自动化不是替代人是让人回归设计本身。”七年过去这句话比任何时候都更真。

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

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

免费获取报价 →
↑