Расскажу, как можно получать разными способами элементы из модели, чтобы обрабатывать их в скрипте. Например, делаете скрипт для записи толщины стенки воздуховодов, и вам нужно отобрать все воздуховоды из проекта. Или не все, а только с текущего вида. В статье покажу, как это сделать, на примере нодов из Ревита 2021.

Стандартные ноды

В Динамо есть библиотека нодов в группе Revit, в ней есть набор нодов Selection. Здесь почти все варианты того, как мы можем получать элементы из модели.

Всё, конец статьи, расходимся. Но если хотите чуть подробнее...

Все эти ноды можно поделить условно на три группы:

  1. Ноды, которые берут все элементы из модели;
  2. Ноды, которые берут элементы конкретного типа, как правило системные категории,
  3. Ноды, которые позволяют пользователю самому выбрать что-нибудь в интерфейсе.

В своей практике я чаще всего пользуюсь первым вариантом. Второй набор подходит мало, так как в нём в типа архитектурных элементов, с которыми не работаю. Третий набор иногда пригождается, но редко. Давайте всё же посмотрим на все три группы подробнее.

Взять все элементы из модели

Сюда относятся ноды, которые начинаются на «All Elements...», Element Types, Family Types, Sheets и Views. Отдельно есть нод All Elements in Active View, он находится в библиотеке Revit → Views → View.

Часть нодов для получения всех элементов
Нод All Elements in Active View

Мой топ-1 отсюда — это All Elements of Category. То есть данный нод получает все элементы указанной категории по всём проекте. Важно, что это элементы, которые размещены в модели, то есть экземпляры из проекта. Нод не возвращает типоразмеры элементов. Как их вернуть, расскажу позже.

Самый простой вариант вызова состоит из двух нодов:

Первый нод — выпадающий список, где указываем имя категории. Вторым получаем элементы из всего проекта. Если нужно получить элементы нескольких категорий, то можно сделать несколько нодов для выбора категорий, потом объединить их в список и подать на All Elements of Category.

В этом случае добавляется ещё пара нодов. List Create создаёте список из категорий, а List.Flatten — делает список плоским. Читайте статью о списках.

Брать категории из выпадающего списка не очень удачная тема, особенно, когда берёте ноды с загружаемыми категориями. Проблема в том, что эти выпадающие списки могут сбиваться. Вы указали «Арматуру воздуховодов», пользователь открыл скрипт, а в проекте нет элементов этой категории. Поэтому Ревит сбросит значение на что-нибудь другое, получите ошибку. Писал об этом в отдельной статье.

Лучше описывать имена категорий их внутренними именами. Посмотреть их можно в этой таблице на вкладке BuilInCategory Enumeration. Например, нужно мне взять все элементы оборудования в проекте. Иду в таблицу, ищу там оборудование, вижу — OST_MechanicalEquipment. Копирую текст.

Создаю Код блок и в кавычках пишу имя категории. Далее подаю на нод, который вернёт категорию по её внутреннему имени, а дальше наш нод для получения элементов. Это железобетонная конструкция, которая не сломается, если вдруг в модели не окажется оборудования. Будет на выходе пустой список и всё.

Нод All Elements if Category in View работает так: подаёте категорию и вид, получаете список элементов этой категории на указанном виде. Подобные ноды удобны, когда пишем скрипт для запуска в Проигрывателе Динамо. В нём пользователь сможет выбрать категорию и вид из выпадающих списков и получит элементы в обработку.

Нод All Elements at Level работает тоже просто: подаёте выпадающий список с выбранным уровнем, получаете все элементы с этого уровня, в том числе вложенные общие. Не могу придумать с ходу варианта, когда этот нод будет очень полезным, ну вот кому-то бывает надо.

Нод All Elements of Family Type принимает на вход типоразмер семейства из нода Family Types или любого другого, который выдаёт типы семейств. И возвращает все элементы данного типа. Тут тоже выпадающий список, так что оно хорошо для Проигрывателя, когда пользователь точно укажет нужный тип.

Можно подать один тип
Можно подать список типов

В своей практике я чаще пользовался нодом Family Types, чтобы выбрать типоразмер семейства и разместить экземпляры в проекте. Например, этот нод вам пригодится для расстановки опор выбранного типа на трубы. А вот All Elements of Family Type мне не был особо нужен.

Более интересен нод All Elements of Type, работает по схожей схеме, что и Family Type, только на вход подаём Element Types. С его помощью можно получать системные категории и кучу всего разного по типам данных. Тут надо просто потыкаться самому и увидите. По сути, если вам нужно не семейство, то вам сюда.

Например, через эти ноды можно вытащить FamilyInstance — это все экземпляры загружаемых семейств. А если подать FamilySymbol, то получите список всех типоразмеров семейств, которые есть в диспетчере проекта. То есть не только те, что размещены в проекте, а вообще все. Этот нод незаменим, если делаете скрипт по раскладке семейств в пространстве модели.

Если подать MEPCurve, то получите все-все трубы, воздуховоды, лотки и короба из проекта, то есть все кривые, которые относятся к инженерке. Просто все они относятся к типу данных MEPCurve, вот и получаем всех их через этот нод. Или типы трубопроводных систем из проекта, весь список, а не только те, что размещены в модели. Очень полезный набор нодов, если нужно работать не только с экземплярами семейств.

Сюда же отнесу ещё нод Element By Id — тут всё просто, подали Id элемента, получили его. Так можно обрабатывать всякие отчёты об ошибках или коллизиях.

Ноды Levels, Sheets, Views — всё это выпадающие списки, где можно выбрать, соответственно, уровни, листы и виды. Они участвуют как источники данных для последующей обработки.

Взять элементы конкретного типа

Это вот эти ноды:

Кроме нода View Family Types с выпадающим списком для типоразмеров видов, тут всё — для архитекторов и конструкторов. Отдельные ноды-выпадающие списки для типоразмеров полов, крыш, стен, несущих каркаса и колонн. Помещения по их статусу: размещённые, неразмещённые (удалённые с вида, но не из спецификации), неокружённые и избыточные помещения.

Всё, чтобы архитекторам комфортно жилось. Сетевики? Какие сетевики? Не слышали, мы с такими не работали никогда. Ну это шутки всё, само собой, у АР и КР большинство элементов — это как раз стены, перекрытия, крыши, они просто часто с ними работают. И они могли бы точно так же спросить: а где потолки, окна и двери? Потолки — тоже системная категория, но её типы приходится вызывать через Element Types.

Выбрать что-нибудь в модели

Это набор нодов с Select... в названии. Тут всё довольно просто: каждый нод ждёт, что вы тыкнете что-то в модели. Что натыкали, то он в обработку и отправит. Самые популярные ноды: Select Model Element и Select Model Elements. Первый берёт только один элемент, а второй позволяет выбрать рамочкой.

Select Model Elements не очень удобный нод, потому что не позволяет выбирать через Ctrl, только одна рамочка и всё, нельзя протыкать несколько элементов и потом завершить выбор кнопкой «Готово». Нафиг так было делать вообще, непонятно, но ещё более непонятно, зачем столько лет не менять очевидно неудобное поведение нода.

Остальные делают вот что:

  • Select Divided Surface Families — без понятия, что это, может быть, это просто семейства, у которых геометрия разделена инструментом «Граница поверхности».
  • Select Edge и Select Edges — выбрать грань или грани геометрии, можно выбирать через Ctrl, после надо нажать по кнопочке «Готово».
  • Select Face и Select Faces — выбрать поверхность или поверхности, тоже можно через Ctrl.
  • Select Point on Face — выбрать точку на поверхности. То есть будет выбираться та точка на той поверхности, куда вы тыкните мышкой. Нод вернёт точку.
  • Select UV on Face — выбрать UV-координаты на поверхности. Нод вернёт UV-координаты точки на поверхности. Если не работаете с геометрией, то можете даже не гуглить, что это.
  • Select Model Element By Category и Select Model Elements By Category — выбор элемента или элементов в модели с указанной категорией. Элементы других категорий Ревит тыкнуть не даст. Можно выбирать через Ctrl.

Нестандартные ноды

Такие можете искать в разных пакетах для Динамо, а также отнесу сюда выбор элементов с помощью Питон-скрипта. Но об этом как-нибудь в другой раз.

Итого

В своей практике я максимально часто использую вот эти ноды для выбора элементов:

Если работаете с инженеркой и в первую очередь с информацией, то, скорее всего, все остальные ноды вам тоже будут нужны очередь редко. Первые два нода можно сократить в один Код блок вот такого вида:

Такая конструкция пишется быстрее. К сожалению, сюда нельзя засунуть All Ellements of Category, иначе было бы ещё быстрее. Этот нод надо всё время вызывать из библиотеки нодов. Ну ничего, это нас не сломает.