首页 > 其他分享 >Revit二次开发-连续选择同一类别的图元

Revit二次开发-连续选择同一类别的图元

时间:2023-03-20 18:23:56浏览次数:35  
标签:Element doc Revit uidoc element 二次开发 图元 public

今天看到有群员有个需求:在选择的图元的时候 第一次选中后,后面的选中的图元也只能是第一次选中的同类别图元。比如说我第一次选中了门,后面选择的图元也只能是门

直接上代码~

实现ISelectionFilter接口

ISelectionFilter

public class SelectionFilter : ISelectionFilter
    {
        private readonly Element m_targetElement;
        public SelectionFilter(Element e)
        {
            m_targetElement = e;
        }
        public bool AllowElement(Element elem)
        {
            return elem.Category?.Id == m_targetElement.Category?.Id;
        }
        public bool AllowReference(Reference reference, XYZ position)
        {
            return false;
        }
    }

IExternalCommand

IExternalCommand
 [Transaction(TransactionMode.Manual)]
    public class PickSelector : IExternalCommand
    {
        private UIDocument m_uidoc;
        private Document m_doc;
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            m_uidoc = commandData.Application.ActiveUIDocument;
            m_doc = m_uidoc.Document;
            const string m_prompt = "pick a element";
            Element m_pickedElement = m_doc.GetElement(m_uidoc.Selection.PickObject(ObjectType.Element, m_prompt));
            while (true)
            {
                try
                {
                    Element m_element = m_doc.GetElement(m_uidoc.Selection.PickObject(ObjectType.Element, 
                        new SelectionFilter(m_pickedElement), m_prompt));
                    TaskDialog.Show("Prompt", $"The name of selected element is {m_element.Name}.");
                }
                catch (Autodesk.Revit.Exceptions.OperationCanceledException)
                {
                    break;
                }
                catch (Exception e)
                {
                    Debug.Assert(false, e.Message);
                    break;
                }
            }
            return Result.Succeeded;
        }
    }

 

实现效果

标签:Element,doc,Revit,uidoc,element,二次开发,图元,public
From: https://www.cnblogs.com/youngala/p/17237256.html

相关文章

  • Revit二次开发-Revit与非模态插件窗口中的DataGrid互选
    今天在群里看到一位群友有这样的一个需求,需要在插件的非模态窗口Datagrid控件中列出当前视图的所有图元,然后在窗口中选中一项的同时选中Revit中的Element。或者在Revit中选......
  • Revit二次开发-在Revit选项卡面板添加扩展Tab
    最近在查Revitapi手册的时候,偶然发现了一个好玩的接口。这个接口用来扩展Revit选项卡的Tab,于是我就自定义了一个拓展的tab。 拓展类如下:TabbedDialogExtension这个类......
  • Monkey二次开发 -- Monkey jar包构建
      前面已经下载好了Android源码,可以在对应目录下构建二次开发后的monkeyjar包了;  当前环境:Ubuntu16.04,Andorid10源码。 1.初始化环境  cd进入android源码根目......
  • 软件项目的二次开发
    我寻找到一个名为“餐厅信息管理程序”的软件项目,其目的是要实现客户点菜的过程,客户结账和账目的管理这些功能。原程序基本实现了以上功能,并在此基础上增加了管理员界......
  • 网上购书系统二次开发
    项目来源:大一下学期同学C++大作业项目,做的是一个网上购书系统开发,功能如下书籍信息显示客户信息显示选购书籍结算总额订单显示使用说明退出系统页面端项目......
  • 二次开发——体育赛事新闻项目改进
     一、项目来源:在b站视频的评论里搜到了java的前端页面项目源码的zip文件,将源码的zip文件解压后用idea打开,打开后部署Tomcat,并将源码包中的数据库资源打开在MySQL中,连接......
  • 二次开发-员工信息管理系统
    本程序主要实现对员工的信息管理,为1925223夏海涛同学的c语言期末大作业。程序会将输入的信息按照指引分别存入不同的文件,主要由结构体以及文件读取实现,按照不同序号可以实......
  • 二次开发网上二手书城
     此次我索要到了大三的学长做过的一个项目:《上海海洋大学图书交易系统》的项目文件,其运行时的页面如图:      进入网页 用户登录页面  ......
  • 航空客运管理系统二次开发
    在这次软件项目中,我在csdn论坛中搜索寻找到了一个航空客运管理系统,对这个项目进行了研究,提出一些个人看法和更改原帖:(12条消息)航空客运管理系统(数据结构)-CSDN博客这是......
  • 网上购物系统二次开发
    原软件致力于通过网上平台实现给商铺提供出售商品的平台,给顾客提供购买产品的平台。原软件只提供了以上几个功能,其中在商铺负责人的部分库存和物流并没有详细功能,功能缺......