SOINDEXEDTRIANGLESTRIPSET(3iv)

πŸ’– SoIndexedTriangleStripSet β€” indexed triangle strip set shape node πŸ’–

okay bestie, so this is SoIndexedTriangleStripSet(3IV), and she is literally the queen of drawing triangle strips. this is the manual page, and i'm gonna walk you through every single crumb of it. no skips. periodt. ✨


🌈 INHERITS FROM

she's got a whole bloodline, okay, main character energy runs in the family:

SoBase > SoFieldContainer > SoNode > SoShape > SoVertexShape >
SoIndexedShape > SoIndexedTriangleStripSet

like, she's the youngest of seven and she ate. πŸ‘‘


✨ SYNOPSIS ✨

to even talk to her you gotta do this first:

#include <Inventor/nodes/SoIndexedTriangleStripSet.h>

πŸŽ€ Fields from class SoIndexedShape

these are the fields she inherited from her mom SoIndexedShape, and they're all multi-fields of int32, slay:

SoMFInt32           coordIndex
SoMFInt32           materialIndex
SoMFInt32           normalIndex
SoMFInt32           textureCoordIndex

πŸ¦‹ Fields from class SoVertexShape

just the one, but she's important:

SoSFNode            vertexProperty

🌸 Methods from class SoIndexedTriangleStripSet

her own two methods, and honestly? iconic:

                     SoIndexedTriangleStripSet()
static SoType       getClassTypeId()

⭐ Methods from class SoNode

inherited, still useful, still valid:

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

the whole field-management situation:

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

the foundation, the origin story:

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 shape node builds triangle strips out of vertices that live at the coordinates you specified in the vertexProperty field (that's the one from SoVertexShape), or the current inherited coordinates. and listen β€” for optimal performance, the vertexProperty field is what she recommends. trust her, she knows. 🫢

SoIndexedTriangleStripSet uses the indices in the coordIndex field (from SoIndexedShape) to say which vertices make up the triangle strips. and here's the key thing: an index of SO_END_STRIP_INDEX (which is -1) means the current strip is over and the next one begins. that's the divider, that's the vibe break. βœ‚οΈ

the vertices of the faces get transformed by the current transformation matrix. the faces are drawn with the current light model and drawing style. yes ma'am. πŸ’«

now, treatment of the current material and normal binding goes like this, and don't skip this part bestie:

  • PER_PART specifies a material or normal per strip.
  • PER_FACE binding specifies a material or normal for each triangle.
  • PER_VERTEX specifies a material or normal for each vertex.
  • the corresponding _INDEXED bindings are the same, but they use the materialIndex or normalIndex indices (peep SoIndexedShape for that).

the default material binding is OVERALL. the default normal binding is PER_VERTEX_INDEXED.

🚨 okay warning time, this one matters: if any normals (or materials) are specified, Inventor assumes you provide the correct number of them, as indicated by the binding. you will see unexpected results if you specify fewer normals (or materials) than the shape requires. if no normals are specified, they will be generated automatically. so like... count them. fr fr. 😭

πŸŽ€ METHODS πŸŽ€

  • SoIndexedTriangleStripSet() β€” creates an indexed triangle strip set node with default settings. a fresh baby, defaults and all. 🍼
  • static SoType getClassTypeId() β€” returns the type identifier for this class. it's her ID, her little name tag. 🏷️

πŸ”₯ ACTION BEHAVIOR πŸ”₯

SoGLRenderAction

draws a strip set based on the current coordinates, normals, materials, drawing style, and so on. the whole glow-up, rendered. ✨

SoRayPickAction

picks on the strip set based on the current coordinates and transformation. details about the intersection are returned in an SoFaceDetail. she's giving you the receipts. 🧾

SoGetBoundingBoxAction

computes the bounding box that encloses all vertices of the strip set with the current transformation applied to them. and it sets the center to the average of the coordinates of all vertices. math girlie behavior. πŸ“

SoCallbackAction

if any triangle callbacks are registered with the action, they will be invoked for each successive triangle forming the strips of the set. every single one. no crumbs left. πŸ’–


🌸 FILE FORMAT/DEFAULTS 🌸

here's exactly how she shows up when you don't tell her otherwise:

IndexedTriangleStripSet {
    vertexProperty     NULL
    coordIndex         0
    materialIndex      -1
    normalIndex        -1
    textureCoordIndex  -1
}

look at those defaults. NULL, 0, and a whole lotta -1. iconic. πŸŽ€


πŸ¦‹ SEE ALSO

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

  • SoCoordinate3
  • SoDrawStyle
  • SoFaceDetail
  • SoIndexedFaceSet
  • SoTriangleStripSet
  • SoVertexProperty

and that's the whole page, no cap. this was SoIndexedTriangleStripSet(3IV) β€” that's the page name and the manual name, folded in right at the top like i promised β€” and the footer was just the same name again with an empty date slot, so like, no date on this one, she's timeless. πŸ’…βœ¨

later bestie, go draw some strips πŸ«ΆπŸ’–πŸŒˆ