api提供了移動元素的方法,可以把乙個或者幾個元素從乙個地方移動到另乙個地方,
revit api提供elementtransformutils類下的
moveelement(document document, elementid elementtomove, xyz translation)
以及moveelements(document document, icollectionelementstomove, xyz translation)
使用起來比較簡單,但是有幾個需要注意的地方:
①移動方法不能遠離標高向上或者向下移動乙個基於標髙的元素。也就是說,當元素是基於標髙的,則不能改變z軸座標值,但可以移動元素到同一標高內的任意位置。例如, 如果在座標點(0, 0, 0)新建立了乙個柱子,然後移動它到新的座標點(10, 20, 30),這個柱 子將會移動到(10, 20, 0),而不是(10, 20, 30)。
②當移動乙個元素的時候,其他的元素也許會跟著移動。例如,如果—個牆上有窗戶,這個牆移動了,窗戶也會跟著移動。移動元素集的方法也會出現這種情況。例如,移動幾根柱子的時候,所有與柱子連線著的梁也會跟著被移動或者會被改變長度。
③如果元素被釘住,即pinned屬性返回值是true,則表明這個元素不能被移動。如果仍然使用moveeiement方法來移動這個元素,api就會丟擲invalidoperationexception提示使用者不能移動被釘住的元素。
只外,還可以通過location類來移動乙個元素。location類提供了移動和旋轉的方法,而其子類提供了更多的location資訊和屬性控制,如locationpoint類和 locationcurve類。如果乙個元素的location可以轉型為locationcurve或者 locationpoint,就可以直接移動這根線或者點到新的座標點了。
wall wall = element as wall;
if (null != wall)
上面的方法中,向量 (10, 20, 0)並不是目標座標值, 而是乙個偏移向量。
另外,locationcurve 的 curve 屬性或者 locationpoint 的point屬性也可以用來移動乙個元素。
curve屬性可以用來移動基於曲線的元素到精確的座標點。 牆、梁、支撐等都通常用這個屬性改變元素的長度。
示例**:
using(transaction tran = new transaction(projectdoc, "change the wall's curve with a new
location line."))
利用locationpoint的point屬性,可以設定元素的物理位置,如:
Revit二次開發 過濾元素
在revit二次開發中,過濾指定型別元素的需求是很常見的,比如說獲取標高 軸網 三維檢視 familysymbol等等,於是乎 元素過濾服務 public static class filterelementservice filteredelementcollector collector vie...
Revit二次開發 隱藏遮擋元素
背景 衝突檢測完成後需要顯示相互碰撞的元素並截圖,因為會有房子 地面等等大的模型,所以經常會遇到元素被遮擋。解決思路 1 將專案的 視覺樣式 改為 隱藏線 模式 選中截圖時更清晰的顯示 設定檢視方向為俯視 從上往下看 2 建立一條模型線用於檢測都有哪些遮擋元素,並將元素隱藏。3 截圖後再把隱藏的元素...
Revit二次開發 初學
前言 由於工作需要,近期開始學習revit二次開發知識。學習的同時將學習過程與小夥伴們一起分享,希望後來的小夥伴在看到我的學習筆記的時候有所幫助。說明由於revit的版本在不斷更新中,所以我在學習revit的時候選擇了從revit自帶的幫助檔案開始學習,不同版本的revit,就看相應的help檔案。...