SoText3(3)
π NAME π
SoText3 β okay so this is the SoText3 class from Coin (you'll see it filed under SoText3(3) in the manual), and what it does is render extruded 3D text. Like, actual letters with depth. Not flat. Not boring. Full main-character geometry. π
β¨ SYNOPSIS β¨
#include <Inventor/nodes/SoText3.h>
π¦ Inherits
SoShape β so yeah, it's a shape node, it carries all the shape-node energy with it.
π Public Types
enum Part { FRONT = 1, SIDES = 2, BACK = 4, ALL = FRONT|BACK|SIDES }
enum Justification { LEFT = 1, RIGHT, CENTER }
Partβ which piece of the extruded text you're talking about:FRONT = 1,SIDES = 2,BACK = 4, andALL = FRONT|BACK|SIDESfor when you want the entire lewk. πJustificationβ how the text is lined up:LEFT = 1,RIGHT,CENTER.
π 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 }
π«Ά Public Member Functions
virtual SoType getTypeId (void) constβ the classic "what type am I" call. πΈSbBox3f getCharacterBounds (SoState *state, int stringindex, int charindex)β hands you the bounding box of one specific character, given astringindexand acharindex. Bestie, you can literally point at one letter. πvirtual void GLRender (SoGLRenderAction *action)β the render hook.virtual void getPrimitiveCount (SoGetPrimitiveCountAction *action)β the primitive-counting hook.
π«Ά Public Member Functions inherited from SoShape
virtual SbBool affectsState (void) constvirtual void getBoundingBox (SoGetBoundingBoxAction *action)virtual void rayPick (SoRayPickAction *action)virtual void callback (SoCallbackAction *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.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)
β Static Public Member Functions inherited from SoShape
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.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)
π Public Attributes
SoMFString stringπSoSFFloat spacingπSoSFEnum justificationπSoSFBitMask partsπ
π Protected Member Functions
virtual const SoFieldData * getFieldData (void) constvirtual void generatePrimitives (SoAction *)virtual void computeBBox (SoAction *action, SbBox3f &box, SbVec3f ¢er)virtual SoDetail * createTriangleDetail (SoRayPickAction *action, const SoPrimitiveVertex *v1, const SoPrimitiveVertex *v2, const SoPrimitiveVertex *v3, SoPickedPoint *pp)virtual void notify (SoNotList *list)
Protected Member Functions inherited from SoShape π
okay so bestie, before we get into the main character energy of SoText3, hereβs the family tree of protected stuff it inherits. these are the behind-the-scenes helpers, no cap:
SoShape (void)virtual ~SoShape ()float getComplexityValue (SoAction *action)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 * 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 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 π
- 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 = 1andstatic int nextActionMethodIndex = 0
Detailed Description π
SoText3 is literally the glow-up that turns your text into 3D geometry, bestie. It renders extruded 3D text. periodt. Render text as 3D geometry. that's the whole vibe.
The size of that textual geometry representation is decided from the SoFont::size field of a preceding SoFont-node in the scene graph, which specifies the size in unit coordinates. This value sets the approximate vertical size of the letters. The default value if no SoFont-nodes are used, is 10. no cap.
This node will create 3D geometry from a specified font defined by a preceding SoFont node. The complexity of the glyphs is controlled by a preceding SoComplexity node with Type set to OBJECT_SPACE. But heads up: the default built-in 3D font will not be affected by the SoComplexity node. so don't come for it.
This is a simple example of an extruded SoText3 string, and yes it's giving main character:
#Inventor V2.1 ascii
Separator {
renderCaching ON
Font {
name "Arial"
size 2
}
ProfileCoordinate2 {
point [ 0 0,
0.05 0.05,
0.25 0.05,
0.3 0 ]
}
LinearProfile {
index [ 0, 1, 2, 3 ]
}
Complexity {
type OBJECT_SPACE
value 1
}
ShapeHints {
creaseAngle 1.5
shapeType SOLID
vertexOrdering COUNTERCLOCKWISE
}
Material {
diffuseColor 0.6 0.6 0.8
specularColor 1 1 1
}
Text3 {
string ["Coin3D"]
parts ALL
}
}
if SoText3::Part is set to SIDES or ALL and no profile is provided, a flat, one unit long profile will be created. lowkey magic.
Separate colors can be assigned to the front, sides and back of the glyphs by adding a preceding SoMaterialBinding node. Set the value field to PER_PART (default is OVERALL). The front, side and back of the glyphs will then be colored according to diffuse color 0, 1 and 2 found on the stack. so you can serve looks.
β οΈ Beware, bestie: using a lot ofSoText3text characters in a scene will usually have severe impact on the rendering performance, as each and every character of the text increases the polygon count a lot. This makesSoText3nodes most suitable in situations where you just need a few characters to be placed in your scene, rather than to visualize complete sentences. so like, a title? slay. a whole novel? maybe not.
FILE FORMAT/DEFAULTS:
Text3 {
string ""
spacing 1
justification LEFT
parts FRONT
}
See also: SoFont, SoFontStyle, SoText2, SoAsciiText, SoProfile. iykyk.
Member Enumeration Documentation π
enum SoText3::Part
Used to specify which parts should be rendered/generated. Here's the squad:
FRONTβ Front of characters.SIDESβ Sides of characters.BACKβ Back of characters.ALLβ All parts.
enum SoText3::Justification
Used to specify horizontal string alignment. The alignment icons:
LEFTβ Left edges of strings are aligned.RIGHTβ Right edges of strings are aligned.CENTERβ Centers of strings are aligned.
π Member Function Documentation π
okay bestie, this is the main event β all the member functions, no cap. let's get into it. β¨
SoType SoText3::getClassTypeId (void ) [static]
This static method returns the SoType object associated with objects of this class. so like, the class ID? iconic. π
SoType SoText3::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.
Reimplemented from SoShape.
so if you need to know what type you're dealing with at runtime, this is your girl. π
const SoFieldData ** SoText3::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.
lowkey not for you unless you're deep in the guts. π
const SoFieldData * SoText3::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 SoShape.
so if there are no fields, you get NULL, periodt. π«Ά
void SoText3::initClass (void ) [static]
No description given in the original, bestie. it's just there, being iconic. β¨
SbBox3f SoText3::getCharacterBounds (SoState * state, int stringindex, int charindex)
Not implemented. Should probably have been private in Open Inventor API. Let us know if you need this method for anything, and we'll implement it.
so yeah, it's giving placeholder energy. π not implemented, no cap.
void SoText3::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 SoShape.
so if you're about that OpenGL life, this is where you do your thing. π₯
void SoText3::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 SoShape.
math but make it geometry. π’
void SoText3::generatePrimitives (SoAction * action) [protected], [virtual]
The method implements action behavior for shape nodes for SoCallbackAction. It is invoked from SoShape::callback(). (Subclasses should not override SoNode::callback().)
The subclass implementations uses the convenience methods SoShape::beginShape(), SoShape::shapeVertex(), and SoShape::endShape(), with SoDetail instances, to pass the primitives making up the shape back to the caller.
Implements SoShape.
so it's like the shape's little messenger. π¦
void SoText3::computeBBox (SoAction * action, SbBox3f & box, SbVec3f & center) [protected], [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.
Implements SoShape.
so you gotta fill in the box and center, and don't touch the other one. π¦
SoDetail * SoText3::createTriangleDetail (SoRayPickAction * action, const SoPrimitiveVertex * v1, const SoPrimitiveVertex * v2, const SoPrimitiveVertex * v3, SoPickedPoint * pp) [protected], [virtual]
Will create triangle detail for a SoPickedPoint. This method will only be called internally, when generatePrimitives() is used for picking (SoShape::rayPick() is not overridden).
This method returns NULL in Open Inventor, and subclasses will need to override this method to create details for a SoPickedPoint.
This is not necessary with Coin. Of course, if you choose to override it, it will work in 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 from SoShape.
so like, Coin got your back, but if you're old school, you can still do it. π
void SoText3::notify (SoNotList * l) [protected], [virtual]
Notifies all auditors for this instance when changes are made.
Reimplemented from SoShape.
so it's the gossip girl of the node world. π£
πΈ Member Data Documentation πΈ
SoMFString SoText3::string
The set of strings to render. Each string in the multiple value field will be rendered on a separate line.
The default value of the field is a single empty string.
so one string per line, default is empty. slay. π
SoSFFloat SoText3::spacing
Vertical spacing between the baselines of two consecutive horizontal lines. Default value is 1.0, which means that it is equal to the vertical size of the highest character in the bitmap alphabet.
so 1.0 means it matches the tallest letter. π
SoSFEnum SoText3::justification
Determines horizontal alignment of text strings.
If justification is set to SoText3::LEFT, the left edge of the first string is at the origin and all strings are aligned with their left edges. If set to SoText3::RIGHT, the right edge of the first string is at the origin and all strings are aligned with their right edges. Otherwise, if set to SoText3::CENTER, the center of the first string is at the origin and all strings are aligned with their centers. The origin is always located at the baseline of the first line of text.
Default value is SoText3::LEFT.
so left, right, or center β pick your vibe. π―
SoSFBitMask SoText3::parts
Character parts. Default is to show only the front facing part.
so you can show more than just the front, but by default it's front only. π
β¨ Author β¨
Generated automatically by Doxygen for Coin from the source code.
so Doxygen did the thing, for Coin. π€
and that's the whole page, bestie! this was Coin version 4.0.10, dated Thu Jun 25 2026 00:00:00, and you just read SoText3(3). go forth and render some 3D text. π¦π
π¦ 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