乐于分享
好东西不私藏

用AI写Revit插件,三个最坑的问题AI一个都不会提前告诉你

用AI写Revit插件,三个最坑的问题AI一个都不会提前告诉你
AI写Revit插件

用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助手