SoShape(3)
π SoShape(3) β Coin π
okay so bestie, welcome to SoShape(3) from Coin. This is part 1 of 3, and it's literally the superclass for geometry shapes. The way that it's the blueprint for every geometry vibe? Obsessed. π
β¨ NAME β¨
SoShape β the superclass for geometry shapes. No cap, that's the whole job.
β¨ SYNOPSIS β¨
#include <Inventor/nodes/SoShape.h>
Inherits: SoNode. π«Ά
Inherited by: SoAsciiText, SoCone, SoCube, SoCylinder, SoImage, SoIndexedNurbsCurve, SoIndexedNurbsSurface, SoNurbsCurve, SoNurbsSurface, SoSphere, SoText2, SoText3, SoVRMLGeometry, and SoVertexShape. The whole geometry family tree is giving main character energy. π
π Public Types π
enum TriangleShapeβ the triangle shape enum. Here's the exact tea:
enum TriangleShape { TRIANGLE_STRIP, TRIANGLE_FAN, TRIANGLES, POLYGON, QUADS, QUAD_STRIP, POINTS, LINES, LINE_STRIP }
πΈ Public Types inherited from SoNode πΈ
enum NodeTypeβ inherited fromSoNode, still iconic:
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 }
π Public Member Functions π
virtual SoType getTypeId (void) constvirtual SbBool affectsState (void) constvirtual void notify (SoNotList *nl)virtual void getBoundingBox (SoGetBoundingBoxAction *action)virtual void GLRender (SoGLRenderAction *action)virtual void rayPick (SoRayPickAction *action)virtual void callback (SoCallbackAction *action)virtual void computeBBox (SoAction *action, SbBox3f &box, SbVec3f ¢er)=0β pure virtual, so you gotta implement it. It's giving "do it yourself, bestie". πvirtual void getPrimitiveCount (SoGetPrimitiveCountAction *action)const SoBoundingBoxCache * getBoundingBoxCache (void) const
π«Ά Public Member Functions inherited from SoNode π«Ά
void setOverride (const SbBool state)SbBool isOverride (void) constvoid setNodeType (const NodeType type)NodeType getNodeType (void) constvirtual SoNode * copy (SbBool copyconnections=FALSE) constvirtual 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 write (SoWriteAction *action)virtual void audioRender (SoAudioRenderAction *action)virtual void grabEventsSetup (void)virtual void grabEventsCleanup (void)virtual void startNotify (void)SbUniqueId getNodeId (void) constvirtual SoChildList * getChildren (void) constvirtual void writeInstance (SoOutput *out)virtual SoNode * addToCopyDict (void) constvirtual void copyContents (const SoFieldContainer *from, SbBool copyconnections)virtual SoFieldContainer * copyThroughConnection (void) const
π Public Member Functions inherited from SoFieldContainer π
void setToDefaults (void)SbBool hasDefaultValues (void) constSbBool fieldsAreEqual (const SoFieldContainer *container) constvoid copyFieldValues (const SoFieldContainer *container, SbBool copyconnections=FALSE)SbBool set (const char *const fielddata)void get (SbString &fielddata)virtual int getFields (SoFieldList &l) constvirtual int getAllFields (SoFieldList &l) constvirtual SoField * getField (const SbName &name) constvirtual SoField * getEventIn (const SbName &name) constvirtual SoField * getEventOut (const SbName &name) constSbBool getFieldName (const SoField *const field, SbName &name) constSbBool enableNotify (const SbBool flag)SbBool isNotifyEnabled (void) constSbBool 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) constvirtual void getFieldsMemorySize (size_t &managed, size_t &unmanaged) constvoid setUserData (void *userdata) constvoid * getUserData (void) const
π Public Member Functions inherited from SoBase π
void ref (void) constvoid unref (void) constvoid unrefNoDelete (void) constint32_t getRefCount (void) constvoid touch (void)SbBool isOfType (SoType type) constβ returnsTRUEif the type of this object is either of the same type or inherited from type. So basically a vibe check on the type. βvirtual SbName getName (void) constvirtual 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) constSbBool shouldWrite (void)void assertAlive (void) const
β Static Public Member Functions β
static SoType getClassTypeId (void)static void initClass (void)β sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system. It's giving "get ready, bestie". β¨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)β sets up initialization for data common to all instances of this class, like submitting necessary information 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)β sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system.static SoType getClassTypeId (void)β this static method returns theSoTypeobject associated with objects of this class.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 data common to all instances of this class, like submitting necessary information to the Coin type system.static SoType getClassTypeId (void)β this static method returns theSoTypeobject associated with objects of this class.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)
π Protected Member Functions π
virtual const SoFieldData * getFieldData (void) constSoShape (void)virtual ~SoShape ()float getComplexityValue (SoAction *action)virtual void generatePrimitives (SoAction *action)=0β pure virtual, so you gotta bring your own primitives. πvirtual SbBool shouldGLRender (SoGLRenderAction *action)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)
π«Ά 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) constSbBool writeHeader (SoOutput *out, SbBool isgroup, SbBool isengine) constvoid writeFooter (SoOutput *out) constvirtual const char * getFileFormatName (void) constvirtual SoNotRec createNotRec (void)
β¨ Static Protected Member Functions
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
π§ 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 = 1static int nextActionMethodIndex = 0
πΈ Detailed Description
The SoShape class is the superclass for geometry shapes. π«Ά
The node types which have actual geometry to render inherit this class. For convenience, the SoShape class contains various common code used by the subclasses.
π Member Enumeration Documentation
enum SoShape::TriangleShape
Okay bestie, heads up: this API member is considered internal to the library, as it is not likely to be of interest to the application programmer. π
π οΈ Constructor & Destructor Documentation
SoShape::SoShape (void ) [protected]
Constructor. π
SoShape::~SoShape () [protected], [virtual]
Destructor. π
π Member Function Documentation
SoType SoShape::getClassTypeId (void ) [static]
This static method returns the SoType object associated with objects of this class.
SoType SoShape::getTypeId (void ) const [virtual]
Returns the type identification of an object derived from a class inheriting SoBase. This is used for runtime type checking and "downward" casting. π₯
Implements SoBase.
Reimplemented in SoAsciiText, SoCone, SoCube, SoCylinder, SoFaceSet, SoImage, SoIndexedFaceSet, SoIndexedLineSet, SoIndexedMarkerSet, SoIndexedNurbsCurve, SoIndexedNurbsSurface, SoIndexedPointSet, SoIndexedShape, SoIndexedTriangleStripSet, SoLineSet, SoMarkerSet, SoNonIndexedShape, SoNurbsCurve, SoNurbsSurface, SoPointSet, SoQuadMesh, SoSphere, SoText2, SoText3, SoTriangleStripSet, SoVertexShape, SoVRMLBox, SoVRMLCone, SoVRMLCylinder, SoVRMLElevationGrid, SoVRMLExtrusion, SoVRMLGeometry, SoVRMLIndexedFaceSet, SoVRMLIndexedLine, SoVRMLIndexedLineSet, SoVRMLIndexedShape, SoVRMLPointSet, SoVRMLSphere, SoVRMLText, SoVRMLVertexLine, SoVRMLVertexPoint, and SoVRMLVertexShape.
const SoFieldData ** SoShape::getFieldDataPtr (void ) [static], [protected]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer. π
Returns the SoFieldData class which holds information about fields in this node.
const SoFieldData * SoShape::getFieldData (void ) const [protected], [virtual]
Returns a pointer to the class-wide field data storage object for this instance. If no fields are present, returns NULL.
Reimplemented from SoFieldContainer.
Reimplemented in SoAsciiText, SoCone, SoCube, SoCylinder, SoFaceSet, SoImage, SoIndexedFaceSet, SoIndexedLineSet, SoIndexedMarkerSet, SoIndexedNurbsCurve, SoIndexedNurbsSurface, SoIndexedPointSet, SoIndexedShape, SoIndexedTriangleStripSet, SoLineSet, SoMarkerSet, SoNonIndexedShape, SoNurbsCurve, SoNurbsSurface, SoPointSet, SoQuadMesh, SoSphere, SoText2, SoText3, SoTriangleStripSet, SoVertexShape, SoVRMLBox, SoVRMLCone, SoVRMLCylinder, SoVRMLElevationGrid, SoVRMLExtrusion, SoVRMLGeometry, SoVRMLIndexedFaceSet, SoVRMLIndexedLine, SoVRMLIndexedLineSet, SoVRMLIndexedShape, SoVRMLPointSet, SoVRMLSphere, SoVRMLText, SoVRMLVertexLine, SoVRMLVertexPoint, and SoVRMLVertexShape.
SbBool SoShape::affectsState (void ) const [virtual]
Returns TRUE if the node could have any effect on the state during traversal.
If it returns FALSE, no data in the traversal state will change from the pre-traversal state to the post-traversal state. The SoSeparator node will for instance return FALSE, as it pushes and pops the state before and after traversal of its children. All SoShape nodes will also return FALSE, as just pushing out geometry data to the rendering engine won't affect the actual rendering state.
The default method returns TRUE, on a "better safe than sorry" philosophy. π
Reimplemented from SoNode.
void SoShape::notify (SoNotList * l) [virtual]
Notifies all auditors for this instance when changes are made. π£
Reimplemented from SoNode.
Reimplemented in SoAsciiText, SoImage, SoIndexedLineSet, SoIndexedPointSet, SoText3, SoVertexShape, SoVRMLElevationGrid, SoVRMLExtrusion, SoVRMLGeometry, SoVRMLIndexedLine, SoVRMLIndexedLineSet, SoVRMLIndexedShape, SoVRMLText, SoVRMLVertexLine, SoVRMLVertexPoint, and SoVRMLVertexShape.
void SoShape::getBoundingBox (SoGetBoundingBoxAction * action) [virtual]
Action method for the SoGetBoundingBoxAction.
Calculates bounding box and center coordinates for node and modifies the values of the action to encompass the bounding box for this node and to shift the center point for the scene more towards the one for this node. π¦
Nodes influencing how geometry nodes calculate their bounding box also override this method to change the relevant state variables.
Reimplemented from SoNode.
Reimplemented in SoIndexedLineSet, SoIndexedNurbsCurve, SoIndexedPointSet, SoLineSet, SoNurbsCurve, SoPointSet, SoVRMLIndexedLineSet, SoVRMLPointSet, SoVRMLVertexLine, SoVRMLVertexPoint, and SoVRMLVertexShape.
void SoShape::GLRender (SoGLRenderAction * action) [virtual]
Action method for the SoGLRenderAction.
This is called during rendering traversals. Nodes influencing the rendering state in any way or want to throw geometry primitives at OpenGL override this method. π₯β¨
Reimplemented from SoNode.
Reimplemented in SoAsciiText, SoCone, SoCube, SoCylinder, SoFaceSet, SoImage, SoIndexedFaceSet, SoIndexedLineSet, SoIndexedMarkerSet, SoIndexedNurbsCurve, SoIndexedNurbsSurface, SoIndexedPointSet, SoIndexedTriangleStripSet, SoLineSet, SoMarkerSet, SoNurbsCurve, SoNurbsSurface, SoPointSet, SoQuadMesh, SoSphere, SoText2, SoText3, SoTriangleStripSet, SoVRMLBox, SoVRMLCone, SoVRMLCylinder, SoVRMLElevationGrid, SoVRMLExtrusion, SoVRMLIndexedFaceSet, SoVRMLIndexedLineSet, SoVRMLPointSet, SoVRMLSphere, SoVRMLText, SoVRMLVertexLine, SoVRMLVertexPoint, and SoVRMLVertexShape.
void SoShape::rayPick (SoRayPickAction * action) [virtual]
Calculates picked point based on primitives generated by subclasses. π―
Reimplemented from SoNode.
Reimplemented in SoCone, SoCube, SoCylinder, SoImage, SoIndexedNurbsCurve, SoIndexedNurbsSurface, SoNurbsCurve, SoNurbsSurface, SoSphere, SoText2, SoVRMLBox, SoVRMLCone, SoVRMLCylinder, SoVRMLElevationGrid, and SoVRMLSphere.
void SoShape::callback (SoCallbackAction * action) [virtual]
Action method for SoCallbackAction.
Simply updates the state according to how the node behaves for the render action, so the application programmer can use the SoCallbackAction for extracting information about the scene graph.
Reimplemented from SoNode.
Reimplemented in SoVRMLVertexLine, SoVRMLVertexPoint, and SoVRMLVertexShape.
virtual void SoShape::computeBBox (SoAction * action, SbBox3f & box, SbVec3f & center) [pure virtual]
Implemented by SoShape subclasses to let the SoShape superclass know the exact size and weighted center point of the shape's bounding box. π
The bounding box and center point should be calculated and returned in the local coordinate system.
The method implements action behavior for shape nodes for SoGetBoundingBoxAction. It is invoked from SoShape::getBoundingBox(). (Subclasses should not override SoNode::getBoundingBox().)
The box parameter sent in is guaranteed to be an empty box, while center is undefined upon function entry.
Implemented in SoAsciiText, SoCone, SoCube, SoCylinder, SoFaceSet, SoImage, SoIndexedNurbsCurve, SoIndexedNurbsSurface, SoIndexedShape, SoLineSet, SoNurbsCurve, SoNurbsSurface, SoPointSet, SoQuadMesh, SoSphere, SoText2, SoText3, SoTriangleStripSet, SoVRMLBox, SoVRMLCone, SoVRMLCylinder, SoVRMLElevationGrid, SoVRMLExtrusion, SoVRMLIndexedLine, SoVRMLIndexedShape, SoVRMLSphere, SoVRMLText, and SoVRMLVertexPoint.
void SoShape::getPrimitiveCount (SoGetPrimitiveCountAction * action) [virtual]
Action method for the SoGetPrimitiveCountAction.
Calculates the number of triangle, line segment and point primitives for the node and adds these to the counters of the action. π’
Nodes influencing how geometry nodes calculate their primitive count also override this method to change the relevant state variables.
Reimplemented from SoNode.
Reimplemented in SoAsciiText, SoCone, SoCube, SoCylinder, SoFaceSet, SoImage, SoIndexedFaceSet, SoIndexedLineSet, SoIndexedNurbsCurve, SoIndexedNurbsSurface, SoIndexedPointSet, SoIndexedTriangleStripSet, SoLineSet, SoMarkerSet, SoNurbsCurve, SoNurbsSurface, SoPointSet, SoQuadMesh, SoSphere, SoText2, SoText3, SoTriangleStripSet, SoVRMLBox, SoVRMLCone, SoVRMLCylinder, SoVRMLElevationGrid, SoVRMLExtrusion, SoVRMLIndexedFaceSet, SoVRMLIndexedLineSet, SoVRMLSphere, SoVRMLText, and SoVRMLVertexPoint.
void SoShape::getScreenSize (SoState *const state, const SbBox3f & boundingbox, SbVec2s & rectsize) [static]
A convenience function that returns the size of a boundingbox projected onto the screen. Useful for SCREEN_SPACE complexity geometry. π₯οΈβ¨
float SoShape::getDecimatedComplexity (SoState * state, float complexity) [static]
Not implemented in Coin. Should probably have been private in TGS Inventor API. π
const SoBoundingBoxCache * SoShape::getBoundingBoxCache (void ) const
Return the bounding box cache for this shape. It might return NULL if no bounding box cache has been created. If not NULL, the caller must check if the cache is valid before using it. This can be done using SoCache::isValid(). ποΈ
This function is an extension for Coin, and it is not available in the original SGI Open Inventor v2.1 API.
Since Coin 2.0
float SoShape::getComplexityValue (SoAction * action) [protected]
Hands you back the complexity value your subclass should be using β and yeah, it lowkey cares about which complexity type is in play. If you're on OBJECT_SPACE complexity, you get a number somewhere between 0 and 1. If you're on SCREEN_SPACE complexity, it's a number from 0 and up. That's it, that's the whole vibe. π
virtual void SoShape::generatePrimitives (SoAction * action) [protected], [pure virtual]
This is THE one, bestie β the method that makes a shape node do its thing for SoCallbackAction. It gets called from SoShape::callback(). (And fr fr: subclasses should not override SoNode::callback(). Don't do it. π«)
What your subclass implementation does is use the lil convenience trio β SoShape::beginShape(), SoShape::shapeVertex(), and SoShape::endShape() β along with SoDetail instances, to hand the primitives that make up your shape back to whoever asked. β¨
Implemented in SoAsciiText, SoCone, SoCube, SoCylinder, SoFaceSet, SoImage, SoIndexedFaceSet, SoIndexedNurbsCurve, SoIndexedNurbsSurface, SoIndexedPointSet, SoIndexedTriangleStripSet, SoLineSet, SoNurbsCurve, SoNurbsSurface, SoPointSet, SoQuadMesh, SoSphere, SoText2, SoText3, SoTriangleStripSet, SoVRMLBox, SoVRMLCone, SoVRMLCylinder, SoVRMLElevationGrid, SoVRMLExtrusion, SoVRMLIndexedFaceSet, SoVRMLIndexedLineSet, SoVRMLPointSet, SoVRMLSphere, and SoVRMLText.
SbBool SoShape::shouldGLRender (SoGLRenderAction * action) [protected], [virtual]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer. (Translation: not for you, babes. It's housekeeping. π«Ά)
Reimplemented in SoVertexShape, SoVRMLGeometry, SoVRMLVertexLine, SoVRMLVertexPoint, and SoVRMLVertexShape.
void SoShape::beginSolidShape (SoGLRenderAction * action) [protected]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.
void SoShape::endSolidShape (SoGLRenderAction * action) [protected]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.
void SoShape::GLRenderBoundingBox (SoGLRenderAction * action) [protected]
Render a bounding box. That's the whole job description. Iconic minimalism. π
SbBool SoShape::shouldPrimitiveCount (SoGetPrimitiveCountAction * action) [protected]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.
SbBool SoShape::shouldRayPick (SoRayPickAction *const action) [protected]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.
void SoShape::computeObjectSpaceRay (SoRayPickAction *const action) [protected]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.
void SoShape::computeObjectSpaceRay (SoRayPickAction *const action, const SbMatrix & matrix) [protected]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.
SoDetail * SoShape::createTriangleDetail (SoRayPickAction * action, const SoPrimitiveVertex * v1, const SoPrimitiveVertex * v2, const SoPrimitiveVertex * v3, SoPickedPoint * pp) [protected], [virtual]
Makes triangle detail for a SoPickedPoint. Heads up tho: this only ever gets called internally, and only when generatePrimitives() is what's doing the picking (i.e. SoShape::rayPick() is not overridden). π
In Open Inventor this method returns NULL, and subclasses have to override it themselves to actually create details for a SoPickedPoint.
With Coin? Not necessary at all. But of course, if you choose to override it, it'll work exactly the same way as Open Inventor does. Your call, bestie. π
For it to work, you must supply a face or line detail when generating primitives. And if you pass NULL for the detail argument in SoShape::beginShape(), then yeah β you're gonna have to override this method.
Reimplemented in SoAsciiText, SoIndexedNurbsSurface, SoNurbsSurface, SoText3, and SoVRMLExtrusion.
SoDetail * SoShape::createLineSegmentDetail (SoRayPickAction * action, const SoPrimitiveVertex * v1, const SoPrimitiveVertex * v2, SoPickedPoint * pp) [protected], [virtual]
Makes line detail for a SoPickedPoint. Same deal as above: only called internally, and only when generatePrimitives() is used for picking (SoShape::rayPick() not overridden). π
Returns NULL in Open Inventor, so subclasses need to override it to create details for a SoPickedPoint.
Not necessary with Coin. Override it if you want and it'll behave the same way as Open Inventor. π«Ά
For this to work, you must supply a face or line detail when generating primitives. If you supply NULL for the detail argument in SoShape::beginShape(), you'll have to override this method.
Reimplemented in SoIndexedNurbsCurve, and SoNurbsCurve.
SoDetail * SoShape::createPointDetail (SoRayPickAction * action, const SoPrimitiveVertex * v, SoPickedPoint * pp) [protected], [virtual]
Makes point detail for a SoPickedPoint. Again: internal-only, and only when generatePrimitives() is doing the picking (SoShape::rayPick() not overridden). π
Returns NULL in Open Inventor, and subclasses will need to override this method to create details for a SoPickedPoint.
Not necessary with Coin β override if you like, it'll work the same as Open Inventor.
For this one to work, you must supply a point detail in the SoPrimitiveVertex in generatePrimitives(). Note that's different from the other two, which wanted a face or line detail. Details matter, periodt. π
void SoShape::invokeTriangleCallbacks (SoAction *const action, const SoPrimitiveVertex *const v1, const SoPrimitiveVertex *const v2, const SoPrimitiveVertex *const v3) [protected]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.
void SoShape::invokeLineSegmentCallbacks (SoAction *const action, const SoPrimitiveVertex *const v1, const SoPrimitiveVertex *const v2) [protected]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.
void SoShape::invokePointCallbacks (SoAction *const action, const SoPrimitiveVertex *const v) [protected]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.
void SoShape::beginShape (SoAction *const action, const TriangleShape shapetype, SoDetail *const detail = NULL) [protected]
Okay this one's the good one, so listen up. π§ This method is how you generate primitives for a shape, and it's typically called from a node's generatePrimitives() method. If you're writing your own shape and wanna write a generatePrimitives() for it, honestly? Peek at the generatePrimitives() of a similar shape in Coin first. Free education. π
A single generatePrimitives() can hold several beginShape()/endShape() sequences. shapeVertex() goes on every vertex between beginShape() and endShape(). So, say you wanna generate primitives for a triangle β you'd do something like this:
SoPrimitiveVertex vertex;
this->beginShape(action, SoShape::POLYGON);
vertex.setPoint(SbVec3f(0.0f, 0.0f, 0.0f));
this->shapeVertex(&vertex);
vertex.setPoint(SbVec3f(1.0f, 0.0f, 0.0f));
this->shapeVertex(&vertex);
vertex.setPoint(SbVec3f(1.0f, 1.0f, 0.0f));
this->shapeVertex(&vertex);
this->endShape();
And note: that SoPrimitiveVertex instance can just chill on the stack β no allocating needed. SoShape copies whatever info it needs the moment you call shapeVertex(). π«Ά
Before you call shapeVertex(), you can set extra info on the SoPrimitiveVertex β normal, material index, and texture coordinates, all fair game.
One tiny thing that's different from the original Open Inventor library: this method takes an SoDetail as its last argument instead of an SoFaceDetail. Why? Because we accept more TriangleShape types, so the detail might be a SoFaceDetail or a SoLineDetail. And passing in a SoPointDetail? Pointless, literally β nothing will be done with it. π
void SoShape::shapeVertex (const SoPrimitiveVertex *const v) [protected]
Used while generating primitives for a shape. Wanna know more? Go read beginShape(). It's all there. β¨
See also: beginShape(), endShape()
void SoShape::endShape (void ) [protected]
Used while generating primitives for a shape. Again β beginShape() has the details.
See also: beginShape(), shapeVertex()
void SoShape::generateVertex (SoPrimitiveVertex *const pv, const SbVec3f & point, const SbBool usetexfunc, const SoMultiTextureCoordinateElement *const tce, const float s, const float t, const SbVec3f & normal) [protected]
A lil convenience function that sets up an SoPrimitiveVertex and sends it off via SoShape::shapeVertex(). This is the 2D version. π¦
void SoShape::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) [protected]
A lil convenience function that sets up an SoPrimitiveVertex and sends it off via SoShape::shapeVertex(). This is the 3D version. π
This function is an extension for Coin, and it is not available in the original SGI Open Inventor v2.1 API.
Since: Coin 2.0
SbBool SoShape::startVertexArray (SoGLRenderAction * action, const SoCoordinateElement * coords, const SbVec3f * pervertexnormals, const SbBool texpervertex, const SbBool colorpervertex) [protected]
Convenience method that enables vertex arrays and/or VBOs. Returns TRUE if VBO is used. π
See also: finishVertexArray()
Since: Coin 3.0
void SoShape::finishVertexArray (SoGLRenderAction * action, const SbBool vbo, const SbBool normpervertex, const SbBool texpervertex, const SbBool colorpervertex) [protected]
Call this after you've rendered with vertex arrays. It disables the arrays and VBOs that startVertexArray() turned on β so like, always clean up after yourself, bestie. π§Ήβ¨
See also: startVertexArray()
Since: Coin 3.0
Author π
Generated automatically by Doxygen for Coin from the source code.
Okay that's the whole entire page, you made it to the end, I'm so proud of you fr fr π₯Ήπ This bad boy came out as Version 4.0.10, dated Thu Jun 25 2026 00:00:00, living its best life as SoShape(3). Go build something iconic with it. No cap. π
ππ
π¦ where this page comes from
- fedora 43: Coin4-devel 4.0.10-1.fc43 Β· BSD-3-Clause AND GPL-3.0-or-later
- fedora 43: Coin4-devel 4.0.10-1.fc43 Β· BSD-3-Clause AND GPL-3.0-or-later
- fedora 44: Coin4-devel 4.0.10-1.fc44 Β· BSD-3-Clause AND GPL-3.0-or-later
- fedora 44: Coin4-devel 4.0.10-1.fc44 Β· BSD-3-Clause AND GPL-3.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms