SOMULTIPLECOPY(3iv)

πŸ’– SoMultipleCopy(3IV) β€” the whole vibe πŸ’–

okay bestie, welcome to the SoMultipleCopy page from the 3IV manual, and no you're not dreaming, this node is literally the "copy paste but make it efficient" icon of the Inventor universe ✨


🌸 NAME 🌸

SoMultipleCopy β€” group node that traverses multiple times, applying matrices πŸŽ€


πŸ¦‹ INHERITS FROM πŸ¦‹

SoBase > SoFieldContainer > SoNode > SoGroup > SoMultipleCopy

the whole glow-up lineage, fr fr πŸ’…


✨ SYNOPSIS ✨

#include <Inventor/nodes/SoMultipleCopy.h>

Fields from class SoMultipleCopy:

SoMFMatrix          matrix

Methods from class SoMultipleCopy:

                     SoMultipleCopy()
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 picture this: this group node walks through its children, in order, and it does that several times, and each time it applies a different matrix. yes queen, a different one every single pass πŸ’…

all those matrices live in the multiple-value matrix field. every matrix gets concatenated to the current transformation matrix, and then all the children get traversed. the way this lets you drop multiple copies of the same data in different locations, easily and efficiently?? iconic. main character energy. ate and left no crumbs πŸ‘‘

and here's the lil detail you'd totally miss if you weren't paying attention, bestie: traversing the Nth child sets the current switch value to N, for use with inherited switch values (peep SoSwitch for that πŸ‘€).


πŸŽ€ FIELDS πŸŽ€

  • SoMFMatrix matrix β€” the set of matrices to apply to children. that's the whole assignment. slay.

πŸ’œ METHODS πŸ’œ

  • SoMultipleCopy() β€” creates a multiple copy node with default settings. a fresh baby node, defaults and all 🫢
  • static SoType getClassTypeId() β€” returns the type identifier for this class. iykyk, it's how you check who's who 🧚

πŸ”₯ ACTION BEHAVIOR πŸ”₯

SoGLRenderAction, SoCallbackAction, SoGetBoundingBoxAction, SoRayPickAction

  • traverses all children for each matrix, saving and restoring state before and after each traversal. clean, tidy, no state left behind ✨

SoSearchAction

  • traverses all children once, setting the inherited switch value to SO_SWITCH_ALL first. one pass, that's it, periodt.

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

MultipleCopy {
   matrix  1 0 0 0
           0 1 0 0
           0 0 1 0
           0 0 0 1
}

look at that lil identity matrix living its best life 😌


πŸ‘‘ SEE ALSO πŸ‘‘

SoArray, SoSwitch


bestie reminder: this page is SoMultipleCopy(3IV), and it's filed under the manual name SoMultipleCopy(3IV), so if you're lost in a sea of man pages, that's your search string πŸ”

and that's a wrap on the 3IV version, dated however your system stamped it β€” sending you the biggest 🫢 for reading the whole thing, you absolute legend, go forth and multiply your copies πŸ’–βœ¨πŸŽ€πŸ¦‹πŸŒΈπŸ’