前言
SDK 里面有一个例子,十分有趣,DisableCommand,改变了 Revit 命令原有的行为,可谓移花接木。
过程
定义一个 IExternalApplication
,重新它的 OnStartUp
。
public Result OnStartup(UIControlledApplication application)
{
// 通过名字查找想要修改的命令
// static String s_commandToDisable = "ID_EDIT_DESIGNOPTIONS";
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
{
// 找到命令的绑定,用自的处理函数,DisableEvent,重置它
AddInCommandBinding commandBinding = application.CreateAddInCommandBinding(s_commandId);
commandBinding.Executed += DisableEvent;
}
catch (Exception)
{
ShowDialog("Error", "This add-in is unable to disable the target command " + s_commandToDisable +
"; most likely another add-in has overridden this command.");
}
return Result.Succeeded;
}
结论
如果在某种情况下,某个 Revit 默认的命令不想启用,可以用这种方法把它禁止掉,或者换成自己想要的其它命令或者自定义的行为。