[英]python for revit - collect views in active view
我正在嘗試在pyRevit腳本中使用FilteredElementCollector來收集活動視圖中的所有視圖(截面,立面,平面標注等)。
from pyrevit.framework import clr
from pyrevit import revit, DB
clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.DB import *
from pyrevit import forms
doc = __revit__.ActiveUIDocument.Document
view = doc.ActiveView
AllStuff = FilteredElementCollector(doc,doc.ActiveView.Id).WhereElementIsNotElementType().ToElements()
AllViews = []
try:
for x in AllStuff:
if "View" in x.Category.Name:
AllViews.append(x)
這將返回一些視圖,但不是全部視圖。 例如,包括了一些部分,但沒有包括其他部分,我不知道為什么。
如果我添加“ .OfCategory(BuiltInCategory.OST_Views)”,我什么也收不到。 我是否需要將其細分為幾個更具體的類別? 謝謝你的幫助。
FilteredElementCollector(doc,doc.ActiveView.Id)中沒有任何視圖,您可以通過執行以下操作查看它:
for el in FilteredElementCollector(doc, doc.ActiveView.Id):
print(el)
有一個不屬於OST_Views類別的元素,即使它與您的視圖具有相同的名稱,也不是一個視圖。 要查看此內容,可以使用RevitLookUp 。
通過查看VIEW_FIXED_SKETCH_PLANE BuiltInParameter,我找到了一種檢索實際視圖的方法(目前我不知道其他任何方法),該參考指向SketchPlane,后者將實際視圖作為Element.OwnerViewId引用。 然后,您可以確保該元素屬於View類:
for el in FilteredElementCollector(doc,doc.ActiveView.Id):
sketch_parameter = el.get_Parameter(BuiltInParameter.VIEW_FIXED_SKETCH_PLANE)
# If parameter do not exist skip the element
if not sketch_parameter:
continue
view_id = doc.GetElement(sketch_parameter.AsElementId()).OwnerViewId
view = doc.GetElement(view_id)
if isinstance(view, View):
print(view)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.