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


    序言:

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

    Revit菜单机制

     

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

    菜单的最顶级为选项卡(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文件之中。

    元素的过滤

           既然是基于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常见的过滤器:

      ExclusionFilter 过滤并排除一部分元素

      LogicalAndFilter 双重过滤

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

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

    结语

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

  • 相关阅读:
    [Leetcode]@python 65. Valid Number
    二维数组循环求出最大子数组
    一维循环的数组求出最大子数组的和
    电梯调度算法需求分析
    返回一个整数数组中最大子数组的和
    最大子数组求解
    小学数学计算题随机出题软件
    四则运算的设计思路
    学期读书计划
    软件工程概论第十一章
  • 原文地址:https://www.cnblogs.com/Blog-Pan/p/6535011.html
Copyright © 2020-2023  润新知