過濾器分為過濾器和選擇過濾器,主要用來批量選擇Revit文檔里的我們所需要的圖元。
下面我們開始演示過程,首先建立一個基本的接口環(huán)境

一.過濾器
??? 1.? FilteredElementCollect:被過濾元素收集器,得到的是需要過濾的元素,而不是過濾后剩下的元素
??????? //建立收集器
?????? FilteredElementCollector collector = new FilteredElementCollector(doc );
???????? 2.? ElementClassFilter:元素類過濾器,根據(jù)類(族,族類別,族實例)對Revit文檔中的元素進行過濾,獲取所需傳入類的元素
???? 利用元素類過濾器對收集器進行過濾
? ?? ElementClassFilter classFiter = new ElementClassFilter(typeof(Wall));
? ?? collector = collector.WherePasses(classFiter);

???? 最后通過把圖元轉(zhuǎn)換為id來提取出所需元素。然后通過Revit----附加元素—外部工具—add in Manager ——run來運行,成功。

???????? 3.? ElementCategoryFilter:元素類別過濾器,所有基類為element類的元素都有一個category屬性用于表示類所屬的類別。
利用元素類別過濾器對收集器進行過濾
ElementCategoryFilter categoryFilter = new ElementCategoryFilter(BuiltInCategory.OST_Walls);
collector = collector.WherePasses(categoryFilter);

Category的名稱可以通過如下方式查看,框出所選圖元——附加工具——Revit Lookup——snoop current selection ,得到如下圖

運行成功。

二.選擇過濾器
主要是用戶在執(zhí)行命令過程中,讓用戶自行選擇所要的構(gòu)件或者構(gòu)建集。
首先建立一個新類public class WallSelectionFilter : ISelectionFilter,并且實現(xiàn)接口,選擇所需要選擇構(gòu)建的名稱


在主函數(shù)里面添加ISelectionFilter wallFilter = new WallSelectionFilter();? ??
??? ? ?? ? IListelementList = uidoc.Selection.PickObjects(ObjectType.Element, wallFilter, "請選擇墻");
生成解決方案,框選所需要選擇的部分,成功。
