Dynamo批量修改多文件項目基點參數(shù)

Hello 大家好!我是九哥~
? ? ? ?前幾天群里有個小伙伴,咨詢了我一個問題:如何批量修改多個 Revit 文件的項目基點?


? ? ? ? ? 本來是想幫忙改改程序,奈何打開以后,我看到了無數(shù)的節(jié)點和連線,而且這個問題,主要是因為 Transaction 的問題,代碼應(yīng)該更容易一些~
? ? ? ? ?那么我們就來一起解決下這個,本次教程呢,主要是講解如何完全通過代碼來解決這個事,最后你會發(fā)現(xiàn),用代碼解決這個事,就會變得超級簡單了~
一、獲取 Revit 項目文件
? ? ? ? ? 第一步比較簡單,用自帶的幾個節(jié)點一連就好,如下圖,我這里為了便于多次測試,把帶 “000” 的文件過濾了一下:

二、后臺打開 Revit 文件
? ? ? ? 我們打開 API 手冊,搜索 Application,能夠找到如下三種方法,我們選擇按路徑和選項打開文件:


? ? ? ? 大意呢,就是需要一個模型路徑和打開選項,我們分別看下。
(1)字符串路徑轉(zhuǎn)換為 ModelPath
? ? ? ? 首先我們需要將字符串的文件路徑轉(zhuǎn)化為 ModelPath,在 API 手冊里搜索 ModelPathUtils,就能找到相關(guān)的轉(zhuǎn)換方法,我們選擇ConvertUserVisiblePathToModelPath() 方法:

? ? ? ? ?基本代碼如下:
(2)打開選項
? ? ? ? 在第二步的 Application 方法下,直接點擊 OpenOptions 即可跳轉(zhuǎn)相關(guān)頁面:

? ? ? ? ?這里重點關(guān)注下面這個選項,是否分離中心文件:

? ? ? ? 繼續(xù)點進去,可以看到DetachFromCentralOption 的枚舉:


? ? ? ? 這里我就簡單選擇第二個,打開并分離中心文件,實際按需選擇即可。代碼如下:
三、獲取項目基點
? ? ? ? 這里用到 System.Enum.ToObject 方法,大家記住即可,就不過多講解了,用此方法將輸入的 Category 轉(zhuǎn)換為 BuiltInCategory。
? ? ? ? 然后就可以用過濾器,過濾出所需的圖元了,代碼如下:
四、開啟和關(guān)閉時事務(wù)
? ? ? ? 由于我們要更改項目基點的參數(shù),開啟事務(wù)是必須的,很多小伙伴都會用網(wǎng)上萬能模板里提供的 Dynamo 開啟和關(guān)閉事務(wù)方法,這里呢,我就直接調(diào)用 API 的方法了,可以參考之前的文章《如何讓撤銷欄顯示 Dynamo 的具體操作內(nèi)容》,介紹了 Transaction 相關(guān)內(nèi)容。
五、解鎖和鎖定項目基點
? ? ? ? 大多數(shù)情況下,Revit 默認的項目基點都是鎖定狀態(tài)的,這樣如果我們用 Dynamo 設(shè)置項目基點參數(shù),是無法完成的,會提示你圖元被鎖定。
? ? ? ?在 API 手冊中直接搜索 Pinned 就能找到圖元鎖定的方法,可 get 可 set,如下圖:

? ? ? ? 那么我們就可以先解除鎖定,在設(shè)置完參數(shù)以后再給他鎖上,代碼如下:
六、設(shè)置項目基點參數(shù)
? ? ? ? 這里呢,我也就簡單寫了,直接采用 LookupParameter 的方法,畢竟也不涉及多語言版本等問題,就是演示下思路,只需要寫一個循環(huán)即可,代碼如下:
七、關(guān)閉和保存
? ? ? ? 直接在 API 手冊里搜索 Document,就能看到 Close 的方法,如下圖:

? ? ? ? 到這里我們的程序基本就完成了,如果你想讓程序更完美,可以再加一個 try...except...,來更好的輸出錯誤報告,代碼如下:
? ? ? ?這樣我們本次教程的代碼就寫完了,最后附上完整的代碼和節(jié)點截圖,如下:

tips:
? ? ? ? 注意,由于我這里用的 LookupParameter 方法設(shè)置的參數(shù),所以就涉及 Revit 內(nèi)部單位問題,這里我就沒做處理,直接用 Dynamo 的單位轉(zhuǎn)換節(jié)點了,如下圖:
? ? ? ? 好了,今天的教程就到這里了,小伙伴們快去嘗試吧~