Hello 大家好!我是九哥~
一年忙兩次,每次忙半年,公衆號已經快徹底斷更了,今天臨時補一篇,通過 Dynamo 批量設置 Revit 的啓動視圖爲三維視圖。
之前呢,我們已經講過後臺打開多個文件的邏輯,這裏就不過多贅述了,見文章《Dynamo 批量修改多文件項目基點參數》。
獲取三維視圖
第一個點呢,就是獲取文件的三維視圖,我們先來看看 API 手冊。先來搜搜 ThreeD 試試,你會發現搜到是 ViewType 的枚舉,那麼是不是我們只要找到 ViewType 是 ThreeD 的就可以了呢?
可是一測試,發現並不是那麼回事,裏面還有點別的東西,譬如 Template 視圖樣板,這個並不是我們想要的。如何過濾掉視圖樣板呢,經過查詢,在 View 的屬性裏面,可以找到 IsTemplate 的屬性,如下圖:
那麼,只要獲取所有視圖,然後過濾掉視圖樣板,再獲取視圖類型是 ThreeD 的就好了,於是就可以寫一個自定義函數了:
def getThreeDView(doc):
views = FilteredElementCollector(doc).OfClass(View).ToElements()
threeD = []
for i in views:
if not i.IsTemplate:
if i.ViewType == ViewType.ThreeD:
threeD.append(i)
else:
continue
return threeD[0]
設置啓動視圖
我們接着搜索 StartingView,很容易就能找到 StartingViewSettings 相關的方法,其中有個屬性 ViewId 是可 get 可 set 的,就是我們需要的:
然後我們就可以先獲取項目的啓動視圖,再賦予新的啓動視圖即可:
最後附上完整代碼和節點截圖:
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
import Autodesk
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = doc.Application
filePath = IN[0]
options = OpenOptions()
options.DetachFromCentralOption = DetachFromCentralOption.DetachAndPreserveWorksets
def getThreeDView(doc):
views = FilteredElementCollector(doc).OfClass(View).ToElements()
threeD = []
for i in views:
if not i.IsTemplate:
if i.ViewType == ViewType.ThreeD:
threeD.append(i)
else:
continue
return threeD[0]
typelist = list()
view = []
for i in filePath:
modelPath = ModelPathUtils.ConvertUserVisiblePathToModelPath(i)
bDoc = app.OpenDocumentFile(modelPath, options)
v = getThreeDView(bDoc)
s = StartingViewSettings.GetStartingViewSettings(bDoc)
t = Transaction(bDoc,'設置啓動視圖')
t.Start()
s.ViewId = v.Id
t.Commit()
typelist.append(bDoc.Close(IN[1]))
OUT = typelist</pre>
好了,今天的分享就到這裏了,小夥伴們快去嘗試吧~