前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Revit二次开发之通过过滤器获取元素(第六期)

Revit二次开发之通过过滤器获取元素(第六期)

作者头像
一席青衣卧龙城
发布2022-04-21 12:04:51
1.2K0
发布2022-04-21 12:04:51
举报
文章被收录于专栏:Revit二次开发

上一期我们讲了如何通过UI界面的进行元素的选择,但很多时候我们希望插件能够快速的获取元素并进行相对应的操作,省去人工的麻烦,毕竟我们共同拥有一个毛病——懒,所以这一期我们就讲讲过滤器的用法。(小编码了半天结果被浏览器那好家伙给糟蹋了,可惜了那篇文章。)


有部分粉丝说不是看得很懂,所以小编就想换个方式写文章,把代码拆开讲。

获得元素的办法:

创建一个收集器(Collector)

代码语言:javascript
复制
FilteredElementCollector fil = new FilteredElementCollector(doc);

这里举个栗子: 你妈刚从超市买了过年要吃的蚕豆和绿豆,结果被你个混小子打破袋子,全都掉在地上混在一起,你妈要你马上给她整理好,你天资聪慧不想一颗一颗去捡,想了一个好办法就是用筛子筛选出来,那么我们要先把散落在地上的大豆和绿豆用簸箕扫起来,收集器在这里就是簸箕的作用,把散落在doc的构件收集起来装在fil这个容器里。

创建一个过滤器

代码语言:javascript
复制
ElementClassFilter el = new ElementClassFilter(typeof(Wall));(类过滤器)

过滤器就是我们的筛子,可以用来筛选蚕豆和绿豆,留下你想要的。当然筛子的种类有多种多样,我们的API同样提供了多种筛子。 ElementCategoryFilter eld = new ElementCategoryFilter(BuiltInCategory.OST_Doors);(类别过滤器) 过滤好了以后,要拿出来你需要的东西,那么我们需要进行获取。 (1)调用 fil.WherePasses( ); fil.WherePasses(el);这样我们就获取了收集器fil中的墙的类型。

fil2.WherePasses(el2);我们获取了收集器fil2里的所有的门。

有些人可能会有疑问,或者会犯这种错误:在同一个收集器里调用两次.WherePasses( ),这会造成一个问题你所取得的构件是0个。因为收集器你筛选一遍获得墙之后,你再去筛选就只剩下墙了,你不可能再去筛选出来门。可你能从墙里再筛选出来叠层墙。这就像你在猪圈里能找到猪,在猪里能找到小黑猪,但你肯定找不到驴,是一个道理。(可能比喻不够恰当,但就是这个理。)

(2)利用逻辑过滤器

代码语言:javascript
复制
  ElementClassFilter el = new ElementClassFilter(typeof(FamilyInstance));(过滤出族实例)
            ElementCategoryFilter eld = new ElementCategoryFilter(BuiltInCategory.OST_Windows);(过滤出窗户)

利用逻辑过滤器来过滤族实例里的窗户:

代码语言:javascript
复制
            LogicalAndFilter door = new LogicalAndFilter(el, eld);

(3)of的简便方法

利用of来获取墙:

代码语言:javascript
复制
  fil.OfClass(typeof(Wall));

利用of来获取窗户:

代码语言:javascript
复制
  fil.OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Windows);

我们可以发现利用of的简便方法可以很快很简单的取得想要的元素,把好几行代码一下子省略成了一行。所以我推荐大家用of的简便方法来写代码,因为我们都有一个特点——懒。科技之所以会进步是有我们这么一群懒人的存在吧。

代码的运行效果我就不演示啦,小伙伴们自己去尝试吧!


一纸清墨书过往,谁人勘破这离殇。

精讲Revit二次开发,望与君交。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-02-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 精讲Revit二次开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档