Revit 物件高效過濾

2021-07-23 12:38:25 字數 3009 閱讀 8063

filteredelementcollector 

步驟:1.var walltypecollector1 = new filteredelementcollector(_doc);

2.walltype.wherepasses(new elementclassfilter(typeof(walltype)));

3.ilistwalltypes1 = walltypecollector1.toelement();

確定過濾範圍:

1. filteredelementcollector(document)  對乙個文件中進行過濾

2. filteredelementcollector(document, elementid)只對給定檢視中可見的物件過濾

3. filteredelementcollector(document, icollection>)對乙個物件集合進行過濾

filteredelementcollector的快捷過濾方式:

ofclass(type)、ofcategory(buildlncategory)、ofcatoryid(elementid)、ownedbyview()

containedindesignoption(elementid designoptionid) ...

舉例:filteredelementcollector collector = new filteredelementcollector(document);

icollectionlevels = collector.ofclass(typeof(level)).toelements();  //level 樓層  .ofclass(***).ofcategory().***  可以併聯

filteredelementcollector.wherepasses(elementfilter)

舉例:elementclassfilter familyinstancefilter = new elementclassfilter(typeof(familyinstance));

elementcategoryfilter doorscategoryfilter = new elementcategoryfilter(builtincategory.ost_doors);

logicalandfilter doorinstancesfilter = new logicalandfilter(familyinstancefilter, doorscategoryfilter);

filteredelementcollector collector.wherepasses(doorinstancesfilter ).toelement();

filteredelementcollector.firstelement()返回第乙個物件 filteredelementcollector.firstelementid()返回第乙個物件的id

獲得遍歷器來訪問全部的物件:

getelementiditerator/getelementiterator

舉例:filteredelementcollector roomiditr = collector.getelementiditerator();

roomiditr.reset();

while(roomiditr.movenext())

直接獲得結果列表:

toelementids()/toelements()

doorinstancesfilter 實現了ienumerable介面,可以用foreach來遍歷。

獲取選擇集:

sel.elements.clear();

foreach(element elem in collector)

sel.elements.add(elem) 

.net linq:對集合類進行過濾

//linq query

var walltypeelems1 = from element in walltypecollector1 where element.name.equals(walltypename) select element;

快速過濾條件: elementclassfilter、elementcategoryfilter

慢速過濾條件:familyinstancefilter、areafilter

邏輯過濾條件,組合多個過濾條件:logicalandfilter 邏輯與 、 logicalorfilter 邏輯或 

均用wherepasses新增。

空間過濾方式:

1.過濾與物件相交的其他物件:filteredelementcollector collector = new filteredelementcollector(doc);

elementintersectselementfilter elementfilter = new elementintersectselementfilter(column,false);

collector.wherepasses(elementfilter);

2.過濾與solid相交的物件:filteredelementcollector collector = new filteredelementcollector(doc);

Revit 高效除錯 內部世界

除錯工具 revit add in manager 在external tool 中載入二次開發的.dll。其中有四種載入命令的模式 均是事物性的 1.manual mode 手動更新模式 2.manual mode,faceless 執行上次執行的命令,當更改 後,可以用此種模式快速執行除錯程式 ...

Revit開發之元素過濾

revit 二次開發 中提供了乙個filteredelementcollector 類,通過這個類我們可以方便的獲取到 我們想要獲取的 這個類返回的是乙個 的集合,他有 種建構函式 1.filteredelementcollector document 這個是返回傳入document中的所有elem...

Revit二次開發之「遍歷過濾物件」

遍歷過濾物件,得到想要的物件,是revit二次開發乙個重要的操作。revit物件的標識 revit物件的類名稱 直接可以用類名唯一標識出來 如 wall,walltype,floor,floortype.不同物件,但是共用乙個類 familyinstance,familysymbol,family,...