Two ways…
OneUndo decorater by Cesar Saez
from functools import wraps
def OneUndo(function):
@wraps(function)
def _inner(*args, **kwargs):
try:
Application.BeginUndo()
f = function(*args, **kwargs)
finally:
Application.EndUndo()
return f
return _inner
#
# And a basic example...
#
@OneUndo
def CreateNulls(p_iCounter=100):
lNulls = []
for i in range(p_iCounter):
lNulls.append( Application.ActiveSceneRoot.AddNull() )
return lNulls
CreateNulls()
Undo with statement by ethivierge
from win32com.client import constants as c
from win32com.client.dynamic import Dispatch as d
xsi = Application
log = xsi.LogMessage
collSel = xsi.Selection
class xsiUndo():
def __enter__(self):
xsi.BeginUndo()
def __exit__(self, type, value, traceback):
xsi.EndUndo()
def testFunc():
log("running test")
with xsiUndo():
testFunc()