Оптимизация кода. Выборка на активном виде

Главная Форумы Задать вопрос Оптимизация кода. Выборка на активном виде

В этой теме 1 ответ, 1 участник, последнее обновление  txt 9 мес., 1 неделя назад.

Просмотр 2 сообщений - с 1 по 2 (из 2 всего)
  • Автор
    Сообщения
  • #7251 Score: 0

    txt
    Модератор
    91 pts

    Есть код, собирающий все элементы по нескольким категориям на активном виде, как его можно оптимизировать?

    import clr
    clr.AddReference(‘RevitAPI’)
    clr.AddReference(‘RevitServices’)
    import Autodesk,RevitServices
    from Autodesk.Revit.DB import *
    from RevitServices.Persistence import DocumentManager
    doc = DocumentManager.Instance.CurrentDBDocument
    a=FilteredElementCollector(doc,doc.ActiveView.Id)
    b=FilteredElementCollector(doc,doc.ActiveView.Id)
    c=FilteredElementCollector(doc,doc.ActiveView.Id)
    d=FilteredElementCollector(doc,doc.ActiveView.Id)
    #
    rooms = ElementCategoryFilter(BuiltInCategory.OST_Rooms)
    walls = ElementCategoryFilter(BuiltInCategory.OST_Walls)
    windows= ElementCategoryFilter(BuiltInCategory.OST_Windows)
    doors = ElementCategoryFilter(BuiltInCategory.OST_Doors)
    #
    rooms=a.WherePasses(rooms).WhereElementIsNotElementType().ToElements()
    walls=b.WherePasses(walls).WhereElementIsNotElementType().ToElements()
    windows=c.WherePasses(windows).WhereElementIsNotElementType().ToElements()
    doors=d.WherePasses(doors).WhereElementIsNotElementType().ToElements()
    #
    OUT=rooms, walls, windows, doors

    #7252 Score: 1

    txt
    Модератор
    91 pts

    Решение Конрода Собона (выбираются все элементы проекта по нескольким категориям):
    # Copyright(c) 2017, Konrad K Sobon
    # @arch_laboratory, http://archi-lab.net
    import clr
    clr.AddReference("RevitNodes")
    import Revit
    clr.ImportExtensions(Revit.Elements)
    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    doc = DocumentManager.Instance.CurrentDBDocument
    # Import RevitAPI
    clr.AddReference("RevitAPI")
    from Autodesk.Revit.DB import *
    import System
    from System import Array
    from System.Collections.Generic import *
    import sys
    pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib'
    sys.path.append(pyt_path)
    try:
    >>>>errorReport = None
    >>>>cat_list = [BuiltInCategory.OST_Rooms, BuiltInCategory.OST_Walls, BuiltInCategory.OST_Windows, BuiltInCategory.OST_Doors]
    >>>>typed_list = List[BuiltInCategory](cat_list)
    >>>>filter = ElementMulticategoryFilter(typed_list)
    >>>>output = FilteredElementCollector(doc).WherePasses(filter).ToElements()
    except:
    # if error occurs anywhere in the process catch it
    >>>>import traceback
    >>>>errorReport = traceback.format_exc()
    # Assign your output to the OUT variable
    if None == errorReport:
    >>>>OUT = output
    else:
    >>>>OUT = errorReport

    чтобы выбрать те же элементы только на активном виде , меняем только одну строку:
    output = FilteredElementCollector(doc,doc.ActiveView.Id).WherePasses(filter).ToElements()

Просмотр 2 сообщений - с 1 по 2 (из 2 всего)

Для ответа в этой теме необходимо авторизоваться.