SoVRMLBillboard(3)

๐Ÿ“ฆ version 2.5.0, in fedora 43, fedora 44

๐Ÿ’– SoVRMLBillboard(3) ๐Ÿ’–

okay so bestie, we're doing the SoVRMLBillboard manual page and honestly? She's an icon. This is part one of three, so buckle up, hydrate, and let's get into it. ๐ŸŒธ


โœจ NAME โœจ

SoVRMLBillboard โ€” the class that spins your geometry around so it's always looking at the viewpoint. It's giving "I only have eyes for you" but make it 3D. ๐Ÿฆ‹


๐ŸŽ€ SYNOPSIS ๐ŸŽ€

First things first, you gotta pull her in:

#include <Inventor/VRMLnodes/SoVRMLBillboard.h>

And she inherits from SoVRMLParent, so everything that parent class can do, she gets to do too. Family money, lowkey. ๐Ÿ’…


๐ŸŒˆ Public Member Functions ๐ŸŒˆ

Here's everything SoVRMLBillboard can do all on her own, main character behaviour only:

virtual SoType getTypeId (void) const
SoVRMLBillboard (void)
SoVRMLBillboard (int numchildren)
virtual void doAction (SoAction *action)
virtual void callback (SoCallbackAction *action)
virtual void GLRender (SoGLRenderAction *action)
virtual void getBoundingBox (SoGetBoundingBoxAction *action)
virtual void getMatrix (SoGetMatrixAction *action)
virtual void pick (SoPickAction *action)
virtual void search (SoSearchAction *action)
virtual void GLRenderBelowPath (SoGLRenderAction *action)
virtual void GLRenderInPath (SoGLRenderAction *action)
virtual void GLRenderOffPath (SoGLRenderAction *action)
virtual void notify (SoNotList *list)
not me noticing she's got two constructors โ€” the no-arg one and the int numchildren one. Versatility, periodt. โœจ

๐Ÿงฌ Public Member Functions inherited from SoVRMLParent

The generational wealth, part one:

virtual SbBool affectsState (void) const
virtual void addChild (SoNode *child)
virtual void insertChild (SoNode *child, int idx)
virtual SoNode * getChild (int idx) const
virtual int findChild (const SoNode *child) const
virtual int getNumChildren (void) const
virtual void removeChild (int idx)
virtual void removeChild (SoNode *child)
virtual void removeAllChildren (void)
virtual void replaceChild (int idx, SoNode *child)
virtual void replaceChild (SoNode *old, SoNode *child)
virtual SoChildList * getChildren (void) const
virtual void write (SoWriteAction *action)
virtual void getPrimitiveCount (SoGetPrimitiveCountAction *action)

๐Ÿงฌ Public Member Functions inherited from SoGroup

SoGroup (void)
SoGroup (int nchildren)
virtual void handleEvent (SoHandleEventAction *action)
virtual void audioRender (SoAudioRenderAction *action)

๐Ÿงฌ 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=0) const
virtual void rayPick (SoRayPickAction *action)
virtual void grabEventsSetup (void)
virtual void grabEventsCleanup (void)
virtual void startNotify (void)
uint32_t getNodeId (void) const
virtual void writeInstance (SoOutput *out)
virtual SoNode * addToCopyDict (void) const
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=0)
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 *in)
void get (SbString &fielddata, SoOutput *out)
virtual SbBool validateNewFieldValue (SoField *field, void *newval)
virtual void addWriteReference (SoOutput *out, SbBool isfromfield=0)
SbBool getIsBuiltIn (void) const
void setUserData (void *userdata) const
void * getUserData (void) const
lowkey set and get each showing up twice with different signatures? she contains multitudes fr fr ๐Ÿ˜ญ

๐Ÿงฌ 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
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 โญ

The stuff you can call without even making an object. No commitment, just vibes:

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

โญ Static Public Member Functions inherited from SoVRMLParent

static SoType getClassTypeId (void)
static void initClass (void)
static void updateChildList (const SoNode *const *nodes, const int numnodes, SoChildList &cl)
static void updateChildList (SoNode *nodewithsfnode, SoChildList &cl)

โญ Static Public Member Functions inherited from SoGroup

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

โญ Static Public Member Functions inherited from SoNode

okay this one is a lot, bestie. deep breaths. ๐Ÿซถ

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)
static void initClasses (void)
static uint32_t 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)
static SoType getClassTypeId (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)
static SoType getClassTypeId (void)
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 *in, SoBase *&base, SoType expectedtype)
static void setInstancePrefix (const SbString &c)
static void setTraceRefs (SbBool trace)
static SbBool getTraceRefs (void)
static SbBool connectRoute (SoInput *in, const SbName &fromnodename, const SbName &fromfieldname, const SbName &tonodename, const SbName &tofieldname)
static SbBool readRoute (SoInput *in)

๐Ÿ’œ Public Attributes ๐Ÿ’œ

the actual fields she's walking around with:

SoSFVec3f axisOfRotation
SoSFVec3f bboxCenter
SoSFVec3f bboxSize

๐Ÿ’œ Public Attributes inherited from SoVRMLParent

SoMFNode children

๐Ÿ”’ Protected Member Functions ๐Ÿ”’

members-only, no gatecrashers:

virtual const SoFieldData * getFieldData (void) const
virtual ~SoVRMLBillboard ()

๐Ÿ”’ Protected Member Functions inherited from SoVRMLParent

SoVRMLParent (void)
SoVRMLParent (int approxchildren)
virtual ~SoVRMLParent ()
virtual SbBool readInstance (SoInput *in, unsigned short flags)
virtual void copyContents (const SoFieldContainer *from, SbBool copyConn)

๐Ÿ”’ Protected Member Functions inherited from SoGroup

virtual ~SoGroup ()
virtual SbBool readChildren (SoInput *in)

๐Ÿ”’ Protected Member Functions inherited from SoNode

SoNode (void)
virtual ~SoNode ()

๐Ÿ”’ Protected Member Functions inherited from SoFieldContainer

SoFieldContainer (void)
~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

๐Ÿงš Static Protected Member Functions ๐Ÿงš

static const SoFieldData ** getFieldDataPtr (void)

๐Ÿงš Static Protected Member Functions inherited from SoVRMLParent

static const SoFieldData ** getFieldDataPtr (void)

๐Ÿงš Static Protected Member Functions inherited from SoGroup

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 bonus round. the deluxe edition. ๐ŸŽ

๐ŸŒˆ 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 }
look at all those hex values bestie, she's a bitmask girlie ๐Ÿ’… every one of them exact, don't you dare round them

๐ŸŒˆ Protected Types inherited from SoBase

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

๐ŸŒˆ Protected Attributes inherited from SoVRMLParent

SoMFNode addChildren
SoMFNode removeChildren

๐ŸŒˆ Protected Attributes inherited from SoGroup

SoChildList * children

๐ŸŒˆ Protected Attributes inherited from SoNode

uint32_t uniqueId

๐ŸŒˆ Protected Attributes inherited from SoFieldContainer

SbBool isBuiltIn

๐ŸŒˆ Static Protected Attributes inherited from SoNode

static uint32_t nextUniqueId = 0
static int nextActionMethodIndex = 0
both of them start at 0, and yes that matters. no cap. ๐Ÿ”ฅ

โœจ Detailed Description โœจ

okay bestie ๐Ÿ’…, so the SoVRMLBillboard class is literally the moment when geometry rotates itself to face the viewpoint. Main character energy fr. โœจ๐Ÿ‘‘ This is iconic behavior. ๐Ÿ’–

The detailed class documentation is taken verbatim from the VRML97 standard (ISO/IEC 14772-1:1997). It is copyright The Web3D Consortium, and is used by permission of the Consortium: ๐Ÿซถ

Billboard {
  eventIn      MFNode   addChildren
  eventIn      MFNode   removeChildren
  exposedField SFVec3f  axisOfRotation 0 1 0     # (-inf, inf)
  exposedField MFNode   children       []
  field        SFVec3f  bboxCenter     0 0 0     # (-inf, inf)
  field        SFVec3f  bboxSize       -1 -1 -1  # (0, inf) or -1,-1,-1
}

The Billboard node is a grouping node which modifies its coordinate system so that the Billboard node's local Z-axis turns to point at the viewer. ๐Ÿฆ‹ The Billboard node has children which may be other children nodes. ๐Ÿ’– The axisOfRotation field specifies which axis to use to perform the rotation. This axis is defined in the local coordinate system. ๐ŸŒธ When the axisOfRotation field is not (0, 0, 0), the following steps describe how to rotate the billboard to face the viewer:

  • a. Compute the vector from the Billboard node's origin to the viewer's position. This vector is called the billboard-to-viewer vector. โœจ
  • b. Compute the plane defined by the axisOfRotation and the billboard-to-viewer vector. ๐Ÿ’ซ
  • c. Rotate the local Z-axis of the billboard into the plane from b., pivoting around the axisOfRotation. ๐Ÿ”ฅ

When the axisOfRotation field is set to (0, 0, 0), the special case of viewer-alignment is indicated. In this case, the object rotates to keep the billboard's local Y-axis parallel with the Y-axis of the viewer. This special case is distinguished by setting the axisOfRotation to (0, 0, 0). ๐Ÿ’… The following steps describe how to align the billboard's Y-axis to the Y-axis of the viewer:

  • d. Compute the billboard-to-viewer vector. ๐ŸŽ€
  • e. Rotate the Z-axis of the billboard to be collinear with the billboard-to-viewer vector and pointing towards the viewer's position. ๐ŸŒˆ
  • f. Rotate the Y-axis of the billboard to be parallel and oriented in the same direction as the Y-axis of the viewer. โญ

If the axisOfRotation and the billboard-to-viewer line are coincident, the plane cannot be established and the resulting rotation of the billboard is undefined. ๐Ÿ’€ For example, if the axisOfRotation is set to (0,1,0) (Y-axis) and the viewer flies over the billboard and peers directly down the Y-axis, the results are undefined. ๐Ÿ™ˆ Multiple instances of Billboard nodes (DEF/USE) operate as expected: each instance rotates in its unique coordinate system to face the viewer. ๐Ÿ‘ฏ Subclause 4.6.5, Grouping and children nodes (http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-VRML97/part1/concepts.html#4.6.5), provides a description of the children, addChildren, and removeChildren fields and eventIns. ๐Ÿ“š The bboxCenter and bboxSize fields specify a bounding box that encloses the Billboard node's children. This is a hint that may be used for optimization purposes. ๐Ÿง  The results are undefined if the specified bounding box is smaller than the actual bounding box of the children at any time. ๐Ÿ’€ A default bboxSize value, (-1, -1, -1), implies that the bounding box is not specified and if needed shall be calculated by the browser. ๐Ÿค– A description of the bboxCenter and bboxSize fields is contained in 4.6.4, Bounding boxes (http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-VRML97/part1/concepts.html#4.6.4), ๐Ÿ“ฆ

The rest of this class documentation is not from the VRML97 standards documentation, but was written specifically for the Coin3D API documentation. ๐Ÿ“

The following example VRML scene is a simple illustration of how SoVRMLBillboard::axisOfRotation constrains rotation around the given vector: ๐Ÿ”

#VRML V2.0 utf8

Transform {
   translation -2 0 0
   children [
      Billboard {
         children [ Box { } ]
      }
   ]
}

Transform {
   translation 2 0 0
   children [
      Billboard {
         axisOfRotation 0 1 0
         children [ Box { } ]
      }
   ]
}

Transform {
   translation 0 -2 0
   children [ Box { size 10 0.1 10 } ]
}

โœจ Constructor & Destructor Documentation โœจ

SoVRMLBillboard::SoVRMLBillboard (void )

Constructor. ๐Ÿ’– References axisOfRotation, bboxCenter, bboxSize, and SoVRMLBillboard(). Referenced by getFieldData(), and SoVRMLBillboard(). ๐Ÿ”—

SoVRMLBillboard::SoVRMLBillboard (int numchildren)

Constructor. ๐ŸŒธ numchildren is the expected number of children. ๐Ÿ‘ถ

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

Destructor. ๐Ÿ’€


โœจ Member Function Documentation โœจ

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

Returns the type identification of an object derived from a class inheriting SoBase. This is used for run-time type checking and "downward" casting. ๐Ÿ”

Usage example:

void foo(SoNode * node)
{
  if (node->getTypeId() == SoFile::getClassTypeId()) {
    SoFile * filenode = (SoFile *)node;  // safe downward cast, knows the type
  }
  else if (node->getTypeId().isOfType(SoGroup::getClassTypeId())) {
    SoGroup * group = (SoGroup *)node;  // safe downward cast, knows the type
  }
}

For application programmers wanting to extend the library with new nodes, engines, nodekits, draggers or others: this method needs to be overridden in all subclasses. This is typically done as part of setting up the full type system for extension classes, which is usually accomplished by using the pre-defined macros available through for instance Inventor/nodes/SoSubNode.h (SO_NODE_INIT_CLASS and SO_NODE_CONSTRUCTOR for node classes), Inventor/engines/SoSubEngine.h (for engine classes) and so on. ๐Ÿ› ๏ธ

For more information on writing Coin extensions, see the class documentation of the toplevel superclasses for the various class groups. ๐Ÿ“š Reimplemented from SoVRMLParent. Referenced by GLRenderBelowPath(). ๐Ÿ”—

const SoFieldData * SoVRMLBillboard::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 SoVRMLParent. References SoVRMLBillboard(). ๐Ÿ”—

void SoVRMLBillboard::doAction (SoAction * action) [virtual]

This function performs the typical operation of a node for any action. โš™๏ธ Reimplemented from SoVRMLParent. References SoGroup::doAction(), SoAction::getState(), SoState::pop(), and SoState::push(). Referenced by callback(), and pick(). ๐Ÿ”—

void SoVRMLBillboard::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 SoGroup. References doAction(). ๐Ÿ”—

void SoVRMLBillboard::GLRender (SoGLRenderAction * action) [virtual]

Action method for the SoGLRenderAction. ๐ŸŽจ

This is called during rendering traversals. Nodes influencing the rendering state in any way or who wants to throw geometry primitives at OpenGL overrides this method. ๐Ÿš€ Reimplemented from SoGroup. References SoAction::getCurPathCode(), GLRenderBelowPath(), and GLRenderInPath(). ๐Ÿ”—

void SoVRMLBillboard::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 calculates their bounding box also overrides this method to change the relevant state variables. ๐Ÿงฉ Reimplemented from SoGroup. References SoGroup::getBoundingBox(), SoAction::getState(), SoState::pop(), and SoState::push(). ๐Ÿ”—

void SoVRMLBillboard::getMatrix (SoGetMatrixAction * action) [virtual]

Action method for SoGetMatrixAction. ๐Ÿงฎ

Updates action by accumulating with the transformation matrix of this node (if any). ๐Ÿ”„ Reimplemented from SoGroup. ๐Ÿ”—

void SoVRMLBillboard::pick (SoPickAction * action) [virtual]

Action method for SoPickAction. ๐Ÿ‘†

Does common processing for SoPickAction action instances. ๐ŸŽฏ Reimplemented from SoGroup. References doAction(). ๐Ÿ”—

void SoVRMLBillboard::search (SoSearchAction * action) [virtual]

Action method for SoSearchAction. ๐Ÿ”Ž

Compares the search criteria from the action to see if this node is a match. Searching is done by matching up all criteria set up in the SoSearchAction -- if any of the requested criteria is a miss, the search is not deemed successful for the node. โŒ

See also SoSearchAction. ๐Ÿ“– Reimplemented from SoVRMLParent. References SoGroup::doAction(), SoSearchAction::isFound(), and SoNode::search(). ๐Ÿ”—

void SoVRMLBillboard::GLRenderBelowPath (SoGLRenderAction * action) [virtual]

Implements the SoAction::BELOW_PATH traversal method for the rendering action. ๐Ÿ›ฃ๏ธ Reimplemented from SoNode. References SoGLRenderAction::abortNow(), SbPList::getArrayPtr(), SoVRMLParent::getChildren(), SbPList::getLength(), SoBase::getName(), SoAction::getState(), getTypeId(), SoNode::GLRenderBelowPath(), SoAction::hasTerminated(), SoState::pop(), SoAction::popCurPath(), SoAction::popPushCurPath(), SoDebugError::post(), SoState::push(), SoAction::pushCurPath(), and SoNode::SoNode(). Referenced by GLRender(), and GLRenderInPath(). ๐Ÿ”—

void SoVRMLBillboard::GLRenderInPath (SoGLRenderAction * action) [virtual]

Implements the SoAction::IN_PATH traversal method for the rendering action. ๐Ÿ›ค๏ธ Reimplemented from SoNode. References SoGLRenderAction::abortNow(), SoNode::affectsState(), SbPList::getArrayPtr(), SoVRMLParent::getChildren(), SoAction::getCurPathCode(), SoAction::getPathCode(), SoAction::getState(), GLRenderBelowPath(), SoNode::GLRenderInPath(), SoNode::GLRenderOffPath(), SoAction::hasTerminated(), SoState::pop(), SoAction::popCurPath(), SoState::push(), SoAction::pushCurPath(), and SoNode::SoNode(). Referenced by GLRender(). ๐Ÿ”—

void SoVRMLBillboard::GLRenderOffPath (SoGLRenderAction * action) [virtual]

Implements the SoAction::OFF_PATH traversal method for the rendering action. ๐Ÿšง Reimplemented from SoNode. ๐Ÿ”—

void SoVRMLBillboard::notify (SoNotList * l) [virtual]

Notifies all auditors for this instance when changes are made. ๐Ÿ“ข Reimplemented from SoVRMLParent. References SoVRMLParent::notify(). ๐Ÿ”—

โœจ Member Data Documentation โœจ

Okay bestie, this is the part where we meet the actual data members โ€” the little fields living inside every SoVRMLBillboard node. They're all SoSFVec3f, which is the fancy way of saying "a single field holding three floats" (x, y, z, you know the drill). Let's go ๐Ÿ’–


๐ŸŒธ SoSFVec3f SoVRMLBillboard::axisOfRotation ๐ŸŒธ

This one's the axis of rotation for the geometry โ€” the imaginary line the whole billboard spins around. Spin queen behavior, honestly ๐Ÿ‘‘

Heads up though: this field gets referenced by SoVRMLBillboard(), so the constructor is already looking at it. iykyk ๐Ÿซถ


๐Ÿฆ‹ SoSFVec3f SoVRMLBillboard::bboxCenter ๐Ÿฆ‹

The bounding box center hint โ€” a little nudge telling the scene graph roughly where the middle of the bounding box sits.

Default value is (0, 0, 0). Chill, centered, main character energy.

And yes, this one's referenced by SoVRMLBillboard() too. โœจ


๐ŸŽ€ SoSFVec3f SoVRMLBillboard::bboxSize ๐ŸŽ€

The bounding box size hint โ€” how big the bounding box supposedly is.

Default value is (-1, -1, -1). And no, that's not a typo, bestie โ€” negative values here are literally the "I'm not giving you a hint, figure it out yourself" signal. The default is just built different ๐Ÿ’€

Referenced by SoVRMLBillboard() as well, because of course it is. The constructor stays nosy. ๐Ÿ™ˆ


๐Ÿ’Œ Author ๐Ÿ’Œ

Generated automatically by Doxygen for Coin from the source code. Not a human author, just a robot doing its lil documentation duties ๐Ÿค–๐Ÿ’…


And that's a wrap on SoVRMLBillboard(3), bestie! This page came straight out of Coin Version 2.5.0, and the footer date stamp on it is SoVRMLBillboard(3) โ€” go forth, rotate your billboards, and slay ๐Ÿ’–โœจ๐Ÿฆ‹

๐Ÿ“ฆ where this page comes from