Revit中的AddInCommandBinding

Revit中的AddInCommandBinding

Revit Api提供了对已经有的命令的入口,可以调用Revit UI界面中的按钮命令,也可以调用鼠标右键的ContextMenu的命令。使用Revit命令有两个目的:

  • 替换Revit命令原来所代表的功能

  • 发送Revit自带的命令

    重写Revit自带的命令

    AddInCommandBinding类可以重写一个已经有的Revit命令,它有三个事件可以替换现在有的功能:

    • BeforeExecuted——这个是一个只读的事件,该命令自带的功能发生发生之前会触发,但是不能开启事务去修改Document中的数据,也不会阻碍原来功能的正常实现
    • CanExecute——决定该命令现在的可用性,如果是false则该命令无法使用
    • Executed——替换命令原先功能的地方,注册了这个事件就不要去注册BeforeExecuted事件。现在这个事件的Handler里面的功能即将取代原先的功能。
    Revit界面中点击画模型线的命令,可以看到TaskDialog的运行效果
        public Result OnStartup(UIControlledApplication application)
        {
			//拿到画模型线的内置命令Id
      		var id = RevitCommandId.LookupPostableCommandId(PostableCommand.ModelLine);
			//拿着命令创建对应的命令
            var command = application.CreateAddInCommandBinding(id);
			//注册执行前的事件
            command.CanExecute += Command_CanExecute;
           command.BeforeExecuted += Command_BeforeExecuted;

            return Result.Succeeded;
        }

		//设置命令的可用性为false,这样UI中的按钮是灰色的,不可用的
        private void Command_CanExecute(object sender, CanExecuteEventArgs e)
        {
            e.CanExecute = false;
        }

        private void Command_BeforeExecuted(object sender, BeforeExecutedEventArgs e)
        {
            TaskDialog.Show("Title", "运行后");
        }
替换Revit中的模型线命令
        public Result OnStartup(UIControlledApplication application)
        {
            var id = RevitCommandId.LookupPostableCommandId(PostableCommand.ModelLine);

            var command = application.CreateAddInCommandBinding(id);
            command.CanExecute += Command_CanExecute;
            //command.BeforeExecuted += Command_BeforeExecuted;
            command.Executed += Command_Executed;
            return Result.Succeeded;
        }

        private void Command_CanExecute(object sender, CanExecuteEventArgs e)
        {
            e.CanExecute = true;
        }

        private void Command_Executed(object sender, ExecutedEventArgs e)
        {
            var app = sender as UIApplication;
            if (app != null)
            {
                //获取创建窗户的命令Id
                var id = RevitCommandId.LookupPostableCommandId(PostableCommand.Window);
                //把画模型线的命令改写成创建窗户
                //这样用户点了UI中的模型线按钮,界面会进入到创建窗户
                app.PostCommand(id);
            }
        }

效果:

设置命令的可用性以后,Revit界面中的画模型线的按钮变成了不可用。
在这里插入图片描述


设置可用性为True,点击画模型线的命令可以看到这个效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值