Provided by: inventor-doc_2.1.5-10-18_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)()