Provided by: inventor-doc_2.1.5-10+dfsg-2.1build2_all bug

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

                                                                                             SoAntiSquish(3IV)()