SoIndexedShape(3)

πŸ“¦
version 4.0.10 Β· 4 versions
, in fedora 43, fedora 44

πŸŽ€ NAME πŸŽ€

SoIndexedShape β€” the superclass for all indexed vertex shapes. She's the blueprint, the blueprint-est blueprint, the one every indexed-vertex icon inherits from. Bestie, if it's an indexed vertex shape, it came out of this house. πŸ’…


✨ SYNOPSIS ✨

#include <Inventor/nodes/SoIndexedShape.h>

Inherits SoVertexShape.

Inherited by SoIndexedFaceSet, SoIndexedLineSet, SoIndexedPointSet, and SoIndexedTriangleStripSet. Yeah, the whole friend group. 🫢


🌸 Public Member Functions 🌸

  • virtual SoType getTypeId (void) const

πŸ’œ Public Member Functions inherited from SoVertexShape πŸ’œ

  • virtual void notify (SoNotList *nl)
  • virtual SbBool generateDefaultNormals (SoState *state, SoNormalBundle *bundle)
  • virtual SbBool generateDefaultNormals (SoState *state, SoNormalCache *cache)
  • virtual void write (SoWriteAction *action)

🌈 Public Member Functions inherited from SoShape 🌈

  • virtual SbBool affectsState (void) const
  • virtual void getBoundingBox (SoGetBoundingBoxAction *action)
  • virtual void GLRender (SoGLRenderAction *action)
  • virtual void rayPick (SoRayPickAction *action)
  • virtual void callback (SoCallbackAction *action)
  • virtual void getPrimitiveCount (SoGetPrimitiveCountAction *action)
  • const SoBoundingBoxCache * getBoundingBoxCache (void) const

πŸ¦‹ Public Member Functions inherited from SoNode πŸ¦‹

  • void setOverride (const SbBool state)
  • SbBool isOverride (void) const
  • void setNodeType (const NodeType type)
  • NodeType getNodeType (void) const
  • virtual SoNode * copy (SbBool copyconnections=FALSE) const
  • virtual void doAction (SoAction *action)
  • virtual void GLRenderBelowPath (SoGLRenderAction *action)
  • virtual void GLRenderInPath (SoGLRenderAction *action)
  • virtual void GLRenderOffPath (SoGLRenderAction *action)
  • virtual void getMatrix (SoGetMatrixAction *action)
  • virtual void handleEvent (SoHandleEventAction *action)
  • virtual void pick (SoPickAction *action)
  • virtual void search (SoSearchAction *action)
  • virtual void audioRender (SoAudioRenderAction *action)
  • virtual void grabEventsSetup (void)
  • virtual void grabEventsCleanup (void)
  • virtual void startNotify (void)
  • SbUniqueId getNodeId (void) const
  • virtual SoChildList * getChildren (void) const
  • virtual void writeInstance (SoOutput *out)
  • virtual SoNode * addToCopyDict (void) const
  • virtual void copyContents (const SoFieldContainer *from, SbBool copyconnections)
  • virtual SoFieldContainer * copyThroughConnection (void) const

πŸ’– Public Member Functions inherited from SoFieldContainer πŸ’–

  • void setToDefaults (void)
  • SbBool hasDefaultValues (void) const
  • SbBool fieldsAreEqual (const SoFieldContainer *container) const
  • void copyFieldValues (const SoFieldContainer *container, SbBool copyconnections=FALSE)
  • SbBool set (const char *const fielddata)
  • void get (SbString &fielddata)
  • virtual int getFields (SoFieldList &l) const
  • virtual int getAllFields (SoFieldList &l) const
  • virtual SoField * getField (const SbName &name) const
  • virtual SoField * getEventIn (const SbName &name) const
  • virtual SoField * getEventOut (const SbName &name) const
  • SbBool getFieldName (const SoField *const field, SbName &name) const
  • SbBool enableNotify (const SbBool flag)
  • SbBool isNotifyEnabled (void) const
  • SbBool set (const char *fielddata, SoInput *input)
  • void get (SbString &fielddata, SoOutput *out)
  • virtual SbBool validateNewFieldValue (SoField *field, void *newval)
  • virtual void addWriteReference (SoOutput *out, SbBool isfromfield=FALSE)
  • SbBool getIsBuiltIn (void) const
  • virtual void getFieldsMemorySize (size_t &managed, size_t &unmanaged) const
  • void setUserData (void *userdata) const
  • void * getUserData (void) const

⭐ Public Member Functions inherited from SoBase ⭐

  • void ref (void) const
  • void unref (void) const
  • void unrefNoDelete (void) const
  • int32_t getRefCount (void) const
  • void touch (void)
  • SbBool isOfType (SoType type) const β€” hands you back TRUE if this object's type is either exactly type, or inherits from type. iykyk.
  • virtual SbName getName (void) const
  • virtual void setName (const SbName &newname)
  • void addAuditor (void *const auditor, const SoNotRec::Type type)
  • void removeAuditor (void *const auditor, const SoNotRec::Type type)
  • const SoAuditorList & getAuditors (void) const
  • SbBool shouldWrite (void)
  • void assertAlive (void) const

🌟 Static Public Member Functions 🌟

  • static SoType getClassTypeId (void)
  • static void initClass (void)

πŸ’« Static Public Member Functions inherited from SoVertexShape πŸ’«

  • static SoType getClassTypeId (void)
  • static void initClass (void)

πŸŽ€ Static Public Member Functions inherited from SoShape πŸŽ€

  • static SoType getClassTypeId (void)
  • static void initClass (void) β€” sets up the initialization for all the data every instance of this class shares, like shipping the necessary info off to the Coin type system. She's doing the behind-the-scenes work, no cap.
  • static void getScreenSize (SoState *const state, const SbBox3f &boundingbox, SbVec2s &rectsize)
  • static float getDecimatedComplexity (SoState *state, float complexity)

🧚 Static Public Member Functions inherited from SoNode 🧚

  • static uint32_t getCompatibilityTypes (const SoType &nodetype)
  • static SoType getClassTypeId (void)
  • static SoNode * getByName (const SbName &name)
  • static int getByName (const SbName &name, SoNodeList &l)
  • static void initClass (void) β€” same deal as above: it sets up initialization for the data common to every instance of this class, like submitting the necessary info to the Coin type system.
  • static void initClasses (void)
  • static SbUniqueId getNextNodeId (void)
  • static int getActionMethodIndex (const SoType type)
  • static void getBoundingBoxS (SoAction *action, SoNode *node)
  • static void GLRenderS (SoAction *action, SoNode *node)
  • static void callbackS (SoAction *action, SoNode *node)
  • static void getMatrixS (SoAction *action, SoNode *node)
  • static void handleEventS (SoAction *action, SoNode *node)
  • static void pickS (SoAction *action, SoNode *node)
  • static void rayPickS (SoAction *action, SoNode *node)
  • static void searchS (SoAction *action, SoNode *node)
  • static void writeS (SoAction *action, SoNode *node)
  • static void audioRenderS (SoAction *action, SoNode *node)
  • static void getPrimitiveCountS (SoAction *action, SoNode *node)

πŸ’œ Static Public Member Functions inherited from SoFieldContainer πŸ’œ

  • static void initClass (void) β€” yep, again: it handles initialization for the data that's common to every instance of the class, like submitting the necessary info to the Coin type system.
  • static SoType getClassTypeId (void) β€” this static method returns the SoType object that's associated with objects of this class. Iconic little lookup. ✨
  • static void cleanupClass (void)
  • static void initCopyDict (void)
  • static void addCopy (const SoFieldContainer *orig, const SoFieldContainer *copy)
  • static SoFieldContainer * checkCopy (const SoFieldContainer *orig)
  • static SoFieldContainer * findCopy (const SoFieldContainer *orig, const SbBool copyconnections)
  • static void copyDone (void)

🌈 Static Public Member Functions inherited from SoBase 🌈

  • static void initClass (void) β€” sets up initialization for the data common to every instance of this class, like submitting the necessary information to the Coin type system.
  • static SoType getClassTypeId (void) β€” returns the SoType object associated with objects of this class. Fr fr, that's all she does.
  • static void addName (SoBase *const base, const char *const name)
  • static void removeName (SoBase *const base, const char *const name)
  • static void incrementCurrentWriteCounter (void)
  • static void decrementCurrentWriteCounter (void)
  • static SoBase * getNamedBase (const SbName &name, SoType type)
  • static int getNamedBases (const SbName &name, SoBaseList &baselist, SoType type)
  • static SbBool read (SoInput *input, SoBase *&base, SoType expectedtype)
  • static void setInstancePrefix (const SbString &c)
  • static void setTraceRefs (SbBool trace)
  • static SbBool getTraceRefs (void)
  • static SbBool connectRoute (SoInput *input, const SbName &fromnodename, const SbName &fromfieldname, const SbName &tonodename, const SbName &tofieldname)
  • static SbBool readRoute (SoInput *input)

πŸ“ Public Attributes πŸ“

  • SoMFInt32 coordIndex
  • SoMFInt32 materialIndex
  • SoMFInt32 normalIndex
  • SoMFInt32 textureCoordIndex

🌸 Public Attributes inherited from SoVertexShape 🌸

  • SoSFNode vertexProperty

🫢 Protected Member Functions 🫢

  • virtual const SoFieldData * getFieldData (void) const
  • SoIndexedShape (void)
  • virtual ~SoIndexedShape ()
  • virtual void computeBBox (SoAction *action, SbBox3f &box, SbVec3f &center)
  • int getNumVerts (const int startCoord)
  • void setupIndices (const int numParts, const int numFaces, const SbBool needNormals, const SbBool needTexCoords)
  • const int32_t * getNormalIndices (void)
  • const int32_t * getColorIndices (void)
  • const int32_t * getTexCoordIndices (void)
  • SbBool getVertexData (SoState *state, const SoCoordinateElement *&coords, const SbVec3f *&normals, const int32_t *&cindices, const int32_t *&nindices, const int32_t *&tindices, const int32_t *&mindices, int &numcindices, const SbBool needNormals, SbBool &normalCacheUsed)

πŸ’« Protected Member Functions inherited from SoVertexShape πŸ’«

  • SoVertexShape (void)
  • virtual ~SoVertexShape ()
  • virtual SbBool shouldGLRender (SoGLRenderAction *action)
  • void setNormalCache (SoState *const state, const int num, const SbVec3f *normals)
  • SoNormalCache * getNormalCache (void) const
  • SoNormalCache * generateAndReadLockNormalCache (SoState *const state)
  • void getVertexData (SoState *state, const SoCoordinateElement *&coords, const SbVec3f *&normals, const SbBool neednormals)
  • void readLockNormalCache (void)
  • void readUnlockNormalCache (void)

(part 2 is still loading bestie, do not scroll away πŸ’–)

πŸ’– Protected Member Functions inherited from SoShape

okay so before we even get to SoIndexedShape's own lil lineup, bestie β€” it inherits a whole squad of protected methods from SoShape. here's every single one, no skipsies, no "etc.", we don't do that here πŸ’…

SoShape (void)
virtual ~SoShape ()
float getComplexityValue (SoAction *action)
virtual void generatePrimitives (SoAction *action)=0
void beginSolidShape (SoGLRenderAction *action)
void endSolidShape (SoGLRenderAction *action)
void GLRenderBoundingBox (SoGLRenderAction *action)
SbBool shouldPrimitiveCount (SoGetPrimitiveCountAction *action)
SbBool shouldRayPick (SoRayPickAction *const action)
void computeObjectSpaceRay (SoRayPickAction *const action)
void computeObjectSpaceRay (SoRayPickAction *const action, const SbMatrix &matrix)
virtual SoDetail * createTriangleDetail (SoRayPickAction *action, const SoPrimitiveVertex *v1, const SoPrimitiveVertex *v2, const SoPrimitiveVertex *v3, SoPickedPoint *pp)
virtual SoDetail * createLineSegmentDetail (SoRayPickAction *action, const SoPrimitiveVertex *v1, const SoPrimitiveVertex *v2, SoPickedPoint *pp)
virtual SoDetail * createPointDetail (SoRayPickAction *action, const SoPrimitiveVertex *v, SoPickedPoint *pp)
void invokeTriangleCallbacks (SoAction *const action, const SoPrimitiveVertex *const v1, const SoPrimitiveVertex *const v2, const SoPrimitiveVertex *const v3)
void invokeLineSegmentCallbacks (SoAction *const action, const SoPrimitiveVertex *const v1, const SoPrimitiveVertex *const v2)
void invokePointCallbacks (SoAction *const action, const SoPrimitiveVertex *const v)
void beginShape (SoAction *const action, const TriangleShape shapetype, SoDetail *const detail=NULL)
void shapeVertex (const SoPrimitiveVertex *const v)
void endShape (void)
void generateVertex (SoPrimitiveVertex *const pv, const SbVec3f &point, const SbBool useTexFunc, const SoMultiTextureCoordinateElement *const tce, const float s, const float t, const SbVec3f &normal)
void generateVertex (SoPrimitiveVertex *const pv, const SbVec3f &point, const SbBool useTexFunc, const SoMultiTextureCoordinateElement *const tce, const float s, const float t, const float r, const SbVec3f &normal)
SbBool startVertexArray (SoGLRenderAction *action, const SoCoordinateElement *coords, const SbVec3f *pervertexnormals, const SbBool texpervertex, const SbBool colorpervertex)
void finishVertexArray (SoGLRenderAction *action, const SbBool vbo, const SbBool normpervertex, const SbBool texpervertex, const SbBool colorpervertex)

(also yes, generateVertex shows up twice β€” two overloads, one with s, t and one with s, t, r. that's not a typo, that's just how it is 🫢)


🧚 Protected Member Functions inherited from SoNode

SoNode (void)
virtual ~SoNode ()
virtual SbBool readInstance (SoInput *in, unsigned short flags)

🌸 Protected Member Functions inherited from SoFieldContainer

SoFieldContainer (void)
virtual ~SoFieldContainer ()

πŸ¦‹ Protected Member Functions inherited from SoBase

SoBase (void)
virtual ~SoBase ()
virtual void destroy (void)
SbBool hasMultipleWriteRefs (void) const
SbBool writeHeader (SoOutput *out, SbBool isgroup, SbBool isengine) const
void writeFooter (SoOutput *out) const
virtual const char * getFileFormatName (void) const
virtual SoNotRec createNotRec (void)

✨ Static Protected Member Functions

the ones that live on the class itself, not on any one instance, periodt:

  • static const SoFieldData ** getFieldDataPtr (void)
  • static SbBool areTexCoordsIndexed (SoAction *action)

πŸ“ Static Protected Member Functions inherited from SoVertexShape

  • static const SoFieldData ** getFieldDataPtr (void)

πŸ“ Static Protected Member Functions inherited from SoShape

  • static const SoFieldData ** getFieldDataPtr (void)

πŸ“ Static Protected Member Functions inherited from SoNode

  • static const SoFieldData ** getFieldDataPtr (void)
  • static void setNextActionMethodIndex (int index)
  • static int getNextActionMethodIndex (void)
  • static void incNextActionMethodIndex (void)
  • static void setCompatibilityTypes (const SoType &nodetype, const uint32_t bitmask)

πŸ“ Static Protected Member Functions inherited from SoBase

  • static uint32_t getCurrentWriteCounter (void)
  • static void staticDataLock (void)
  • static void staticDataUnlock (void)

πŸŽ€ Additional Inherited Members

the "everything else you get for free" section, and bestie it is generous:

Public Types inherited from SoShape

enum TriangleShape { TRIANGLE_STRIP, TRIANGLE_FAN, TRIANGLES, POLYGON, QUADS, QUAD_STRIP, POINTS, LINES, LINE_STRIP }

Public Types inherited from SoNode

enum NodeType { INVENTOR = 0x0000, VRML1 = 0x0001, VRML2 = 0x0002, INVENTOR_1 = 0x0004, INVENTOR_2_0 = 0x0008, INVENTOR_2_1 = 0x0010, INVENTOR_2_5 = 0x0020, INVENTOR_2_6 = 0x0040, COIN_1_0 = 0x0080, COIN_2_0 = 0x0100, EXTENSION = 0x0200, COIN_2_2 = 0x0400, COIN_2_3 = 0x0800, COIN_2_4 = 0x1000, INVENTOR_5_0 = 0x2000, COIN_2_5 = 0x4000, COIN_3_0 = 0x8000, INVENTOR_6_0 = 0x10000, COIN_4_0 = 0x20000 }

Protected Types inherited from SoBase

enum BaseFlags { IS_ENGINE = 0x01, IS_GROUP = 0x02 }

Protected Attributes inherited from SoNode

  • SbUniqueId uniqueId

Protected Attributes inherited from SoFieldContainer

  • SbBool isBuiltIn

Static Protected Attributes inherited from SoNode

  • static SbUniqueId nextUniqueId = 1
  • static int nextActionMethodIndex = 0

πŸ”₯ Detailed Description

okay so here's the whole vibe: SoIndexedShape is the superclass for all indexed vertex shapes. iconic behavior honestly.

and listen β€” it's an abstract class. you do not instantiate this one directly, bestie, that's not the move πŸ™ˆ. what it actually does is hold the storage for four fields β€” the indices for coordinates, normals, materials and texture coordinates β€” for all of its subclasses to use. it's the mom friend holding everyone's stuff πŸ’–


πŸ’… Constructor & Destructor Documentation

SoIndexedShape::SoIndexedShape (void ) [protected]

Constructor. (it's protected, so don't get any ideas about calling it from the outside πŸŽ€)

SoIndexedShape::~SoIndexedShape () [protected], [virtual]

Destructor. virtual, as is tradition ✨


πŸ‘‘ Member Function Documentation

SoType SoIndexedShape::getClassTypeId (void ) [static]

this static method returns the SoType object associated with objects of this class. yes, it's static, yes it's giving very main character ⭐

SoType SoIndexedShape::getTypeId (void ) const [virtual]

returns the type identification of an object derived from a class inheriting SoBase. this is the one you use for runtime type checking and "downward" casting πŸ”

  • Reimplemented from SoVertexShape.
  • Reimplemented in SoIndexedFaceSet, SoIndexedLineSet, SoIndexedMarkerSet, SoIndexedPointSet, and SoIndexedTriangleStripSet.

const SoFieldData ** SoIndexedShape::getFieldDataPtr (void ) [static], [protected]

⚠️ heads up: this API member is considered internal to the library, since it's not likely to be of interest to the application programmer. so like, lowkey stay out of its business πŸ’€

Returns the SoFieldData class which holds information about fields in this node.

const SoFieldData * SoIndexedShape::getFieldData (void ) const [protected], [virtual]

returns a pointer to the class-wide field data storage object for this instance. and if there are no fields present? it returns NULL. rude but valid.

  • Reimplemented from SoVertexShape.
  • Reimplemented in SoIndexedFaceSet, SoIndexedLineSet, SoIndexedMarkerSet, SoIndexedPointSet, and SoIndexedTriangleStripSet.

void SoIndexedShape::initClass (void ) [static]

okay so the manpage literally gives us zero description for this one. no tea, no shade, just a signature sitting there looking pretty 🌸 it's static, and that's genuinely all she wrote.

void SoIndexedShape::computeBBox (SoAction * action, SbBox3f & box, SbVec3f & center) [protected], [virtual]

this one is implemented by SoShape subclasses so they can let the SoShape superclass know the exact size and weighted center point of the shape's bounding box πŸ“¦

both the bounding box and the center point should be calculated and returned in the local coordinate system. got it? local. coordinate. system. 🫢

the method implements action behavior for shape nodes for SoGetBoundingBoxAction, and it's invoked from SoShape::getBoundingBox().

bestie, important: subclasses should not override SoNode::getBoundingBox(). don't do it. not the vibe πŸ™…β€β™€οΈ

also, fun facts about the arguments: the box parameter sent in is guaranteed to be an empty box, while center is undefined upon function entry 😭 so don't go reading center before you fill it in.

Implements SoShape.

int SoIndexedShape::getNumVerts (const int startCoord) [protected]

starting at index position startCoord, this returns the number of indices until either the end of the index array or a separator index (-1). so it counts your lil run of vertices and stops the second it hits a -1 ✨

void SoIndexedShape::setupIndices (const int numParts, const int numFaces, const SbBool needNormals, const SbBool needTexCoords) [protected]

Not implemented. πŸ’€ probably only used for internal purposes in SGI's original Open Inventor, which means it should have been private.

and the authors say: let us know if you need this method for any code you are porting and we'll look into implement it properly. so like... speak up if it's your moment 🎀

const int32_t * SoIndexedShape::getNormalIndices (void ) [protected]

Not implemented. πŸ’€ same story β€” probably only used for internal purposes in SGI's original Open Inventor, which means it should have been private.

again: let us know if you need this method for any code you are porting and we'll look into implement it properly.

const int32_t * SoIndexedShape::getColorIndices (void ) [protected]

Not implemented. πŸ’€ you already know β€” probably only used for internal purposes in SGI's original Open Inventor, which means it should have been private.

and once more for the people in the back: let us know if you need this method for any code you are porting and we'll look into implement it properly.

const int32_t * SoIndexedShape::getTexCoordIndices (void ) [protected]

Not implemented. πŸ’€ yes, this one too β€” probably only used for internal purposes in SGI's original Open Inventor, which means it should have been private.

you guessed it: let us know if you need this method for any code you are porting and we'll look into implement it properly.

SbBool SoIndexedShape::areTexCoordsIndexed (SoAction * action) [static], [protected]

returns whether texture coordinates should be indexed or not 🧡

See also: SoTextureCoordinateBinding

SbBool SoIndexedShape::getVertexData (SoState * state, const SoCoordinateElement *& coords, const SbVec3f *& normals, const int32_t *& cindices, const int32_t *& nindices, const int32_t *& tindices, const int32_t *& mindices, int & numcindices, const SbBool needNormals, SbBool & normalCacheUsed) [protected]

a convenience method that will fetch the data you need for rendering or generating primitives. it also takes care of the normal cache for you, which is a whole service honestly 🫢

πŸ“Œ note: this method was not part of the original SGI Open Inventor API β€” it's an extension specific for Coin. so if you're porting, that's why it feels new here πŸ’«

πŸ“ Member Data Documentation

the four fields that are the entire reason this abstract class exists. say hi:

  • SoMFInt32 SoIndexedShape::coordIndex β€” coordinate indices.
  • SoMFInt32 SoIndexedShape::materialIndex β€” material indices.
  • SoMFInt32 SoIndexedShape::normalIndex β€” normal indices.
  • SoMFInt32 SoIndexedShape::textureCoordIndex β€” texture coordinate indices.

four fields, four index arrays, one very organized superclass πŸ’–


🌈 Author

Generated automatically by Doxygen for Coin from the source code. not a human, just a very efficient robot, and honestly? slay πŸ€–βœ¨


and that's the whole page, bestie πŸŽ€ this was Coin version 4.0.10, dated Thu Jun 25 2026, and the SoIndexedShape(3) manual section is officially done. go forth and index your vertices, you absolute icon πŸ‘‘πŸ’…

πŸ“¦ where this page comes from