Revit二次开发之控制按钮在不同视图下的可用状态

有时候我们希望某个外部命令或者通俗的说某个按钮只能在平面视图下可用,而在三维视图下不可用,那怎么办呢?其实Revit API 已经给我们开放了一个接口:IExternalCommandAvailability 我们需要在外部命令里新建一个类然后继承这个接口,然后在外部应用(也就是IExternalApplication)的相应按钮命令下指定目标属性即可!

Revit二次开发之控制按钮在不同视图下的可用状态

 

using Autodesk.Revit.UI;

using Autodesk.Revit.DB;

using Autodesk.Revit.Attributes;

using Autodesk.Revit.UI.Selection;

using Autodesk.Revit.DB.Plumbing;

using Autodesk.Revit.DB.Mechanical;

using System.Xml;

 

namespace HelloWorld

{

    [Transaction(TransactionMode.Manual)]

    [Regeneration(RegenerationOption.Manual)]

    public class Test : IExternalCommand

    {

        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)

        {

            UIApplication uiApp = commandData.Application;

            UIDocument uiDoc = uiApp.ActiveUIDocument;

            Document Doc = uiDoc.Document;

 

            Reference refer = uiDoc.Selection.PickObject(ObjectType.Element);

            Transaction ts = new Transaction(Doc,"delete");

            ts.Start();

            Doc.Delete(Doc.GetElement(refer).Id);

            ts.Commit();

 

            return Result.Succeeded;

        }

       

    }

    class Enable : IExternalCommandAvailability

    {

        public bool IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories)

        {

            if (null != applicationData.ActiveUIDocument)

            {

                Autodesk.Revit.DB.View view = applicationData.ActiveUIDocument.Document.ActiveView;

                if (view.ViewType == ViewType.ThreeD || view.ViewType == ViewType.ProjectBrowser || view.ViewType == ViewType.Elevation || view.ViewType == ViewType.Section)

                {

                    return false;

                }

            }

            return true;

        }

    }

}

 

 PushButtonData button = new PushButtonData("delete", "删除构件", @"C:\ProgramData\Autodesk\Revit\Addins\2016\BIM工具箱\BIM\HelloWorld.dll", "HelloWorld.Test");

            Uri uriImage = new Uri(@"C:\ProgramData\Autodesk\Revit\Addins\2016\BIM工具箱\BIM\Image\1.ico");

            BitmapImage largeimage = new BitmapImage(uriImage);

            button.LargeImage = largeimage;

            当然这个属性也可以写在配置文件里,依情况而定

            button.AvailabilityClassName = "HelloWorld.Enable";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值