The scene graph is a tree of scene nodes. Each node is a hub of information for objects in the scene, and is responsible for:
The root node of a scene can be accessed by the MAXScript rootNode
global. See, for example, the scene_graph.py sample script:
'''
Creates a simple text representation of the scene graph
'''
from pymxs import runtime as rt
def output_node(node, indent=''):
"""Print the scene graph as text to stdout."""
print(indent, node.Name)
for child in node.Children:
output_node(child, indent + '--')
output_node(rt.rootnode)
If you do not need the scene hierarchy information (that is, parent/child relationships), you can get a flat list of all objects in the scene with the objects
global variable. For example:
objs = pymxs.runtime.objects
for o in objs:
print(o.name)
You can also obtain individual objects by name:
s = pymxs.runtime.getNodeByName('Sphere002')
Finally, you can also access objects by PathName values, though this is not directly exposed to pymxs and requires a work-around. See Accessing MAXScript PathName Values for more information.
There are times when it is useful to get the list of selected objects in a scene.
There are several reserved system variables of type ObjectSet
that contain various scene object categories. For example, objects
contains all the objects in the scene, lights
all the lights, and selection contains the current selection
.
For example:
>>> pymxs.runtime.selection
<ObjectSet<$selection>>
>>> pymxs.runtime.selection[0]
<Sphere<$Sphere:Sphere004 @ [90.515228,15.940669,0.000000]>>
>>>
Named selection sets are contained in the selectionSets
array, and are accessed by index.
for example:
>>> pymxs.runtime.selectionSets[0]
<SelectionSet<SelectionSet:my_selection>>