---
name: "SoAntiSquish"
section: "3iv"
platform: "linux"
package: "inventor-doc"
version: "2.1.6+ds-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SoAntiSquish/3iv"
---

# SoAntiSquish(3iv)

transformation node that undoes non-uniform 3D scales

## 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**
