Использование в UI иконок с неизвестным заранее id

Для отображения в UI рядом со свойством, текстовым лейблом или на кнопке оператора соответствующей иконки нужно указать ее идентификатор в параметре icon или icon_value. Но не для всех видов иконок их идентификаторы заранее известны. Например, нельзя заранее определить id для генерирующихся в рантайме иконок процедурных текстур и материалов.

Для того, чтобы получить идентификатор такой динамической иконки в UI, можно воспользоваться методом icon класса UILayout.

К классу UILayout мы можем обратиться внутри функции draw через ссылку self.layout.

Для примера определим класс, создающий пользовательскую панель в N-панели окна 3D Viewport, и выведем на нее список всех имеющихся в сцене материалов с иконками:

В функции draw в переменную layout мы заносим нужный нам указатель на класс UILayout.

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

Рядом с именем материала выведем его иконку.

Получить идентификатор иконки материала мы можем при помощи метода icon, передав ему в параметре ссылку на текущий материал.

Добавим полученный идентификатор иконки при создании текстового лейбла в параметр icon_value.

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

Полный текст примера:


*.blend-файл с примером кода для моих подписчиков на Patreon.

 

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

0 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии