demoTypeCasting.py

demoTypeCasting.py
1 '''
2  Demonstrates how to cast an instance of Animatable to another type based on its SuperClassID
3 '''
4 import MaxPlus
5 
6 SuperIdTypes = {
7  MaxPlus.SuperClassIds.Osm: MaxPlus.Modifier,
8  MaxPlus.SuperClassIds.Wsm: MaxPlus.Modifier,
9  MaxPlus.SuperClassIds.Helper: MaxPlus.HelperObject,
10  MaxPlus.SuperClassIds.GeomObject: MaxPlus.GeomObject,
11  MaxPlus.SuperClassIds.Light: MaxPlus.LightObject,
12  MaxPlus.SuperClassIds.Texmap: MaxPlus.Texmap,
13  MaxPlus.SuperClassIds.Material: MaxPlus.Mtl,
14  MaxPlus.SuperClassIds.Atmospheric: MaxPlus.Atmospheric,
15  MaxPlus.SuperClassIds.SoundObj: MaxPlus.SoundObj,
16  MaxPlus.SuperClassIds.Renderer: MaxPlus.Renderer}
17 
18 
19 def descendants(node):
20  for c in node.Children:
21  yield c
22  for d in descendants(c):
23  yield d
24 
25 
26 def allNodes():
27  return descendants(MaxPlus.Core.GetRootNode())
28 
29 
30 def castObject(o):
31  if not o:
32  return None
33  sid = o.GetSuperClassID()
34  if sid not in SuperIdTypes:
35  return None
36  return SuperIdTypes[sid]._CastFrom(o)
37 
38 for n in allNodes():
39  cast = castObject(n.Object)
40  if cast:
41  print type(cast)