Python для Revit - собирать представления в активном представлении - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь использовать 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 Ответ

0 голосов
/ 04 февраля 2019

Нет представления в FilteredElementCollector (doc, doc.ActiveView.Id), вы можете увидеть его, выполнив:

for el in FilteredElementCollector(doc, doc.ActiveView.Id):
    print(el)

Существует элемент, который не относится к категории OST_Views и не является представлениемдаже если оно имеет то же имя, что и ваш взгляд.Чтобы увидеть это, вы можете использовать RevitLookUp .Lookup

Я нашел способ получить фактическое представление (в настоящий момент я не знаю другого способа), посмотрев на 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)
...