Revit二开--过滤器之筛选过滤器

Revit二开–过滤器之筛选过滤器

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

  • 快速过滤器 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 就是你要过滤的墙和楼板了。


在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章