-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathanimUtils.py
More file actions
45 lines (36 loc) · 1.15 KB
/
animUtils.py
File metadata and controls
45 lines (36 loc) · 1.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import maya.cmds as cmd
class KeyServer(object):
'''
This class is basically an iterator over keys set on the given objects.
Key times are iterated over in chronological order. Calling getNodes
on the iterator will provide a list of nodes that have keys on the
current frame
'''
def __init__( self, nodes, changeTime=True ):
self._nodes = nodes
self._changeTime = changeTime
self._curIndex = 0
self._keys = list( set( cmd.keyframe( nodes, q=True ) or [] ) )
self._keys.sort()
self._keyNodeDict = {}
self._keyNodeDictHasBeenPopulated = False
def _populateDict( self ):
keyNodeDict = self._keyNodeDict
for node in self._nodes:
keys = cmd.keyframe( node, q=True )
if keys:
for key in set( keys ):
keyNodeDict.setdefault( key, [] )
keyNodeDict[ key ].append( node )
self._keyNodeDictHasBeenPopulated = True
def getNodesAtTime( self ):
if not self._keyNodeDictHasBeenPopulated:
self._populateDict()
keyNodeDict = self._keyNodeDict
return keyNodeDict[ self._keys[ self._curIndex ] ][:]
def __iter__( self ):
for key in self._keys:
if self._changeTime:
cmds.currentTime( key, e=True )
yield key
#end