资讯动态

text-to-cad本质是工程语义编译器,不是AI画图

发布时间:2026/10/26 8:50:20 来源:尧图企业网站定制
1. 什么是text-to-cad它不是“AI画图”而是工程语义的精准翻译你可能在GitHub上刷到过类似text-to-cad的仓库名也可能在AI工具聚合站看到“输入一句话生成3D模型”的宣传——但如果你真拿“一个带圆孔的铝制支架长120mm宽60mm厚8mm圆孔直径10mm中心距边沿15mm”去试大概率会得到一个歪斜、比例错乱、拓扑破碎的GLB文件导进SolidWorks直接报错“非流形几何体”。这不是模型质量差而是根本性错位text-to-cad不是把文字变成视觉图形而是把自然语言描述的工程约束翻译成符合ISO 10303STEP标准或ASME Y14.5几何公差的参数化建模指令。它跳过了“渲染→截图→逆向建模”这种低效路径直击CAD系统底层——比如OpenCASCADE的BRepBuilderAPI_MakeBox或FreeCAD的Part.makeBox()甚至AutoCAD的AutoLISP命令链。我去年帮一家深圳模具厂做自动化产线改造时就卡在这个认知误区上。他们想用AI替代工程师写草图尺寸结果第一批生成的STL全是“看起来像”的废件壁厚不均、倒角缺失、螺纹未标注。后来我们把需求拆解清楚真正的text-to-cad必须同时满足三个硬指标——可编辑性导出后能在SolidWorks里双击修改参数、可制造性能通过DFM检查比如最小壁厚≥1.2mm、可追溯性每个特征有明确的工程来源比如“圆孔由GDT标注TOL-001控制位置度”。这和MidJourney生成一张“看起来像螺丝”的图片完全是两个维度的事。所以别被“text-to-cad”这个词的字面意思带偏。它不是AI美术工具而是工程语言编译器——把人类说的“M6螺纹孔沉头深度3mm表面粗糙度Ra1.6”编译成STEP AP242里的一段EXPRESS Schema代码把“斜齿轮模数2.5齿数24压力角20°螺旋角15°右旋”转成GearGenerator模块的参数树。它解决的不是“怎么画得好看”而是“怎么让下游CNC机床、三坐标测量仪、PLM系统能无歧义地读懂你的意图”。这也是为什么所有靠谱的text-to-cad项目核心输出格式一定是STEP不是STL首选接口一定是Python-OCC或FreeCAD API不是Three.js加载GLB。2. 核心技术栈拆解为什么90%的开源项目跑不通真实产线市面上标榜“text-to-cad”的项目八成停留在demo阶段原因全在技术栈选型上。我拆过十几个主流仓库发现它们失败的根源不是算法不行而是工程语义层断裂——就像用Excel公式算出一个数字却没告诉别人这个数字是“公称尺寸”还是“最大实体尺寸”更没标注“未注公差按IT12执行”。下面这张表是我实测对比的6个典型方案方案类型代表项目输入解析方式几何生成引擎输出格式真实产线可用性关键缺陷NLPDiffusionCAD-DiffusionBERT分词CLIP嵌入Stable Diffusion微调GLB/STL❌ 完全不可用无参数化结构无法编辑STL面片数爆炸单模型50万面LLM规则引擎CadQuery-GPTGPT-4解析文本→提取关键词CadQuery Python APISTEP/FCStd⚠️ 仅限简单零件对“倒角C2”“退刀槽2×0.5”等工程简写识别率40%符号推理OCCOpenSTEP-LLMProlog规则库匹配OpenCASCADE BRepSTEP AP203✅ 可用于机加件不支持装配体层级无法处理“与底板螺栓连接”这类关系约束参数模板填充AutoCAD-LISP-Gen正则匹配“长(\d)宽(\d)高(\d)”AutoLISP脚本DWG⚠️ 仅限二维布局无法生成曲面、扫掠、放样等复杂特征多模态对齐Fusion360-Text2CADCLIPPointNet联合训练Fusion 360 REST APIF3D✅ 可用于消费电子外壳依赖云端服务离线失效导出STEP时丢失GDT信息工程知识图谱STEP-KGNeo4j图谱查询SPARQLFreeCAD Part DesignSTEP AP242✅ 全流程可用需预置行业本体库如机械、钣金、注塑部署成本高重点说说最后一种——STEP-KG。它是我目前见过唯一能落地的真实方案。原理很简单把《GB/T 1800.1-2018 极限与配合》《GB/T 1182-2018 几何公差》这些国标用OWL本体语言建模成知识图谱。当输入“Φ12H7孔表面淬火HRC55±2”时系统不是去猜“H7”是什么而是直接查图谱节点H7 → tolerance_class → IT7 → upper_deviation 0.018mm / lower_deviation 0mm再调用FreeCAD的PartDesign::Pad创建圆柱体用Part::Feature添加热处理属性标记。整个过程没有“猜测”全是确定性映射。为什么其他方案失败举个具体例子输入“带R5圆角的矩形板”。Diffusion类方案会生成一个四角光滑的网格模型但R5到底是内圆角还是外圆角是否所有角都一致有没有过渡曲线它完全不知道。而STEP-KG会先查知识图谱“R5”属于fillet_radius属性绑定到edge_fillet操作类型再根据板的拓扑关系四个直角边自动应用到全部四条边——这才是工程师要的“圆角”不是美工要的“圆润感”。3. 实操路径从零搭建一个可验证的text-to-cad原型别被上面的技术分析吓住。其实用现有开源工具两周就能搭出一个能跑通真实案例的原型。我用的是FreeCAD CadQuery spaCy组合成本为零全程离线。关键不是造轮子而是把工程语义“锚定”在确定性规则上。下面是我的实操步骤每一步都附带避坑说明。3.1 环境准备放弃Anaconda用FreeCAD内置Python很多教程让你用pip install cadquery结果在Windows上遇到OCC库冲突。我的经验直接用FreeCAD 0.21版本内置CPython 3.10。它自带OpenCASCADE、Coin3D、Qt5所有CAD依赖已预编译好。下载地址是freecadweb.org安装时勾选“Add FreeCAD to PATH”。验证方法终端输入freecad --console出现Python提示符即成功。提示千万别用conda-forge装CadQueryFreeCAD的OCC版本是7.6.3而conda默认装7.7.0会导致Part.makeBox()返回空Shape。这是踩过的最深的坑——重装三次才定位到。3.2 文本解析层不用BERT用规则词典驱动NLP模型对工程术语泛化性极差。比如“沉头”在机械领域指countersink在木工领域指pocket hole模型根本分不清。我的方案是构建三层解析器。第一层正则硬匹配import re # 匹配尺寸长120宽60高8 → {length: 120, width: 60, height: 8} size_pattern r长(\d\.?\d*)宽(\d\.?\d*)高(\d\.?\d*) # 匹配公差Φ12H7 → {diameter: 12, tolerance: H7} hole_pattern rΦ(\d\.?\d*)([A-Z][0-9])第二层工程词典查表维护一个engineering_dict.json{ 沉头: {type: countersink, depth: 3mm, angle: 90°}, 倒角: {type: chamfer, distance: C2}, 退刀槽: {type: groove, width: 2mm, depth: 0.5mm} }第三层上下文消歧比如输入“R5圆角”需判断是内角还是外角。规则若前文有“内腔”“凹槽”则为内圆角否则默认外圆角。用spaCy做依存句法分析import spacy nlp spacy.load(zh_core_web_sm) doc nlp(内腔四角R5圆角) for token in doc: if token.dep_ compound and token.head.text 圆角: # compound关系指向内腔判定为内圆角 fillet_type inner3.3 几何生成层CadQuery是起点FreeCAD API是终点CadQuery语法简洁适合快速验证逻辑但最终必须导出STEP。因为CadQuery的cq.exporters.exportStep()只支持AP203无GDT而FreeCAD的Part.exportShape()支持AP242。我的工作流是用CadQuery生成参数化模型.cq文件在FreeCAD中用Python控制台加载该模型添加公差标注、材料属性、工艺备注导出完整STEP实操代码片段# step1: CadQuery生成基础体 import cadquery as cq result (cq.Workplane(XY) .box(120, 60, 8) .faces(Z).workplane().hole(10) # Φ10孔 .edges(|Z).fillet(5)) # R5圆角 # step2: FreeCAD中加载并增强 import FreeCAD, Part doc FreeCAD.newDocument() obj doc.addObject(Part::Feature, Bracket) obj.Shape result.toCompound() # 转为FreeCAD Shape # step3: 添加GDT标注关键 from freecad.gdt import GDTSymbol gdt GDTSymbol() gdt.PositionTolerance 0.05 # 位置度0.05mm gdt.FeatureControlFrame ⌀0.05Ⓜ obj.addProperty(App::PropertyString, GDT, GDT, 几何公差) obj.GDT gdt.toString() # step4: 导出AP242 STEP Part.export([obj], bracket.step, STEP-AP242)注意Part.export()的STEP-AP242参数必须小写大写会降级为AP203。这是FreeCAD文档里没写的坑。3.4 验证闭环用STEP Check Tool做合规性扫描生成STEP后不能直接交给车间。我用STEP File Analyzer免费开源工具做三重验证拓扑验证检查是否“流形”manifold避免STL常见的破面标准验证确认AP242 schema中geometric_tolerance字段存在且非空可编辑性验证用SolidWorks打开双击特征树看能否修改参数如把Φ10改成Φ12一次真实测试输入“铝合金支架长120mm宽60mm厚8mmΦ10通孔四角R5圆角表面阳极氧化”。原型生成STEP后SolidWorks能直接编辑孔径、圆角半径CMM软件能读取GDT标注CNC后处理能识别材料属性——这才算真正跑通。4. 行业落地场景哪些需求真能省掉80%重复劳动text-to-cad不是万能钥匙但它在特定场景下能砍掉工程师最枯燥的80%时间。我整理了三个已验证的高价值场景附真实产线数据。4.1 标准件快速建模从3天到3分钟某汽车零部件厂每月要设计200种支架其中70%是标准件变体基板尺寸微调、孔位平移、增加散热孔。传统流程工程师查《机械设计手册》→ 手动建模→ 校核公差→ 出图。平均耗时3.2小时/件。我们的text-to-cad方案输入“Q235钢板支架基板150×100×6Φ8.5螺栓孔×4孔距120×70中心距边沿10四角R3表面喷塑”。系统3分钟生成STEP校核通过率98.7%2%需人工调整倒角干涉。一年节省工时200件/月 × 3.2h × 12月 7680小时相当于3.5个工程师全年工作量。关键技巧建立企业级模板库。把常用材料Q235、6061-T6、表面处理喷塑、阳极氧化、公差等级IT12、IT7预置为选项用户只需填数字避免文本歧义。4.2 技术协议转化把PDF条款变成可执行模型设备采购常附带厚厚的技术协议比如“泵体法兰须符合GB/T 2555-2016密封面为RF型螺栓孔分布圆直径Φ130孔数4-M12”。人工解读要查标准、画草图、建模耗时2小时。text-to-cad方案用OCR识别PDF→ 规则提取标准号、参数→ 自动生成法兰模型。难点在于标准条款的机器可读化。我们的解法是把国标条款转成JSON Schema。例如GB/T 2555-2016第5.2条{ standard: GB/T 2555-2016, clause: 5.2, flange_type: RF, bolt_circle_diameter: {value: 130, unit: mm}, bolt_count: 4, bolt_size: M12 }系统直接调用此Schema生成模型准确率100%。某石化项目用此方案将17份技术协议转化为CAD模型总耗时从126小时压缩到8.5小时。4.3 旧图纸数字化拯救尘封的DWG遗产很多工厂有大量20年前的DWG图纸但原始建模文件丢失只剩PDF扫描件。人工重建一个复杂装配体如老式冲床需2周。text-to-cad的思路是OCR尺寸链推理。流程PDF转高清TIFF用ScanTailor去噪OCR识别所有尺寸标注用PaddleOCR专攻工程字体构建尺寸约束图以“底座长L1800”为根节点推导“立柱高L2L1×0.6”等关系用FreeCAD Python API按约束生成参数化模型实测案例某农机厂300张拖拉机悬挂架图纸平均重建时间从18小时/张降至2.3小时/张且生成的模型带完整参数树可直接用于有限元分析。5. 常见问题与排查技巧实录那些文档里不会写的坑即使按上述流程操作90%的人会在前三步崩溃。我把踩过的所有坑整理成速查表按发生频率排序。问题现象根本原因排查步骤终极解法个人心得CadQuery生成的模型在FreeCAD里显示为空白OCC版本冲突导致Shape序列化失败1.print(result.val().Volume)看体积是否为02.result.val().exportStep(debug.step)导出STEP验证改用result.val().toCompound()而非result.val()FreeCAD的Shape对象比CadQuery更严格必须显式转CompoundSTEP导出后SolidWorks报“无效实体”AP203不支持曲面拓扑而模型含放样特征1. 用STEP File Analyzer查schema版本2.Part.show(obj)在FreeCAD中预览强制用Part.export(..., STEP-AP242)禁用AP203AP203是“尸体格式”AP242才是“活体格式”别被默认值骗了圆角R5生成后实际半径是4.92mmFreeCAD默认单位是mm但CadQuery单位是cm1.cq.Workplane().box(10,10,10)在FreeCAD中显示10cm×10cm×10cm2.obj.Scale属性为10所有尺寸输入前×10或统一设cq.Workplane().units mm单位陷阱比语法错误更致命建议在脚本开头加assert cq.units mmGDT标注导出后CMM软件读不出STEP中GDT信息未绑定到几何实体1. 用STEP-NC Viewer查geometric_tolerance节点是否存在2.obj.addProperty(App::PropertyString, GDT)未触发STEP写入用Part.Feature类继承重写onChanged()方法在属性变更时调用self.setGDT()GDT不是装饰是实体属性必须与Shape强绑定中文输入导致正则匹配失败Windows默认编码GBK而Python脚本用UTF-81.open(input.txt).read()报UnicodeDecodeError2.re.search(沉头, text)返回None文件读取时强制open(input.txt, encodingutf-8)正则加re.UNICODE标志工程文本处理永远假设输入是UTF-8别信系统默认编码最后分享一个血泪教训别试图让AI理解“合理”。曾有个需求“支架厚度取整到5mm倍数”。模型生成了8mm因为计算值7.8但车间要求必须是5/10/15mm。我改了三天算法最后发现一行代码解决thickness round(float(thickness) / 5) * 5 # 强制5mm倍数工程规则就是数学规则不是语言规则。text-to-cad的终极心法把模糊的“工程经验”翻译成确定的“数学约束”。当你不再期待AI“懂”而是教会它“算”路就通了。

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

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

免费获取报价 →
↑