Расскажу, как автоматизировать заполнение параметров у семейств, которые есть в файле проекта.

Кажется, тут всё просто, но есть нюанс. Семейства могут быть двух видов: размещённые в пространстве модели и неразмещённые. Для Ревита это разные сущности.

Первая называется Family Instance — экземпляр семейства, вторую обозначают как Family Symbol, по сути это типоразмер семейства, который загружен в файл проекта. Фактически Family Symbol — это вообще любой тип семейства из проекта, неважно, разместили вы его или нет.

Если типоразмер размещён в пространстве модели, то работаем с ним, как с экземпляром. Если не размещён, то для нас это будет family symbol. И работа с ними немного разная.

Family Instance

Здесь всё просто. Когда получаете все элементы категории, вот эти элементы и есть наши экземпляры. Далее у нас два вида параметров: параметры типа и экземпляра. Если нужно записать значение в параметр типа, то обращаетесь к типу семейства. Если в параметр экземпляра — то пишите напрямую в те элементы, что получили в Динамо. Подробнее об этом рассказываю в двух других статьях:

про перенос параметров с помощью Динамо, тут про параметры экземпляра;

про работу с параметрами типа и экземпляра, тут информация о том, как получить из экземпляра его тип.

Эти элементы, которые получили из категории, и есть экземпляры семейства, они размещены в модели

Другое дело, когда семейства загружены в проект, но не размещены в пространстве модели. Здесь нам и пригодится работа со второй «сущность» семейства.

Family Symbol

Чтобы получить типоразмеры семейств, которые загружены в проект, нужно взять нод-выпадающий список Element Types и соединить с нодом All Elements of Type. В итоге получим все типы семейств из файла.

Получение типов из проекта

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

Задача

В 2018 году разрабатывал библиотеку арматуры Tecofi — ударение на последний слог, это французский бренд. Теперь из-за санкций и изменений в линейке нужно внести корректировки, заодно поправить семейства так, чтобы они хорошо дружили с шаблонами ADSK, которые я тоже разрабатываю с ребятами из BIM2B.

Одна из корректировок — поменялась версия Ревита с 2016 на 2017, нужно банально поменять значение в параметре. Но семейств много — аж 78 штук да ещё и типоразмеров может быть несколько: менять руками долго и неприятно. Причём больше неприятно, чем долго. Значит, нужно автоматизировать задачу.

Решение

Работай я в Ревите 2019+, то всё легко делается с помощью «Кулька параметров», но в данном случае Ревит 2017 версии.

Загружаю семейства в пустой проект. У меня в параметре «ADSK_Версия Revit» записана формула "2016". Соответственно, не получится перебить значение через спецификацию, но главное — чтобы их там перебить, семейства нужно разместить в модели. Это тоже долго.

Поэтому с помощью плагина Revit Lookup, о котором уже рассказывал в статье с лайфхаками, удаляю параметр из проекта. Заодно он удалится и из всех семейств. Далее добавлю этот же параметр в одно из семейств, загружу в проект. С помощью плагина «Family Parameters» раскопирую его по другим семействам. О нём тоже рассказывал в статье про автоматизацию работы, в этой же статье и про «Кулёк параметров».

Теперь у меня во всех семействах есть параметр «ADSK_Версия Revit». Осталось только заполнить всё значением «2017». Запускаю Динамо. Получаю все family symbol, отфильтровываю только арматуру Tecofi, благо для этого в имени семейства есть префикс. Далее обычным нодом по записи значений в параметр Element.SetParameterByName вношу значение.

Готово!

Способ многоступенчатый, но для тех, кто не программирует и не работает с Ревит АПИ, в самый раз. Результат ведь есть, и не нужно было руками заходить в каждое семейство.