
用AI写Revit插件,三个最坑的问题AI一个都不会提前告诉你
最近用 Hermes(一个 AI Agent)开发了一套 Revit 管综剖面标注插件,项目叫 GDBZ。
过程不算长,一周左右,但中间踩的坑够写三篇公众号。
今天不说 AI 多牛逼,说三个具体问题——都是 Revit API 的骨灰级特性,AI 生成代码时完全不会提醒你,只有跑起来才知道撞墙了。
第一个坑:Revit 2020 的族文档里不能创建文字
项目一开始的设计很美好:做一个族标注(Tag),附着在管道上,移动删除自动跟随,干净优雅。
AI 刷刷刷生成了代码,逻辑看起来完美——打开族文档,加 Label,设参数,保存。
跑起来。崩了。
查了一下,报错信息指向 FamilyItemManager 没有 NewTextNote 方法。
我一开始以为是自己代码写错了,让 AI 重写了三遍,每次换不同的写法,结果都一样。
后来查了 Revit 2020 API 文档才明白:这不是代码问题,是 Revit 2020 API 的限制——在族文档里,你没办法用代码创建 Label 文字元素。
一个核心功能,API 根本不支持。AI 不知道这个限制,它只会按通用的逻辑写代码,写出来的代码理论上是对的,但在 Revit 2020 这个特定版本上就是跑不了。
解决方案?退回到 TextNote 方案。TextNote 是纯文字标注,不能附着在管道上自动跟随移动,但至少能用。
这件事让我意识到:用 AI 写 Revit 插件,最大的坑不是代码本身,是 AI 不知道 Revit 各版本 API 之间那些没有写在文档里的限制。
★你至少要知道自己要做什么版本,以及这个版本的 API 是不是真的支持你要做的事。
第二个坑:TextNote 定位偏移=0,文字直接消失了
退回到 TextNote 方案之后,写了三种标注定位样式:上方、左侧、中心。
前两个都好好的,唯独"中心"定位样式——文字看不见了。
调试了半天,一行一行看参数,最后发现:中心定位的偏移量被我设成了 0。
逻辑上没问题吧?中心嘛,偏移 0 就是正好在管道位置上。
但 Revit TextNote 的实际行为是:当偏移为 0 时,文字和管道重叠,在剖面视图里就被吃掉了,完全不可见。
解决方案很傻:不管选什么定位样式,偏移量统一增加 400mm。
// 不管什么定位,先给 400mm 偏移
double baseOffset = 400; // mm
搞定,文字出来了。
这个坑 AI 更不可能知道。 这是 Revit 渲染层面的行为,不是 API 层面的问题。你搜 StackOverflow 都不一定能搜到。
第三个坑:Revit 2020 不能用 SDK 风格的 .csproj
这个坑发生得最早,在我搭项目骨架的时候就踩了。
我用 .NET 的 SDK 风格 .csproj 写项目文件,干净、简洁、现代——AI 也是这么生成的。
<ProjectSdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
</PropertyGroup>
</Project>
编译通过。复制到 Revit。加载——报错,不识别。
查了一圈原因:Revit 2020 自带的 .NET Framework 运行时,不认识 SDK 风格的项目输出的程序集结构。它要的是传统格式的 .csproj,就是那种写满 GUID 和引用路径的老式 XML。
说白了,Revit 2020 的插件加载器只认传统的 Assembly 结构,SDK 风格生成的东西它觉得"不对"。
最后换成了传统 .csproj 格式:
<?xml version="1.0" encoding="utf-8"?>
<ProjectToolsVersion="15.0"DefaultTargets="Build"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportProject="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" />
<!-- ... 传统格式,冗长但 Revit 2020 吃这套 -->
</Project>
同样的代码,换个项目格式,就能跑了。
AI 默认会用最新的最佳实践来写代码——SDK 风格 .csproj 确实是 .NET 生态现在的标准。但 Revit 2020 不是"现在的生态",它是一个停留在 .NET Framework 4.8 时代的封闭环境。AI 的最佳实践和 Revit 2020 的现实之间有五年的代差。
所以,用 AI 写 Revit 插件到底行不行?
行,但前提是你自己得懂。
我把这次开发总结成三条:
1. 你必须知道自己的 Revit 版本有哪些 API 限制AI 不知道 Revit 2020 的 FamilyItemManager 没有 NewTextNote。你得知道,或者在踩了之后能快速定位是 API 限制而不是代码问题。
2. 你必须做好"AI 生成了但跑不了"的心理准备AI 生成的代码语法上可以完美,但在 Revit 这个特定环境里,有太多隐式规则——偏移不能为 0、不能用 SDK 风格的项目文件、某些 API 在不同版本行为不同。这些都是跑起来才知道的。
3. AI 最大的价值不是替你写代码,是替你加速"试错-修正"循环同样一个功能,自己手写可能要一天,AI 十分钟生成三版。前两版跑不了,第三版改一改能用了。你的价值在于判断哪一版的方向是对的,以及知道为什么前两版不行。
最后说一句实话:
AI 写 Revit 插件这件事,最大的瓶颈不是 AI 写不出代码,而是你知不知道自己要什么、以及能不能判断 AI 给的东西对不对。
它帮你省掉了打字的时间,但省不掉你理解 Revit 的时间。
这大概是所有用 AI 做专业开发的共性——工具变得越强,使用者的判断力就越值钱。
欢迎转发
优易科技 | 优易BIM助手
夜雨聆风