前段时间接到一个需求:把一份施工图 PDF,在 SketchUp 2024 里建出三维模型。
我把整个过程跑通了:34.9m×16.9m 的两层发热门诊,149 堵墙、61 个门洞、59 个窗洞、屋面机房,全部由 AI 程序化完成。今天把过程和踩过的坑整理出来,给同样想用 AI 干工程活的朋友做个参考。
第一步:先给 SketchUp 装一个"AI 遥控器"
要让 AI 操作 SketchUp,缺的不是模型能力,而是一座"桥"。我选用了开源方案 SAIE(SketchUp Automation & Intelligence Engine),它的架构非常清晰:
MCP 客户端(如 Codex、Claude)→ Python MCP 服务器(67 个工具)→ WebSocket 桥 → SketchUp 内置 Ruby 插件
部署时遇到的第一课:环境比想象中脆弱。
本机没有 Python,最后借用了 Codex 桌面版自带的运行时; 装依赖时 pip 自动装上了 mcp 2.0,结果 SAIE 用的 FastMCP 在 2.0 里被拆成独立包,启动直接报错,需要把 mcp 固定到 1.x; 官方安装脚本在 PowerShell 5.1 下有个括号语法 bug,干脆手动复制插件文件。
装好后验证:通过 MCP 协议在 SketchUp 里真实建了一个盒子、截图、再删除——全流程打通。那一刻我知道,这条路是通的。
第二步:让 AI 读懂施工图
图纸是"建筑(设计七院)_发热门诊_A-W-FP001 首层及二层平面图"这类文件,单个 PDF 就是一张 A1 图,矢量线几万条、文字上万字。用 PyMuPDF 解析后发现两个关键事实:
好消息:图纸是矢量 + 真实文字,尺寸数字、门窗编号(W-M1123、S-TLM1523)都能直接提取。
坏消息:中文房间名全乱码。图纸用的 CSW-FS 字体没有 ToUnicode 映射,PyMuPDF 提出来全是"��"。试过字形 ID 反推 GBK,也不行。
我的处理是"双轨制":定量靠矢量数据,定性靠视觉模型。
视觉模型(Qwen3-VL)负责看整体:哪张是首层、哪张是二层、房间大概怎么分布、屋顶有几个机房; 矢量数据负责精确:提取每条线段的坐标和每个尺寸数字。
最关键的突破是推导比例尺:把尺寸数字(比如"6000")和附近的线段长度配对,算出"每点对应多少毫米",结果高度收敛在 35.28mm/pt——也就是 1:100。有了这把尺子,图上的一切坐标都能换算成真实毫米。
期间还发现一个坑:平面图在图纸上是上下排列的,首层和二层虽然画在同一张 A1 上,坐标却差了整整 37 米。如果不做坐标归一,建出来的二层会飞到天上去。
第三步:从几万条线里"揪出"墙
这是全程最费劲的部分,迭代了四五轮。
第一版思路:把平行双线配对成墙。CAD 画的墙是两条 150mm 间隔的线,听起来简单,结果把尺寸线、轴网线全配成了"墙",一抓一大把噪声。
第二版思路:只按重叠度配对,更干净了,但外墙因为被门窗打断成好多段,反而匹配不上。
直到我注意到一个细节:图纸里每堵墙的位置都有一个白色填充矩形——这是 CAD 导出 PDF 时"黑线描边 + 白填充"的墙体轮廓。直接提取白色矩形,厚度 100~320mm、长度大于 0.8m 的,就是墙!这一下准确率大幅提升。
但紧接着又踩了两个坑:
我给矩形过滤加了个"长度小于 5 米"的上限,结果把 29.5 米长的外墙全滤掉了,房间布局直接散架; 合并共线墙段时,ID 生成撞车,后建的墙把先建的覆盖掉,模型里莫名其妙少了一大半墙。
教训很直白:数据管线的每个环节都要能可视化、能量化验收。我把提取结果叠加到图纸上生成对比图,又统计了墙体厚度直方图、端点连接率,靠这些把噪声一点点清干净。
第四步:MCP 批量建模与开洞
数据就绪后,建模本身反而快:
楼板:首层、二层、屋面三层,按建筑外轮廓生成; 墙体:149 堵平面墙 + 52 堵屋面机房墙,分批通过 MCP 批量创建; 二层墙:SAIE 的墙默认从地面长起,需要整体抬升 5.2 米——写一段 Ruby 片段批量平移; 门洞窗洞:按门窗表尺寸做布尔减,61 个门洞、59 个窗洞。
这里又碰到一个"教科书级"的坑:SketchUp 的属性字典不支持存"哈希数组",存进去读出来全是 nil。SAIE 插件在记录开洞信息时直接崩溃,导致所有开洞失败。查了半天源码才定位,修复方式是改成 JSON 字符串存储,并把补丁同步回插件目录。
还有一堵 29.6 米的长墙,布尔减怎么都返回 nil,最后改成"一次只切一个洞"逐个重试才搞定。
第五步:验收,别急着说"完成了"
模型建完不算完。我把等轴测图、俯视图截出来,让视觉模型做第三方验收,结果还真发现问题:一堵内墙被误开了窗(因为我的外墙识别逻辑把"超过 26 米的长墙"都当成了外墙)。修正逻辑、重建、再验收,最终模型才过关。
最终交付:34.9m×16.9m 两层建筑,含楼板、墙体、61 门、59 窗、屋面机房、女儿墙,分 F1/F2/RF 图层管理,原模型在动手前自动备份。
经验清单(写给想干同样事的人)
- MCP 的价值不在协议,在"桥"
。AI 再聪明,接不上软件就是空谈。找"软件内插件 + 本地 MCP 服务器"的方案,比硬啃官方 API 快得多。 - PDF 图纸解析,矢量数据 > 视觉模型
。视觉会幻觉(它甚至把 34.9m 读成 8.6m),但矢量数据是毫米级的真相。视觉负责方向,矢量负责精度。 - 先算比例尺,再谈建模
。所有坐标转换都以比例尺为锚,锚错了全盘皆输。 - 提取算法要可验收
。叠加图、直方图、连接率,这些数字不会骗你。 - 开源方案的本钱就是"能改源码"
。SketchUp 属性字典、插件崩溃,这些坑最后都是读源码解决的。 - 破坏性操作前先备份
。AI 建错模型是常态,能回滚就不慌。 - 对结果保持怀疑
。AI 生成的模型,一定要用"另一个 AI"去验收,最好再人工抽查关键尺寸。
最后
这次实践最深的感受是:AI + 工程软件的想象空间,比大多数人以为的大。过去"读懂施工图 → 建模"是专业人员几天的活,现在 AI 借助 MCP 能把它跑成一条可复用的流水线——虽然中间还有不少坑,但方向已经清晰。
如果你也在做类似的事,欢迎交流。下一步我打算把房间名、材质、门窗表逐窗对齐这些"最后一公里"补上,让模型从"形似"走向"可用"。
本文由一次真实的 AI 建模实践整理而成。
夜雨聆风