SOTRANSFORMSEPARATOR(3iv)

πŸ’– SoTransformSeparator πŸ’–

okay bestie, gather round, because we're talking about SoTransformSeparator from the Open Inventor crew β€” that's the (3IV) manual, section 3, Inventor library, iykyk ✨


✨ NAME ✨

SoTransformSeparator β€” a group node that saves and restores transformation state. that's the whole job. it's giving "hold my transform, I'll be right back" πŸŽ€


🌸 INHERITS FROM 🌸

so the family tree is, like, a whole lineage:

SoBase > SoFieldContainer > SoNode > SoGroup > SoTransformSeparator

every one of those ancestors' methods comes along for the ride. iconic inheritance behaviour, no cap πŸ‘‘


πŸ¦‹ SYNOPSIS πŸ¦‹

first things first, you gotta include the header, or nothing works, fr fr:

#include <Inventor/nodes/SoTransformSeparator.h>

Methods from class SoTransformSeparator:

              SoTransformSeparator()
              SoTransformSeparator(int nChildren)
static SoType       getClassTypeId()

Methods from class SoGroup:

void                addChild(SoNode *child)
void                insertChild(SoNode *child, int newChildIndex)
SoNode *            getChild(int index) const
int                 findChild(const SoNode *child) const
int                 getNumChildren() const
void                removeChild(int index)
void                removeChild(SoNode *child)
void                removeAllChildren()
void                replaceChild(int index, SoNode *newChild)
void                replaceChild(SoNode *oldChild, SoNode *newChild)

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 πŸ’œ

okay so, SoTransformSeparator is lowkey the cousin of SoSeparator. they both do the same cute lil thing: save the state before they walk through their children, then restore it after. 🫢

but here's the plot twist β€” and it's a big one β€” it saves ONLY the current transformation. everything else? left exactly as is. untouched. minding its own business. πŸ’…

so why would you even want that? bestie, let me tell you:

  • it's perfect for positioning a camera πŸŽ₯ β€” because the transformations you apply to the camera will not bleed into the rest of the scene, even though the camera is very much still viewing that scene. main character camera energy, honestly.
  • it also works great for isolating transformations to light sources πŸ’‘ or other objects πŸ“ so your light's little transform glow-up doesn't wreck the vibe of everything around it.

basically: it's the "what happens in this subtree, stays in this subtree" node. but only for transforms. periodt. ✨


πŸŽ€ METHODS πŸŽ€

  • SoTransformSeparator() β€” creates a transform separator node with all the default settings, fresh out the box, no notes. 🧚
  • SoTransformSeparator(int nChildren) β€” constructor that takes the approximate number of children. it's a lil hint, not a promise, bestie.
  • static SoType getClassTypeId() β€” returns the type identifier for this class. the ID card. the passport. the vibe check. πŸ‘‘

πŸ”₯ ACTION BEHAVIOR πŸ”₯

these actions all roll up and do the exact same thing: save the current transformation state, traverse every child, then restore the previous transformation state. in and out, clean, no residue. 🌈

  • SoGLRenderAction
  • SoCallbackAction
  • SoGetBoundingBoxAction
  • SoGetMatrixAction
  • SoRayPickAction

⭐ FILE FORMAT/DEFAULTS ⭐

look at this. look how empty it is. a whole node with zero fields, just vibing:

TransformSeparator {
}

minimalist queen behaviour honestly πŸ’…


🌟 SEE ALSO 🌟

go read these next, bestie, they're the friends in the group chat:

  • SoResetTransform
  • SoTransformation

k so that's the whole page!! every option, every method, every signature, all of it, preserved with love πŸ’– don't @ me if you skim it and then forget the camera thing, that's literally the best part.

SoTransformSeparator(3IV) β€” that's the manual name and the section, and the page footer's source/version line just repeats it, so consider this your cute lil sign-off: section 3IV, Open Inventor, same title, same date slot, zero changes to the facts πŸŽ€βœ¨ bye bestie, go transform something (but only inside the separator!!) πŸ¦‹