SOANNOTATION(3iv)
π SoAnnotation π
okay so bestie, we're reading the 3IV manual together and today's main character is SoAnnotation β the annotation group node πβ¨. Think of it as the friend who shows up fashionably last but gets to stand in front of everybody. π
πΈ INHERITS FROM πΈ
It's giving very long bloodline, no cap:
SoBase > SoFieldContainer > SoNode > SoGroup > SoSeparator > SoAnnotation
β¨ SYNOPSIS β¨
#include <Inventor/nodes/SoAnnotation.h>
Fields from class SoSeparator:
SoSFEnum renderCaching
SoSFEnum boundingBoxCaching
SoSFEnum renderCulling
SoSFEnum pickCulling
Methods from class SoAnnotation:
SoAnnotation()
static SoType getClassTypeId()
Methods from class SoSeparator:
static void setNumRenderCaches(int howMany)
static int getNumRenderCaches()
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 here's the tea π«: this group node delays rendering its children until all other nodes have been traversed, and before it does that, it turns off depth buffer comparisons. The result? The shapes under the annotation node get rendered on top of the rest of the scene. Main character energy, literally β it refuses to be behind anyone. π
And because it's derived from SoSeparator, it saves and restores traversal state for all actions. Iconic, consistent, we love to see it. β¨
β οΈ bestie, important: if more than one annotation node is present in a graph, the order in which they are traversed determines the stacking order β later nodes are rendered on top of earlier ones. So the order is the vibe check. π
β οΈ also: since depth buffer comparisons are disabled, complex 3D objects may not be rendered correctly when used under annotation nodes. That's not a glow-up, that's a risk. π
π and one more: the annotation node does nothing special when picking along a ray. Like, it does not modify the sorting order of intersected objects based on which ones are under annotation nodes. If your application uses annotation nodes and you want to make sure objects under them get picked "in front of" other objects, you can tell the pick action that you want to pick all objects along the ray, and then scan through the paths in the resulting picked point instances to see if any of them passes through an annotation node. Then your program can decide what to do in such a case. iykyk π
π¦ METHODS π¦
SoAnnotation()β Creates an annotation node with default settings. Fresh out of the box, no notes. πstatic SoType getClassTypeId()β Returns type identifier for this class. It's the class's little ID card. πͺͺ
π₯ ACTION BEHAVIOR π₯
SoGLRenderActionβ Delays rendering its children until all other nodes have been traversed, turning off depth buffer comparisons first. (Yes, the whole dramatic entrance again. π)SoCallbackAction,SoGetBoundingBoxAction,SoGetMatrixAction,SoRayPickAction,SoSearchActionβ Same asSoSeparator. No extra lore, just inherited behavior. π
π FILE FORMAT/DEFAULTS π
Annotation {
renderCaching AUTO
boundingBoxCaching AUTO
renderCulling AUTO
pickCulling AUTO
}
and that's the whole page bestie!! π§π« this one came from the SoAnnotation(3IV) source, version 3IV β and the date slot on the footer is just empty (SoAnnotation(3IV)()), so likeβ¦ no date, we simply don't know her birthday ππ slay, go render something on top of everything π
π
π¦ where this page comes from
- debian bookworm: inventor-doc 2.1.5-10+dfsg-2 Β· LGPL-2.0-or-later
- debian trixie: inventor-doc 2.1.6+ds-2 Β· LGPL-2.0-or-later
- ubuntu jammy: inventor-doc 2.1.5-10-24
- ubuntu noble: inventor-doc 2.1.5-10+dfsg-2.1build2 Β· LGPL-2.0-or-later
- ubuntu questing: inventor-doc 2.1.6+ds-2
- ubuntu resolute: inventor-doc 2.1.6.1+ds-1 Β· LGPL-2.0-or-later
- ubuntu stonking: inventor-doc 2.1.6.1+ds-1 Β· LGPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms