Добавление дополнительных точек отмены действий в Blender

Обычно, когда мы отменяем последнее действие в Blender, нажимая комбинацию клавиш Ctrl + z, всё действие отменяется целиком, даже если это действие сложное. Например, выполнение скрипта отменяется полностью, нельзя отменить только половину от выполненного в скрипте кода. Или все-таки можно?

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

Такая точка создается при вызове оператора

Каждый раз, когда вызывается этот оператор, текущее состояние сцены в Blender фиксируется в стеке отмены “global undo”. И теперь, при нажатии клавиш Ctrl + z откат сцены будет выполнен именно к этому зафиксированному состоянию.

Рассмотрим, как это работает на примере простейшего скрипта.

Пусть наш скрипт добавляет в сцену три объекта: Сюзанну, куб и сферу.

Для этого нам нужно вызвать подряд три оператора для создания этих объектов в сцене:

Выполним наш скрипт, нажав на стрелочку “Run Script” в текстовом редакторе Blender. Как мы видим, нужные нам меши появились в сцене.

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

А теперь добавим в скрипт операторы создания точек отмены между уже имеющимися операторами создания объектов.

Выполним модифицированный скрипт. И снова попробуем отменить последнее действие.

Как мы видим, при однократном нажатии Ctrl + z из сцены исчез только последний добавленный в нее объект – сфера. Т.е. сцена откатилась не к начальной точке выполнения скрипта, как это было раньше, а к последней созданной нами вручную точке отмены, которую мы создали, вызвав оператор undo_push() перед оператором создания сферы primitive_uv_sphere_add().

Нажмем Ctrl + z еще раз. Теперь исчез куб. Сцена откатилась к предыдущей точке отмены, которую мы создали перед вызовом оператора добавления куба в сцену.

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

Таким образом вызывая оператор undo_push() в нужных нам местах, мы можем гибко управлять процессом отмены действий в Blender.

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

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