SoSpotLightManip – spotlight node with 3D interface for editing location, direction, and beam width
SoSpotLightManip is the base class for all
SoSpotLight 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
SoSpotLight, 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
location,
direction, and
cutOffAngle fields. Also, the color of the manipulator's geometry will reflect the color of the
light (but you can not edit the color using this manipulator).
Typically, you will want to replace a regular
SoSpotLight with an
SoSpotLightManip (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
SoSpotLightManip utilizes an
SoSpotLightDragger to provide a 3D interface. However,
the manipulator differs from the dragger; it lights other objects in the scene because, as an
SoSpotLight, it alters the state. The fields 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
SoSpotLightDragger. The interfaces of the dragger and the manipulator are identical.
The
SoSpotLightManip 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 widen the cone of the
dragger. Callbacks insure that the
cutOffAngle 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
cutOffAngle field of the
SoSpotLightManip, the manipulator will widen the beam of 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.