Revit API 查詢房間內構件

2021-08-14 06:54:06 字數 1915 閱讀 5237

需求:算量時裝飾等類的構件需統計房間資訊,水電等類的構件統計所在系統。

主要方法:得到房間solid,然後通過solid過濾出與其相交的構件。從而判斷構件所在房間,跨房間的構件通過窗體顯示出來,由使用者判斷所在房間。

首先,api中有個內建引數為builtinparameter.elem_room_name,可以直接獲取房間名稱。目前來看,普通族可以獲取的此引數,而牆體、水管等系統族沒有此引數。而且如果是跨房間構件,該引數為空,其可信度較高。

接下來,獲取房間邊界。可以通過boundarysegment獲取到想要的curve及elementid。房間邊界包括四種構件型別:

房間中心的牆體需要在屬性中,將房間邊界屬性設定為false,否則將被看做是房間邊界。對比效果如圖1所示:

在放置房間前,通過設定「房間計算面積」(圖2所示)選項,可以改變房間邊界的位置。

該設定在api中對應的列舉為:spatialelementboundarylocation enumeration。具體說明如圖3所示:

如果不設定的話,預設的應該是finish,因為也要查詢牆體中的構件,這樣可能導致丟東西,所以要設定為center。對比圖由圖4所示:

獲取邊界:

var boundrylistlist = room.getboundarysegments(new spatialelementboundaryoptions() );

建立房間拉伸體:

var high = room.get_parameter(builtinparameter.room_upper_offset).asdouble();

var low = room.get_parameter(builtinparameter.room_lower_offset).asdouble();

var solid = geometrycreationutilities.createextrusiongeometry(listcurveloop, xyz.basisz, high - low);

需要注意的是:如果建立拉伸體時,必須確保curveloop是閉合的,而通過房間邊界獲取的curve可能閉合,需要單獨處理下,確保其是閉合的。

後來查詢資料時才得知還有另一種方法,可以通過spatialelementgeometrycalculator直接獲取房間的solid,**如下:var calculator = new spatialelementgeometrycalculator(doc, new spatialelementboundaryoptions() ));var solid= calculator.calculatespatialelementgeometry(room)?.getgeometry();

得到solid後,就可以通過elementintersectssolidfilter過濾出相交構件後,即可篩選出想要的構件:

var list = new filteredelementcollector(doc).whereelementisnotelementtype().wherepasses(new elementintersectssolidfilter(solid)).tolist();

如果對準確性要求不高的話,還可以直接通過構件location獲取到座標進行判斷:

room.ispointinroom();

doc.getroomatpoint();

Revit API建立乙個拷貝房間內物件布局命令

本課程演示建立乙個拷貝房間內物件布局命令,完整演示步驟和 這個命令把選中房間內的物件複製到其它選中的乙個或多個房間中,而且保持與源房間一致的相對位置。通過本講座使聽眾知道建立乙個二次開發程式很簡單,建立乙個實用的命令也很快。複製房間 transactionattribute autodesk.rev...

Revit API 日誌檔案 journal

journal 是 revit 乙個非常神奇的功能。當你在操作 revit 的時候,實際上,revit 會默默地把你的操作變成程式。而這個程式,可以回放。關於日誌檔案 日誌檔案可以捕捉從軟體啟動到停止這段時間內,軟體在 revit 會話期間所執行的操作。這些文字檔案可用來解決該軟體的技術問題。每次使...

近幾年Revit API英文講座

下面是各個講座錄影的介紹 revit 2012 webcast revit 2012 api updates may 19th,2011 revit 2011 webcast revit api may 20th,2010 webcast revit api what s new in 2011 r...