Dynamo批量設置Revit啓動視圖

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>

好了,今天的分享就到這裏了,小夥伴們快去嘗試吧~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章