SOTRANSFORMBOXMANIP(3iv)

πŸ’– NAME πŸ’–

okay so bestie, welcome to the SoTransformBoxManip page β€” this is from the 3IV manual, and it's all about a transform node with a 3D interface for changing scaling, rotation, and translation. yes, it literally hands you a lil 3D box to drag around and your whole scene follows. iconic behaviour tbh πŸŽ€


🌸 INHERITS FROM 🌸

the family tree goes like this, top to bottom, no skips:

SoBase > SoFieldContainer > SoNode > SoTransformation > SoTransform >
SoTransformManip > SoTransformBoxManip

so it's a whole lineage of overachievers. main character bloodline fr πŸ’…


✨ SYNOPSIS ✨

first things first, you gotta pull it in:

#include <Inventor/manips/SoTransformBoxManip.h>

πŸ¦‹ Fields from class SoTransform

SoSFVec3f           translation
SoSFRotation        rotation
SoSFVec3f           scaleFactor
SoSFRotation        scaleOrientation
SoSFVec3f           center

πŸ¦‹ Methods from class SoTransformBoxManip

                    SoTransformBoxManip()
static SoType       getClassTypeId()

πŸ¦‹ Methods from class SoTransformManip

SoDragger *         getDragger()
SbBool              replaceNode(SoPath *p )
SbBool              replaceManip(SoPath *p, SoTransform *newOne ) const

πŸ¦‹ Methods from class SoTransform

void                pointAt(const SbVec3f &fromPoint, const SbVec3f
                         &toPoint)
void                getScaleSpaceMatrix(SbMatrix &mat, SbMatrix &inv)
                         const
void                getRotationSpaceMatrix(SbMatrix &mat, SbMatrix &inv)
                         const
void                getTranslationSpaceMatrix(SbMatrix &mat, SbMatrix
                         &inv) const
void                multLeft(const SbMatrix &mat)
void                multRight(const SbMatrix &mat)
void                combineLeft(SoTransformation *nodeOnRight)
void                combineRight(SoTransformation *nodeOnLeft)
void                setMatrix(const SbMatrix &mat)
void                recenter(const SbVec3f &newCenter)

πŸ¦‹ 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 🌈

so SoTransformBoxManip is derived from SoTransform (by way of SoTransformManip, cute lil middleman). and the vibe is: when its fields change, nodes following it in the scene graph rotate, scale, and/or translate. yes bestie, it drags the whole squad along 🫢

as a subclass of SoTransformManip, this manipulator also has a 3D interface to edit some of its fields. in this case? the interface edits the scaleFactor, rotation and translation fields. three for the price of one, we love efficiency ✨

now, a manipulator differs from a dragger, and this is the part people always get confused about, so listen up:

  • when you move a dragger, no other nodes are affected.
  • when you move an SoTransformManip, other nodes move along with it.

(see the reference page for SoTransformManip for the full tea β˜•)

the interface for an SoTransformBoxManip is exactly the same as that of the SoTransformBoxDragger. to find out more about the interface, see the reference page for SoTransformBoxDragger. and to find out how the manipulator uses a dragger to provide its interface, see the reference page for SoTransformManip. yes, homework. it's giving syllabus day πŸ“š

on screen, this manipulator will surround the objects influenced by its motion. why? because it turns on the surroundScale part of the dragger. (see the reference page for SoSurroundScale) β€” so it's literally built different, it hugs your geometry πŸ’ž


πŸ‘‘ METHODS πŸ‘‘

  • SoTransformBoxManip() β€” Constructor. it makes the thing. that's it, that's the job πŸ’…
  • static SoType getClassTypeId() β€” Returns type identifier for this class. your lil name tag at the party πŸŽ€

πŸ“ FILE FORMAT/DEFAULTS πŸ“

here's exactly what it looks like with nothing touched, everything at its cozy default:

TransformBoxManip {
    translation       0 0 0
    rotation          0 0 1  0
    scaleFactor       1 1 1
    scaleOrientation  0 0 1  0
    center            0 0 0
}

no notes, pristine, untouched, glowing ✨


πŸ’œ SEE ALSO πŸ’œ

go read these next bestie, they're all in the same friend group:

  • SoCenterballManip
  • SoHandleBoxManip
  • SoJackManip
  • SoTabBoxManip
  • SoTrackballManip
  • SoTransform
  • SoTransformBoxDragger
  • SoTransformerManip
  • SoTransformManip

and that's the whole page!! this was the SoTransformBoxManip(3IV)() manual page, source/version and date and all, signed off with a lil kiss β€” go forth and manipulate your transforms, you absolute icon πŸ‘‘πŸ’– no cap, you ate this.