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>

好了,今天的分享就到这里了,小伙伴们快去尝试吧~

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