Найти в Дзене

Фильтры выбора в плагине для Revit

Оглавление

Всем привет! Сегодня разберём интересный вопрос: как сделать так, чтобы при выполнении плагина пользователь мог выбрать только определённые элементы.

Выбор элементов в Revit API

За пользовательский выбор элементов в Revit API отвечают методы из библиотеки RevitAPI.UI:

Мы можем выбрать один элемент, несколько элементов, или выбрать элементы прямоугольной областью. Но как сделать так, чтобы, допустим, выделить только двери? Или элементы того же типа, что и выбранное изначально семейство? Как не дать пользователю ошибиться с выбором?

В этом нам поможет интерфейс ISelectionFilter — он входит в некоторые перегрузки вышеназванных методов.

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

Для более сложной реализации я модернизирую своё WPF-приложение, о котором рассказывал в предыдущих статьях (часть 1, часть 2).Сделаем такой алгоритм:

  1. Пользователь выбирает элемент.
  2. Появляется окно с настройками нумерации, пользователь заполняет их.
  3. Пользователь выбирает элементы для нумерации, но только той же категории, что и первоначальный элемент
-2

То есть при первом выборе мы будем передавать элемент в наш класс, а затем при каждом выборе будет происходить сравнение первоначальной категории и выбранной нами.

Подробнее, как происходит процесс передачи, можете посмотреть в моём репозитории на GitHub.

AllowElement и AllowReference — в чём разница?

Тут всё просто: первый метод применяется тогда, когда мы выбираем элементы, а второй — когда выбираем их части (рёбра, грани, точки). То есть если вы не планируете, что будете выбирать не элементы, то просто пишите в AllowReference "return true;", и всё. Но разберём пример:

Допустим, мы хотим выбрать рёбра не ближе какого-то расстояния к первому выбору. Тогда наш класс будет выглядеть так:

-3

Можете проверить — Revit не даст выбрать грани на отдалённых элементах.

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

-4