Операторы с возможностью отмены (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 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии