Personal Site
← 返回博客

Revit API 二次开发实战:打造自定义 BIM 工具

3 min readBIM 推进
RevitAPIC#BIM插件开发

为什么要学 Revit API 开发

Revit 是目前 BIM 领域使用最广泛的建模软件,但原生功能无法满足所有项目需求。通过 Revit API 二次开发,你可以创建自定义插件来自动化重复操作、扩展软件功能,甚至构建企业级的 BIM 管理工具。

开发环境搭建

开发 Revit 插件需要以下工具:

工具版本要求用途
Visual Studio2022+IDE
.NET Framework4.8Revit 2024 运行时
Revit SDK与 Revit 版本匹配API 参考与示例
RevitAPI.dll随 Revit 安装核心 API 引用

创建项目时选择"类库 (.NET Framework)"模板,并添加 RevitAPI.dllRevitAPIUI.dll 的引用(位于 Revit 安装目录)。

插件基本结构

每个 Revit 插件的入口都是实现 IExternalCommand 接口的类:

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;

[Transaction(TransactionMode.Manual)]
public class AutoNumbering : IExternalCommand
{
    public Result Execute(
        ExternalCommandData commandData,
        ref string message,
        ElementSet elements)
    {
        // 获取当前文档
        UIDocument uidoc = commandData.Application.ActiveUIDocument;
        Document doc = uidoc.Document;

        // 你的业务逻辑写在这里
        TaskDialog.Show("提示", "插件运行成功!");

        return Result.Succeeded;
    }
}

实战案例:房间自动编号

以下示例展示如何批量为 Revit 中的房间设置编号:

[Transaction(TransactionMode.Manual)]
public class RoomNumbering : IExternalCommand
{
    public Result Execute(
        ExternalCommandData commandData,
        ref string message,
        ElementSet elements)
    {
        Document doc = commandData.Application
            .ActiveUIDocument.Document;

        // 获取所有房间
        FilteredElementCollector collector =
            new FilteredElementCollector(doc);
        var rooms = collector
            .OfCategory(BuiltInCategory.OST_Rooms)
            .WhereElementIsNotElementType()
            .ToElements();

        using (Transaction tx = new Transaction(doc, "房间自动编号"))
        {
            tx.Start();
            int counter = 1;
            foreach (Element room in rooms)
            {
                room.get_Parameter(BuiltInParameter.ROOM_NUMBER)
                    .Set($"R-{counter:D3}");
                counter++;
            }
            tx.Commit();
        }

        TaskDialog.Show("完成",
            $"已为 {rooms.Count} 个房间完成编号。");
        return Result.Succeeded;
    }
}

插件注册与部署

编译完成后,需要创建 .addin 清单文件让 Revit 识别插件:

<?xml version="1.0" encoding="utf-8"?>
<RevitAddIns>
  <AddIn Type="Command">
    <Name>房间自动编号</Name>
    <Assembly>MyBIMTools.dll</Assembly>
    <FullClassName>MyBIMTools.RoomNumbering</FullClassName>
    <ClientId>a1b2c3d4-e5f6-7890-abcd-ef1234567890</ClientId>
    <VendorId>MyCompany</VendorId>
  </AddIn>
</RevitAddIns>

.addin 文件放入 %AppData%\Autodesk\Revit\Addins\{版本号}\ 目录,重启 Revit 即可在"附加模块"选项卡中看到你的插件。

下一步

掌握基础的 IExternalCommand 后,可以探索 IExternalApplication(用于创建自定义功能区面板)、事件订阅(如文档保存时自动检查)、以及 IUpdater 实现模型实时监控。