1
2
3
4
5
6
7
8
9from pyfbsdk import FBSystem, FBModelList, FBGetSelectedModels, FBTime
10
11
12
13def FindLimits( pNode, pLLimit=None, pRLimit=None ):
14
15 if pNode.FCurve:
16
17
18
19 for lKey in pNode.FCurve.Keys:
20
21 if pLLimit:
22 if lKey.Time.Get() < pLLimit.Get():
23 pLLimit.Set( lKey.Time.Get())
24 else:
26 pLLimit.Set( lKey.Time.Get())
27 if pRLimit:
28 if lKey.Time.Get() > pRLimit.Get():
29 pRLimit.Set( lKey.Time.Get())
30 else:
32 pRLimit.Set( lKey.Time.Get())
33
34
35 if pNode.Nodes:
36 for lNode in pNode.Nodes:
37 ( pLLimit, pRLimit ) = FindLimits( lNode, pLLimit, pRLimit )
38
39 return ( pLLimit, pRLimit )
40
41
42
43
44
45
46def OffsetKeys( pNode, pDelta ):
47
48 if pNode.FCurve:
49
50
51
52 lKeys = [ lKey for lKey in pNode.FCurve.Keys ]
53
54
55
56
57 if pDelta.Get() > 0:
58 lKeys.reverse()
59
60
61 for lKey in lKeys:
63 lTime.Set( lKey.Time.Get() + pDelta.Get() )
64 lKey.Time = lTime
65
66
67 if pNode.Nodes:
68 for lNode in pNode.Nodes:
69 OffsetKeys( lNode, pDelta )
70
71
72
74lModels = FBModelList()
76
77
78for lModel in lModels:
79
80 ( lLTime, lRTime ) = FindLimits( lModel.AnimationNode )
81
82
83 if lLTime:
84
85 lCurrentTime = lSystem.LocalTime
87 lDelta.Set( lCurrentTime.Get() - lLTime.Get())
88
89
90 OffsetKeys( lModel.AnimationNode, lDelta )
91
92
93 del( lCurrentTime, lDelta )
94
95
96 del( lModel, lLTime, lRTime )
97
98
99
100
101del( lSystem, lModels )
102
103
104del( FindLimits, OffsetKeys )
105
106
107del( FBSystem, FBModelList, FBGetSelectedModels, FBTime )
Provides access to the underlying system, and the MotionBuilder scene.
Definition: pyfbsdk_generated.h:18771
Time data structure.
Definition: pyfbsdk_generated.h:19596
FBGetSelectedModels(FBModelList pList, FBModel pParent=None, bool pSelected=True, bool pSortBySelectOrder=False)
Find all models that are selected (if pSelected is true) Searches recursively from a root model for m...