Найти в Дзене

Работа с таблицами выбора в Revit API

Оглавление

Совсем скоро таблицы выбора можно будет просматривать в Revit Lookup. Ну а пока расскажу о том, как работать с ними в коде.

Если вы не знаете, что такое таблицы выбора, и как с ними работать "руками", то вот вам статья от Вадима Муратова.

Введение

Управление таблицами выбора в Revit представлено классом FamilySizeTableManager. Используем его статический метод для его же получения:

FamilySizeTableManager.GetFamilySizeTableManager(document, familyId);

Тут есть 2 нюанса:

1. Я не смог получить доступ к таблицам из семейства, только из проекта. Если вы знаете, как это исправить, пищите в комментарии, обновлю статью

Так мы можем получить таблицу выбора, если документ является документом проекта. Если мы в документе-семействе, то получать таблицу выбора следует так:

FamilySizeTableManager.GetFamilySizeTableManager(_document, new ElementId(BuiltInParameter.RBS_LOOKUP_TABLE_NAME));

Да, у ElementId есть конструктор, который принимает BuiltInParameter.

Благодарю за эту информацию Александра Румянцева, BIM-координатора ГК Самолёт и читателя моего блога.

2. Необходимо передавать Id именно объекта Family, не FamilyInstance или FamilySymbol.

Далее из него мы можем получить имена таблиц выбора:

manager.GetAllSizeTableNames();

Или саму таблицу

manager.GetSizeTable();

Так же этот класс позволяет экспортировать и импортировать таблицы. Где ещё его можно использовать:

  • До определённой версии Revit таблицы выбора теряли кириллические символы. То есть при загрузке всё хорошо, семейство работает хорошо, но при экспорте таблиц мы получали не итоговую таблицу, а изрядно уменьшившуюся. Редактировать такое семейство без оригинала таблицы почти невозможно. Но можно выгрузить через код по ячейке, изменив кодировку значений. Сложно, но сработает в старых версиях.
  • Можно попробовать создать все экземпляры семейства по вариантам из таблицы выбора, чтобы проверить, что в таблице нет битых строк.
  • Можно написать скрипт, который будет пакетно редактировать значения по шаблону, чтобы не делать это руками в огромной таблице.

Пример использования

Напишем макрос, который создаёт все экземпляры семейств по строкам таблицы выбора. Мы будем выбирать экземпляр в проекте, а затем код создаст все его варианты. Для примера я возьму семейство ADSK_ДетальСтальнаяСварная_Отвод_ГОСТ17375-2001, а создавать экземпляры буду по 2 параметрам: углу и радиусу. В ваших вариантах будут другие наборы параметров, а, поскольку имя столбца в таблице выбора может быть любым, сделать универсальный код тут довольно сложно.

Результат выполнения:

-2

Огромная таблица из экземпляров семейства.

Код макроса в редактируемом формате на Github Gist

На этом на сегодня всё. Не забывайте подписываться на мой телеграм-канал о Revit API и до новых встреч!

-3