SoDirectionalLightManip – directional light node with 3D interface for editing direction
SoDirectionalLightManip is the base class for all
SoDirectionalLight nodes that have a built-in 3D user interface (this is the only such class provided with the Inventor toolkit). Since it is derived from
SoDirectionalLight, any changes to its fields result
in a change of lighting for nodes that follow it in the scene graph. In this case, the interface edits the
direction field. Also, the color of the manipulator's geometry will reflect the color of the light (but
you cannot edit the color using this manipulator).
Typically, you will want to replace a regular
SoDirectionalLight with an
SoDirectionalLightManip (as when the user selects a light to be edited), or vice versa (as when the user is done moving
the light and the interface should go away). Use the
replaceNode() method to insert a manipulator into a scene graph, and the
replaceManip() method to remove it when done.
The
SoDirectionalLightManip utilizes an
SoDirectionalLightDragger to provide a 3D interface. However, the manipulator
differs from the dragger; it lights other objects in the scene because, as an
SoDirectionalLight, it alters the state. The field values and movement of the dragger, on the other hand, affect only the dragger itself. To
find out more about how the interface works and what each part will do, see the reference page for
SoDirectionalLightDragger. The interfaces of the dragger and the manipulator are identical.
The
SoDirectionalLightManip utilizes its dragger by adding
it as a hidden child. When an action is applied to the manipulator, such as rendering or handling events, the manipulator first traverses the dragger, and then the manipulator adds its lighting parameters
to the state. When you click-drag-release over the manipulator, it passes these events down to the dragger, which moves as a result ("I can't
help it, I'm a dragger!").
The manipulator maintains consistency
between the fields of the dragger and its own fields. Let's say you use the mouse to rotate the
dragger. Callbacks ensure that the
direction field of the
manipulator will change by the same amount, thus changing the lighting of
nodes which follow in the scene graph. Similarly, if you set the
direction field of the
SoDirectionalLightManip, the manipulator will orient the dragger accordingly.
Because the dragger is a
hidden child, you can see the dragger on screen
and interact with it, but the dragger does not show up when you write the manipulator to file. Also, any
SoPath will end at the manipulator. (See the Actions section of this reference page for a complete description
of when the dragger is traversed).
If you want to get a pointer to the dragger you can get it from the manipulator using the
getDragger() method. You will need to do this if you want to change the geometry of a
manipulator, since the geometry actually belongs to the dragger.