您好,登錄后才能下訂單哦!
今天小編給大家分享一下Revit如何通過過濾器獲取元素的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
獲得元素的辦法:
1、創建一個收集器(Collector)
FilteredElementCollector fil = new FilteredElementCollector(doc);
這里舉個栗子:
你媽剛從超市買了過年要吃的蠶豆和綠豆,結果被你個混小子打破袋子,全都掉在地上混在一起,你媽要你馬上給她整理好,你天資聰慧不想一顆一顆去撿,想了一個好辦法就是用篩子篩選出來,那么我們要先把散落在地上的大豆和綠豆用簸箕掃起來,收集器在這里就是簸箕的作用,把散落在doc的構件收集起來裝在fil這個容器里。
2、創建一個過濾器
ElementClassFilter el = new ElementClassFilter(typeof(Wall));(類過濾器)
過濾器就是我們的篩子,可以用來篩選蠶豆和綠豆,留下你想要的。當然篩子的種類有多種多樣,我們的API同樣提供了多種篩子。
ElementCategoryFilter eld = new ElementCategoryFilter(BuiltInCategory.OST_Doors);(類別過濾器)
過濾好了以后,要拿出來你需要的東西,那么我們需要進行獲取。
(1)調用 fil.WherePasses( );
fil.WherePasses(el);這樣我們就獲取了收集器fil中的墻的類型。
fil2.WherePasses(el2);我們獲取了收集器fil2里的所有的門。
有些人可能會有疑問,或者會犯這種錯誤:在同一個收集器里調用兩次.WherePasses( ),這會造成一個問題你所取得的構件是0個。因為收集器你篩選一遍獲得墻之后,你再去篩選就只剩下墻了,你不可能再去篩選出來門。可你能從墻里再篩選出來疊層墻。這就像你在豬圈里能找到豬,在豬里能找到小黑豬,但你肯定找不到驢,是一個道理。(可能比喻不夠恰當,但就是這個理。)
(2)利用邏輯過濾器
ElementClassFilter el = new ElementClassFilter(typeof(FamilyInstance));(過濾出族實例)
ElementCategoryFilter eld = new ElementCategoryFilter(BuiltInCategory.OST_Windows);(過濾出窗戶)
利用邏輯過濾器來過濾族實例里的窗戶:
LogicalAndFilter door = new LogicalAndFilter(el, eld);
(3)of的簡便方法
利用of來獲取墻:
fil.OfClass(typeof(Wall));
利用of來獲取窗戶:
fil.OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Windows);
以上就是“Revit如何通過過濾器獲取元素”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。