SoCenterballDragger(3IV)

SoCenterballDragger (SoCballDrag) - striped ball you rotate and re-center by dragging with the mouse

As shipped in IRIX 6.5.30. Added in IRIX 6.5.22.

NAME
     SoCenterballDragger (SoCballDrag) - striped ball you rotate and re-center
     by dragging with the mouse

INHERITS FROM
     SoBase > SoFieldContainer > SoNode > SoBaseKit > SoInteractionKit >
     SoDragger > SoCenterballDragger

SYNOPSIS
     #include <Inventor_c/draggers/SoCenterballDragger.h>

     typedef SoCenterballDragger  SoCballDrag

          Fields from class SoCenterballDragger:

     SoSFRotation        rotation
     SoSFVec3f           center

          Fields from class SoDragger:

     SoSFBool            isActive

          Fields from class SoInteractionKit:

     SoSFEnum            renderCaching
     SoSFEnum            boundingBoxCaching
     SoSFEnum            renderCulling
     SoSFEnum            pickCulling

          Parts from class SoBaseKit:

     (SoNodeKitListPart)  callbackList

          Functions from class SoCenterballDragger:

     SoCenterballDragger *     SoCballDragCreate()
     const SoNodekitCatalog *  SoCballDragGetClassNkitCat()
     SoType                    SoCballDragGetClassTypeId()

          Functions from class SoDragger:

     void                SoCballDragAddStartCB(SoCballDrag *this, SoDraggerCB
                              *f, void *userData = NULL)
     void                SoCballDragRemoveStartCB(SoCballDrag *this,
                              SoDraggerCB *f, void *userData = NULL)
     void                SoCballDragAddMotionCB(SoCballDrag *this, SoDraggerCB
                              *f, void *userData = NULL)
     void                SoCballDragRemoveMotionCB(SoCballDrag *this,
                              SoDraggerCB *f, void *userData = NULL)
     void                SoCballDragAddFinishCB(SoCballDrag *this, SoDraggerCB
                              *f, void *userData = NULL)

     void                SoCballDragRemoveFinishCB(SoCballDrag *this,
                              SoDraggerCB *f, void *userData = NULL)
     void                SoCballDragAddValueChangedCB(SoCballDrag *this,
                              SoDraggerCB *f, void *userData = NULL)
     void                SoCballDragRemoveValueChangedCB(SoCballDrag *this,
                              SoDraggerCB *f, void *userData = NULL)
     SbBool              SoCballDragEnableValueChangedCBs(SoCballDrag *this)
     void                SoCballDragSetMinGesture(SoCballDrag *this, int
                              pixels)
     int                 SoCballDragGetMinGesture(const SoCballDrag *this)
     void                SoCballDragSetMinScale(float newMinScale)
     float               SoCballDragGetMinScale()

          Functions from class SoInteractionKit:

     SbBool              SoCballDragSetPartAsPath(SoCballDrag *this, const
                              char *partName, SoPath *surrogatePath )

          Functions from class SoBaseKit:

     const SoNodekitCatalog *  SoCballDragGetCat(const SoCballDrag *this)
     SoNode *                  SoCballDragGetPart(SoCballDrag *this, const
                                    char *partName, SbBool makeIfNeeded)
     SbString                  SoCballDragGetPartString(SoCballDrag *this,
                                    const SoBase *part)
     SoNodeKitPath *           SoCballDragCreatePathToPart(SoCballDrag *this,
                                    const char *partName, SbBool makeIfNeeded,
                                    const SoPath *pathToExtend = NULL)
     SbBool                    SoCballDragSetPart(SoCballDrag *this, const
                                    char *partName, SoNode *newPart)
     SbBool                    SoCballDragSet(SoCballDrag *this, char
                                    *partName, char *parameters)
     SbBool                    SoCballDragSet2(SoCballDrag *this, char
                                    *nameValuePairs)
     SbBool                    SoCballDragIsSearchingChildren()
     void                      SoCballDragSetSearchingChildren(SbBool newVal)

          Functions from class SoNode:

     void                SoCballDragSetOverride(SoCballDrag *this, SbBool
                              state)
     SbBool              SoCballDragIsOverride(const SoCballDrag *this)
     SoNode *            SoCballDragCopy(const SoCballDrag *this, SbBool
                              copyConnections = FALSE)
     SbBool              SoCballDragAffectsState(const SoCballDrag *this)
     SoNode *            SoCballDragGetByName(const char *name)
     int                 SoCballDragGetByNameList(const char *name, SoNodeList
                              *list)

          Functions from class SoFieldContainer:

     void                SoCballDragSetToDflts(SoCballDrag *this)
     SbBool              SoCballDragHasDfltVals(const SoCballDrag *this)
     SbBool              SoCballDragFldsAreEq(const SoCballDrag *this, const
                              SoFieldContainer *fc)
     void                SoCballDragCopyFieldVals(SoCballDrag *this, const
                              SoFieldContainer *fc, SbBool copyConnections =
                              FALSE)
     void                SoCballDragGet(SoCballDrag *this, SbString
                              *fieldDataString)
     int                 SoCballDragGetFields(const SoCballDrag *this,
                              SoFieldList *resultList)
     SoField *           SoCballDragGetField(const SoCballDrag *this, const
                              char *fieldName)
     SbBool              SoCballDragGetFieldName(const SoCballDrag *this,
                              const SoField *field, SbName *fieldName)
     SbBool              SoCballDragIsNotifyEnabled(const SoCballDrag *this)
     SbBool              SoCballDragEnableNotify(SoCballDrag *this, SbBool
                              flag)

          Functions from class SoBase:

     void                SoCballDragRef(SoCballDrag *this)
     void                SoCballDragUnref(const SoCballDrag *this)
     void                SoCballDragUnrefNoDelete(const SoCballDrag *this)
     void                SoCballDragTouch(SoCballDrag *this)
     SoType              SoCballDragGetTypeId(const SoCballDrag *this)
     SbBool              SoCballDragIsOfType(const SoCballDrag *this, SoType
                              type)
     void                SoCballDragSetName(SoCballDrag *this, const char
                              *name)
     SbName              SoCballDragGetName(const SoCballDrag *this)


DESCRIPTION
     SoCenterballDragger is a composite dragger. Its shape is a sphere defined
     by three intersecting circles. Where the circles intersect (at the ends
     of the x, y and z axes) there are sets of small green crosshairs.
     Dragging a pair of crosshairs translates the entire centerball within the
     plane of the crosshairs. The interface of the sphere and circles is just
     like SoTrackballDragger. Dragging a circle rotates about a constrained
     axis and dragging the areas between them rotates the sphere freely about
     the center. An invisible but pickable sphere initiates the free-rotation
     dragging.

     When you drag the crosshairs, the center field is updated; there is no
     translation field. Dragging other parts of the centerball updates the
     rotation field. As with all draggers, if you change the fields the
     dragger moves in response.

     The draggers used for the crosshair parts are SoTranslate2Draggers, so
     pressing the <Shift> key allows you to constrain motion to slide along
     either the local x axis or y axis of that crosshair.. The direction is
     determined by your initial mouse gesture after pressing the key.
     Releasing the key removes the constraint.

     Remember: This is not an SoTransform! If you want to move other objects
     with this dragger, you can either:

     [a] Use an SoCenterballManip, which is subclassed from SoTransform. The
     manipulator creates one of these draggers and uses it as the interface to
     edit the manipulator's fields. (See the SoCenterballManip man page.)

     [b] Use field-to-field connections to connect the fields of this dragger
     to those of any SoTransformation node.

     You can change the parts in any instance of this dragger using
     SoDraggerSetPart(). The default part geometries are defined as resources
     for this SoCenterballDragger class. They are detailed in the Dragger
     Resources section of the online reference page for this class. You can
     make your program use different default resources for the parts by
     copying the file /usr/share/data/draggerDefaults/centerballDragger.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 centerball dragger.

     SoSFVec3f           center
          Center of rotation and scale of the centerball dragger.


FUNCTIONS
     SoCenterballDragger *     SoCballDragCreate()
          Constructor.

     const SoNodekitCatalog *  SoCballDragGetClassNkitCat()
          Returns an SoNodekitCatalog for this class.

     SoType                    SoCballDragGetClassTypeId()
          Returns type identifier for this class.


CATALOG PARTS

     _______________________________________________________________________
                                    All parts
                                                                    NULL by
      Part Name           Part Type                  Default Type   Default

      callbackList        NodeKitListPart            --               yes
      translateToCenter   MatrixTransform            --               yes
      surroundScale       SurroundScale              --               yes
      antiSquish          AntiSquish                 --               no
      lightModel          LightModel                 --               yes
      XAxis               Separator                  --               yes
      YAxis               Separator                  --               yes
      ZAxis               Separator                  --               yes
      rotator             RotateSphericalDragger     --               yes
      YRotator            RotateCylindricalDragger   --               yes
      ZCenterChanger      Translate2Dragger          --               yes
      ZRotator            RotateCylindricalDragger   --               yes
      YCenterChanger      Translate2Dragger          --               yes
      XCenterChanger      Translate2Dragger          --               yes
      XRotator            RotateCylindricalDragger   --               yes

     _______________________________________________________________________
     |


















                                                                            |



















     ________________________________________________________________
            Extra information for list parts from above table

      Part Name      Container Type   Permissible Types

                                      Callback, EventCallback
      callbackList   Separator

     ________________________________________________________________
     |




                                                                     |






DRAGGER RESOURCES
     Resource:         centerballRotator
     Part:             rotator.rotator
     Appearance:       Invisible but pickable sphere
     Description:      When picked, initiates free rotation about the center
                         point. Slightly smaller radius than the stripes, so
                         you must pick between the stripes to use it.

     Resource:         centerballRotatorActive
     Part:             rotator.rotatorActive
     Appearance:       Invisible sphere
     Description:      Displayed during unconstrained 3D rotation instead of
                         centerballRotator.

     Resource:         centerballStripe
     Parts:            XRotator.rotator
                       YRotator.rotator
                       ZRotator.rotator
     Appearance:       White circle aligned with rotation axis.
     Description:      When picked, initiates constrained rotation. Each
                         rotator rotates locally about its Y axis. The
                         centerball contains private transform parts that
                         orient the draggers along three different axes.
     Resource:         centerballStripeActive
     Parts:            XRotator.rotatorActive
                       YRotator.rotatorActive
                       ZRotator.rotatorActive
     Appearance:       White circle aligned with the rotation axis.
     Description:      Displayed during constrained rotation instead of the
                         rotator part. The centerball orients the draggers
                         along three different axes.

     Resource:         centerballCenterChanger
     Parts:            XCenterChanger.translator
                       YCenterChanger.translator
                       ZCenterChanger.translator
     Appearance:       Two sets of small green crosshairs, one located at each
     intersection of axis and ball.
     Description:      When picked, initiates 2D translation of ball through
                         space. Edits the center field, which becomes center
                         for subsequent rotations. Each translator works
                         locally in its X-Y plane. The centerball contains
                         private transform parts that place the draggers along
                         three different axes.

     Resource:         centerballCenterChangerActive
     Parts:            XCenterChanger.translatorActive
                       YCenterChanger.translatorActive
                       ZCenterChanger.translatorActive
     Appearance:       Yellow version of centerballCenterChanger.
     Description:      Displayed during 2D translation instead of regular
                         translator part. The centerball places the draggers
                         along three different axes.

     Resource:         centerballCenterXAxisFeedback
     Parts:            XCenterChanger.xAxisFeedback
                       YCenterChanger.xAxisFeedback
                       ZCenterChanger.xAxisFeedback
     Appearance:       Double-headed purple arrows, one located at each
     intersection of axis and ball. Located atop X axis of crosshair.
     Description:      Only shown if dragger is moving and the axis is a
                         permitted direction of motion. When pressing <shift>,
                         motion is constrained, and this is displayed only if
                         the primary motion is in the X direction of the child
                         dragger's local space. The centerball places the
                         draggers along three different axes; so not all of
                         these parts aligns with the X axis in centerball
                         space.

     Resource:         centerballCenterYAxisFeedback
     Parts:            XCenterChanger.yAxisFeedback
                       YCenterChanger.yAxisFeedback
                       ZCenterChanger.yAxisFeedback
     Appearance:       Double-headed purple arrows, one located at each
     intersection of axis and ball. Located atop Y axis of crosshair.
     Description:      Only shown if dragger is moving and the axis is a
                         permitted direction of motion. When pressing <shift>,
                         motion is constrained, and this is displayed only if
                         the primary motion is in the Y direction of the child
                         dragger's local space. The centerball places the
                         draggers along three different axes; so not all of
                         these parts aligns with the Y axis in centerball
                         space.

     Resource:         centerballXAxis
     Part:             XAxis
     Appearance:       Thin yellow line connecting left and right crosshairs.
     Description:      Feedback shown alone during rotation about X axis;
                         displayed with centerballYAxis and centerballZAxis
                         while center is dragged.

     Resource:         centerballYAxis
     Part:             YAxis
     Appearance:       Thin yellow line connecting lower and upper crosshairs.
     Description:      Feedback shown alone during rotation about Y axis;
                         displayed with centerballXAxis and centerballZAxis
                         while center is dragged.

     Resource:         centerballZAxis
     Part:             ZAxis
     Appearance:       Thin yellow line connecting near and far crosshairs.
     Description:      Feedback shown alone during rotation about Z axis;
                         displayed with centerballXAxis and centerballYAxis
                         while center is dragged.


FILE FORMAT/DEFAULTS
     CenterballDragger {
          renderCaching                    AUTO
          boundingBoxCaching               AUTO
          renderCulling                    AUTO
          pickCulling                      AUTO
          isActive                         FALSE
          rotation                         0 0 1  0
          center                           0 0 0
          callbackList                     NULL
          translateToCenter                MatrixTransform {
              matrix 1 0 0 0
                                               0 1 0 0
                                               0 0 1 0
                                               0 0 0 1 }

          surroundScale                    NULL
          antiSquish                       AntiSquish {
              sizing LONGEST_DIAGONAL }

          lightModel                       LightModel {
              model PHONG }

          XAxis                            <centerballXAxis resource>
          YAxis                            <centerballYAxis resource>
          ZAxis                            <centerballZAxis resource>
          rotator                          RotateSphericalDragger {
          }

          YRotator                         RotateCylindricalDragger {
          }

          ZCenterChanger                   Translate2Dragger {
          }

          ZRotator                         RotateCylindricalDragger {
          }

          YCenterChanger                   Translate2Dragger {
          }

          XCenterChanger                   Translate2Dragger {
          }

          XRotator                         RotateCylindricalDragger {
          }

          rotator.rotator                  <centerballRotator resource>
          rotator.rotatorActive            <centerballRotatorActive resource>
          XRotator.rotator                 <centerballStripe resource>
          YRotator.rotator                 <centerballStripe resource>
          ZRotator.rotator                 <centerballStripe resource>
          XRotator.rotatorActive           <centerballStripeActive resource>
          YRotator.rotatorActive           <centerballStripeActive resource>
          ZRotator.rotatorActive           <centerballStripeActive resource>
          XCenterChanger.translator        <centerballCenterChanger resource>
          YCenterChanger.translator        <centerballCenterChanger resource>
          ZCenterChanger.translator        <centerballCenterChanger resource>
          XCenterChanger.translatorActive  <centerballCenterChangerActive resource>
          YCenterChanger.translatorActive  <centerballCenterChangerActive resource>
          ZCenterChanger.translatorActive  <centerballCenterChangerActive resource>
          XCenterChanger.xAxisFeedback     <centerballCenterXAxisFeedback resource>
          YCenterChanger.xAxisFeedback     <centerballCenterXAxisFeedback resource>
          ZCenterChanger.xAxisFeedback     <centerballCenterXAxisFeedback resource>
          XCenterChanger.yAxisFeedback     <centerballCenterYAxisFeedback resource>
          YCenterChanger.yAxisFeedback     <centerballCenterYAxisFeedback resource>
          ZCenterChanger.yAxisFeedback     <centerballCenterYAxisFeedback resource>
     }

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