Python для Revit - собирать представления в активном представлении
Я пытаюсь использовать FilteredElementCollector внутри моего скрипта pyRevit, чтобы собрать все виды (разрезы, фасады, выноски планов и т. Д.) В активном виде.
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)", я вообще ничего не получу. Нужно ли разбивать его на несколько более конкретных категорий? Спасибо за любую помощь.
1 ответ
В 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)