revit二次开发——过滤器2.筛选过滤器

通过这中过滤器,可以从整个文档中或者从文档中的一个视图 筛选元素。
这个过滤器又可以分为

  • 快速过滤器 ElementQuickFilter
  • 慢速过滤器 ElementSlowFilter
  • 逻辑过滤器 ElementLogicalFilter

这三种过滤器又可以细分为多种

1.快速过滤器
快速过滤器不在内存中展开元素细节,筛选速度较快。
-快速过滤器 共16种

BoundingBoxContainsPointFilter
BoundingBoxIntersectsFilter
BoundingBoxIsInsideFilter
ElementCategoryFilter
ElementClassFilter
ElementDesignOptionFilter
ElementIsCurveDrivenFilter
ElementIsElementTypeFilter
ElementMulticategoryFilter
ElementMulticlassFilter
ElementOwnerViewFilter
ElementStructuralTypeFilter
ElementWorksetFilter
ExclusionFilter
ExtensibleStorageFilter
FamilySymbolFilter
我想过滤当前文档中的所有墙,怎么做呢。
案例如下:


	  ElementClassFilter filter= new ElementClassFilter(typeof(Wall));
      FilteredElementCollector collector = new FilteredElementCollector(doc);
      collector.WherePasses(filter);
	  var walls = collector.Cast<Wall>().ToList();
	  

那么代码中的walls 就是你要获取的所有的墙了。

2.慢速过滤器
-慢速过滤器 共18种

RoomFilter
RoomTagFilter
AreaFilter
AreaTagFilter
CurveElementFilter
ElementIntersectsFilter
ElementLevelFilter
ElementParameterFilter
ElementPhaseStatusFilter
FamilyInstanceFilter
SpaceFilter
SpaceTagFilter
PrimaryDesignOptionMemberFilter
FamilyStructuralMaterialTypeFilter
StructuralInstanceUsageFilter
StructuralMaterialTypeFilter
StructuralWallUsageFilter
SelectableInViewFilter
慢速过滤器主要是用来筛选一些比较特殊的元素,例如房间空间等 ;还能找到与特定元素相交的元素

例1:筛选所有的房间


	  RoomFilter rfilter = new RoomFilter()
	  FilteredElementCollector collector = new FilteredElementCollector(doc);
      collector.WherePasses(rfilter);
      var rooms = collector.Tolist();
      

获取的rooms 就是我们要获取的房间了。

例2:找到与某个元素相交的元素
到这里不得不讲一下 ElementIntersectsFilter 他又分为

——ElementIntersectsSolidFilter
——ElementIntersectsElementFilter

所以这里我们用ElementIntersectsElementFilter 来过滤指定元素
代码如下

	  var elem = sel.PickObject().GetElement(doc);
	  ElementIntersectsElementFilter filter= new ElementIntersectsElementFilter(elem);
      FilteredElementCollector collector = new FilteredElementCollector(doc);
      collector.WherePasses(filter);
	  var targets = collector.ToList(); //targets 就是与elem 相交的元素s

类似的 ElementIntersectsSolidFilter 可以自己试一下。

3.逻辑过滤器
其中逻辑过滤器ElementLogicalFilter 分为
——LogicalAndFilter
——LogicalOrFilter

如果既想获取文档中的楼板 又想 获取文档中的墙,怎么做呢?
那就得用到逻辑过滤器了,用逻辑或过滤器LogicalOrFilter。

案例如

	//首先创建两个单独的过滤器
	ElementClassFilter wallfilter = new ElementClassFilter(typeof(Wall));
	ElementClassFilter floorfilter = new ElementClassFilter(typeof(Floor));
	//然后用逻辑或过滤器将以上两个过滤器组合
	var andfilter = new LogicalOrFilter(wallfilter,floorfilter);
	FilteredElementCollector collector = new FilteredElementCollector(doc);
	//应用过滤器
    collector.WherePasses(filter);
    var wallandfloor = collector.ToList();

wallandfloor 就是你要过滤的墙和楼板了。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值