logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

SoCenterballDragger — striped ball you rotate and re-center by dragging with the mouse

Catalog Parts

       ┌───────────────────────────────────────────────────────────────────────┐
       │                               Allparts                               │
       │                                                               NULLby │
       │ PartNamePartTypeDefaultTypeDefault │
       │                                                                       │
       │ 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   │
       │                                                                       │
       └───────────────────────────────────────────────────────────────────────┘
       ┌────────────────────────────────────────────────────────────────┐
       │       Extrainformationforlistpartsfromabovetable        │
       │                                                                │
       │ PartNameContainerTypePermissibleTypes              │
       │                                                                │
       │ callbackList   Separator        Callback, EventCallback        │
       │                                                                │
       └────────────────────────────────────────────────────────────────┘

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  xaxis  or  yaxis  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 setPart(). 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.

Dragger Resources

       .in 0n+.5i
     Resource:         centerballRotator
       .in 0n+.5i
     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.

                         .in 0n+.5i
     Resource:         centerballRotatorActive
                         .in 0n+.5i
     Part:             rotator.rotatorActive
     Appearance:       Invisible sphere
     Description:      Displayed during unconstrained 3D rotation instead of centerballRotator.

                         .in 0n+.5i
     Resource:         centerballStripe
                         .in 0n+.5i
     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.

                         .in 0n+.5i
     Resource:         centerballStripeActive
                         .in 0n+.5i
     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.

                         .in 0n+.5i
     Resource:         centerballCenterChanger
                         .in 0n+.5i
     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.

                         .in 0n+.5i
     Resource:         centerballCenterChangerActive
                         .in 0n+.5i
     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.

                         .in 0n+.5i
     Resource:         centerballCenterXAxisFeedback
                         .in 0n+.5i
     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.

                         .in 0n+.5i
     Resource:         centerballCenterYAxisFeedback
                         .in 0n+.5i
     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.

                         .in 0n+.5i
     Resource:         centerballXAxis
                         .in 0n+.5i
     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.

                         .in 0n+.5i
     Resource:         centerballYAxis
                         .in 0n+.5i
     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.

                         .in 0n+.5i
     Resource:         centerballZAxis
                         .in 0n+.5i
     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.

Fields

SoSFRotationrotation
          Orientation of the centerball dragger.

     SoSFVec3fcenter
          Center of rotation and scale of the centerball dragger.

File Format/Defaults

CenterballDragger{renderCachingAUTOboundingBoxCachingAUTOrenderCullingAUTOpickCullingAUTOisActiveFALSErotation0010center000callbackListNULLtranslateToCenterMatrixTransform{matrix1000010000100001}surroundScaleNULLantiSquishAntiSquish{sizingLONGEST_DIAGONAL}lightModelLightModel{modelPHONG}XAxis<centerballXAxisresource>YAxis<centerballYAxisresource>ZAxis<centerballZAxisresource>rotatorRotateSphericalDragger{}YRotatorRotateCylindricalDragger{}ZCenterChangerTranslate2Dragger{}ZRotatorRotateCylindricalDragger{}YCenterChangerTranslate2Dragger{}XCenterChangerTranslate2Dragger{}XRotatorRotateCylindricalDragger{}rotator.rotator<centerballRotatorresource>rotator.rotatorActive<centerballRotatorActiveresource>XRotator.rotator<centerballStriperesource>YRotator.rotator<centerballStriperesource>ZRotator.rotator<centerballStriperesource>XRotator.rotatorActive<centerballStripeActiveresource>YRotator.rotatorActive<centerballStripeActiveresource>ZRotator.rotatorActive<centerballStripeActiveresource>XCenterChanger.translator<centerballCenterChangerresource>YCenterChanger.translator<centerballCenterChangerresource>ZCenterChanger.translator<centerballCenterChangerresource>XCenterChanger.translatorActive<centerballCenterChangerActiveresource>YCenterChanger.translatorActive<centerballCenterChangerActiveresource>ZCenterChanger.translatorActive<centerballCenterChangerActiveresource>XCenterChanger.xAxisFeedback<centerballCenterXAxisFeedbackresource>YCenterChanger.xAxisFeedback<centerballCenterXAxisFeedbackresource>ZCenterChanger.xAxisFeedback<centerballCenterXAxisFeedbackresource>XCenterChanger.yAxisFeedback<centerballCenterYAxisFeedbackresource>YCenterChanger.yAxisFeedback<centerballCenterYAxisFeedbackresource>ZCenterChanger.yAxisFeedback<centerballCenterYAxisFeedbackresource>}

Inherits From

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

Methods

SoCenterballDragger()
          Constructor.

     staticconstSoNodekitCatalog*getClassNodekitCatalog()const
          Returns an SoNodekitCatalog for this class.

     staticSoTypegetClassTypeId()
          Returns type identifier for this class.

Name

       SoCenterballDragger — striped ball you rotate and re-center by dragging with the mouse

See Also

SoInteractionKit,SoDragger,SoDirectionalLightDragger,SoDragPointDragger,SoHandleBoxDragger,SoJackDragger,SoPointLightDragger,SoRotateCylindricalDragger,SoRotateDiscDragger,SoRotateSphericalDragger,SoScale1Dragger,SoScale2Dragger,SoScale2UniformDragger,SoScaleUniformDragger,SoSpotLightDragger,SoTabBoxDragger,SoTabPlaneDragger,SoTrackballDragger,SoTransformBoxDragger,SoTranslate1Dragger,SoTranslate2DraggerSoCenterballDragger(3IV)()

Synopsis

#include<Inventor/draggers/SoCenterballDragger.h>

          Fields from class SoCenterballDragger:

     SoSFRotationrotationSoSFVec3fcenter

          Fields from class SoDragger:

     SoSFBoolisActive

          Fields from class SoInteractionKit:

     SoSFEnumrenderCachingSoSFEnumboundingBoxCachingSoSFEnumrenderCullingSoSFEnumpickCulling

          Parts from class SoBaseKit:

     (SoNodeKitListPart)callbackList

          Methods from class SoCenterballDragger:

                         SoCenterballDragger()staticconstSoNodekitCatalog*getClassNodekitCatalog()conststaticSoTypegetClassTypeId()

          Methods from class SoDragger:

     voidaddStartCallback(SoDraggerCB*f,void*userData=NULL)voidremoveStartCallback(SoDraggerCB*f,void*userData=NULL)voidaddMotionCallback(SoDraggerCB*f,void*userData=NULL)voidremoveMotionCallback(SoDraggerCB*f,void*userData=NULL)voidaddFinishCallback(SoDraggerCB*f,void*userData=NULL)voidremoveFinishCallback(SoDraggerCB*f,void*userData=NULL)voidaddValueChangedCallback(SoDraggerCB*f,void*userData=NULL)voidremoveValueChangedCallback(SoDraggerCB*f,void*userData=NULL)SbBoolenableValueChangedCallbacks()voidsetMinGesture(intpixels)intgetMinGesture()conststaticvoidsetMinScale(floatnewMinScale)staticfloatgetMinScale()

          Methods from class SoInteractionKit:

     virtualSbBoolsetPartAsPath(constSbName&partName,SoPath*surrogatePath)

          Methods from class SoBaseKit:

     virtualconstSoNodekitCatalog*getNodekitCatalog()constvirtualSoNode*getPart(constSbName&partName,SbBoolmakeIfNeeded)SbStringgetPartString(constSoBase*part)virtualSoNodeKitPath*createPathToPart(constSbName&partName,SbBoolmakeIfNeeded,constSoPath*pathToExtend=NULL)virtualSbBoolsetPart(constSbName&partName,SoNode*newPart)SbBoolset(char*partName,char*parameters)SbBoolset(char*nameValuePairs)staticSbBoolisSearchingChildren()staticvoidsetSearchingChildren(SbBoolnewVal)

          Methods from class SoNode:

     voidsetOverride(SbBoolstate)SbBoolisOverride()constSoNode*copy(SbBoolcopyConnections=FALSE)constvirtualSbBoolaffectsState()conststaticSoNode*getByName(constSbName&name)staticintgetByName(constSbName&name,SoNodeList&list)

          Methods from class SoFieldContainer:

     voidsetToDefaults()SbBoolhasDefaultValues()constSbBoolfieldsAreEqual(constSoFieldContainer*fc)constvoidcopyFieldValues(constSoFieldContainer*fc,SbBoolcopyConnections=FALSE)voidget(SbString&fieldDataString)virtualintgetFields(SoFieldList&resultList)constvirtualSoField*getField(constSbName&fieldName)constSbBoolgetFieldName(constSoField*field,SbName&fieldName)constSbBoolisNotifyEnabled()constSbBoolenableNotify(SbBoolflag)

          Methods from class SoBase:

     voidref()voidunref()constvoidunrefNoDelete()constvoidtouch()virtualSoTypegetTypeId()constSbBoolisOfType(SoTypetype)constvirtualvoidsetName(constSbName&name)virtualSbNamegetName()const

          Macros from class SoBaseKit:

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

See Also