Hi All,
It doesn’t appear to be possible to undo operators that deform meshes in Sculpt mode.
Here’s a Blender 2.8 operator to demonstrate the problem:
import bpy
import mathutils
import random
class TEST_OT_deform(bpy.types.Operator):
bl_idname = 'test.deform'
bl_label = 'Test Deform'
bl_options = {'REGISTER', 'UNDO'}
@classmethod
def poll(cls, context):
return (
context.active_object is not None and
context.active_object.type == 'MESH' and
context.active_object.mode in {'OBJECT', 'SCULPT'}
)
def execute(self, context):
mesh = context.active_object.data
for v in mesh.vertices:
v.co += 0.05 * mathutils.Vector((
random.random() * 2 - 1,
random.random() * 2 - 1,
random.random() * 2 - 1
)).normalized()
mesh.update()
return {'FINISHED'}
classes = [TEST_OT_deform]
register, unregister = bpy.utils.register_classes_factory(classes)
if __name__ == '__main__':
register()
Run it a few times in Object mode, and each step can be undone. However after doing the same while in Sculpt mode, the deformations are undoable.
Even adding a call to “bpy.ops.ed.undo_push()” doesn’t fix the issue.
Does anyone know how to undo mesh deformations in Sculpt mode?