序言:

前一章对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));//获得漏勺x1filteredElements=filteredElements.WherePasses(classFilter);//捞水饺foreach(Wall wall in filteredElements){wall.Eat();//吃水饺}

View Code

Revit常见的过滤器:

  ExclusionFilter 过滤并排除一部分元素

  LogicalAndFilter 双重过滤

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

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

结语

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

转载于:https://www.cnblogs.com/Blog-Pan/p/6535011.html

Revit学习之路02_Revit基础菜单定义相关推荐

  1. Revit学习之路01_Revit基础

    序言: 此分类记录自己的Revit学习之路.初学者难免一叶障目,不见泰山,欢迎一起交流学习! Revit介绍 Revit专为建筑信息模型(BIM)构建的一款建模软件.随着BIM概念在国内的兴起,各大设 ...

  2. 软件测试的学习之路-----计算机基础 (详情展示)

    文章目录 一:计算机基本介绍 二:硬件系统 三:软件系统 四:二进制的基本介绍 五:常见的数字进制 六:进制之间的转换 七:编码 八:数据的计量单位 九:编程语言 十:基本的DOS命令 十一:欢迎查看 ...

  3. Vue学习之路(基础篇)

    Vue学习之路(基础篇)

  4. python na不显示 占位_Python学习之路—Python基础(一)

    前言 在Python学习之路-初识Python一文中,简单的介绍了Python的基本信息,搭建了Python的基础运行环境,这篇文档将主要展现一些Python的入门必备内容,如有错误或遗漏的地方,欢迎 ...

  5. Java学习之路(基础到高级200讲)

    (由于合同未续,视频课程已被下线,可到另一个平台观看对应的视频教程) https://www.yingyinyi.com/site/view/57171.html 对应博客有300余篇基础到高级的文章 ...

  6. Python学习之路 day1_Python基础1

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  7. 大数据学习之路-Linux基础

    Linux基础与Shell编程 1. Linux概述 2. 系统安装 3. Linux目录与结构 4. VI/VIM编辑器 4.1 打开和新建文件 4.2 VI三种工作模式 末行模式命令 一般模式 编 ...

  8. Java学习之路-----Java基础简介,基础语法,Java标识符,修饰符,关键字与注释

    这里写目录标题 Java简介 Java发展历程 Java语言平台版本 Java语言的特点 Java语言跨平台原理--JVM JRE和JDK JDK安装路径下的目录解释 Java基础语法 Java标识符 ...

  9. Python全栈最全学习之路-Python基础(七)

    面向对象初级 一.面向对象介绍 思考一:在之前学习的基础上,已经能够处理实现很多功能,比如我们可以定义一个关于人相关的内容,但是如果要表示很多人该怎么办呢? 加粗样式面向对象介绍 name = '不动 ...

最新文章

  1. oracle表空间 unifor,Oracle 表空间的监控
  2. TCP全局同步问题发生的原因
  3. 四则运算3(二柱子同学的第三炼狱)
  4. [webpack3.8.1]Guides-4-Output Management(输出管理)
  5. 串口工具securecrt_SecureCRT配置华为交换机部分命令
  6. ASP.NET企业开发框架IsLine FrameWork系列之三--七种武器
  7. 关于DPM(Deformable Part Model)算法中模型结构的解释
  8. 数据处理--One Hot Encoding
  9. 程序员穿衣是怎么变得越来越丑的
  10. VC++中多线程学习(MFC多线程)一(线程的创建、线程函数如何调用类成员呢?如何调用主对话框的成员?、MFC中的工作线程和界面线程的区别)
  11. 别瞎写工具类了,Spring自带的这些他不香麽?
  12. C#-WinForm-ListView-表格式展示数据、如何将数据库中的数据展示到ListView中、如何对选中的项进行修改...
  13. Graphpad prism8
  14. Java驼峰原则_Java:标识符规则_驼峰原则
  15. VMware Workstation 12 pro + 激活码+VMware Workstation 10 + 激活码
  16. java计算机毕业设计网上书城网站源码+系统+数据库+lw文档+mybatis+运行部署
  17. 阿里技术专家十五问,真题面试刀刀见肉,走进面试间(答案解析)
  18. 【干货】如何利用 pandas 批量合并 Excel?
  19. 企业微信oauth认证_OAuth验证接口
  20. 电商大数据应用之用户画像

热门文章

  1. 安卓手游内存脚本开发!30岁以后搞Android已经没有前途?Android岗
  2. 【K8s】什么是Pod?Pod的调度与控制器
  3. 线程池的五种状态详解
  4. 如何利用input标签添加语音录入功能
  5. LEETCODE | PYTHON | 724 | 寻找数组的中心下标
  6. 技术解读 一维码,二维码,zxing
  7. 多传感器融合中的时间硬同步1-论文阅读
  8. 普中科技stc89c52rc单片机烧写失败
  9. hx711基准电压_hx711基本原理讲解
  10. 模拟实现strstr函数,通俗易懂!!!