Revit过滤器

视频连接v.bimcc.com/course/35/tasks

常用过滤器:过滤器、选择过滤器


一、过滤器

建立一个简单的过滤器实例。

在之前的类库中新建Class3.cs

1.前期的初始化,如图。

2.常用的东西

第一个是过滤后的元素收集器。

第二个是基于Class的过滤器。(class指的是C#中class的概念,如FamilyInstance、Family、FamilySymbol、Wall、Hosts等)

第三个是基于Category的属性的过滤器。


3.在API文档中可以看到收集器的使用方法

第一个是全文件搜索,第二个是全文件的可见元素搜索,第三个是在文档的ICollection集合中搜索。

这里一般用第一个构造方法。

FilteredElementCollector columCollection = new FilteredElementCollector(doc);


4.在API文档中看到过滤器的使用方法

这里用第一个构造方法。

通过查找api,可以看到BuiltInCategory是一个枚举类型,其中每一个Member对应了一种Category。

那怎么把Member和Category对应起来呢?

通过 lookup中的Snoop Current Selection

查看当前选中的FamilyInstance的Category属性。

其中Built-in category属性即为所要的值。

将其复制到代码中:

ElementCategoryFilter columFilter = new ElementCategoryFilter(BuiltInCategory.OST_StructuralColumns);


那么ClassFiter也是类似的方法

ElementClassFilter familyInstanceFilter = new ElementClassFilter(typeof(FamilyInstance));

这里为什么要 CategoryFilter和ClassFilter同时使用呢?

我们最后再讲。


5.将过滤器用到收集器上

columCollection.WherePasses(columFilter).WherePasses(familyInstanceFilter);


//还有一种简便的操作 columCollection.OfCategory(BuiltInCategory.OST_StructuralColumns); 这样不用定义categoryfilter

6.选中的操作

前面添加using Autodesk.Revit.UI.Selection;


//将过滤得到的图元转化为Id

IList<ElementId>elId = new List<ElementId>();

foreach (Element el in columCollection)

{

elId.Add(el.Id);

}

//将图元设置为选中状态

uidoc.Selection.SetElementIds(elId);  


最后生成的插件效果



回到前面的问题

为什么要 CategoryFilter和ClassFilter同时使用


以图中的混凝土柱400x400为例。

在模型中 混凝土柱familyInstance的BuiltInCategory 为OST_StructuralColumns

而项目浏览器中 400x400这个familysymbol的BuiltInCategory 同样为OST_StructuralColumns

而再上层 混凝土柱这个family familycategory中的BuiltInCategory也是 OST_StructuralColumns

所以 图中有8个familyInstance柱子 , 1个familysymbol ,1个family ,只用CategoryFilter过滤器的话会得到10个结果

可以添加测试代码如图


可以看到结果果然是10个。


二、逻辑过滤器

ElementLogicalFilter


其中包括两个过滤器 and和or

LogicalAndFilter
LogicalOrFilter

用法很简单,以and的构造为例

LogicalAndFilter doorInstancesFilter = new LogicalAndFilter(familyInstanceFilter, doorsCategoryfilter);//这里将两个过滤后的集合合并

将两个过滤器写在参数列表里就行了,其他的用法和过滤器相同。

逻辑过滤器用于提高效率,减少wherepasses次数。

三、快/慢速过滤器 ElementQuickFilter/ElementSlowFilter


Revit为了性能考虑只将一部分属性加载进内存。

过滤在内存中这部分属性的是快速过滤器,过滤其他属性的是慢速过滤器。

一般优先用快速过滤器,如果一定要用到慢速,则可以先用快速过滤器缩小过滤范围。


四、选择过滤器

在执行命令的过程中,让用户自行选择构件或构建集。

//创建 WallSelectionFilter 继承自ISelectionFilter 生成默认函数

//AllowElement函数中,添加选择判断部分

主函数部分如图,只有两行

插件运行结果如图。可以看到只能框选到"400x400"的FamilyInstance

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容

  • 1.过滤器 1.1ElementClassFilter​ElementClassFilter的作用是根据类,来过滤...
    Karel_阅读 780评论 0 1
  • Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件...
    牧童遥指2000阅读 4,930评论 0 12
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 过滤器分为过滤器和选择过滤器,主要用来批量选择Revit文档里的我们所需要的图元。 下面我们开始演示过程,首先建立...
    辉呀辉呀骄傲放纵阅读 620评论 6 2
  • 道对秋千说 如果没有你上面佳人 你怎会知道墙外的我 秋千对道说 如果没有墙外的行人 你又怎么会知道墙里的我 只是啊...
    李雨山阅读 309评论 0 2