Группировка данных в подпанелях

Для того, чтобы разбить интерфейс пользователя UI на несколько визуальных групп, чаще всего в Blender API просто регистрируют несколько отдельных панелей и объединяют их вместе, заданием одинакового параметра “bl_category”. В этом случае мы получаем несколько панелей, расположенных вертикально, которые можно сворачивать и разворачивать независимо друг от друга.

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

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

Для начала создадим и зарегистрируем в Blender Python API панель и вынесем на нее несколько свойств.

В этом коде мы создали и зарегистрировали панель, которая будет отображаться в N-панели в окне 3D-вьюпорта. Мы так же вынесли на нее несколько свойств, относящихся к настройкам рендера: используемый рендер-движок, разрешение рендера и путь сохранения готового файла.

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

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

Для этого импортируем тип BoolProperty и зарегистрируем в функции register для сцены свойство такого типа. Назовем его “subpanel_status”:

Вынесем созданное свойство на панель UI и придадим ему вид кнопки, включив режим переключателя и отключив показ текста.

В первой строчке мы определили строчку для расположения элементов.

В переменную “icon” мы, в зависимости от текущего состояния панели (свернута или развернута), заносим изображение со стрелочкой, направленной в бок или в низ.

После этого мы выводим наше свойство “subpanel_status” в виде кнопки с заданной иконкой.

И в последней строке мы пишем заголовок для нашей подпанели. Отдельно от свойства-кнопки чтобы он не выравнивался по центру и не изменял бы свой цвет при сворачивании-разворачивании подпанели.

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

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

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

Весь код вместе:


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

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии