Делаем отменяемый оператор в Blender неотменяемым

Проектируя новые операторы в Blender, мы можем делать их отменяемыми и не отменяемыми, указывая значение “UNDO” в параметре bl_options оператора. Но как быть, если нам нужно исключить из очереди отмены какой-либо уже существующий, например, системный оператор? Это очень просто сделать, переопределив оператор на собственный, без указания “UNDO” в его параметрах.

Для примера переопределим простейший оператор, добавляющий в сцену куб “mesh.primitive_cube_add”.

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

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

Чтобы проверить, как будет работать наш оператор, создадим в N-панели пользовательскую панель TEST с двумя кнопками. На первую привяжем тот самый стандартный оператор “mesh.primitive_cube_add”, а на вторую – наш переопределяющий оператор.

Зарегистрируем оба класса в Blender Python API.

Выполним скрипт, нажав на кнопку со стрелочкой “Run Script”.

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

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

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

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

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