Revit過濾器

視頻連接v.bimcc.com/course/35/tasks

常用過濾器:過濾器、選擇過濾器


一、過濾器

建立一個(gè)簡單的過濾器實(shí)例。

在之前的類庫中新建Class3.cs

1.前期的初始化,如圖。

2.常用的東西

第一個(gè)是過濾后的元素收集器。

第二個(gè)是基于Class的過濾器。(class指的是C#中class的概念,如FamilyInstance、Family、FamilySymbol、Wall、Hosts等)

第三個(gè)是基于Category的屬性的過濾器。


3.在API文檔中可以看到收集器的使用方法

第一個(gè)是全文件搜索,第二個(gè)是全文件的可見元素搜索,第三個(gè)是在文檔的ICollection集合中搜索。

這里一般用第一個(gè)構(gòu)造方法。

FilteredElementCollector columCollection = new FilteredElementCollector(doc);


4.在API文檔中看到過濾器的使用方法

這里用第一個(gè)構(gòu)造方法。

通過查找api,可以看到BuiltInCategory是一個(gè)枚舉類型,其中每一個(gè)Member對(duì)應(yīng)了一種Category。

那怎么把Member和Category對(duì)應(yīng)起來呢?

通過 lookup中的Snoop?Current Selection

查看當(dāng)前選中的FamilyInstance的Category屬性。

其中Built-in category屬性即為所要的值。

將其復(fù)制到代碼中:

ElementCategoryFilter columFilter = new ElementCategoryFilter(BuiltInCategory.OST_StructuralColumns);


那么ClassFiter也是類似的方法

ElementClassFilter familyInstanceFilter = new ElementClassFilter(typeof(FamilyInstance));

這里為什么要 CategoryFilter和ClassFilter同時(shí)使用呢?

我們最后再講。


5.將過濾器用到收集器上

columCollection.WherePasses(columFilter).WherePasses(familyInstanceFilter);


//還有一種簡便的操作 columCollection.OfCategory(BuiltInCategory.OST_StructuralColumns); 這樣不用定義categoryfilter

6.選中的操作

前面添加using Autodesk.Revit.UI.Selection;


//將過濾得到的圖元轉(zhuǎn)化為Id

IList<ElementId>elId = new List<ElementId>();

foreach (Element el in columCollection)

{

elId.Add(el.Id);

}

//將圖元設(shè)置為選中狀態(tài)

uidoc.Selection.SetElementIds(elId);??


最后生成的插件效果



回到前面的問題

為什么要 CategoryFilter和ClassFilter同時(shí)使用


以圖中的混凝土柱400x400為例。

在模型中 混凝土柱familyInstance的BuiltInCategory 為OST_StructuralColumns

而項(xiàng)目瀏覽器中 400x400這個(gè)familysymbol的BuiltInCategory 同樣為OST_StructuralColumns

而再上層 混凝土柱這個(gè)family familycategory中的BuiltInCategory也是 OST_StructuralColumns

所以 圖中有8個(gè)familyInstance柱子 , 1個(gè)familysymbol ,1個(gè)family ,只用CategoryFilter過濾器的話會(huì)得到10個(gè)結(jié)果

可以添加測試代碼如圖


可以看到結(jié)果果然是10個(gè)。


二、邏輯過濾器

ElementLogicalFilter


其中包括兩個(gè)過濾器 and和or

LogicalAndFilter
LogicalOrFilter

用法很簡單,以and的構(gòu)造為例

LogicalAndFilter doorInstancesFilter = new LogicalAndFilter(familyInstanceFilter, doorsCategoryfilter);//這里將兩個(gè)過濾后的集合合并

將兩個(gè)過濾器寫在參數(shù)列表里就行了,其他的用法和過濾器相同。

邏輯過濾器用于提高效率,減少wherepasses次數(shù)。

三、快/慢速過濾器 ElementQuickFilter/ElementSlowFilter


Revit為了性能考慮只將一部分屬性加載進(jìn)內(nèi)存。

過濾在內(nèi)存中這部分屬性的是快速過濾器,過濾其他屬性的是慢速過濾器。

一般優(yōu)先用快速過濾器,如果一定要用到慢速,則可以先用快速過濾器縮小過濾范圍。


四、選擇過濾器

在執(zhí)行命令的過程中,讓用戶自行選擇構(gòu)件或構(gòu)建集。

//創(chuàng)建 WallSelectionFilter 繼承自ISelectionFilter 生成默認(rèn)函數(shù)

//AllowElement函數(shù)中,添加選擇判斷部分

主函數(shù)部分如圖,只有兩行

,

插件運(yùn)行結(jié)果如圖??梢钥吹街荒芸蜻x到"400x400"的FamilyInstance

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.過濾器 1.1ElementClassFilter?ElementClassFilter的作用是根據(jù)類,來過濾...
    Karel_閱讀 886評(píng)論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,500評(píng)論 19 139
  • 過濾器分為過濾器和選擇過濾器,主要用來批量選擇Revit文檔里的我們所需要的圖元。 下面我們開始演示過程,首先建立...
    輝呀輝呀驕傲放縱閱讀 752評(píng)論 6 2
  • 道對(duì)秋千說 如果沒有你上面佳人 你怎會(huì)知道墻外的我 秋千對(duì)道說 如果沒有墻外的行人 你又怎么會(huì)知道墻里的我 只是啊...
    李雨山閱讀 360評(píng)論 0 2
  • iOS - 將Unity導(dǎo)出的Xcode工程導(dǎo)入到另一個(gè)Xcode項(xiàng)目, 及常見報(bào)錯(cuò) 版權(quán)聲明:本文為轉(zhuǎn)載文章,未...
    五蘊(yùn)盛閱讀 1,070評(píng)論 2 4

友情鏈接更多精彩內(nèi)容