Revit二次开发示例:DisableCommand

时间:2021-03-25 05:39:34


Revit API 不支持调用Revit内部命令,但可以用RevitCommandId重写它们(包含任意选项卡,菜单和右键命令)。使用RevitCommandId.LookupCommandId()可以提供查询和获取命令的ID,然后用CreateAddInCommandBinding()来创建绑定一个AddInCommandBinding实例,通过Executed和CanExecute事件来完成重写内部命令。

下面是一个具体的例子:
 

#region Namespacesusing System;
using System.Collections.Generic;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
#endregion

namespace DisableCommand
{
[Autodesk.Revit.Attributes.Transaction(TransactionMode.Manual)]
[Autodesk.Revit.Attributes.Regeneration(RegenerationOption.Manual)]
[Autodesk.Revit.Attributes.Journaling(JournalingMode.NoCommandData)]
class App : IExternalApplication
{
static String s_commandToDisable = "ID_EDIT_DESIGNOPTIONS";
static RevitCommandId s_commandId;

public Result OnStartup(UIControlledApplication a)
{
s_commandId
= RevitCommandId.LookupCommandId(s_commandToDisable);

if (!s_commandId.CanHaveBinding)
{
ShowDialog(
"Error", "The target command" + s_commandToDisable +
" selected for disabling cannot be overridden");
return Result.Failed;
}

try
{
AddInCommandBinding commandBinding
= a.CreateAddInCommandBinding(s_commandId);
commandBinding.Executed
+= commandBinding_Executed;
}
catch (Exception)
{

ShowDialog(
"Error", "This add-in is unable to disable the target command " + s_commandToDisable +
"; most likly another add-in has overridden this command.");
}

return Result.Succeeded;
}

void commandBinding_Executed(object sender, Autodesk.Revit.UI.Events.ExecutedEventArgs e)
{
ShowDialog(
"Disabled", "Use of this command has been disabled.");
}

public Result OnShutdown(UIControlledApplication a)
{
if (s_commandId.HasBinding)
a.RemoveAddInCommandBinding(s_commandId);

return Result.Succeeded;
}

private static void ShowDialog(string title, string message)
{
TaskDialog td
= new TaskDialog(title)
{
MainInstruction
= message,
TitleAutoPrefix
= false
};
td.Show();
}
}
}