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


       SoSurroundScale  —  transformation  node that adjusts the current matrix so a default cube
       will surround other objects


       SoBase > SoFieldContainer > SoNode > SoTransformation > SoSurroundScale


       #include <Inventor/nodes/SoSurroundScale.h>

          Fields from class SoSurroundScale:

     SoSFInt32           numNodesUpToContainer
     SoSFInt32           numNodesUpToReset

          Methods from class SoSurroundScale:

     void                invalidate()
     static SoType       getClassTypeId()

          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  =
     SbBool              set(const char *fieldDataString)
     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


       When  traversed  by  an  action,  this  node  appends  a  transformation  to  the  current
       transformation matrix so that a default size cube will surround the objects  specified  by
       its  fields.  Transform  manipulators,  such  as SoHandleBoxManip, use these nodes to make
       themselves surround other objects.

       This node only recalculates after the invalidate() method has been  called.  Otherwise  it
       uses a saved scale and translation.

       When  calculating  what  to surround, the SoSurroundScale looks at the current path in the
       action and at its own field values. Then SoSurroundScale applies an SoGetBoundingBoxAction
       to the node that is numNodesUpToContainer nodes above it on the path. SoSurroundScale also
       tells  the  action  to  reset  the  bounding  box  upon  traversal  of  the  node  located
       numNodesUpToReset  nodes  above  it  in  the  path.  The  SoSurroundScale  then  appends a
       translation and scale to the current transformation so that a  default  size  SoCube  will
       translate and scale to fit this bounding box.

       For  example,  when an SoHandleBoxManip wants to surround the objects it is going to move,
       the scene graph will look something like this:
                 |                        |
               handleBoxManip        movingStuff
                |            |                     |
              motionMatrix  surroundScale      cubeGeom
     The SoHandleBoxDragger wants to transform the cubeGeom so that it surrounds the movingStuff.
     So it sets the surroundScale fields to:

               numNodesUpToContainer = 4;
               numNodesUpToReset = 3;

     The  SoBoundingBoxAction will then be applied to RootNode, with a reset after traversing the
     SoHandleBoxManip. So the SoSurroundScale will surround the objects below separator,  and  to
     the right of handleBoxManip, producing the desired effect.


     SoSFInt32           numNodesUpToContainer
          When  traversed  by  an  action,  if  surroundScale  needs  to  calculate  a  new  box,
          surroundScale looks at the current path in the  action.  It  travels  up  this  path  a
          distance  of  numNodesUpToContainer  and  applies an SoGetBoundingBoxAction to the node
          that it finds there.

     SoSFInt32           numNodesUpToReset
          Before applying the SoGetBoundingBoxAction (see the numNodesUpToContainer  field  aove)
          the  surroundScale  node  travels up the path a distance of numNodesUpToReset and tells
          the action to reset the bounding box upon traversal of that node.


          Creates a surround scale node with default settings.

     void                invalidate()
          If you call this, then next time an action is applied the node will  re-calculate  it's
          cached translation and scale values.

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


       SoGLRenderAction, SoCallbackAction, SoGetBoundingBoxAction, SoRayPickAction
          Accumulates scaling and translation transformations into the current transformation.

          Returns the matrix corresponding to the scaling and translation.


       SurroundScale {
          numNodesUpToContainer  0
          numNodesUpToReset      0


       SoTransformation,      SoTransformManip,      SoCenterballDragger,      SoCenterballManip,
       SoHandleBoxDragger,   SoHandleBoxManip,   SoJackDragger,   SoJackManip,   SoTabBoxDragger,
       SoTabBoxManip,      SoTrackballDragger,      SoTrackballManip,      SoTransformBoxDragger,