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>
好了,今天的分享就到这里了,小伙伴们快去尝试吧~