SoAntiSquish3iv
Transformation node that undoes non-uniform 3d scales
Usage
SoAntiSquish::AVERAGE_DIMENSION
uses average
of
3
scales
in
the
matrix
SoAntiSquish::BIGGEST_DIMENSION
uses biggest
of
3
scales
in
the
matrix
SoAntiSquish::SMALLEST_DIMENSION
uses smallest
of
3
scales
in
the
matrix
SoAntiSquish::LONGEST_DIAGONAL
accounts for
shearing;
transforms
a
cube
by
the
matrix
and
then
uses
length
of
longest
diagonal
Fields from
class
SoAntiSquish:
SoSFEnum sizing
SoSFBool recalcAlways
Methods from
class
SoAntiSquish:
static SoType
getClassTypeId()
void recalc()
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
=
FALSE)
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
Inherits from
SoBase > SoFieldContainer > SoNode > SoTransformation > SoAntiSquish
Overview
This node removes nonuniform 3D scaling from the current transformation matrix when traversed by an action. It is used by draggers such as the SoTrackballDragger that need to stay uniformly scaled no matter where they are located in the scene graph.
The magnitude of the new scale is determined by the current transformation matrix and the sizing field. This node does not change the translation or rotation in the matrix.
Fields
SoSFEnum sizing
Determines which of the algorithms enumerated by the type Sizing will be used to select the new scale when the x,y, and z scales are not equal.
SoSFBool recalcAlways
If recalcAlways is TRUE, this node calculates its unsquishing matrix every time it is traversed. If FALSE, then this only occurs during the first traversal folllowing a call to recalc().
Methods
SoAntiSquish()
Creates an anti-squish node with default settings.
static SoType getClassTypeId()
Returns type identifier for this class.
void recalc()
Sets a flag so that the next time the node is traversed, it will recalculate its unsquishing matrix.
Action behavior
SoGLRenderAction, SoCallbackAction, SoGetBoundingBoxAction, SoGetMatrixAction, SoRayPickAction
Appends the current transformation with a new matrix to create an unsquished result.
File format/defaults
AntiSquish {
sizing AVERAGE_DIMENSION
recalcAlways TRUE
}