# Copyright 2009 Autodesk, Inc.  All rights reserved.
# Use of this software is subject to the terms of the Autodesk license agreement 
# provided at the time of installation or download, or which otherwise accompanies
# this software in either electronic or hard copy form.
#
# Script description:
# Shopw how to edit TRS property of a model with undo mecanism
#
# Topic: FBUndoManager
#

from pyfbsdk import *

#Find Model
lCube=FBFindModelByName("Cube")
if not lCube:
    lCube=FBModelCube("Cube")
    lCube.Show = True

if not lCube.Visibility.IsAnimated():
    lCube.Visibility.SetAnimated(True)

if not lCube.Visibility.IsFocused():
    lCube.Visibility.SetFocus(True)

lUndo = FBUndoManager()

# Important to open our transaction
lUndo.TransactionBegin("vis1")
lUndo.TransactionAddModelTRS(lCube)

#Key 1
lCube.Visibility.GetAnimationNode ().KeyAdd(FBTime(3,3,3,0),True)
lUndo.TransactionEnd()

lUndo.TransactionBegin("vis2")
lUndo.TransactionAddModelTRS(lCube)
#Key 2
lCube.Visibility.GetAnimationNode ().KeyAdd(FBTime(0,0,0,10),True)
lUndo.TransactionEnd()

lUndo.TransactionBegin("vis3")
lUndo.TransactionAddModelTRS(lCube)
#Key 3
lCube.Visibility.GetAnimationNode ().KeyAdd(FBTime(0,0,0,11),False)
lUndo.TransactionEnd()

lUndo.TransactionBegin("vis4")
lUndo.TransactionAddModelTRS(lCube)
#Key 4
lCube.Visibility.GetAnimationNode ().KeyAdd(FBTime(0,0,0,20),False)
lUndo.TransactionEnd()

lUndo.TransactionBegin("vis5")
lUndo.TransactionAddModelTRS(lCube)
#Key 5
lCube.Visibility.GetAnimationNode ().KeyAdd(FBTime(0,0,0,21),True)
lUndo.TransactionEnd()

lUndo.TransactionBegin("vis6")
lUndo.TransactionAddModelTRS(lCube)
#Key 6
lCube.Visibility.GetAnimationNode ().KeyAdd(FBTime(0,0,0,30),True)
lUndo.TransactionEnd()

lUndo.TransactionBegin("vis7")
lUndo.TransactionAddModelTRS(lCube)
#Key 7
lCube.Visibility.GetAnimationNode ().KeyAdd(FBTime(0,0,0,31),False)
lUndo.TransactionEnd()

lUndo.TransactionBegin("vis8")
lUndo.TransactionAddModelTRS(lCube)
#Key 8
lCube.Visibility.GetAnimationNode ().KeyAdd(FBTime(0,0,0,40),False)
lUndo.TransactionEnd()

# undo last operation
#lUndo.Undo()
#lUndo.Redo()