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

下面是一个具体的例子:
 

#region Namespaces
using 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();
        }
    }
}

相关文章:

  • 2022-03-09
  • 2021-05-24
  • 2021-09-16
  • 2022-01-17
  • 2021-11-13
  • 2021-12-04
  • 2021-12-28
  • 2021-03-31
猜你喜欢
  • 2021-12-26
  • 2021-09-22
  • 2021-07-23
  • 2021-12-06
  • 2021-12-15
  • 2021-07-11
相关资源
相似解决方案