SoSurroundScale — transformation node that adjusts the current matrix so a default cube will surround
Contents
Action Behavior
SoGLRenderAction,SoCallbackAction,SoGetBoundingBoxAction,SoRayPickAction
Accumulates scaling and translation transformations into the current transformation.
SoGetMatrixAction
Returns the matrix corresponding to the scaling and translation.
Description
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:
RootNode-------------------------||handleBoxManipmovingStuff|handleBoxDragger|separator-----------------------------------|||motionMatrixsurroundScalecubeGeom
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.
Fields
SoSFInt32numNodesUpToContainer
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.
SoSFInt32numNodesUpToReset
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.
File Format/Defaults
SurroundScale{numNodesUpToContainer0numNodesUpToReset0}Inherits From
SoBase > SoFieldContainer > SoNode > SoTransformation > SoSurroundScale
Methods
SoSurroundScale()
Creates a surround scale node with default settings.
voidinvalidate()
If you call this, then next time an action is applied the node will re-calculate it's cached
translation and scale values.
staticSoTypegetClassTypeId()
Returns type identifier for this class.
Name
SoSurroundScale — transformation node that adjusts the current matrix so a default cube will surround
other objects
See Also
SoTransformation,SoTransformManip,SoCenterballDragger,SoCenterballManip,SoHandleBoxDragger,SoHandleBoxManip,SoJackDragger,SoJackManip,SoTabBoxDragger,SoTabBoxManip,SoTrackballDragger,SoTrackballManip,SoTransformBoxDragger,SoTransformBoxManipSoSurroundScale(3IV)()
Synopsis
#include<Inventor/nodes/SoSurroundScale.h>
Fields from class SoSurroundScale:
SoSFInt32numNodesUpToContainerSoSFInt32numNodesUpToReset
Methods from class SoSurroundScale:
SoSurroundScale()voidinvalidate()staticSoTypegetClassTypeId()
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)SbBoolset(constchar*fieldDataString)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