SONODEKITLISTPART(3iv)

πŸ’– SoNodeKitListPart β€” the manual page, but make it make sense πŸ’–

okay bestie, gather round, because today we're talking about SoNodeKitListPart(3IV) β€” yes, section 3IV of the manual, she's a real one. This is the group node that's a little bit extra: it's got opinions about who gets to be its child. πŸ‘‘


✨ NAME ✨

SoNodeKitListPart β€” group node with restricted children

like a group node but with a bouncer at the door πŸšͺπŸ’…


🌸 INHERITS FROM 🌸

SoBase > SoFieldContainer > SoNode > SoNodeKitListPart

so she's got the whole family tree behind her, no cap 🫢


πŸ¦‹ SYNOPSIS πŸ¦‹

#include <Inventor/nodekits/SoNodeKitListPart.h>

Methods from class SoNodeKitListPart:

               SoNodeKitListPart()
SoType              getContainerType() const
void                setContainerType(SoType newContainerType )
const SoTypeList &  getChildTypes() const
void                addChildType(SoType typeToAdd )
SbBool              isTypePermitted(SoType typeToCheck ) const
SbBool              isChildPermitted(const SoNode *child ) const
void                containerSet(const char *fieldDataString )
void                lockTypes()
SbBool              isTypeLocked() const
void                addChild(SoNode *child )
void                insertChild(SoNode *child, int childIndex )
SoNode *            getChild(int index ) const
int                 findChild(SoNode *child) const
int                 getNumChildren() const
void                removeChild(int index)
void                removeChild(SoNode *child)
void                replaceChild(int index, SoNode *newChild)
void                replaceChild(SoNode *oldChild, SoNode *newChild)
static SoType       getClassTypeId()

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 this node class is literally SoGroup's cooler cousin, except she has rules. She specifies restrictions on the type of children she allows. The nodekits use her to restrict child types inside list parts β€” go read the reference page for SoBaseKit if you want the full lore, iykyk πŸ“–

By default? Any kind of child may be added. Everybody welcome, the party's open πŸŽ‰ But the methods of this class let you restrict the type of allowable children, and also let you lock down the types so that this type list may no longer be altered. Once the velvet rope goes up, it stays up.

Inside the SoNodeKitListPart there's a container node, and that container in turn contains the children. The container node is a hidden child (sneaky, mysterious, main character energy πŸ™ˆ), and the type of node used may be set with setContainerType(). In this way you can make the nodekitlist behave like a group, a separator, or any other subclass of group. The container is not accessible, and that's on purpose β€” it's so that the nodekitlist may retain control over what kinds of children are added. Control freak? Maybe. Iconic? Absolutely. ✨


πŸŽ€ METHODS πŸŽ€

                     SoNodeKitListPart()
  • Constructor. 🐣
SoType              getContainerType() const
void                setContainerType(SoType newContainerType )
  • Gets and sets the type of node used as the container. it's giving "choose your own container" πŸ«™
const SoTypeList &  getChildTypes() const
  • Returns the permitted child node types. By default, any type of node is permitted, so the list contains one entry of type SoNode. very inclusive of her πŸ’œ
void                addChildType(SoType typeToAdd )
  • Permits the node type typeToAdd as a child. The first time the addChildType() method is called, the default of SoNode is overridden and only the new typeToAdd is permitted. In subsequent calls to addChildType(), the typeToAdd is added to the existing types. so like, first one resets the guest list, after that you're just adding names ✍️
SbBool              isTypePermitted(SoType typeToCheck ) const
  • Returns whether a node of type typeToCheck may be added as a child. vibe check at the door πŸšͺ
SbBool              isChildPermitted(const SoNode *child ) const
  • Returns whether the node child may be added to this list. This will return TRUE if the type of child is one of the permissible child types. (capital-T TRUE, bestie, she's old school like that)
void                containerSet(const char *fieldDataString )
  • Sends a string to the set() method on the container node. This is how you can set the value of a switch node if the container node is an SoSwitch, for example. passing notes directly to the container πŸ“¨
void                lockTypes()
  • This function permanently locks the permitted child types and the container type permanently. Calls to setContainerType() and addChildType() will have no effect after this function is called. 🚨 like, permanently permanently. no takebacks, no undos, periodt.
SbBool              isTypeLocked() const
  • Returns whether the permitted child types and the container type are locked (i.e. cannot be changed). See lockTypes(). πŸ”’
void                addChild(SoNode *child )
void                insertChild(SoNode *child, int childIndex )
SoNode *            getChild(int index ) const
int                 findChild(SoNode *child) const
int                 getNumChildren() const
void                removeChild(int index)
void                removeChild(SoNode *child)
void                replaceChild(int index, SoNode *newChild)
void                replaceChild(SoNode *oldChild, SoNode *newChild)
  • These are the functions used to edit the children. They parallel those of SoGroup, except that they always check the child types against those which are permissible. See SoGroup for details. same moves as SoGroup, but with a clipboard and a checklist πŸ“‹βœ¨
static SoType       getClassTypeId()
  • Returns type identifier for this class. the ID card πŸͺͺ

🌈 FILE FORMAT/DEFAULTS 🌈

NodeKitListPart {
   containerTypeName  "Group"
   childTypeNames     ""
   containerNode      NULL
}

look at those defaults. "Group", empty child type names, and a whole NULL container. starting fresh, no baggage πŸ“


⭐ SEE ALSO ⭐

SoBaseKit, SoNodeKit, SoNodeKitDetail, SoNodeKitPath, SoNodekitCatalog, SoSceneKit, SoSeparatorKit, SoShapeKit, SoWrapperKit

the whole friend group, go say hi πŸ‘‹πŸ«Ά


okay that's the whole page, no skips, no summarising, every flag and signature intact πŸ’― and just so you know where this came from: this was SoNodeKitListPart(3IV)() β€” that's the source/version and the date stamp, straight off the bottom of the page. go forth and restrict some children, bestie, you got this πŸ’–πŸŽ€πŸ¦‹