Хотел назвать эту работу "Работа с рабочими наборами", но решил не давать почву для комментариев про масляное масло.
Всем привет! Сегодня расскажу, как взаимодействовать с рабочими наборами в Revit API.
Итак, для начала, проверим наш документ на наличие рабочих наборов. Тут всё просто: свойство IsWorkshared класс Document.
Попробуем найти наборы через RevitLookup, команда Snoop Database:
Как мы видим, экземпляров класса Workset тут нету. Оно и понятно: класс Workset наследуется от WorksetPreview, который не является элементом, а является просто IDisposable:
Раз рабочий набор не является элементом, следовательно, мы не сможем получить их через FilteredElementCollector. Однако, авторы Revit API именно в этом моменте решили сильно нам жизнь не усложнять и добавили класс FilteredWorksetCollector. Работает он примерно также, как и коллектор элементов:
var worksets = new FilteredWorksetCollector(document).OfKind(WorksetKind.UserWorkset).ToWorksets();
WorksetKind — это тип рабочего набора. В данном примере нас интересуют только пользовательские рабочие наборы, хотя в принципе каждый вид, каждое семейство и стандарты проекта тоже отдельный рабочий набор:
Однако, полученный таким образом Workset сам по себе нам особо ничем не поможет. Все его свойства доступны только для чтения, а единственный метод, который можно использовать — статический Create для создания нового набора.
Изменение рабочего набора элемента
Но мы можем использовать WorksetId для изменения рабочего набора у элемента. Удобный способ раскидать связи по рабочим наборам или поправить неправильный рабочий набор у элемента. Порядок действий тут такой:
1. Узнаём WorksetId рабочего набора, который нужно задать для элемента
2. Берём у элемента параметр "Рабочий набор".
3. Назначаем в него значение IntegerValue от WorksetId (тип хранения у него как раз Integer).
Изменение рабочих наборов документа
Менять наборы мы всё же можем. С помощью класса WorksetTable их можно удалять, переименовывать и назначать активными.
Получаем таблицу наборов из документа через GetWorksetTable, а потом применяем нужные нам методы:
Изменение рабочих наборов для открытия файла
Иногда нам требуется открыть файл в фоновом режиме. Файл может быть большим и с рабочими наборами, и мы можем управлять тем, какие наборы будут открыты:
1. Создаём WorksetConfiguration.
2. С помощью методов Open и Close задаём списки рабочих наборов для открытия/закрытия.
3. Создаём OpenOptions и назначаем в неё созданную WorksetConfiguration.
4. Открываем файл вот этим методом OpenDocumentFile Method (ModelPath, OpenOptions)
Заключение
Сегодня решил без примеров кода на гитхабе, потому что кода, в общем-то, написал не очень много.
Так что просто напоминаю про свой телеграм-канал о RevitAPI и увидимся на страницах блога!