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 就是你要過濾的牆和樓板了。


在這裏插入圖片描述

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