Найти в Дзене

Рабочие наборы в Revit API

Оглавление

Хотел назвать эту работу "Работа с рабочими наборами", но решил не давать почву для комментариев про масляное масло.

Всем привет! Сегодня расскажу, как взаимодействовать с рабочими наборами в Revit API.

Итак, для начала, проверим наш документ на наличие рабочих наборов. Тут всё просто: свойство IsWorkshared класс Document.

Попробуем найти наборы через RevitLookup, команда Snoop Database:

Как мы видим, экземпляров класса Workset тут нету. Оно и понятно: класс Workset наследуется от WorksetPreview, который не является элементом, а является просто IDisposable:

-2

Раз рабочий набор не является элементом, следовательно, мы не сможем получить их через FilteredElementCollector. Однако, авторы Revit API именно в этом моменте решили сильно нам жизнь не усложнять и добавили класс FilteredWorksetCollector. Работает он примерно также, как и коллектор элементов:

var worksets = new FilteredWorksetCollector(document).OfKind(WorksetKind.UserWorkset).ToWorksets();

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

-3


Однако, полученный таким образом Workset сам по себе нам особо ничем не поможет. Все его свойства доступны только для чтения, а единственный метод, который можно использовать — статический
Create для создания нового набора.

Изменение рабочего набора элемента

Но мы можем использовать WorksetId для изменения рабочего набора у элемента. Удобный способ раскидать связи по рабочим наборам или поправить неправильный рабочий набор у элемента. Порядок действий тут такой:

1. Узнаём WorksetId рабочего набора, который нужно задать для элемента

2. Берём у элемента параметр "Рабочий набор".

3. Назначаем в него значение IntegerValue от WorksetId (тип хранения у него как раз Integer).

Изменение рабочих наборов документа

Менять наборы мы всё же можем. С помощью класса WorksetTable их можно удалять, переименовывать и назначать активными.

Получаем таблицу наборов из документа через GetWorksetTable, а потом применяем нужные нам методы:

-4

Изменение рабочих наборов для открытия файла

Иногда нам требуется открыть файл в фоновом режиме. Файл может быть большим и с рабочими наборами, и мы можем управлять тем, какие наборы будут открыты:

1. Создаём WorksetConfiguration.

2. С помощью методов Open и Close задаём списки рабочих наборов для открытия/закрытия.

3. Создаём OpenOptions и назначаем в неё созданную WorksetConfiguration.

4. Открываем файл вот этим методом OpenDocumentFile Method (ModelPath, OpenOptions)

Заключение

Сегодня решил без примеров кода на гитхабе, потому что кода, в общем-то, написал не очень много.
Так что просто напоминаю про свой
телеграм-канал о RevitAPI и увидимся на страницах блога!

-5