SoVRMLScript(3)
SoVRMLScript(3) from the Coin manual, part 1 of 2 β yes bestie, there's more coming, don't log off. This one is all about the class that lets scripts run the whole scene. It's giving puppet master but make it VRML. π
π NAME π
SoVRMLScript β The SoVRMLScript class is used to control the scene using scripts. Periodt. π
β¨ SYNOPSIS β¨
#include <Inventor/VRMLnodes/SoVRMLScript.h>
Inherits SoNode. Lowkey the whole personality comes from this inheritance tree, iykyk.
π«Ά Public Member Functions π«Ά
These are the ones that belong to SoVRMLScript itself, no borrowing:
SoVRMLScript (void)virtual SoType getTypeId (void) constvirtual void doAction (SoAction *action)virtual void callback (SoCallbackAction *action)virtual void GLRender (SoGLRenderAction *action)virtual void getBoundingBox (SoGetBoundingBoxAction *action)virtual void pick (SoPickAction *action)virtual void handleEvent (SoHandleEventAction *action)virtual void write (SoWriteAction *action)
π Public Member Functions inherited from SoNode π
Okay so these are inherited, but they're still part of the whole fit. Don't skip them, that's not the vibe.
void setOverride (const SbBool state)SbBool isOverride (void) constvoid setNodeType (const NodeType type)NodeType getNodeType (void) constvirtual SoNode * copy (SbBool copyconnections=FALSE) constvirtual SbBool affectsState (void) constvirtual void GLRenderBelowPath (SoGLRenderAction *action)virtual void GLRenderInPath (SoGLRenderAction *action)virtual void GLRenderOffPath (SoGLRenderAction *action)virtual void getMatrix (SoGetMatrixAction *action)virtual void rayPick (SoRayPickAction *action)virtual void search (SoSearchAction *action)virtual void audioRender (SoAudioRenderAction *action)virtual void getPrimitiveCount (SoGetPrimitiveCountAction *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 SoFieldContainer * copyThroughConnection (void) const
π Public Member Functions inherited from SoFieldContainer π
More inherited goodness, still important, still iconic:
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 π¦
Base class behavior, but make it fashion:
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 fromtype.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 girlies, no instance needed:
static void initClass (void)static SoType getClassTypeId (void)static void setScriptEvaluateCB (SoVRMLScriptEvaluateCB *cb, void *closure)
π 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 π
The actual data fields you can touch, bestie:
SoMFString urlSoSFBool directOutputSoSFBool mustEvaluate
π₯ Protected Member Functions π₯
For the class and its subclasses only, okay? Respect the boundaries.
virtual ~SoVRMLScript ()virtual void copyContents (const SoFieldContainer *from, SbBool copyconn)virtual void notify (SoNotList *list)
π Protected Member Functions inherited from SoNode π
SoNode (void)virtual ~SoNode ()
π§ 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)
π Additional Inherited Members π
Yep, there's more. The inheritance tree said "you're welcome."
π 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 }
β 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)
π 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
Okay that's part 1, and it ate. Part 2 is coming, so don't go anywhere. π«Ά
π DETAILED DESCRIPTION π
The SoVRMLScript class is used to control the scene using scripts. π
Okay bestie, here's the tea β 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:
Script {
exposedField MFString url []
field SFBool directOutput FALSE
field SFBool mustEvaluate FALSE
# And any number of:
eventIn eventType eventName
field fieldType fieldName initialValue
eventOut eventType eventName
}
The Script node is used to program behaviour in a scene. Script nodes typically
- signify a change or user action;
- receive events from other nodes;
- contain a program module that performs some computation;
- effect change somewhere else in the scene by sending events.
Each Script node has associated programming language code, referenced by the url field, that is executed to carry out the Script node's function. That code is referred to as the "script" in the rest of this description. Details on the url field can be found in 4.5, VRML and the World Wide Web (http://www.web3d.org/documents/specifications/14772/V2.0/part1/concepts.html#4.5).
Browsers are not required to support any specific language. Detailed information on scripting languages is described in 4.12, Scripting (http://www.web3d.org/documents/specifications/14772/V2.0/part1/concepts.html#4.12).
Browsers supporting a scripting language for which a language binding is specified shall adhere to that language binding. Sometime before a script receives the first event it shall be initialized (any language-dependent or user-defined initialize() is performed).
The script is able to receive and process events that are sent to it. Each event that can be received shall be declared in the Script node using the same syntax as is used in a prototype definition:
eventIn type name
The type can be any of the standard VRML fields (as defined in 5, Field and event reference). Name shall be an identifier that is unique for this Script node.
The Script node is able to generate events in response to the incoming events. Each event that may be generated shall be declared in the Script node using the following syntax:
eventOut type name
With the exception of the url field, exposedFields are not allowed in Script nodes.
If the Script node's mustEvaluate field is FALSE, the browser may delay sending input events to the script until its outputs are needed by the browser. If the mustEvaluate field is TRUE, the browser shall send input events to the script as soon as possible, regardless of whether the outputs are needed. The mustEvaluate field shall be set to TRUE only if the Script node has effects that are not known to the browser (such as sending information across the network). Otherwise, poor performance may result.
Once the script has access to a VRML node (via an SoSFNode or SoMFNode value either in one of the Script node's fields or passed in as an eventIn), the script is able to read the contents of that node's exposed fields.
If the Script node's directOutput field is TRUE, the script may also send events directly to any node to which it has access, and may dynamically establish or break routes.
If directOutput is FALSE (the default), the script may only affect the rest of the world via events sent through its eventOuts. The results are undefined if directOutput is FALSE and the script sends events directly to a node to which it has access. π
A script is able to communicate directly with the VRML browser to get information such as the current time and the current world URL. This is strictly defined by the API for the specific scripting language being used. The location of the Script node in the scene graph has no affect on its operation. For example, if a parent of a Script node is a Switch node with whichChoice set to "-1" (i.e., ignore its children), the Script node continues to operate as specified (i.e., it receives and sends events).
π§Έ CONSTRUCTOR & DESTRUCTOR DOCUMENTATION π§Έ
SoVRMLScript::SoVRMLScript (void )
Constructor. The origin story, the birth, the main character entrance β¨
SoVRMLScript::~SoVRMLScript () [protected], [virtual]
Destructor. It's giving goodbye era π₯²
π οΈ MEMBER FUNCTION DOCUMENTATION π οΈ
void SoVRMLScript::initClass (void ) [static]
(no description given, bestie β it's just sitting there being iconic and mysterious π«Ά)
SoType SoVRMLScript::getClassTypeId (void ) [static]
This static method returns the SoType object associated with objects of this class.
SoType SoVRMLScript::getTypeId (void ) const [virtual]
Usage example, copy-paste ready fr fr:
void foo(SoNode * node)
{
if (node->getTypeId() == SoFile::getClassTypeId()) {
SoFile * filenode = (SoFile *)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 predefined 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 top level superclasses for the various class groups.
Implements SoBase.
void SoVRMLScript::doAction (SoAction * action) [virtual]
This function performs the typical operation of a node for any action.
Reimplemented from SoNode.
void SoVRMLScript::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.
void SoVRMLScript::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.
void SoVRMLScript::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.
void SoVRMLScript::pick (SoPickAction * action) [virtual]
Action method for SoPickAction.
Does common processing for SoPickAction action instances.
Reimplemented from SoNode.
void SoVRMLScript::handleEvent (SoHandleEventAction * action) [virtual]
Action method for SoHandleEventAction.
Inspects the event data from action, and processes it if it is something which this node should react to.
Nodes influencing relevant state variables for how event handling is done also override this method.
Reimplemented from SoNode.
void SoVRMLScript::write (SoWriteAction * action) [virtual]
Action method for SoWriteAction.
Writes out a node object, and any connected nodes, engines etc, if necessary.
Reimplemented from SoNode.
void SoVRMLScript::setScriptEvaluateCB (SoVRMLScriptEvaluateCB * cb, void * closure) [static]
Sets the callback that will be called when the script needs to be evaluated. π
void SoVRMLScript::copyContents (const SoFieldContainer * from, SbBool copyconnections) [protected], [virtual]
Makes a deep copy of all data of from into this instance, except external scene graph references if copyconnections is FALSE.
This is the method that should be overridden by extension node / engine / dragger / whatever subclasses which need to account for internal data that are not handled automatically.
For copying nodes from application code, you should not invoke this function directly, but rather call the SoNode::copy() function:
SoNode * mynewnode = templatenode->copy();
The same also goes for engines.
Make sure that when you override the copyContents() method in your extension class that you also make it call upwards to its parent superclass in the inheritance hierarchy, as copyContents() in for instance SoNode and SoFieldContainer does important work. It should go something like this:
void
MyCoinExtensionNode::copyContents(const SoFieldContainer * from,
SbBool copyconnections)
{
// let parent superclasses do their thing (copy fields, copy
// instance name, etc.)
SoNode::copyContents(from, copyconnections);
// [..then copy internal data..]
}
Reimplemented from SoNode.
void SoVRMLScript::notify (SoNotList * l) [protected], [virtual]
Notifies all auditors for this instance when changes are made.
Reimplemented from SoNode.
π AUTHOR π
Generated automatically by Doxygen for Coin from the source code.
And that's a wrap on part 2, bestie π This one came from Coin version 4.0.10, dated Thu Jun 25 2026 00:00:00 β yes the timestamp said 00:00:00, midnight release energy, very mysterious, very cunty. Slay, go read some more manpages, ily π«Άβ¨
π¦ 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