Provided by: inventor-doc_2.1.5-10-18_all bug


       SoSpotLightDragger  —  spotlight  shaped  dragger  that  allows  you  to  change position,
       direction, and width of the beam


       SoBase  >  SoFieldContainer  >  SoNode  >  SoBaseKit  >  SoInteractionKit  >  SoDragger  >


       #include <Inventor/draggers/SoSpotLightDragger.h>

          Fields from class SoSpotLightDragger:

     SoSFRotation        rotation
     SoSFVec3f           translation
     SoSFFloat           angle

          Fields from class SoDragger:

     SoSFBool            isActive

          Fields from class SoInteractionKit:

     SoSFEnum            renderCaching
     SoSFEnum            boundingBoxCaching
     SoSFEnum            renderCulling
     SoSFEnum            pickCulling

          Parts from class SoBaseKit:

     (SoNodeKitListPart)  callbackList

          Methods from class SoSpotLightDragger:

     static const SoNodekitCatalog *
                         getClassNodekitCatalog() const
     static SoType       getClassTypeId()

          Methods from class SoDragger:

     void                addStartCallback(SoDraggerCB *f, void *userData = NULL)
     void                removeStartCallback(SoDraggerCB *f, void *userData = NULL)
     void                addMotionCallback(SoDraggerCB *f, void *userData = NULL)
     void                removeMotionCallback(SoDraggerCB *f, void *userData = NULL)
     void                addFinishCallback(SoDraggerCB *f, void *userData = NULL)
     void                removeFinishCallback(SoDraggerCB *f, void *userData = NULL)
     void                addValueChangedCallback(SoDraggerCB *f, void *userData = NULL)
     void                removeValueChangedCallback(SoDraggerCB *f, void *userData = NULL)
     SbBool              enableValueChangedCallbacks()
     void                setMinGesture(int pixels)
     int                 getMinGesture() const
     static void         setMinScale(float newMinScale)
     static float        getMinScale()

          Methods from class SoInteractionKit:

     virtual SbBool      setPartAsPath(const SbName &partName, SoPath *surrogatePath )

          Methods from class SoBaseKit:

     virtual const SoNodekitCatalog *
                              getNodekitCatalog() const
     virtual SoNode *         getPart(const SbName &partName, SbBool makeIfNeeded)
     SbString                 getPartString(const SoBase *part)
     virtual SoNodeKitPath *  createPathToPart(const SbName &partName, SbBool makeIfNeeded, const
                                   SoPath *pathToExtend = NULL)
     virtual SbBool           setPart(const SbName &partName, SoNode *newPart)
     SbBool                   set(char *partName, char *parameters)
     SbBool                   set(char *nameValuePairs)
     static SbBool            isSearchingChildren()
     static void              setSearchingChildren(SbBool newVal)

          Methods from class SoNode:

     void                setOverride(SbBool state)
     SbBool              isOverride() const
     SoNode *            copy(SbBool copyConnections = FALSE) const
     virtual SbBool      affectsState() const
     static SoNode *     getByName(const SbName &name)
     static int          getByName(const SbName &name, SoNodeList &list)

          Methods from class SoFieldContainer:

     void                setToDefaults()
     SbBool              hasDefaultValues() const
     SbBool              fieldsAreEqual(const SoFieldContainer *fc) const
     void                copyFieldValues(const SoFieldContainer  *fc,  SbBool  copyConnections  =
     void                get(SbString &fieldDataString)
     virtual int         getFields(SoFieldList &resultList) const
     virtual SoField *   getField(const SbName &fieldName) const
     SbBool              getFieldName(const SoField *field, SbName &fieldName) const
     SbBool              isNotifyEnabled() const
     SbBool              enableNotify(SbBool flag)

          Methods from class SoBase:

     void                ref()
     void                unref() const
     void                unrefNoDelete() const
     void                touch()
     virtual SoType      getTypeId() const
     SbBool              isOfType(SoType type) const
     virtual void        setName(const SbName &name)
     virtual SbName      getName() const

          Macros from class SoBaseKit:

     SO_GET_PART(kit, partName, partClass)
     SO_CHECK_PART(kit, partName, partClass)


       SoSpotLightDragger  is  a  composite  dragger. It is shaped like a beam of light emanating
       from a sun-like ball. An arrow runs along the axis of the beam and extends past the end of
       the beam.

       When  you  click  and drag the beam, it opens and closes with an umbrella-like motion. The
       angle between the center and edge of the beam  is  stored  in  the  angle  field  of  this
       dragger;  setting  the  angle  field  causes the beam to widen or narrow in response.  The
       spotlight dragger does not use a standard dragger  class  to  execute  this  motion.  More
       details are given later in this section.

       Dragging  the arrow rotates it arount the sun, and the beam moves with it. The arrow is an
       SoRotateSphericalDragger that controls the rotation field.  See  the  reference  page  for
       SoDirectionalLightDragger, which works the same way, for details.

       The  sun-shape can be dragged to translate all three pieces together through 3-space.  Its
       movement controls the translation field and works exactly as described  in  the  reference
       pages for SoDirectionalLightDragger and SoPointLightDragger (which goes into more detail).

       Remember:  This is not a light source! It just looks like one. If you want to move a light
       with this dragger, you can do the following:

       [a]  Use  an  SoSpotLightManip,  which  is  subclassed  from  SoLight.   It   creates   an
       SoSpotLightDragger  and  uses  it  as the interface to change the location, direction, and
       cutOffAngle of its light source (see the SoSpotLightManip man page).  The manip also edits
       the material part of this dragger to match the color of light the manip is producing.

       [b]  Connect  the  angle  field of this dragger to the cutOffAngle field of an SoSpotLight
       with a field-to-field connection.

       See the SoPointLightDragger and SoDirectionalLightDragger man  pages  for  other  ways  to
       control light parameters with the rotation and translation fields.

       This  class  creates its own projector and handles mouse events to do it's own dragging of
       the beam angle. When the mouse picks a point on the beam,  that  point  is  dragged  in  a
       circle  just like in an SoRotateDiscDragger, but the plane of the disc is re-defined every
       time a drag is initiated. Imagine placing the metal tip of a compass at the  apex  of  the
       cone  and the pencil tip at the picked point. If you swing an arc through the central axis
       of the cone, you will be drawing the arc used to drag the beam open and closed.

       The beam is opened and closed not by rotating, but by  scaling.  The  dragger  scales  the
       beam-cone  so that the height and radius change to move the picked point along the circle.
       Then the angle field is calculated from the height and radius.

       You can change the geometry of parts in any instance of this dragger using setPart().  The
       default  part  geometries are defined as resources for this SoSpotLightDragger class. They
       are detailed below in the  DRAGGER  RESOURCE  section.  You  can  make  your  program  use
       different     default     resources    for    the    parts    by    copying    the    file
       /usr/share/data/draggerDefaults/spotLightDragger.iv into your own directory,  editing  the
       file,  and  then  setting  the  environment  variable  SO_DRAGGER_DIR to be a path to that


     SoSFRotation        rotation
          Orientation of the rotating part (an arrow by default).

     SoSFVec3f           translation
          Position of the dragger.

     SoSFFloat           angle
          Angle between center and edge of beam.



     static const SoNodekitCatalog *
                         getClassNodekitCatalog() const
          Returns an SoNodekitCatalog for this class

     static SoType       getClassTypeId()
          Returns type identifier for this class.


       │                           All parts                            │
       │                                                        NULL by │
       │Part Name       Part Type                Default Type   Default │
       │                                                                │
       │callbackList    NodeKitListPart          --               yes   │
       │material        Material                 --               yes   │
       │translator      DragPointDragger         --               yes   │
       │rotator         RotateSphericalDragger   --               yes   │
       │beamPlacement   Translation              --               yes   │
       │beamScale       Scale                    --               yes   │
       │beam            Separator                --               yes   │
       │beamActive      Separator                --               yes   │
       │                                                                │
       │      Extra information for list parts from above table        │
       │                                                               │
       │Part Name      Container Type   Permissible Types              │
       │                                                               │
       │callbackList   Separator        Callback, EventCallback        │
       │                                                               │


       .in 0n+.5i
     Resource:         spotLightBeam
       .in 0n+.5i
     Part:             beam
     Appearance:       wire-frame cone with no SoMaterial node
     Description:      picking this initiates dragging of  the  beam  angle.  The  beam  inherits
                         colors  from  the material part, just like the stationary version of the
                         sun shape.

                         .in 0n+.5i
     Resource:         spotLightBeamActive
                         .in 0n+.5i
     Part:             beamActive
     Appearance:       yellow wire-frame cone
     Description:      displayed during dragging of the beam angle.

                         .in 0n+.5i
     Resource:         spotLightBeamPlacement
                         .in 0n+.5i
     Part:             beamPlacement
     Appearance:       translation of (0,0,-1)
     Description:      This translation node moves the beam parts relative to  the  rest  of  the
                         dragger.  In this case, moving by (0,0,-1) slides the cone outward along
                         rotator part toward its arrow-head. The distance chosen places the  apex
                         of the cone on the surface of the sun shape.

                         .in 0n+.5i
     Resource:         spotLightRotatorRotator
                         .in 0n+.5i
     Part:             rotator.rotator
     Appearance:       white arrow that goes through the sun
     Description:      picking this begins rotation of the arrow about the sun-shape

                         .in 0n+.5i
     Resource:         spotLightRotatorRotatorActive
                         .in 0n+.5i
     Part:             rotator.rotatorActive
     Appearance:       yellow arrow that goes through the sun
     Description:      displayed while the arrow is being rotated

                         .in 0n+.5i
     Resource:         spotLightRotatorFeedback
                         .in 0n+.5i
     Appearance:       empty Separator
     Description:      this  disables  display of the axes that a rotateSpherical dragger uses by

                         .in 0n+.5i
     Resource:         spotLightRotatorFeedbackActive
                         .in 0n+.5i
     Part:             rotator.feedbackActive
     Appearance:       empty Separator
     Description:      this disables display of the axes that a rotateSpherical dragger  uses  by

                         .in 0n+.5i
     Resource:         spotLightOverallMaterial
                         .in 0n+.5i
     Part:             material
     Appearance:       white. half strength emissive, half strength diffuse
     Description:      sets  material  for the sun shape when stationary. Resource for the moving
                         sun,   spotLightTranslatorPlaneTranslatorActive,   contains   a   yellow
                         material for highlighting.

                         .in 0n+.5i
     Resource:         spotLightTranslatorPlaneTranslator
                         .in 0n+.5i
     Parts:            translator.yzTranslator.translator
     Appearance:       sun shape with no material
     Description:      picking  these  parts  initiates  dragging  by  the  yz, xz, and xy planar
                         draggers respectively.

                         .in 0n+.5i
     Resource:         spotLightTranslatorPlaneTranslatorActive
                         .in 0n+.5i
     Parts:            translator.yzTranslator.translatorActive
     Appearance:       yellow sun shape
     Description:      shown during planar dragging in the yz, xz, and xy planes respectively.

                         .in 0n+.5i
     Resource:         spotLightTranslatorLineTranslator
                         .in 0n+.5i
     Parts:            translator.xTranslator.translator
     Appearance:       white cylinder
     Description:      picking these parts initiates dragging in the x, y, and z linear  draggers

                         .in 0n+.5i
     Resource:         spotLightTranslatorLineTranslatorActive
                         .in 0n+.5i
     Parts:            translator.xTranslator.translatorActive
     Appearance:       yellow cylinder
     Description:      shown during linear dragging in the x, y, and z directions respectively.


       SpotLightDragger {
          renderCaching                             AUTO
          boundingBoxCaching                        AUTO
          renderCulling                             AUTO
          pickCulling                               AUTO
          isActive                                  FALSE
          rotation                                  0 0 1  0
          translation                               0 0 0
          angle                                     1
          callbackList                              NULL
          material                                  <spotLightOverallMaterial resource>
          translator                                DragPointDragger {

          rotator                                   RotateSphericalDragger {

          beamPlacement                             <spotLightBeamPlacement resource>
          beamScale                                 Scale {
              scaleFactor 0.841471 0.841471 0.540302 }

          beam                                      <spotLightBeam resource>
          beamActive                                <spotLightBeamActive resource>
          rotator.rotator                           <spotLightRotatorRotator resource>
          rotator.rotatorActive                     <spotLightRotatorRotatorActive resource>
                          <spotLightRotatorFeedback resource>
          rotator.feedbackActive                    <spotLightRotatorFeedbackActive resource>
          translator.yzTranslator.translator        <spotLightTranslatorPlaneTranslator resource>
          translator.xzTranslator.translator        <spotLightTranslatorPlaneTranslator resource>
          translator.xyTranslator.translator        <spotLightTranslatorPlaneTranslator resource>
          translator.yzTranslator.translatorActive  <spotLightTranslatorPlaneTranslatorActive resource>
          translator.xzTranslator.translatorActive  <spotLightTranslatorPlaneTranslatorActive resource>
          translator.xyTranslator.translatorActive  <spotLightTranslatorPlaneTranslatorActive resource>
          translator.xTranslator.translator         <spotLightTranslatorLineTranslator resource>
          translator.yTranslator.translator         <spotLightTranslatorLineTranslator resource>
          translator.zTranslator.translator         <spotLightTranslatorLineTranslator resource>
          translator.xTranslator.translatorActive   <spotLightTranslatorLineTranslatorActive resource>
          translator.yTranslator.translatorActive   <spotLightTranslatorLineTranslatorActive resource>
          translator.zTranslator.translatorActive   <spotLightTranslatorLineTranslatorActive resource>


       SoInteractionKit,      SoDragger,      SoCenterballDragger,     SoDirectionalLightDragger,
       SoDragPointDragger,      SoHandleBoxDragger,      SoJackDragger,      SoPointLightDragger,
       SoRotateCylindricalDragger,         SoRotateDiscDragger,         SoRotateSphericalDragger,
       SoScale1Dragger,    SoScale2Dragger,    SoScale2UniformDragger,     SoScaleUniformDragger,
       SoTabBoxDragger,     SoTabPlaneDragger,     SoTrackballDragger,     SoTransformBoxDragger,
       SoTransformerDragger, SoTranslate1Dragger, SoTranslate2Dragger