SoAntiSquish(3IV)

NAME
SoAntiSquish — transformation node that undoes non-uniform 3D scales

INHERITS FROM
SoBase > SoFieldContainer > SoNode > SoTransformation > SoAntiSquish

SYNOPSIS
#include <Inventor/nodes/SoAntiSquish.h>

enum Sizing {
SoAntiSquish::X
fits the other two axes to match the X axis, whose size is unchanged
SoAntiSquish::Y
fits the other two axes to match the Y axis, whose size is unchanged
SoAntiSquish::Z
fits the other two axes to match the Z axis, whose size is unchanged
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:

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

DESCRIPTION
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
}

SEE ALSO
SoCenterballDragger, SoJackDragger, SoTrackballDragger, SoTransformerDragger, SoTransformation, SoTransformBoxDragger