SoPointLightManip is the base class for all
SoPointLight 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
SoPointLight, 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 field. 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
SoPointLight with an
SoPointLightManip (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
SoPointLightManip utilizes an
SoPointLightDragger to provide a 3D interface. However, the manipulator
differs from the dragger; it lights other objects in the scene because, as an
SoPointLight, 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
SoPointLightDragger. The interfaces of the dragger and the manipulator are identical.
The
SoPointLightManip 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 translate the
dragger. Callbacks insure that the
location 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
location field of the
SoPointLightManip, the manipulator will place 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.