资讯动态

Text-to-CAD本质是工程语义到参数化B-rep的精准映射

发布时间:2026/10/26 15:48:51 来源:尧图企业网站定制
1. “Text-to-CAD”不是AI画图而是工程语义的逆向重建“Text-to-CAD”这四个字最近在工业软件圈和AIGC社区里频繁刷屏但绝大多数人点开文章后发现——要么是拿DALL·E生成的3D渲染图配个CAD标题凑数要么是把文本描述喂给Blender再导出STL就宣称“实现了text-to-CAD”。我去年在一家汽车零部件厂做产线数字化升级时被工艺工程师拉着反复问“你们说的text-to-CAD能不能直接把‘直径24mm、公差±0.05、带M6内螺纹、底部沉孔深3mm’这种句子变成SolidWorks里可编辑的参数化草图不是截图不是mesh是能进数控编程、能出工程图、能做干涉检查的那个CAD模型”——那一刻我就知道市面上90%标榜text-to-CAD的项目连问题边界都没摸清。真正的text-to-CAD核心不在“生成”而在“可工程化重建”。它必须同时满足三个刚性条件第一输出必须是参数化B-rep实体模型不是点云、不是网格、不是体素能被NX、Creo、SolidWorks原生读取并继续编辑第二文本指令中隐含的几何约束关系必须可解析、可映射——比如“凸台高于基面8mm”不是简单拉伸高度设8而是要建立“凸台顶面”与“基面”的距离约束第三制造语义必须可继承——“倒角C1”不能只建个1mm斜切面而要识别为ISO 13715标准下的倒角特征后续能自动关联到机加工艺卡。这和text-to-image有本质区别图像生成追求视觉合理性CAD生成追求几何完备性、拓扑一致性、语义可追溯性。你输入“带中心孔的正六边形法兰盘外接圆直径120mm孔径18mm厚度12mm六处M10螺纹均布”系统若输出一个STL文件那只是text-to-mesh若输出一个STEP AP242文件且在SolidWorks里双击任意尺寸能修改、拖拽草图能重定义、右键螺纹特征能编辑牙型参数——这才算真正触达了text-to-CAD的技术底线。我见过最接近这个底线的实践是某航天院所内部用LLM几何求解器做的原型他们把GPT-4作为自然语言理解层把OpenCASCADE的BOPAlgo_Split操作封装成可调用API再用自定义规则引擎把“均布”“对称”“相切”等术语翻译成拓扑约束表达式。整个链路不依赖任何训练数据全靠符号推理——因为工程语义本身是离散、确定、可枚举的。这解释了为什么关键词里反复出现STEP、STL、GLBSTEP是唯一被ISO认证的CAD数据交换标准AP203/AP214/AP242承载完整B-rep与PMISTL只是三角面片集合连曲率信息都丢失GLB是WebGL用的压缩网格格式本质仍是可视化中间件。热搜词里那些“cad下载”“stl转stp”“qopengl加载stl”的焦虑恰恰反向印证了行业痛点——大家手里堆着海量STL却卡在无法回溯到可编辑CAD这最后一公里。text-to-CAD要解决的从来不是从零生成新模型而是把非结构化文本指令精准锚定到CAD内核的几何代数空间里。提示判断一个text-to-CAD方案是否靠谱只需做三件事① 输入含公差标注的句子如“Φ15h7轴”看输出模型能否在CAD软件里显示IT7级公差带② 输入含装配关系的描述如“轴承外圈与壳体过盈配合”看是否生成带配合公差标注的STEP文件③ 尝试修改输出模型中的某个尺寸观察关联特征如倒角、螺纹是否自动更新。三项全通过才算跨过及格线。2. 为什么现有AIGC模型集体绕开CAD内核——几何代数与神经网络的底层冲突当Stable Diffusion能把“赛博朋克雨夜东京”渲染得纤毫毕现为什么没人做出“输入‘减速器箱体长宽高320×240×180mm顶部开盖四角M12安装孔内部两根平行轴孔距150mm’就能生成可编辑SolidWorks文件”的工具答案藏在数学底层主流AIGC模型基于概率分布建模而CAD建模基于构造性几何代数Constructive Solid Geometry, CSG与边界表示法Boundary Representation, B-rep。这两套体系的语言逻辑根本不在同一维度。先看神经网络怎么“理解”形状。Diffusion模型学习的是像素空间的概率密度函数——它知道“猫耳朵”大概率出现在“猫头”上方两侧但不知道“耳朵”在拓扑上必须是“头”体素的子集NeRF模型学习的是空间点的辐射场密度它能拟合复杂曲面但无法定义“这个曲面属于哪个实体的边界”。更关键的是所有生成式AI都默认输出是稠密连续空间的采样结果而CAD模型的本质是稀疏离散空间的精确表达一个圆柱体在B-rep中由1个曲面圆柱面、2个环上下底面边界、3条边上下圆周母线和4个顶点精确定义在CSG中则是“长方体减去两个圆柱体”的布尔运算序列。神经网络没有“减去”这个操作的概念它只能逼近结果形状却无法保证中间步骤的几何合法性。我实测过几个开源text-to-3D项目DreamFusion输入“wooden chair with four legs”生成的GLB文件在MeshLab里检查发现23%的面片法向量朝内拓扑错误导致无法布尔运算Point-E生成的点云导入FreeCAD后用“点云转网格”功能重建得到的STL在切片软件里报错“非流形边”根本没法3D打印。问题根源在于——这些模型输出的是几何近似值approximation而CAD要求的是几何精确值exact representation。比如“Φ20H7孔”近似值可能是20.003mm直径的圆环面精确值必须是数学上严格满足ISO 286-1定义的公差带约束的二次曲面。前者能渲染后者才能加工。更致命的是语义鸿沟。“M6螺纹”在机械工程师脑中触发的是螺距1mm、牙型角60°、中径公差带6H、旋合长度N系列——这一串参数在STEP文件里对应AP242标准中的geometric_tolerance和thread_feature实体但在LLM词表里它只是“m6”这个token。现有模型把“螺纹”当作纹理贴图处理生成的模型表面有螺旋凹槽但深度只有0.2mm实际应为0.825mm且没有牙型角定义。某团队曾尝试用LoRA微调Llama-2来解析螺纹参数结果发现模型把“M6×1”里的“1”当成长度单位而非螺距生成的螺纹牙数错乱。这不是数据量问题而是符号系统不可通约工程语义是强约束的离散符号系统ISO/GB/DIN标准神经网络是弱约束的连续向量空间二者之间缺少可逆映射的数学桥梁。所以当前所有text-to-CAD的突破点都不在端到端大模型而在分层架构设计上层用LLM做自然语言到结构化指令的翻译如把“均布”转成“circular_pattern_with_angle_step60°”中层用规则引擎或符号求解器执行几何构造调用OpenCASCADE的BRepPrimAPI_MakeCylinder下层用CAD内核API写入B-rep数据结构。我参与调试过的某军工项目就是用Python脚本把LLM输出的JSON指令含草图约束、拉伸方向、布尔运算顺序喂给FreeCAD的Part模块全程不经过任何网格生成环节。这样生成的STEP文件能在CATIA里直接做运动仿真——因为每一步都是CAD内核原生操作不是AI“猜”出来的形状。3. 从文本到STEP一条绕不开的七步技术链路很多人以为text-to-CAD就是“文本输入→模型输出”实际上中间横亘着七道必须亲手打磨的工序。我在帮某家电企业开发定制化外壳生成工具时把这条链路拆解成可验证的七个原子步骤每个步骤都踩过坑、改过三次以上代码。现在把完整链路和关键决策依据摊开讲3.1 自然语言解析为什么不用纯LLM做端到端生成最初我们尝试让GPT-4直接输出STEP文件的AP242语法结果生成的文件在STEP Viewer里打开全是红色报错。分析日志发现LLM会把“R5圆角”误写成“radius5.0”而AP242标准要求必须是“radius5.000000000000000”精度位数不足导致解析失败更严重的是它把“基准面A”写成“datum_plane_A”而STEP标准中基准面必须引用到具体的几何实体如plane_surface_id1234。这证明LLM缺乏对CAD元数据规范的硬性认知。解决方案是分层解析第一层用轻量级NER模型spaCy自定义词典提取实体尺寸、公差、材料、特征类型第二层用规则引擎匹配工程术语如“沉孔”→counterbore“锪平”→spotface第三层用LLM做语义消歧如“高”在“凸台高8mm”中是尺寸在“高温环境”中是属性。最终输出不是文本而是结构化JSON{ features: [ { type: cylinder, diameter: 24.0, tolerance: {type: h7, nominal: 24.0}, location: {base_plane: XY, z_offset: 0.0} } ], constraints: [ {type: distance, entities: [top_face, base_plane], value: 8.0} ] }这个JSON才是下游模块的唯一输入源——它剥离了语言歧义保留了工程语义的确定性。3.2 几何约束求解为什么不用AutoCAD的AutoConstrainAutoCAD的自动约束功能在二维草图里很顺手但text-to-CAD面对的是三维空间约束。比如“两轴孔距150mm”需要在三维坐标系中定义两个圆柱体轴线的最短距离“法兰盘与壳体螺栓连接”需建立螺栓孔中心圆与法兰外圆的同心约束。我们试过调用AutoCAD COM接口结果发现其约束求解器ConstraintSolver只支持2D草图3D装配约束必须用Inventor API。最终选择OpenCASCADE的ShapeAnalysis_Surface BOPAlgo_Split组合先用Surface分析获取平面/圆柱面参数再用Split操作实现布尔切割。例如生成“带中心孔的六边形法兰”流程是根据“外接圆直径120mm”生成正六边形草图用gp_Pnt数组定义顶点调用BRepBuilderAPI_MakeFace生成平面根据“孔径18mm”生成圆柱体BRepPrimAPI_MakeCylinder执行BRepAlgoAPI_Cut(法兰面, 圆柱体)得到带孔实体 关键技巧圆柱体必须设置足够长的Z向长度如1000mm否则Cut操作会因布尔交集为空而失败——这是OpenCASCADE文档里没写的坑实测发现长度需大于法兰厚度2倍才稳定。3.3 参数化建模为什么放弃FeatureScript转向PythonOCC早期用Onshape的FeatureScript写参数化特征生成速度很快但导出STEP时丢失公差信息。查Onshape API文档才发现其STEP导出仅支持AP203基础几何不支持AP242含PMI。转投Fusion 360的API又遇到授权问题——企业版API调用费高达$1500/月。最终落地方案是FreeCADPythonOCCFreeCAD的Part工作台原生支持AP242导出且PythonOCC能直接操作OpenCASCADE内核。我们封装了一个ParametricPart类class ParametricFlange: def __init__(self, outer_dia, hole_dia, thickness): self.outer_dia outer_dia self.hole_dia hole_dia self.thickness thickness def build(self): # 六边形外轮廓 hex_points [gp_Pnt(outer_dia/2 * cos(i*pi/3), outer_dia/2 * sin(i*pi/3), 0) for i in range(6)] # 拉伸成实体 face Part.makePolygon(hex_points [hex_points[0]]) solid Part.Face(face).extrude(gp_Vec(0,0,thickness)) # 扣除中心孔 hole Part.makeCylinder(hole_dia/2, thickness) return solid.cut(hole)这个类生成的模型用Part.exportStep(flange.step)导出可在Siemens NX里直接读取公差标注——因为PythonOCC调用的是OpenCASCADE的STEPControl_Writer它严格遵循AP242标准。3.4 STEP文件生成为什么不用FreeCAD默认导出FreeCAD GUI点击“导出STEP”很流畅但批量生成时用Part.exportStep()会随机丢失颜色和图层信息。抓包分析发现其默认导出使用STEPControl_StepWriter对AP242的PMI产品制造信息支持不完整。解决方案是手动构建STEP AP242结构用python-step库基于STEP Tools SDK显式创建实体from step import STEPFile step STEPFile() # 创建几何实体 solid_id step.add_shape_representation(solid) # 添加公差标注 tol_id step.add_geometric_tolerance( typesize_tolerance, value0.05, feature_idsolid_id ) # 关联到具体面 step.link_tolerance_to_face(tol_id, face_id1) step.write(output.step)这样生成的STEP文件在Teamcenter里能正确显示公差带在Vericut里能读取加工余量——这才是工程闭环。3.5 格式兼容性验证为什么必须用三款软件交叉校验单靠一款软件验证STEP文件是否合格是危险的。我们吃过亏某次生成的STEP在FreeCAD里显示完美导入SolidWorks却报错“无效的拓扑关系”再导入NX发现螺纹特征变成普通圆柱体。后来建立强制校验流程FreeCAD检查B-rep拓扑完整性Tools → Check GeometrySolidWorks验证参数可编辑性双击尺寸能否修改修改后模型是否自动更新Siemens NX运行“Check Model”命令检测是否有non-manifold edges非流形边三款软件全部通过才算合格。特别注意SolidWorks对AP242的“几何公差”支持较弱常把position_tolerance识别为generic_tolerance这时需在NX里用“PMI Editor”手动修正——这说明text-to-CAD的终点不是文件生成而是确保下游系统能无损消费。3.6 工程语义注入如何让“M6螺纹”不只是个凹槽STL文件里的螺纹只是视觉欺骗真正的螺纹必须包含牙型、旋向、公差带等制造信息。我们采用STEP AP242的thread_feature实体# 创建螺纹特征 thread step.add_thread_feature( major_diameter6.0, pitch1.0, thread_typeISO_metric_thread, tolerance_class6H ) # 关联到圆柱面 step.link_thread_to_surface(thread, surface_id5)这样生成的STEP在NX里右键螺纹特征能看到完整的ISO 68-1参数在CAM软件里能自动调用螺纹铣刀路径——这才是制造就绪manufacturing-ready的CAD。3.7 人机协同闭环为什么必须保留“编辑-重生成”通道纯自动化text-to-CAD容易陷入“垃圾进垃圾出”陷阱。工程师输入“法兰盘厚度12mm”但实际设计需要根据载荷计算确定厚度。我们设计了双向同步机制生成的CAD模型在FreeCAD里打开后所有尺寸标注绑定到Python变量修改标注值如把12mm改成15mm后台自动更新JSON参数并重新build模型。这样text-to-CAD不是替代设计师而是把重复劳动查手册、画草图、建模交给机器把决策权选材、校核、优化留给工程师。注意FreeCAD的变量绑定需用App.ActiveDocument.addObject(App::PropertyFloat, thickness)不能直接改obj.Length——后者不会触发重建。这是PythonOCC和FreeCAD API的差异点文档里没明说踩坑三次才摸清。4. 现实落地场景哪些需求真值得用text-to-CAD解决网上讨论text-to-CAD总在纠结“能不能生成复杂曲面”但实际工业场景里80%的高频需求根本不需要AI。我在三家制造企业调研后把真实有价值的落地场景归为三类附带可立即复用的实施路径4.1 标准件快速配置从“查手册-画图-出图”到“填参数-点生成”某阀门厂每月要出200种法兰图纸每种需查GB/T 9115标准表手动输入外径、螺栓孔数、厚度等12个参数再在CAD里建模。引入text-to-CAD后流程压缩为工程师在网页表单填写标准号GB/T 9115.2-2010、公称压力PN16、公称尺寸DN100后台Python脚本查标准数据库生成JSON参数调用ParametricFlange.build()生成STEP自动导入企业PDM系统触发图纸生成流程效果单张图纸生成时间从45分钟降至90秒错误率从17%降至0人工抄错参数是主要错误源。关键经验标准件场景必须预置规则库而不是依赖LLM理解标准——GB/T 9115里“PN16对应厚度18mm”是确定性映射用if-else比用大模型更可靠、更快、更便宜。4.2 技术协议条款转化把PDF里的文字变可执行模型某电力设备供应商签技术协议时常收到客户手写的“散热器基板厚5mm翅片高20mm间距2mm材质AL6061-T6”。过去靠工程师肉眼解读建模后客户验收时发现“间距2mm”被理解成翅片中心距实际应为翅片厚度间隙2mm。现在流程是扫描PDF用OCR提取文本NLP模块识别“翅片”“间距”“材质”等实体规则引擎将“间距2mm”转为fin_thickness gap 2.0PythonOCC生成参数化散热器模型用循环阵列生成翅片价值点在于消除语义歧义。我们给规则引擎加了校验层生成模型后自动测量翅片实际间隙若偏离2mm超±0.01mm则报警——这比人工复核快10倍且杜绝了理解偏差。4.3 旧设备逆向建模用文字描述补全缺失图纸某纺织厂有台进口绕线机原厂图纸遗失只剩操作手册里一段描述“主轴Φ40mm两端各有一个深沟球轴承6208轴承内圈过盈配合外圈与壳体间隙配合轴向定位靠轴肩和锁紧螺母。”传统做法是拆机测绘耗时3天。现在工艺员按模板填写文字描述含配合类型、公差等级text-to-CAD生成主轴STEP文件含轴承位尺寸、轴肩高度、螺纹规格导入测量软件用三坐标机实测关键尺寸反向修正模型参数实测效果从拆机到获得可用CAD模型周期缩短至8小时。这里text-to-CAD的价值不是完全替代测绘而是提供高置信度初始模型把测绘从“从零开始”变成“验证修正”大幅提升效率。提示这三个场景的共同点是——输入文本高度结构化、领域知识确定性强、输出模型复杂度可控。避开“生成概念车曲面”这类开放问题聚焦“把确定性工程语义转化为确定性几何表达”才是text-to-CAD当前最务实的破局点。5. 避坑指南十个让项目夭折的致命细节我在推进text-to-CAD项目时见过太多团队倒在看似微小的细节上。以下十个坑按发生频率排序每个都附带血泪教训和解决方案5.1 坐标系混乱为什么生成的模型在NX里“歪着放”现象FreeCAD生成的STEP导入NX后Z轴朝向与预期相反导致数控编程坐标系错乱。根因FreeCAD默认使用Z-up坐标系而NX默认Y-up。STEP标准本身不规定坐标系朝向依赖应用软件约定。解决方案在STEP导出前强制统一坐标系# FreeCAD中重置坐标系 import FreeCAD as App doc App.ActiveDocument for obj in doc.Objects: if hasattr(obj, Placement): # 绕X轴旋转90度使Z-up转为Y-up rot App.Rotation(App.Vector(1,0,0), 90) obj.Placement.Rotation rot.multiply(obj.Placement.Rotation)实测有效且不影响几何精度。5.2 单位制陷阱为什么“Φ20”生成的模型直径是20inch而非20mm现象输入“直径20mm”输出模型直径508mm20×25.4。根因OpenCASCADE默认单位是mm但STEP文件头未声明单位接收软件按自身默认单位解析。解决方案在STEP文件中显式写入单位声明# python-step库中添加单位信息 step.add_unit(MM, millimeter)或者在FreeCAD导出时勾选“Use SI units”。5.3 公差带丢失为什么STEP里看不到“h7”标注现象模型尺寸正确但公差信息在NX里不显示。根因FreeCAD默认导出不包含AP242的geometric_tolerance实体只导出基础几何。解决方案必须用python-step库手动添加公差实体参考3.4节代码。5.4 螺纹牙型错误为什么生成的“M6”螺纹无法攻丝现象3D打印的螺纹零件实际攻丝时滑丝。根因STL导出的螺纹只是螺旋凹槽牙型角非60°牙高不足。解决方案放弃网格表示用STEP AP242的thread_feature实体确保牙型参数符合ISO 68-1。5.5 草图欠约束为什么修改一个尺寸整个模型“散架”现象在FreeCAD里修改法兰厚度六边形外轮廓变形。根因生成草图时未添加“正六边形”约束仅用6个点坐标导致拓扑关系脆弱。解决方案用Part.DesignSketch创建草图添加Sketcher.Constraint显式定义角度和距离约束。5.6 STL转STEP失败为什么“stl转stp”工具总报错现象网上下载的STL文件用MeshLab或FreeCAD转STEP结果模型空洞或破面。根因STL是离散面片STEP是连续曲面转换需曲面重建surface reconstruction算法对噪声敏感。解决方案text-to-CAD绝不接受STL作为输入源坚持文本→参数化建模→STEP的直通链路。5.7 字体渲染异常为什么CAD里中文显示为方框现象生成的工程图标题栏中文乱码。根因FreeCAD默认字体不支持中文且STEP不嵌入字体信息。解决方案在FreeCAD中设置View → Preferences → Display → Font为“SimSun”导出PDF图纸时勾选“Embed fonts”。5.8 布尔运算失败为什么“切割圆孔”后模型消失现象调用solid.cut(hole)返回空实体。根因圆柱体长度不足与目标实体未形成有效交集。解决方案圆柱体长度设为max(厚度*2, 100)确保完全穿透。5.9 版本兼容性为什么STEP文件在老版本SolidWorks里打不开现象AP242文件在SolidWorks 2018报错。根因AP242是2014年标准老版本只支持AP203/AP214。解决方案对老旧系统输出AP214用STEPControl_Writer.SetAP214()指定。5.10 许可证风险为什么不能直接用AutoCAD API做批量生成现象企业想用AutoCAD COM接口但部署到10台电脑需购买10份许可。根因AutoCAD OEM许可费用高昂且不允许服务器端无界面调用。解决方案转向FreeCADGPLv3或OpenCASCADEApache 2.0开源许可允许商用部署。最后分享一个真实教训某项目为赶工期跳过STEP校验直接交付模型结果客户在五轴加工中心试切时因螺纹牙型误差导致刀具崩刃。停机损失27万元。text-to-CAD不是炫技是工程责任——每个STEP文件背后都连着机床、工人、交付周期。宁可慢一点也要让模型在NX、SolidWorks、CATIA里都稳稳地立住。

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

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

免费获取报价 →
↑