Man Linux: Main Page and Category List

NAME

       SoSurroundScale -

       The SoSurroundScale class is used to automatically scale geometry to
       surround other geometry.

       This node calculates a transformation (a translation and a scale) which
       will, when the node is traversed, be appended to the current model
       matrix, making a default cube placed directly to the right of this node
       in the graph surround geometry to the right of the container branch
       this node is on. The container is specified by the field
       SoSurroundScale::numNodesUpToContainer.

SYNOPSIS

       #include <Inventor/nodes/SoSurroundScale.h>

       Inherits SoTransformation.

   Public Member Functions
       SoSurroundScale (void)
       void invalidate (void)
       virtual void doAction (SoAction *action)
       void setDoingTranslations (const SbBool val)
       SbBool isDoingTranslations (void)

   Static Public Member Functions
       static void initClass (void)

   Public Attributes
       SoSFInt32 numNodesUpToContainer
       SoSFInt32 numNodesUpToReset

   Protected Member Functions
       virtual ~SoSurroundScale ()
       virtual void callback (SoCallbackAction *action)
       virtual void GLRender (SoGLRenderAction *action)
       virtual void getBoundingBox (SoGetBoundingBoxAction *action)
       virtual void getMatrix (SoGetMatrixAction *action)
       virtual void pick (SoPickAction *action)
       void updateMySurroundParams (SoAction *action, const SbMatrix &inv)
       void setIgnoreInBbox (const SbBool val)
       SbBool isIgnoreInBbox (void)

   Protected Attributes
       SbVec3f cachedScale
       SbVec3f cachedInvScale
       SbVec3f cachedTranslation
       SbBool cacheOK
       SbBool doTranslations

Detailed Description

       The SoSurroundScale class is used to automatically scale geometry to
       surround other geometry.

       This node calculates a transformation (a translation and a scale) which
       will, when the node is traversed, be appended to the current model
       matrix, making a default cube placed directly to the right of this node
       in the graph surround geometry to the right of the container branch
       this node is on. The container is specified by the field
       SoSurroundScale::numNodesUpToContainer.

       When calculating the bounding box to be surrounded, the bounding box
       action will be applied to the container node, and the bounding box
       calculations will be reset after traversing the node specified by the
       field SoSurroundScale::numNodesUpToReset.

       A way of thinking of the container node is that there exists a path
       from the root-node to the SoSurroundScale node. This path has a number
       of nodes in it. numNodesUpToContainer is the number of nodes in the
       path from the SoSurroundScale node towards the root node. When having
       counted numNodesUpToContainer from the SoSurroundScale node, you will
       have reached the container node. The container node is the seed-node
       that the bounding box is calculated from. All nodes lower than the
       seed-node will be a part of the bounding box unless they are closer to
       the SoSurroundScale node than numNodesUpToReset.

       To make sure the node(s) that are to be scaled by the SoSurroundScale
       node aren’t a part of the bounding box, the numNodesUpToReset is used.
       It is also the number of nodes up from the SoSurroundScale node towards
       the root node. The meaning of numNodesUpToReset is that nodes that are
       closer to the SoSurroundNode than the node at position
       numNodesUpToReset are not to be used for bounding box calculations.

       Here’s a complete, stand-alone example which sets up an
       SoTrackballDragger (connected to a cube), and uses an SoSurroundScale
       node to make it auto-scale to the size of the high cube and translates
       it an offset to one side of the cube:

         #include <Inventor/Qt/SoQt.h>
         #include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
         #include <Inventor/draggers/SoTrackballDragger.h>
         #include <Inventor/nodes/SoAntiSquish.h>
         #include <Inventor/nodes/SoSeparator.h>
         #include <Inventor/nodes/SoCube.h>
         #include <Inventor/nodes/SoSurroundScale.h>
         #include <Inventor/nodes/SoRotation.h>
         #include <Inventor/nodes/SoTranslation.h>

         int
         main(int argc, char **argv)
         {
           QWidget * window = SoQt::init(argv[0]);
           if (window == NULL) exit(1);

           SoSeparator * root = new SoSeparator;
           root->ref();

           SoSeparator * surroundsep = new SoSeparator;
           root->addChild(surroundsep);

           SoTranslation * translation = new SoTranslation;
           translation->translation = SbVec3f(12, 0, 0);
           surroundsep->addChild(translation);

           SoSurroundScale * ss = new SoSurroundScale;
           ss->numNodesUpToReset = 1;
           ss->numNodesUpToContainer = 2;
           surroundsep->addChild(ss);

           SoAntiSquish * antisquish = new SoAntiSquish;
           antisquish->sizing = SoAntiSquish::BIGGEST_DIMENSION;
           surroundsep->addChild(antisquish);

           SoTrackballDragger * dragger = new SoTrackballDragger;
           surroundsep->addChild(dragger);

           SoRotation * rotation = new SoRotation;
           rotation->rotation.connectFrom(& dragger->rotation);
           root->addChild(rotation);

           SoCube * cube = new SoCube;
           cube->height = 10.0f;
           root->addChild(cube);

           SoQtExaminerViewer * viewer = new SoQtExaminerViewer(window);
           viewer->setSceneGraph(root);
           viewer->setViewing(FALSE);
           viewer->setDecoration(FALSE);
           viewer->show();

           SoQt::show(window);
           SoQt::mainLoop();

           delete viewer;
           root->unref();

           return 0;
         }

       It might be easier to see how the SoSurroundScale node works in the
       above example by looking at the actual scenegraph:

         #Inventor V2.1 ascii

         Separator {
            Separator {
               Translation {
                  translation 12 0 0
               }
               SurroundScale {
                  numNodesUpToContainer 2
                  numNodesUpToReset 1
               }
               AntiSquish {
                  sizing BIGGEST_DIMENSION
               }
               DEF mydragger TrackballDragger {
               }
            }
            Rotation {
               rotation 0 0 1  0 =
               USE mydragger . rotation
            }
            Cube {
               height 10
            }
         }

       This node is internally used by manipulators to make it possible for
       them to scale their dragger’s geometry to match the scenegraph geometry
       it is modifying, as is demonstrated above (but outside of the context
       of a manipulator).

       It is also generally useful for application programmers who want any
       particular piece of geometry surround other geometry of unknown or
       changing extent.

       SoSurroundScale nodes in the scenegraph are often paired up with
       SoAntiSquish nodes to get uniform scaling along all three principal
       axes, as has also been done in the above example.

       FILE FORMAT/DEFAULTS:

           SurroundScale {
               numNodesUpToContainer 0
               numNodesUpToReset 0
           }

       See also:
           SoAntiSquish

Constructor & Destructor Documentation

   SoSurroundScale::SoSurroundScale (void) Constructor.
   SoSurroundScale::~SoSurroundScale () [protected, virtual] Destructor.

Member Function Documentation

   void SoSurroundScale::initClass (void) [static] Sets up initialization for
       data common to all instances of this class, like submitting necessary
       information to the Coin type system.
       Reimplemented from SoTransformation.

   void SoSurroundScale::invalidate (void) Invalidates the cached
       transformation, forcing a recalculation to be done the next time this
       node is traversed.
   void SoSurroundScale::doAction (SoAction * action) [virtual] This function
       performs the typical operation of a node for any action.
       Reimplemented from SoNode.

   void SoSurroundScale::setDoingTranslations (const SbBool val) Sets whether
       the translation part of the transformation should be ignored or not.
       Default behavior is to translate.
   SbBool SoSurroundScale::isDoingTranslations (void) Returns whether the
       translation part of the transformation should be ignored or not.
       See also:
           setDoingTranslations()

   void SoSurroundScale::callback (SoCallbackAction * action) [protected,
       virtual] Action method for SoCallbackAction.
       Simply updates the state according to how the node behaves for the
       render action, so the application programmer can use the
       SoCallbackAction for extracting information about the scene graph.

       Reimplemented from SoNode.

   void SoSurroundScale::GLRender (SoGLRenderAction * action) [protected,
       virtual] Action method for the SoGLRenderAction.
       This is called during rendering traversals. Nodes influencing the
       rendering state in any way or who wants to throw geometry primitives at
       OpenGL overrides this method.

       Reimplemented from SoNode.

   void SoSurroundScale::getBoundingBox (SoGetBoundingBoxAction * action)
       [protected, virtual] Action method for the SoGetBoundingBoxAction.
       Calculates bounding box and center coordinates for node and modifies
       the values of the action to encompass the bounding box for this node
       and to shift the center point for the scene more towards the one for
       this node.

       Nodes influencing how geometry nodes calculates their bounding box also
       overrides this method to change the relevant state variables.

       Reimplemented from SoNode.

   void SoSurroundScale::getMatrix (SoGetMatrixAction * action) [protected,
       virtual] Action method for SoGetMatrixAction.
       Updates action by accumulating with the transformation matrix of this
       node (if any).

       Reimplemented from SoNode.

   void SoSurroundScale::pick (SoPickAction * action) [protected, virtual]
       Action method for SoPickAction.
       Does common processing for SoPickAction action instances.

       Reimplemented from SoNode.

   void SoSurroundScale::updateMySurroundParams (SoAction * action, const
       SbMatrix & inv) [protected] Calculates the translation and scale needed
       to make a default cube surround geometry to the right of the branch
       this node is on.
   void SoSurroundScale::setIgnoreInBbox (const SbBool val) [protected] Sets
       whether bounding box calculations in SoGetBoundingBoxAction should be
       affected by this node.
       Default is to ignore our bounding box calculations.

   SbBool SoSurroundScale::isIgnoreInBbox (void) [protected] Returns the value
       of the flag that decides whether bounding box calculations in
       SoGetBoundingBoxAction should be affected by this node.
       See also:
           setIgnoreInBbox()

Member Data Documentation

   SoSFInt32 SoSurroundScale::numNodesUpToContainer Number of nodes in the
       path counting from this andupwardsto the container node.
   SoSFInt32 SoSurroundScale::numNodesUpToReset Number of nodes in the path
       counting from this andupwardsto the node where we will reset the
       bounding box value.
   SoSurroundScale::cachedScale [protected] This API member is considered
       internal to the library, as it is not likely to be of interest to the
       application programmer.
   SoSurroundScale::cachedInvScale [protected] This API member is considered
       internal to the library, as it is not likely to be of interest to the
       application programmer.
   SoSurroundScale::cachedTranslation [protected] This API member is
       considered internal to the library, as it is not likely to be of
       interest to the application programmer.
   SoSurroundScale::cacheOK [protected] This API member is considered internal
       to the library, as it is not likely to be of interest to the
       application programmer.
   SoSurroundScale::doTranslations [protected] This API member is considered
       internal to the library, as it is not likely to be of interest to the
       application programmer.

Author

       Generated automatically by Doxygen for Coin from the source code.