Совсем скоро таблицы выбора можно будет просматривать в 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 параметрам: углу и радиусу. В ваших вариантах будут другие наборы параметров, а, поскольку имя столбца в таблице выбора может быть любым, сделать универсальный код тут довольно сложно.
Результат выполнения:
Огромная таблица из экземпляров семейства.
Код макроса в редактируемом формате на Github Gist
На этом на сегодня всё. Не забывайте подписываться на мой телеграм-канал о Revit API и до новых встреч!