Фильтрация значений доступных для выбора в кастомном свойстве UILayout.prop()

При создании кастомных свойств, значения которых пользователь может выбирать из предлагаемого списка, часто бывает нужно ограничить перечень предлагаемых для выбора значений. Сделать предлагаемый список значений короче, убрав из него нежелательные элементы, можно при помощи функции poll.

Рассмотрим фильтрацию списка значений на примере выбора в кастомное свойство указателя на коллекцию.

Для начала создадим для объекта “Сцена” кастомное свойство с указателем на коллекцию:

Добавим в UI 3D вьюпорта пользовательскую панель и вынесем на нее созданное нами кастомное свойство:

В функции draw мы вывели на панель наше кастомное свойство сцены my_collection при помощи UILayout.prop(), указав в его параметрах ссылку на сцену и название отображаемого свойства.

Сейчас пользователь может указать для нашего свойства любую коллекцию, без исключений.

Давайте ограничим перечень доступных для выбора коллекций, оставив в списке, например, только те коллекции, которые отмечены зеленой иконкой.

Определим функцию filter, которая будет возвращать True, если у коллекции установлена зеленая иконка и False для всех остальных коллекций.

Так как мы будем вызывать эту функцию для обработки кастомного свойства, она должна принимать два параметра:

self – через него передается указатель на контейнер свойства, в нашем случае – на сцену;

collection – текущая коллекция, для которой нужно определить – отображать ее или нет;

Условие

определяет, установлен ли для коллекции collection зеленый значок иконки COLOR_04.

Изменим определение кастомного свойства с указателем на коллекцию, назначив в обработчик poll функцию filter:

Теперь при отображении доступных для выбора коллекций используется назначенный нами фильтр, и пользователь может выбирать только “зеленые” коллекции.

Дополнительно из списка можно убрать уже выбранную пользователем коллекцию. Для этого чуть-чуть модифицируем функцию filter, добавив дополнительное условие для проверки:

Таким образом, мы можем фильтровать предлагаемые для выбора пользователя наборы данных нужным нам образом.

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии