Provided by: inventor-doc_2.1.6+ds-2_all bug

NAME

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

INHERITS FROM

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

SYNOPSIS

       #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:

                         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 = FALSE)
     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)

DESCRIPTION

       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 directory.

FIELDS

     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.

METHODS

                         SoSpotLightDragger()
          Constructor.

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

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

CATALOG PARTS

       ┌─────────────────────────────────────────────────────────────────┐
       │                            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        │
       │                                                                │
       └────────────────────────────────────────────────────────────────┘

DRAGGER RESOURCES

       .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
     Part:             rotator.feedback
     Appearance:       empty Separator
     Description:      this disables display of the axes that a rotateSpherical dragger uses by default

                         .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 default

                         .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
                                           translator.xzTranslator.translator
                                           translator.xyTranslator.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
                                           translator.xzTranslator.translatorActive
                                           translator.xyTranslator.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
                                           translator.yTranslator.translator
                                           translator.zTranslator.translator
     Appearance:       white cylinder
     Description:      picking these parts initiates dragging in the x, y, and z linear draggers respectively.

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

FILE FORMAT/DEFAULTS

       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>
          rotator.feedback                          <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>
     }

SEE ALSO

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

                                                                                       SoSpotLightDragger(3IV)()