Revit二次开发-获取RevitCommandId

发布时间 2023-09-08 22:30:30作者: 热情定无变

  在revit二次开发中,如果需要用到调用原生功能或者某个插件的功能。我们可以用UIApplication.PostCommand 这个方法来调用一些RevitCommand来实现这个需求。

      但是 PostableCommand 这个枚举提供的command id比较少 只有一些常用且原生的RevitCommand。如果我们的需求里面的command id没有提供的话,我们该如何去找呢。

有以下几种方法

1、通过Revit自带日志的方法去查找。 日志的存放路径位于 %appdata%\Local\Autodesk\Revit\%revit版本%\Journals 这个路径下这里面可以查找一些revit使用日志 里面就包含了一些使用的command id 

2、通过快捷方式  快捷方式的配置用两种方法获取到。第一种就是在设置里面直接导出

第二种就是在Revit的配置路径 %appdata%\Roaming\Autodesk\Revit\%revit版本% 

这个配置表包含常用的Command Id  不包含其他插件的Command id。配置表部分

3 通过代码的方式获取 这个方式需用到不常用的两个dll  AdWindows和UIFramework  这两个dll均可以在revit的安装目录找到。

[Transaction(TransactionMode.Manual)]
internal class CommandIdCommand : CommandBase
{
    public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
    {
        ComponentManager.ItemExecuted += ComponentManager_ItemExecuted;  //这里做演示就不注销事件了
        return Result.Succeeded;
    }

    private void ComponentManager_ItemExecuted(object sender, RibbonItemExecutedEventArgs e)
    {
        var commandId = ControlHelper.GetCommandId(e.Item);
        Autodesk.Revit.UI.TaskDialog.Show("prompt:", $"command id:   {commandId}");
    }
}

我们可以通过事件来拿到command id 以下是第三方插件和原生command的id 都能获取到