Операторы с возможностью отмены (Ctrl + z) и без нее

Проектируя операторы, чаще всего мы предусматриваем возможность отмены выполненного ими действия – если после исполнения оператора пользователь нажмет комбинацию клавиш Ctrl + z, все воздействие нашего оператора на сцену должно быть отменено. Однако в некоторых случаях может понадобиться определить оператор, который будет игнорироваться при попытке отмены пользователем его действий. API в Blender предоставляет нам возможность создавать оба вида операторов, просто указывая возможность или запрет отмены в их параметрах.

Для примера создадим два оператора – один с возможностью отмены действия пользователем, и второй – без возможности отмены.

Определим простейший класс для оператора с возможностью отмены по Ctrl + z:

Самое главное здесь для нас – это строка с параметром bl_options. Именно в ней указывается, будет ли отменяться действие оператора. А именно, за отмену действий отвечает значение “UNDO” в указываемом сете значений.

В данном случае значение “UNDO” присутствует – это значит, что действия оператора будут отменяться при нажатии пользователем Ctrl + z.

В функции execute(), для примера, напишем код, который переставляет выбор на один случайный объект в сцене.

Полный код оператора будет следующим:

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

Главное отличие этого оператора от предыдущего в том, что мы не указали значение “UNDO” в сете в параметре bl_options. Таким образом, данный оператор будет игнорировать попытки отмены действия пользователем.

Пусть, например, данный оператор переключает отображение случайного объекта в 3D вьюпорте в режим сетки “Wireframe”.

Полный код оператора:

Не забудьте зарегистрировать оба оператора в Blender Python API.

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

Так же зарегистрируем ее в Blender API, чтобы она появилась в N-панели в 3D вьюпорте.

Добавим несколько мешей в сцену.

А теперь попробуем несколько раз нажать на кнопку “Can UNDO”, нажатие на которую вызывает наш первый оператор с возможностью отмены. Мы видим, как выбор переключается с меша на меш. И если мы теперь нажмем комбинацию клавиш Ctrl + z, мы увидим, как выбор отменяется – переключается в обратном направлении, пока не дойдет до исходного состояния.

Теперь, если мы несколько раз нажмем на кнопку “No UNDO”, для переключения режима отображения в “сетку” для случайного меша, а потом попытаемся нажать Ctrl + z, мы не увидим никакого эффекта возврата. Все потому, что операции отмены для данного оператора мы не предусмотрели.

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

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