Revit学习之路02_Revit基础菜单定义

序言:

       前一章对Revit加载外部插件进行了简单的说明,本章详细说明Revit自定义菜单的设计与实现。编程

Revit菜单机制

 

 

       Revit的菜单配置结构为Tab->Panel->Button如上图所示:ide

菜单的最顶级为选项卡(Tab)每一个选项卡下包含不少面板(Panel),不管是Tab仍是Panel都只是一个容器,其最终的目的是对Panel内的Button进行分类和布局。而Button共有如下几种类型。工具

 1 public enum RibbonItemType
 2 
 3     {
 4 
 5         PushButton = 0,
 6 
 7         PulldownButton = 1,
 8 
 9         SplitButton = 2,
10 
11         ToggleButton = 3,
12 
13         RadioButtonGroup = 4,
14 
15         ComboBoxMember = 5,
16 
17         ComboBox = 6,
18 
19         TextBox = 7
20 
21     }
View Code

菜单序列化

       菜单是插件的入口,作Revit的二次开发菜单的变更是比较频繁的。把菜单的定义写到代码里会使代码变得臃肿以致于很难维护,并且无法作到关注点分离,无法协同开发。所以把菜单定义的数据序列化,交由产品去维护和控制是一个很好的办法。布局

       Revit菜单的借口相似于Xml文件的结构,并且Xml文件的可读性和可维护性比较强。所以咱们把菜单的数据序列化为Xml数据。这样咱们能够在Revit启动的时候去读取菜单配置,将配置的菜单加载到Revit菜单中。(代码后续添加)。学习

AddIn文件

       程序和Revit的交互主要经过命令实现,为了便于命令的管理。咱们能够把命令单独放在一个项目之中。这样便于命令的查找,以及后续的维护。这样的话对于AddIn文件的处理就比较简单了。咱们只须要把这一个项目的dll添加到AddIn文件之中。spa

元素的过滤

       既然是基于Revit的二次开发,那么和Revit的交互是整个二次开发的核心。Revit提供了元素的过滤功能,利用过滤咱们能够实现元素的快速定位。继而能够去改变元素的属性。插件

过滤元素就像是漏勺捞水饺,咱们首先须要找到煮水饺的锅。这在Revit中对应着他的收集器 (FileredElementCollector)。而漏勺就是过滤器,而在Revit中存在这众多的过滤器。运用这些过滤器能够快速定位到元素。设计

FilteredElementCollector filteredElements = new FilteredElementCollector(Doc);//煮水饺
ElementClassFilter classFilter = new ElementClassFilter(typeof(wall));//得到漏勺x1
 filteredElements=filteredElements.WherePasses(classFilter);//捞水饺
                    foreach(Wall wall in filteredElements)
                    {
                       wall.Eat();//吃水饺
                    }
View Code

Revit常见的过滤器:code

  ExclusionFilter 过滤并排除一部分元素blog

  LogicalAndFilter 双重过滤

  ElementCategoryFilter 经过种类或者分类进行过滤

  ElementClassFilter 经过种类进行匹配的过滤器

 

结语

       自从工做以来,时间变得很零散,这意味着我无法集中时间实践我所学到的知识。零散的时间只够让我了解新知识的思想,而无法去实践去运用去把它转化成我本身的知识体系。这个系列的博客即是为了在学习的过程当中,经过写博客来将知识进行转化,以期能融入个人知识体系。可是这段时间发现效果并很差,我把太多的时间浪费在了思考以及组织语言上。在前期一叶障目的状况下思考是没有任何意义的。而不管是编程技术仍是Revit在我眼里都只是一种工具,一种让人们脱离重复工做,一种让人们专一于设计的工具。因此以后我会调整学习的方式,再也不专一于概念,而专一于实际的运用。

相关文章
相关标签/搜索