1. 为什么“AI + CAD”看起来很美,落地却处处碰壁
过去两年,我参与过三个跟“AI 辅助 CAD”相关的内部项目,从图纸解析、参数化生成到自动出图都摸过一遍。最直观的感受就是:Demo 视频里 AI 三秒画出一张装配图,真到了工程环境里,连一个 DXF 文件都读不干净。这不是某个团队的问题,而是整个“AI + CAD”赛道目前最真实的写照。
这个领域涉及的核心关键词包括AI、CAD、DXF、DWG、FreeCAD,本质上要解决的是“让机器理解工程图纸,并辅助或自动完成设计任务”。听起来很宏大,但落到实操层面,第一步就卡在文件格式上——DWG 是 Autodesk 的私有格式,DXF 虽然是交换格式但版本差异巨大,FreeCAD 作为开源方案虽然能读能写,但跟商业软件之间的兼容性坑多到让人怀疑人生。
这篇文章适合三类人看:一是正在做 AI + CAD 方向的产品或研发,想知道别人踩过哪些坑;二是传统 CAD 工程师,想了解 AI 到底能不能帮自己省事;三是对这个交叉领域感兴趣的技术爱好者,想搞清楚“为什么看起来简单的事情做起来这么难”。我会从整体设计思路、核心细节、实操过程、常见问题四个维度,把这件事掰开揉碎讲清楚。
2. 整体设计与思路拆解:AI 和 CAD 到底该怎么结合
2.1 三条主流技术路线及其取舍逻辑
目前市面上“AI + CAD”的落地尝试,基本可以归为三条路线,每条路线的技术栈、适用场景和坑点完全不同。
第一条是“图纸理解路线”。核心思路是把 DWG/DXF 文件解析成结构化数据,然后用 AI 做识别、分类、提取。比如从一张建筑平面图里自动识别门窗位置、墙体走向、标注信息。这条路线的技术栈通常是:CAD 解析库(如 OpenCASCADE、Teigha、ezdxf)+ 计算机视觉模型 + 规则引擎。优势是需求明确,很多设计院和施工单位愿意买单;劣势是图纸格式太杂,不同设计院出图规范天差地别,模型泛化能力很难保证。
第二条是“参数化生成路线”。思路是用 AI 根据输入条件(载荷、尺寸、材料)直接生成 CAD 模型或图纸。比如输入“跨度 6 米、承重 2 吨的钢梁”,AI 输出对应的三维模型和工程图。技术栈通常是:参数化引擎(FreeCAD 的 Python API、Grasshopper)+ 生成模型 + 优化算法。优势是想象空间大,能真正改变设计流程;劣势是工程约束太多,AI 生成的方案往往“看起来合理但算不过去”。
第三条是“辅助操作路线”。不追求全自动,而是用 AI 帮工程师做重复性操作,比如批量修改图层、自动标注、图纸合并、格式转换。技术栈相对轻量:CAD 脚本接口 + 简单的分类或匹配模型。优势是落地快、风险低;劣势是天花板低,容易被当成“高级脚本工具”。
我个人的判断是:现阶段最务实的路线是第三条,最有价值的是第一条,最需要耐心的是第二条。很多团队一上来就冲着第二条去,结果 Demo 很惊艳,工程化时发现连数据都准备不齐。
2.2 为什么 Demo 和工程之间有一道鸿沟
Demo 的环境是精心准备的:一张干净的图纸、固定的格式、理想的输入条件。工程环境是什么样?我见过一个项目,客户给的“样本图纸”有 200 多张,来自不同年代、不同设计院、不同 CAD 版本。有的图纸里所有线条都在一个图层,有的标注全是炸开的文字,有的甚至是用“画线+文字”冒充的表格。
这里面的核心矛盾在于:AI 模型需要的是规整的数据,而工程图纸的本质是“给人看的”,不是“给机器读的”。一个工程师能看懂一张乱糟糟的图纸,因为他有领域知识和上下文;但 AI 没有,它只能依赖输入数据的质量。所以“AI + CAD”落地的第一道坎,不是模型不够强,而是数据清洗和标准化的工作量被严重低估了。
另一个被低估的问题是格式兼容性。DWG 和 DXF 之间的转换、不同版本之间的差异、中望 CAD 和 AutoCAD 的兼容性、FreeCAD 导入 DXF 时的比例问题——这些在 Demo 里可能一句“我们做了预处理”就带过了,但在工程里每一个都是需要单独写代码解决的硬骨头。
3. 核心细节解析与实操要点:从文件解析到 AI 接入
3.1 DWG/DXF 解析:第一道也是最硬的一道坎
先说结论:如果你要做 AI + CAD,80% 的精力会花在文件解析和数据清洗上,只有 20% 花在 AI 模型上。这不是夸张,是我三个项目下来的真实体感。
DWG 是二进制格式,Autodesk 没有公开完整规范,所以开源方案基本靠逆向。常见的解析路径有这么几种:
- ODA(Open Design Alliance):提供 DWG/DXF 的 SDK,功能最全,但商业授权费用不低。适合有预算的团队。
- LibreDWG:GNU 项目,能读大部分 DWG,但写入能力弱,遇到复杂实体容易崩。
- ezdxf:Python 库,专门处理 DXF,API 友好,适合快速原型。但只支持 DXF,不支持 DWG。
- OpenCASCADE:严格说不是 CAD 文件解析库,而是几何内核,但可以配合其他工具做几何处理。
- FreeCAD:内置了 DXF 导入导出,底层用的也是开源方案,但导入复杂图纸时经常丢实体。
实操建议是:如果只做 DXF,用 ezdxf 起步最快;如果要处理 DWG,要么买 ODA 的授权,要么先用工具转成 DXF 再处理。这里有个坑:DWG 转 DXF 不是无损的,某些自定义实体、动态块、标注样式在转换后会丢失或变形。我试过用某转换器把一张含动态块的图纸转成 DXF,结果所有动态块都变成了静态块,参数全丢。
还有一个容易被忽略的点是单位问题。DXF 文件里通常有$INSUNITS变量定义单位,但很多图纸这个值是空的或者错的。你按毫米解析,结果人家是英寸,整个模型尺寸差 25.4 倍。我踩过一次坑:一个管道图纸导入后所有管径都大了 25 倍,排查了半天才发现是单位没处理。
3.2 数据清洗:比模型训练更耗时的环节
解析出来的数据不能直接喂给 AI,必须先清洗。清洗的核心目标是把“给人看的图纸”变成“给机器读的结构化数据”。
常见的清洗操作包括:
- 图层规整:把散落在多个图层的同类实体合并,或者按规则重新分层。
- 实体去重:图纸里经常有重叠的线条、重复的标注,需要去重。
- 文字识别与归一:标注文字可能是 MTEXT、TEXT、属性块,甚至炸开的线条,需要统一提取。
- 坐标归一:不同图纸的坐标系原点不同,需要统一到同一参考系。
- 比例修正:特别是从其他软件导入的图纸,比例经常不对。比如 Pro/E 导入 DXF 时比例问题就是经典坑。
这里分享一个实操技巧:先用规则引擎做粗清洗,再用 AI 做精分类。比如先用规则把所有图层名包含“墙”的实体提取出来,再用模型判断哪些是承重墙、哪些是隔墙。纯靠 AI 从零开始分类,准确率很难看;纯靠规则又太死板,换个设计院就失效。
3.3 AI 模型选型:别一上来就上大模型
很多团队一提到 AI + CAD,第一反应是“上大模型”。我的建议是:先想清楚任务类型,再选模型。
- 图纸分类、实体识别:用 CNN 或 Vision Transformer 就够了,不需要大模型。
- 标注文字理解、语义提取:可以用 BERT 类的小模型,或者直接调 API。
- 图纸问答、辅助设计:可以考虑大模型,但要做好 RAG(检索增强生成),否则模型会一本正经地胡说八道。
- 参数化生成:更多是优化问题,遗传算法、拓扑优化可能比深度学习更合适。
我见过一个团队用大模型做图纸实体分类,结果推理成本是 CNN 的几十倍,准确率还差不多。模型选型的核心原则是:能用小模型解决的,绝不上大模型;能用规则解决的,绝不硬上模型。
4. 实操过程与核心环节实现:一个可复现的落地流程
4.1 环境准备与工具链搭建
假设你要做一个“从 DXF 图纸中自动提取门窗表”的功能,下面是我验证过的一套流程。
工具链清单:
| 工具 | 用途 | 备注 |
|---|---|---|
| Python 3.10+ | 主语言 | 生态最全 |
| ezdxf | DXF 解析 | 只支持 DXF |
| OpenCV | 图像处理 | 用于可视化调试 |
| scikit-learn | 传统 ML | 分类、聚类 |
| PyTorch | 深度学习 | 如果需要 |
| FreeCAD | 几何验证 | 可选,用于三维校验 |
安装命令:
pip install ezdxf opencv-python scikit-learn torch如果是处理 DWG,需要先转 DXF。可以用 ODA File Converter(免费但需要注册),或者用 FreeCAD 的命令行模式转换:
freecadcmd -c "import FreeCAD; FreeCAD.open('input.dwg'); FreeCAD.saveAs('output.dxf')"注意:FreeCAD 转换 DWG 依赖外部库,在 Windows 上配置比较麻烦,Linux 下相对顺畅。如果转换失败,优先检查 Teigha 或 ODA 的库是否装好。
4.2 DXF 解析与实体提取的完整代码
下面是一段我实际用过的代码,功能是读取 DXF 文件,提取所有 INSERT 实体(通常是块引用,门窗常用块表示),并输出它们的属性。
import ezdxf def extract_blocks(dxf_path): doc = ezdxf.readfile(dxf_path) msp = doc.modelspace() results = [] for entity in msp.query('INSERT'): block_name = entity.dxf.name insert_point = entity.dxf.insert attributes = {} # 提取块属性 if entity.attribs: for attr in entity.attribs: attributes[attr.dxf.tag] = attr.dxf.text results.append({ 'block_name': block_name, 'position': (insert_point.x, insert_point.y), 'attributes': attributes }) return results if __name__ == '__main__': blocks = extract_blocks('sample.dxf') for b in blocks[:10]: print(b)这段代码能跑通的前提是:图纸里的门窗确实是用块做的。如果设计院把门窗炸成了线条,这段代码就提取不到任何东西。这时候就需要退回到“几何识别”方案:用 OpenCV 把 DXF 渲染成图像,再用轮廓检测找出门窗形状。
4.3 从解析到 AI 分类的衔接
提取到块之后,下一步是分类。比如判断哪些块是门、哪些是窗、哪些是设备。如果块名规范(比如“M-900”表示 900 宽的门),用规则就能搞定。如果块名是“Block1”“Block2”这种,就需要 AI 介入。
我的做法是:先用规则覆盖 70% 的常见情况,剩下的 30% 用模型兜底。模型输入可以是块的几何特征(宽高比、面积、线条数)+ 属性文本,输出是类别。用随机森林或 SVM 就能达到不错的效果,样本量几百条就够。
这里有个经验:不要追求 100% 准确率。工程场景里,AI 分类到 90% 准确率,剩下 10% 人工复核,整体效率已经提升很大了。追求 99% 准确率的成本可能是 90% 的十倍,不划算。
5. 常见问题与排查技巧实录
5.1 格式兼容性问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| DXF 导入后尺寸不对 | 单位设置错误 | 检查 $INSUNITS 变量 | 手动指定单位或按比例缩放 |
| DWG 转 DXF 后实体丢失 | 动态块/自定义实体不支持 | 对比转换前后实体数量 | 用 ODA 转换器或保留原格式处理 |
| FreeCAD 导入 DXF 报错 | 版本不兼容 | 查看 FreeCAD 版本和 DXF 版本 | 降级 DXF 版本或升级 FreeCAD |
| 图纸显示放射状乱线 | 坐标溢出或单位错误 | 检查实体坐标范围 | 修正单位或重置坐标原点 |
| 标注文字提取不到 | 标注被炸开或用了自定义对象 | 检查实体类型 | 用几何识别替代文字提取 |
5.2 几个让我印象深刻的坑
第一个坑是“图纸比例”。有一次客户给了一张总图,我按 1:1 解析,结果所有尺寸都小了 100 倍。后来发现图纸是在模型空间按 1:100 画的,但 DXF 里没有记录这个比例信息。解决办法是:永远不要假设图纸是 1:1,要么让客户提供比例信息,要么用已知尺寸的实体(比如标准图框)反推比例。
第二个坑是“多重引用插入”。有些图纸用了 XREF(外部参照),解析时只能看到参照的路径,看不到实际内容。如果参照文件没一起给,解析出来就是空的。这时候需要用 CAD 的“绑定”功能把参照合并到主图纸,或者用支持 XREF 解析的库。
第三个坑是“AI 模型的过度自信”。我们训练了一个门窗分类模型,测试集准确率 95%,上线后客户反馈“经常把门识别成窗”。排查发现:测试集和实际图纸的分布不一样,测试集里门和窗的块名规范,实际图纸里块名乱七八糟。教训是:测试集必须来自真实工程环境,不能用整理过的数据。
5.3 给准备入坑的团队几条实在建议
第一,先做数据盘点,再做技术选型。花一周时间把客户给的样本图纸全部过一遍,统计格式分布、版本分布、实体类型分布。这个工作看起来笨,但能帮你省掉后面无数返工。
第二,把“格式转换”当成一个独立项目来做。不要觉得这是“预处理”,它本身就是核心难点。DWG 转 DXF、EXB 转 DWG、不同版本互转,每一个都值得单独写测试用例。
第三,AI 只做它擅长的事。规则能解决的用规则,几何计算能解决的用几何计算,AI 用来处理模糊的、需要语义理解的部分。混合方案比纯 AI 方案靠谱得多。
第四,留出人工复核的接口。工程场景里,完全自动化的风险太高,AI 出结果、人工确认的流程更容易被接受,也更容易落地。
6. 关于 FreeCAD 和开源方案的一些补充
FreeCAD 是这个领域绕不开的话题。它的优势很明显:开源、免费、有 Python API、支持 DXF/DWG(通过外部库)。但坑也很明显:没有内置齿轮工具(需要装 Gear 工作台)、导入复杂 DXF 容易丢实体、DWG 支持依赖外部库且配置麻烦。
我的使用体验是:FreeCAD 适合做几何验证和二次开发,不适合做高精度图纸解析。比如你可以用 FreeCAD 的 Python API 做参数化建模,然后用它导出 DXF 给其他软件用。但如果你要解析一张复杂的建筑图纸,FreeCAD 的 DXF 导入器可能会让你失望。
如果团队预算有限,我的建议是:用 ezdxf 做 DXF 解析,用 OpenCASCADE 做几何处理,用 FreeCAD 做三维验证和可视化。这套组合基本能覆盖大部分需求,成本也低。如果必须处理 DWG,再考虑 ODA 的商业授权。
最后分享一个我个人的判断:AI + CAD 的落地,短期内不会以“全自动设计”的形式出现,而是以“辅助工具”的形式渗透。比如自动标注、批量修改、图纸审查、格式转换这些“脏活累活”,才是 AI 最先能创造价值的地方。那些 Demo 里炫酷的“一句话生成整张图纸”,离工程化还有很长的路要走。但正是这些不起眼的辅助功能,能实实在在帮工程师省下时间,也更容易在真实项目里活下来。