1. 从"能跑通"到"能交付"之间,隔着一条工程化的鸿沟
过去一年多,我陆陆续续接触了十几个"AI + CAD"方向的项目,有内部孵化的,也有外部团队找过来做技术评估的。一个非常普遍的现象是:几乎每个团队都能在两周内做出一个让人眼前一亮的 Demo——上传一张图纸,AI 自动识别墙体、标注尺寸、生成参数化模型,演示视频剪出来放到哪儿都能收获一波点赞。但当你问一句"这套东西能不能接到我们现有的设计流程里",气氛往往就冷下来了。
这个落差不是团队能力问题,而是Demo 和工程化系统之间,本来就存在一条被严重低估的鸿沟。Demo 的验证目标是"这条路走得通吗",工程化的验证目标是"这条路每天走一千遍,会不会塌"。两者的评价标准、约束条件、失败代价完全不在一个量级上。
这篇文章想聊的就是这条鸿沟具体长什么样。我会从 CAD 数据本身的工程特性讲起,拆解 AI 在这个领域落地时最常撞上的几堵墙,然后给出一些我在实际项目中验证过、或者看到别人验证过的应对思路。关键词里的DXF、DWG、FreeCAD、OpenCASCADE这些,都会在具体环节里展开说。如果你正在做 AI 辅助设计、图纸自动化处理、或者 CAD 相关的智能体开发,这篇内容应该能帮你少走几个月的弯路。
先说结论:AI + CAD 走不通,绝大多数时候不是 AI 不行,而是 CAD 这一侧的数据和流程,比想象中"脏"得多、重得多、也封闭得多。
2. CAD 数据不是"图片",把它当图片处理的项目基本都死了
我见过太多团队的第一版方案是这样的:把 DWG 导出成 PNG 或者 PDF,然后丢给一个视觉大模型做识别,识别出图元之后再反向生成 CAD 实体。这个思路在 Demo 阶段效果惊艳,因为演示用的图纸通常是干净的、标准的、图层规整的。但一旦换成真实项目图纸,准确率会断崖式下跌。
2.1 DWG 和 DXF 的本质差异,决定了你的技术路线
很多人把 DWG 和 DXF 当成同一种东西的两种格式,这是个危险的误解。DWG 是 Autodesk 的私有二进制格式,内部结构不公开,版本之间还有差异,直接解析的难度极高,而且法律和授权上也有讲究。DXF 是公开的交换格式,有 ASCII 和二进制两种,结构文档相对完整,是绝大多数第三方工具做数据交换的首选。
这个差异直接决定了你的技术选型:
| 格式 | 可解析性 | 信息完整度 | 推荐处理方式 |
|---|---|---|---|
| DWG | 低,需依赖商业库或转换 | 高,含全部实体和扩展数据 | 先转 DXF 或通过官方 API 读取 |
| DXF | 高,格式公开 | 中高,部分扩展数据可能丢失 | 直接解析,作为主处理格式 |
| PDF/PNG | 极高,但只是像素 | 低,丢失图层、块、属性 | 仅用于展示,不用于数据源 |
我个人的经验是:如果你的 AI 流程需要理解图纸的语义结构(图层、块引用、属性、标注关联),那数据源必须是 DXF 或通过正规接口读取的 DWG,绝不能是渲染后的图片。图片路线只适合做"看一眼大概是什么"的粗分类,做不了精确的工程处理。
2.2 真实图纸的"脏",超出算法工程师的想象
做过 CAD 数据处理的人都知道,真实项目图纸的混乱程度是教科书里不会写的。我整理过一份"图纸脏数据清单",每次新项目启动都会拿出来对照:
- 图层命名毫无规范:同一个项目里,"墙体""WALL""Qiang""0"图层可能混用,甚至同一张图里不同人画的墙在不同图层。
- 块引用嵌套极深:一个家具块里套了三个子块,子块里还有属性定义,递归展开后图元数量爆炸。
- 线型不闭合:本该闭合的房间轮廓,实际有 0.3mm 的缺口,肉眼看不出来,但算法判断"闭合区域"时直接失败。
- Z 坐标不为零:二维图纸里所有图元的 Z 值理论上应该是 0,但实际经常有 1e-6 级别的浮点误差,导致共面判断失效。
- 重复图元叠加:同一条线被画了三遍,颜色图层都一样,去重逻辑稍微不严谨就会误删。
- 标注与几何脱钩:尺寸标注看起来标的是这面墙,实际上标注的参照点早就被移动过了,数值和几何对不上。
这些问题在 Demo 里一个都不会出现,在真实项目里每一个都会出现。AI 模型再强,也救不了一开始就喂错的数据。所以我现在做任何 AI + CAD 项目,第一步永远是写数据清洗和规范化管线,这一步的工作量往往占总工作量的 40% 以上。
2.3 用 OpenCASCADE 做几何内核,是绕不开的选择
当你需要做真正的几何运算——布尔运算、倒角、曲面求交、实体有效性检查——纯靠 Python 的几何库是不够的。这时候OpenCASCADE(OCCT)基本是开源方案里的唯一正解。它提供了完整的 B-Rep(边界表示)几何内核,支持 STEP、IGES 等格式,也能通过转换读取 DXF 的部分几何信息。
关键词里出现了"dwg图纸读取到 opencascade",这个链路我实际搭过,大致是:DWG → DXF(用转换工具)→ 解析 DXF 实体 → 转换为 OCCT 的 TopoDS_Shape → 在 OCCT 里做几何运算。中间最容易出问题的是圆弧和样条曲线的转换,DXF 里的 bulge 值(凸度)表示圆弧的方式和 OCCT 的圆弧参数化不一样,转换时如果处理不当,圆弧会变成直线或者方向反转。
提示:DXF 的 bulge 值 = tan(圆心角/4),这个公式一定要记牢。我见过不止一个项目因为 bulge 转换写错,导致所有圆弧方向反了,而且在小半径圆弧上肉眼很难发现。
3. 为什么"识别"这件事在 CAD 里格外难
视觉识别在自然图像上已经非常成熟了,但 CAD 图纸是一种特殊的"图像",它的难点和自然图像完全不同。
3.1 图纸是"符号系统",不是"像素分布"
自然图像里,一只猫就是一只猫,像素分布有统计规律。但 CAD 图纸是一套工程符号系统:一条线可能代表墙、可能代表轴线、可能代表管道,取决于它的图层、线型、颜色、以及和周围图元的关系。同一个几何形状,在不同专业图纸里含义完全不同。
这意味着纯视觉模型天生就缺了一半信息。它能看出"这里有一条线",但看不出"这条线是承重墙还是隔断"。要补上这一半,必须把图层、块名、属性这些结构化信息一起喂给模型,或者用规则引擎先做一轮语义标注,再让 AI 做细分类。
我试过一个方案:先用规则把图元按图层和块名粗分成若干候选类别,再用一个小模型在候选类别里做精分类。这个"规则 + AI"的混合方案,比纯端到端模型的准确率高出一大截,而且可解释、可调试——出错的时候你能定位到是规则错了还是模型错了,而不是面对一个黑盒束手无策。
3.2 训练数据的获取,是个死循环
做 AI 就要数据,但 CAD 图纸数据有几个要命的特点:
- 涉及商业机密:真实项目图纸基本不可能公开,能拿到的公开数据集少得可怜。
- 标注成本极高:标注一张建筑图纸,需要懂专业的工程师,一张图可能标一整天。
- 分布差异巨大:不同设计院、不同专业、不同项目的图纸风格差异极大,在一个数据集上训好的模型,换个来源就崩。
这个死循环我目前看到的最实际的破法,是合成数据 + 少量真实数据微调。用 FreeCAD 或者 OCCT 程序化生成大量带标注的图纸,覆盖各种图元组合和噪声情况,先训一个基础模型,再用少量真实标注数据做微调。合成数据的质量取决于生成器的设计,如果生成器能模拟真实图纸的"脏"(图层混乱、块嵌套、浮点误差),迁移效果会好很多。
3.3 FreeCAD 在数据生成和验证里的独特价值
关键词里有"freecad"和"freecad没有齿轮工具",后者其实反映了一个常见痛点:FreeCAD 的原生功能确实不如商业 CAD 全面,但它的脚本化和可编程性是它最大的优势。
在 AI + CAD 项目里,我把 FreeCAD 主要用在两个地方:
- 合成数据生成:用 Python 脚本驱动 FreeCAD 批量生成参数化图纸,每个图元的位置、图层、属性都是程序控制的,标注天然准确。
- 结果验证:AI 输出的模型,用 FreeCAD 重新加载并做几何检查(是否闭合、是否有自交、体积是否合理),作为自动化测试的一环。
至于"没有齿轮工具"这类功能缺失,实际项目里的做法通常是用 Python 脚本自己实现参数化齿轮生成,或者调用 OCCT 的底层接口。这反而比依赖现成工具更灵活,因为你可以把齿轮参数直接接到 AI 的输出上。
4. 工程化落地真正卡住的四个环节
前面讲的是数据和技术层面的问题,但真正让项目"走不通"的,往往是工程化环节。我把它归纳成四个卡点,每一个都能独立让项目停摆。
4.1 卡点一:精度与容差,AI 给不出工程级的确定性
工程图纸对精度的要求是刚性的。墙厚 200mm 就是 200mm,不能是 199.7mm。但 AI 模型的输出天然带有不确定性,回归任务的误差、分类任务的置信度,都很难直接映射到工程要求的"确定性"上。
我的应对思路是把 AI 的输出当作"建议",而不是"结果"。AI 负责给出候选方案和置信度,最终落到图纸上的数值,必须经过一层确定性的几何约束求解。比如 AI 识别出"这里有一面墙",但墙的精确位置和厚度,由约束求解器根据相邻图元的关系算出来。这样 AI 的不确定性被约束系统"吸收"了,输出依然是工程级精确的。
4.2 卡点二:CAD 平台的封闭性,接口是最大的成本
商业 CAD 平台的二次开发接口,往往有授权限制、版本兼容问题、以及性能瓶颈。我遇到过最典型的情况是:一个批量处理一万张图纸的任务,用官方 API 单张处理要 3 秒,一万张就是 8 个多小时,完全不可接受。最后是通过离线批量解析 DXF + 只在必要时调用 API的方式,把时间压到了 40 分钟。
这里有个经验:能离线处理的绝不走在线接口,能用开放格式的绝不用私有格式。DXF 的解析虽然麻烦,但一旦写好解析器,处理速度是 API 的几十倍,而且不依赖任何外部服务。
4.3 卡点三:设计师的信任,不是靠准确率建立的
这一点最容易被技术团队忽略。你告诉设计师"这个 AI 识别准确率 95%",设计师的反应不是"太好了",而是"那 5% 错在哪,我怎么知道哪 5% 是错的"。
信任的建立靠的是"可核查",不是"高准确率"。我现在做的系统,都会强制要求 AI 的每一个输出都附带"依据"——是基于哪个图层判断的、参照了哪些相邻图元、置信度多少。设计师可以快速扫一遍低置信度的部分,重点核查。这比让他全图重新检查一遍效率高得多,也让他对系统建立了可控的信任。
4.4 卡点四:流程集成,AI 是插进去的,不是长出来的
最后一个卡点,也是最难的一个。AI 工具如果是一个独立的软件,设计师需要"打开它、导入图纸、处理、导出、再导回原流程",那它的使用率一定很低。真正能落地的 AI + CAD,必须嵌入到设计师已有的工作流里,最好是在他原本的操作界面里,多一个按钮,点一下,结果直接出现在当前图纸上。
这就要求 AI 能力必须被封装成可被现有 CAD 平台调用的组件,而不是一个独立应用。技术上的实现方式,通常是做成插件或者脚本,通过 CAD 平台提供的扩展机制加载。这也是为什么我在选型时特别看重平台的脚本化和扩展能力——FreeCAD 在这方面的开放性,是它相对商业软件的一个隐性优势。
5. 几条我验证过的落地路径
讲了这么多问题,也得给点实际能走的路。以下是我在实际项目中验证过、或者看到同行验证过的几条路径,按落地难度从低到高排列。
5.1 路径一:从"辅助检查"切入,而不是"自动生成"
最容易落地、也最容易被设计师接受的,是图纸合规性检查。比如检查图层使用是否规范、标注是否完整、图元是否有重叠、房间是否闭合。这类任务的特点是:AI 只需要做"判断",不需要做"生成",输出是"这里可能有问题",而不是"这里应该改成什么样"。
判断类任务对精度的容忍度高,错了设计师自己会判断,不会造成实际损失。而且这类工具的价值立竿见影——设计师本来要花两小时检查的东西,现在十分钟扫完。信任建立起来之后,再逐步引入生成类功能,阻力会小很多。
5.2 路径二:用"规则 + AI"混合架构,而不是纯端到端
纯端到端模型在 CAD 领域几乎注定失败,因为 CAD 的规则性太强了。把确定性的部分交给规则,把模糊的部分交给 AI,这个混合架构是我目前最推荐的。
具体来说:图层过滤、块展开、几何有效性检查这些,用规则做,快且准;图元语义分类、异常检测、相似图纸检索这些,用 AI 做,处理规则覆盖不到的情况。两者的边界可以根据项目实际情况调整,规则能覆盖的比例越高,系统越稳定。
5.3 路径三:把 OpenCASCADE 当作几何"裁判"
无论 AI 输出什么,最终都要落到几何上。用 OCCT 做一层几何有效性验证,是保证输出质量的最后一道防线。AI 说"这里生成一个房间",OCCT 检查这个房间的边界是否闭合、是否有自交、面积是否在合理范围。不通过的直接打回,让 AI 重新生成或者标记为需人工处理。
这一层验证的成本不高,但能挡掉大量低级错误,是工程化系统里性价比最高的一个环节。
5.4 路径四:从单一专业、单一图元类型做起
我见过最成功的 AI + CAD 项目,都是极度聚焦的。比如只做"建筑图纸里的门窗识别",或者只做"结构图纸里的梁柱标注提取"。范围越窄,数据越容易收集,模型越容易训好,落地越快。
反过来,那些一上来就说"我们要做全专业全流程 AI 辅助设计"的项目,我基本没见过成功的。在 CAD 这个领域,广度是陷阱,深度才是出路。
6. 一些踩过的坑和对应的处理经验
最后分享几个具体的坑,都是我在实际项目里踩过或者看别人踩过的,希望能帮你省点时间。
坑一:DXF 解析库的选择。Python 生态里 ezdxf 是最常用的,但它对某些扩展数据的支持不完整。如果图纸里用了自定义实体或者复杂的扩展数据,可能需要自己写解析器补充。我建议在项目初期就用真实图纸做一轮解析测试,别等到后期才发现库不支持。
坑二:浮点精度。CAD 里的坐标是双精度浮点,比较两个点是否重合时,绝对不能用==,必须用容差比较。容差取多少也有讲究,太小了判断不出重合,太大了会把相邻的图元误判为重合。我的经验值是 1e-6 到 1e-4 之间,具体看图纸的坐标范围。
坑三:块引用的坐标变换。块引用(INSERT)带有插入点、缩放、旋转,展开块的时候必须把这些变换正确应用到子图元上。嵌套块更是要逐层累积变换矩阵。这里出错的话,展开后的图元位置会全乱,而且在小比例图纸上不容易发现。
坑四:AI 输出的后处理。模型输出的坐标往往是"大概对",需要做一轮吸附(snap)到最近的网格或者已有图元上。这个后处理逻辑看似简单,但直接决定了输出能不能用。我一般会做两级吸附:先吸附到已有图元的端点,再吸附到网格。
坑五:性能。一张复杂图纸可能有几十万个图元,AI 推理和几何运算都很吃资源。我的做法是分层处理:先按图层和空间范围做粗筛,只把相关的图元送进 AI,而不是全图一股脑处理。这个优化往往能把处理时间降一个数量级。
坑六:版本管理。CAD 图纸的版本迭代很频繁,AI 处理的结果如果和图纸版本对不上,会造成混乱。建议在系统里记录每张图纸的处理版本和对应的图纸哈希,避免用旧结果覆盖新图纸。
7. 关于"AI + CAD"这件事,我现在的判断
做了这么多项目,我对这个方向的判断也在变化。早期我觉得 AI 会很快取代大量重复性的 CAD 工作,现在我觉得短期内更现实的图景是"AI 做粗活,人做精活"。
AI 擅长的是:从混乱中找出模式、做初步的分类和提取、处理那些规则写不全但人一眼能看出来的东西。人不擅长但必须做的是:最终的工程判断、精度确认、以及承担责任。
所以我现在设计系统时,核心目标不是"让 AI 做更多",而是**"让 AI 和人的交接面尽可能清晰、高效"**。AI 处理完的部分,人一眼能看出哪里需要核查;人修改的部分,AI 能快速学习并应用到后续。这个交接面的设计质量,比 AI 本身的准确率更能决定项目的成败。
至于那些满天飞的 Demo,我的看法是:Demo 证明的是"技术上可行",工程化证明的是"商业上可用",这两件事之间隔着的,就是这篇文章讲的所有内容。能跨过去的人不多,但跨过去之后,护城河也是真的深。