但Revit只能根據族類別過濾圖元,而Grasshopper可以更精確地按參數過濾,並且在過濾完成後,直接創建選擇集,需要時直接在Revit中重新加載選擇集。
例如,要過濾註釋參數為“房間”的所有墻,可以先選擇所有墻,然後根據參數進行過濾:
同時創建壹個參數過濾器,將“Annotation”的參數值過濾為“Room”,然後通過壹個“LogicalAndFilter”節點將兩個過濾器合並:
這樣,通過“QueryElements”節點,很容易根據前面的兩個過濾器過濾出所需的墻:
這壹步很順利,但是當妳想創建壹個選擇集的時候,妳發現在節點庫中沒有現成的節點來創建選擇集。這時候妳只能查詢API,看看是否可以用代碼解決:
所以打開RevitAPI手冊,搜索ionFilterElement的方法,我們可以看到:
找創建方法很簡單,基礎語法超級簡單,可以直接套用:
selset=ionFilterElement。(文檔,名稱)
但實際寫下來,我發現還是有很多問題需要註意:
壹種是,在創建選擇集時,需要先判斷項目中是否存在同名選擇集,因為存在無法創建的同名選擇集。這裏不需要刪除選擇集,只需要清空選擇,然後就可以把選中的圖元添加進去;
另壹種是新創建的選擇集是空的,需要將選中的圖元添加到其中。使用的方法是:AddSet,語法如下:
如果妳把這兩個問題想清楚了,就可以順利的寫代碼了。完整的代碼如下:
#Copyright(c)2020,九歌bimerimportclrclr . add reference(' system . core ')clr . add reference(' rhino inside . revit ')clr . add reference(' revit API ')clr . add reference(' revitapiui ')。fromSystemimportEnum,actionimportrhinoscriptsyntaxasrsimportrhinoimportrhinoinsideimportgrasshopperfromsgrasshop。KernelimportGH _ runtimemessagelevelasmlfromrinoinside。Re vitimportRevit,Convert#還可以添加擴展方法#這允許調用。ToXXX()轉換器方法clr。importextensions (convert。幾何圖形)。revit對象上的revimeportdbfromutdesk . revit . db import *#。訪問活動文檔對象doc=Revit。ActiveDBDocument#來過濾原語ids=list()ifnotisinstance(E,List): e = [e] else: e = eforeine: ids。append (e.id) itemset = set (ids) #從模型中收集所有現有的篩選器names = list()collector = filterdelementcollector(doc)filters = collector。類的(filterelement)。to元素。selset = false set = Transaction(doc,' create selection set') t.Start()#如果具有該名稱的選擇集已經存在,則刪除其內容以進行過濾filters:If filter . name = = name:filter . clear()selset = filter #創建新的選擇集(如果選擇集不存在)If selset = = false:selset = ionfilterelement。(Doc,Name)#將選定的基本體添加到選擇集try: selset。addset (itemset) out = selset。todsttype(false)except:out = nonet。commit () print (out)這裏有幾個步驟來編寫代碼:
1.收集要添加到選擇集中的圖元並獲得ID列表;
2.獲取模型中的選擇集。
3、判斷模型中的選擇集與待創建的選擇集是否同名;
4.如果存在同名的選擇集,請清空選擇。
5.如果沒有同名的選擇集,則創建壹個新的選擇集。
6.將過濾後的圖元添加到選擇集中。
最後放壹張過濾墻全圖添加選擇集供大家參考:這就是“Revit中創建選擇集和搜索集的方法課程”。看完以上內容,妳對創建選擇集和搜索集有什麽了解嗎?關註了解更多圖文教程“文章”。