Revit Dynamo: подробное руководство по выбору всех категорий с примерами кода

Revit Dynamo — это мощный инструмент визуального программирования, который позволяет пользователям автоматизировать задачи и совершенствовать рабочие процессы с помощью программного обеспечения Revit Building Information Modeling (BIM). Одной из общих задач является выбор всех категорий в проекте Revit, что может быть полезно для различных сценариев автоматизации. В этой статье мы рассмотрим несколько методов и примеры кода для эффективного достижения этой цели.

Метод 1: использование узла «Все элементы категории».
Один простой подход — использовать узел «Все элементы категории» в Dynamo. Этот узел извлекает все элементы указанной категории в проекте Revit. Чтобы выбрать все категории, вы можете просмотреть список всех доступных категорий и использовать этот узел для сбора всех соответствующих элементов. Вот пример фрагмента кода:

import clr
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
# Get all available categories
categories = doc.Settings.Categories
# Create an empty list to store all elements
all_elements = []
# Iterate through each category and retrieve all elements
for category in categories:
    elements = FilteredElementCollector(doc).OfCategory(category.Id).ToElements()
    all_elements.extend(elements)
# Select all elements
TransactionManager.Instance.EnsureInTransaction(doc)
selection = [element.ToDSType(True) for element in all_elements]
TransactionManager.Instance.TransactionTaskDone()
OUT = selection

Метод 2. Использование свойства «Категории».
Другой метод предполагает использование свойства Categories, доступного в Revit API. Это свойство обеспечивает доступ ко всем категориям в проекте Revit. Вот пример фрагмента кода, демонстрирующий этот подход:

import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import FilteredElementCollector, BuiltInCategory
doc = __revit__.ActiveUIDocument.Document
# Get all available categories
categories = doc.Settings.Categories
# Create an empty list to store all elements
all_elements = []
# Iterate through each category and retrieve all elements
for category in categories:
    if category.AllowsBoundParameters:
        elements = FilteredElementCollector(doc).OfCategory(category.Id).ToElements()
        all_elements.extend(elements)
# Select all elements
selection = [element.ToDSType(True) for element in all_elements]
OUT = selection

Метод 3: использование ElementClassFilter
В Dynamo вы также можете использовать ElementClassFilterдля выбора всех элементов определенной категории. Вот пример фрагмента кода, иллюстрирующего этот метод:

import clr
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument
# Get all available categories
categories = doc.Settings.Categories
# Create an empty list to store all elements
all_elements = []
# Iterate through each category and retrieve all elements
for category in categories:
    if category.AllowsBoundParameters:
        class_filter = ElementClassFilter(category.GetCategory(doc).Id)
        elements = FilteredElementCollector(doc).WherePasses(class_filter).ToElements()
        all_elements.extend(elements)
# Select all elements
selection = [element.ToDSType(True) for element in all_elements]
OUT = selection

В этой статье мы рассмотрели три различных метода выбора всех категорий в проекте Revit с помощью Dynamo. Эти методы обеспечивают гибкость и возможности автоматизации, позволяя пользователям оптимизировать рабочие процессы BIM. Используя предоставленные примеры кода, вы можете легко адаптировать эти методы в соответствии с вашими конкретными требованиями. Автоматизация выбора категорий в Revit с помощью Dynamo позволяет пользователям экономить время и повышать производительность в своих проектах BIM.