coin_elements(3) | Coin | coin_elements(3) |
NAME
coin_elements - Element Classes
- The element classes in Coin are the containers of state information during
action traversals of scene graphs.
SYNOPSIS
Classes
class SoGLCacheContextElement
The SoGLCacheContextElement class handles the OpenGL cache for a
context. class SoGLClipPlaneElement
The SoGLClipPlaneElement class is yet to be documented. class
SoGLColorIndexElement
The SoGLColorIndexElement class sets the current OpenGL color. class
SoGLCoordinateElement
The SoGLCoordinateElement class is yet to be documented. class
SoGLDepthBufferElement
The SoGLDepthBufferElement controls the OpenGL depth buffer. class
SoGLDrawStyleElement
The SoGLDrawStyleElement updates the current draw style in OpenGL.
class SoGLEnvironmentElement
The SoGLEnvironmentElement class is for setting GL fog etc. class
SoGLLazyElement
The SoGLLazyElement class is meant to optimize GL rendering. class
SoGLLightIdElement
The SoGLLightIdElement class is yet to be documented. class
SoGLLinePatternElement
The SoGLLinePatternElement class changes the line stipple pattern of
the OpenGL render state. class SoGLLineWidthElement
The SoGLLineWidthElement class changes the line width setting of the
OpenGL render state. class SoGLModelMatrixElement
The SoGLModelMatrixElement class is yet to be documented. class
SoGLMultiTextureCoordinateElement
The SoGLMultiTextureCoordinateElement class stores the current
gltexture coordinates for several units. class
SoGLMultiTextureEnabledElement
The SoGLMultiTextureEnabledElement class is an element which controls
whether texturing is enabled or not. class
SoGLMultiTextureMatrixElement
The SoGLMultiTextureMatrixElement class is used to update the OpenGL
texture matrix. class SoGLMultiTextureImageElement
The SoGLMultiTextureImageElement class is used to control the current
GL texture for texture units. class SoGLNormalElement
The SoGLNormalElement class is yet to be documented. class
SoGLPointSizeElement
The SoGLPointSizeElement class changes the point size setting of the
OpenGL render state. class SoGLPolygonOffsetElement
The SoGLPolygonOffsetElement class is yet to be documented. class
SoGLProjectionMatrixElement
The SoGLProjectionMatrixElement class is yet to be documented. class
SoGLRenderPassElement
The SoGLRenderPassElement class is yet to be documented. class
SoGLShapeHintsElement
The SoGLShapeHintsElement class is yet to be documented. class
SoGLUpdateAreaElement
The SoGLUpdateAreaElement class is yet to be documented. class
SoGLVBOElement
The SoGLVBOElement class is used to store VBO state. class
SoGLViewingMatrixElement
The SoGLViewingMatrixElement class is used to store the current viewing
matrix. class SoGLViewportRegionElement
The SoGLViewportRegionElement class is yet to be documented. class
SoGLDisplayList
The SoGLDisplayList class stores and manages OpenGL display lists.
class SoGLVertexAttributeElement
The SoGLVertexAttributeElement class is yet to be documented. class
SoAccumulatedElement
The SoAccumulatedElement class is an abstract class for storing
accumulated state. class SoAmbientColorElement
The SoAmbientColorElement class is yet to be documented. class
SoAnnoText3CharOrientElement
The SoAnnoText3CharOrientElement class is yet to be documented. class
SoAnnoText3FontSizeHintElement
The SoAnnoText3FontSizeHintElement class is yet to be documented. class
SoAnnoText3RenderPrintElement
The SoAnnoText3RenderPrintElement class is yet to be documented. class
SoBBoxModelMatrixElement
The SoBBoxModelMatrixElement class keeps track of the current model
matrix during a scene graph traversal. It is used by amongst others the
SoGetBoundingBoxAction class. class SoBumpMapElement
The SoBumpMapElement class is yet to be documented. class
SoBumpMapCoordinateElement
The SoBumpMapCoordinateElement class is yet to be documented. class
SoBumpMapMatrixElement
The SoBumpMapMatrixElement class is used to manage the bump map matrix
stack. class SoCacheElement
The SoCacheElement class stores and manages the open caches. class
SoCacheHintElement
The SoCacheHintElement class is yet to be documented. class
SoClipPlaneElement
The SoClipPlaneElement class is used to manage the clip plane stack.
class SoComplexityElement
The SoComplexityElement class contains the current shape complexity for
a graph traverser. class SoComplexityTypeElement
The SoComplexityTypeElement class is yet to be documented. class
SoCoordinateElement
The SoCoordinateElement class is yet to be documented. class
SoCreaseAngleElement
The SoCreaseAngleElement class stores the crease angle during a scene
graph traversal. class SoCullElement
The SoCullElement class is used internally for render and pick culling.
class SoDecimationPercentageElement
The SoDecimationPercentageElement class is yet to be documented. class
SoDecimationTypeElement
The SoDecimationTypeElement class is yet to be documented. class
SoDepthBufferElement
The SoDepthBufferElement controls the depth buffer settings. class
SoDiffuseColorElement
The SoDiffuseColorElement class is yet to be documented. class
SoDrawStyleElement
The SoDrawStyleElement class is yet to be documented. class
SoElement
SoElement is the abstract base class for all elements. class
SoEmissiveColorElement
The SoEmissiveColorElement class is yet to be documented. class
SoEnvironmentElement
The SoEnvironmentElement class is yet to be documented. class
SoFloatElement
SoFloatElement is an abstract base class for elements that consists of
a single float value. class SoFocalDistanceElement
The SoFocalDistanceElement class is yet to be documented. class
SoFontNameElement
The SoFontNameElement class is yet to be documented. class
SoFontSizeElement
The SoFontSizeElement class is yet to be documented. class
SoInt32Element
The SoInt32Element class is the base class for elements that simply
store a 32-bit integer. class SoLazyElement
The SoLazyElement class is used to handle material and shape
properties. class SoLightAttenuationElement
The SoLightAttenuationElement class is yet to be documented. class
SoLightElement
The SoLightElement class manages the currently active light sources.
class SoLightModelElement
The SoLightModelElement class is yet to be documented. class
SoLinePatternElement
The SoLinePatternElement class defines the line stipple pattern. class
SoLineWidthElement
The SoLineWidthElement class changes the line width setting of the
render state. class SoLocalBBoxMatrixElement
The SoLocalBBoxMatrixElement class is yet to be documented. class
SoMaterialBindingElement
The SoMaterialBindingElement class is yet to be documented. class
SoVertexAttributeBindingElement
The SoVertexAttributeBindingElement class is yet to be documented.
class SoMultiTextureCoordinateElement
The SoMultiTextureCoordinateElement class is yet to be documented.
class SoMultiTextureEnabledElement
The SoMultiTextureEnabledElement class is an element which stores
whether texturing is enabled or not. class
SoMultiTextureMatrixElement
The SoMultiTextureMatrixElement class is used to manage the texture
matrix stack for texture units > 0. class
SoMultiTextureImageElement
The SoMultiTextureImageElement class is yet to be documented. class
SoModelMatrixElement
The SoModelMatrixElement class is used to manage the current
transformation. class SoNormalBindingElement
The SoNormalBindingElement is yet to be documented. class
SoNormalElement
The SoNormalElement class is yet to be documented. class
SoOverrideElement
The SoOverrideElement maintains a list of overridable elements and a
list over which elements should be overridden. class SoPickRayElement
The SoPickRayElement class is yet to be documented. class
SoPickStyleElement
The SoPickStyleElement is yet to be documented. class
SoPointSizeElement
The SoPointSizeElement changes the point size setting of the render
state. class SoPolygonOffsetElement
The SoPolygonOffsetElement class is yet to be documented. class
SoProfileCoordinateElement
The SoProfileCoordinateElement class is yet to be documented. class
SoProfileElement
The SoProfileElement class is yet to be documented. class
SoProjectionMatrixElement
The SoProjectionMatrixElement class is yet to be documented. class
SoReplacedElement
The SoReplacedElement class is an abstract element superclass. class
SoShapeHintsElement
The SoShapeHintsElement class is yet to be documented. class
SoShapeStyleElement
The SoShapeStyleElement class is yet to be documented. class
SoShininessElement
The SoShininessElement class is yet to be documented. class
SoSpecularColorElement
The SoSpecularColorElement is yet to be documented. class
SoSwitchElement
The SoSwitchElement class is yet to be documented. class
SoTextOutlineEnabledElement
The SoTextOutlineEnabledElement class is yet to be documented. class
SoTextureCombineElement
The SoTextureCombineElement class is yet to be documented. class
SoTextureCoordinateBindingElement
The SoTextureCoordinateBindingElement class is yet to be documented.
class SoTextureOverrideElement
The SoTextureOverrideElement makes it possible to override texture
elements. class SoTextureUnitElement
The SoTextureUnitElement class is yet to be documented. class
SoTextureQualityElement
The SoTextureQualityElement is yet to be documented. class
SoTransparencyElement
The SoTransparencyElement is yet to be documented. class
SoUnitsElement
The SoUnitsElement class is yet to be documented. class
SoViewVolumeElement
The SoViewVolumeElement class is yet to be documented. class
SoViewingMatrixElement
The SoViewingMatrixElement class stores the world-to-camera
transformation. class SoViewportRegionElement
The SoViewportRegionElement class is yet to be documented. class
SoWindowElement
The SoWindowElement class is used to store current window attributes.
class SoListenerPositionElement
The SoListenerPositionElement holds the position of the current
listener. class SoListenerOrientationElement
The SoListenerOrientationElement holds the orientation of the current
listener. class SoListenerGainElement
The SoListenerGainElement class stores the SoListener gain
during a scene graph traversal. class SoListenerDopplerElement
The SoListenerDopplerElement holds the Doppler velocity and factor of
the current listener. class SoSoundElement
The SoSoundElement is used for optimizing audio rendering and for
turning off inactive SoVRMLSound nodes. class
SoVertexAttributeElement
The SoVertexAttributeElement class is yet to be documented. class
SoShadowStyleElement
The SoShadowStyleElement class is yet to be documented. class
SoGLShadowCullingElement
The SoGLShadowCullingElement class is yet to be documented. class
SoGeoElement
The SoGeoElement class is yet to be documented. class
SoProfilerTopEngine
The SoProfilerTopEngine class is yet to be documented. class
SoNodeVisualize
The SoNodeVisualize class is yet to be documented.
Detailed Description
The element classes in Coin are the containers of state information during action traversals of scene graphs.
One element usually corresponds to one item of information, or sometimes a group of related information values. The elements work like a stack that is pushed and popped as the action traverses in and out of SoSeparator nodes, and the action will always just inspect the top of the stack when it needs to know a value.
Elements are internal implementation details of the workings of nodes and actions, and is not something one needs to worry about before writing ones own extension nodes. Writing extension elements is even more removed from plain Open Inventor usage, but is fully possible for the experienced Open Inventor developer. The Element Classes
Elements are mostly internal to Coin, unless you create new
extension nodes over Coin. Then you will probably need to know about them.
Elements are part of the design for scene graph traversal in Coin.
It works like this: any traversal action instantiates and keeps a single
SoState instance during traversal. The SoState instance uses
SoElement objects as 'memory units' to keep track of the current
state for any feature of the scene graph nodes.
As an example, consider the SoPointSize node: when the SoPointSize node is
traversed by for instance a SoGLRenderAction, it will itself push a
SoPointSizeElement onto the SoGLRenderAction's SoState
stack. Later, when a SoPointSet node occurs in the scene graph, it
will request the current point size value from the SoState by reading
off the value of its SoPointSizeElement.
SoSeparator nodes will push and pop elements on and off the state
stack, so anything that changes state below a SoSeparator node will
not influence anything above the SoSeparator.
For more information on the theoretical underpinnings of this
traversal design, you should consider reading available literature on the
so-called 'Visitor pattern'. We recommend 'Design Patterns', by Gamma, Helm,
Johnson, Vlissides (aka the 'Gang Of Four'). This book actually uses the
Inventor API traversal mechanism as the case study for explaining the
Visitor pattern.
For extending the Coin library with your own classes, we strongly recommend
that you make yourself acquainted with the excellent The Inventor Toolmaker
book (ISBN 0-201-62493-1), which describes the tasks involved in detail.
This book was written by the original SGI Inventor designers and explains
many of the underlying design ideas, as well as having lots of hands-on
examples on how to extend the Coin toolkit in ways that are true to the
fundamental design ideas. (The Inventor Toolmaker is also available at SGI's
online library, at no cost. See Download The Inventor Toolmaker.) Reading
the source code of the built-in classes in Coin should also prove very
helpful.
The following is a complete example on how to extend Coin with your own
traversal elements. First, the class declaration of the new element (i.e.
the header include file):
// [texturefilenameelement.h] #ifndef TEXTUREFILENAMEELEMENT_H #define TEXTUREFILENAMEELEMENT_H #include <Inventor/elements/SoReplacedElement.h> #include <Inventor/SbString.h> class TextureFilenameElement : public SoReplacedElement { typedef SoReplacedElement inherited; SO_ELEMENT_HEADER(TextureFilenameElement); public: static void initClass(void); virtual void init(SoState * state); static void set(SoState * const state, SoNode * const node, const SbString & filename); static const SbString & get(SoState * const state); static const TextureFilenameElement * getInstance(SoState * state); protected: virtual ~TextureFilenameElement(); virtual void setElt(const SbString & filename); private: SbString filename; }; #endif // !TEXTUREFILENAMEELEMENT_H
The implementation of the element:
// [texturefilenameelement.cpp] // // The purpose of the code in this file is to demonstrate how you can // make your own elements for scene graph traversals. // // Code by Peder Blekken <pederb@sim.no>. Copyright (C) // Kongsberg Oil & Gas Technologies. #include "texturefilenameelement.h" SO_ELEMENT_SOURCE(TextureFilenameElement); void TextureFilenameElement::initClass(void) { SO_ELEMENT_INIT_CLASS(TextureFilenameElement, inherited); } void TextureFilenameElement::init(SoState * state) { this->filename = "<none>"; } TextureFilenameElement::~TextureFilenameElement() { } void TextureFilenameElement::set(SoState * const state, SoNode * const node, const SbString & filename) { TextureFilenameElement * elem = (TextureFilenameElement *) SoReplacedElement::getElement(state, classStackIndex, node); elem->setElt(filename); } const SbString & TextureFilenameElement::get(SoState * const state) { return TextureFilenameElement::getInstance(state)->filename; } void TextureFilenameElement::setElt(const SbString & filename) { this->filename = filename; } const TextureFilenameElement * TextureFilenameElement::getInstance(SoState * state) { return (const TextureFilenameElement *) SoElement::getConstElement(state, classStackIndex); }
And a small, standalone test application putting the new element to use:
// [lstextures.cpp] // // The purpose of this file is to make a small wrapper "tool" around // the TextureFilenameElement extension element, just for showing // example code on how to make use of a user-defined custom element. // // The code goes like this: // // We initialize the element, enable it for the SoCallbackAction, read // a scene graph file, set callbacks on SoTexture2 and all shape nodes // and applies the SoCallbackAction. The callbacks will then print out // the texture filename information from the TextureFilenameElement // each time an interesting node is hit. // // // Code by Peder Blekken <pederb@sim.no>. Cleaned up, integrated in // Coin distribution and commented by Morten Eriksen // <mortene@sim.no>. Copyright (C) Kongsberg Oil & Gas Technologies. #include <Inventor/SoDB.h> #include <Inventor/SoInput.h> #include <Inventor/actions/SoCallbackAction.h> #include <Inventor/nodes/SoSeparator.h> #include <Inventor/nodes/SoTexture2.h> #include <Inventor/nodes/SoShape.h> #include <Inventor/misc/SoState.h> #include <cstdio> #include "texturefilenameelement.h" SoCallbackAction::Response pre_tex2_cb(void * data, SoCallbackAction * action, const SoNode * node) { const SbString & filename = ((SoTexture2 *)node)->filename.getValue(); TextureFilenameElement::set(action->getState(), (SoNode *)node, filename); (void)fprintf(stdout, "=> New texture: %s\n", filename.getLength() == 0 ? "<inlined>" : filename.getString()); return SoCallbackAction::CONTINUE; } SoCallbackAction::Response pre_shape_cb(void * data, SoCallbackAction * action, const SoNode * node) { const SbString & filename = TextureFilenameElement::get(action->getState()); (void)fprintf(stdout, " Texturemap on %s: %s\n", node->getTypeId().getName().getString(), filename.getLength() == 0 ? "<inlined>" : filename.getString()); return SoCallbackAction::CONTINUE; } void usage(const char * appname) { (void)fprintf(stderr, "\n\tUsage: %s <modelfile.iv>\n\n", appname); (void)fprintf(stderr, "\tLists all texture filenames in the model file,\n" "\tand on which shape nodes they are used.\n\n" "\tThe purpose of this example utility is simply to\n" "\tshow how to create and use an extension element for\n" "\tscene graph traversal.\n\n"); } int main(int argc, char ** argv) { if (argc != 2) { usage(argv[0]); exit(1); } SoDB::init(); TextureFilenameElement::initClass(); SO_ENABLE(SoCallbackAction, TextureFilenameElement); SoInput input; if (!input.openFile(argv[1])) { (void)fprintf(stderr, "ERROR: couldn't open file ``%s''.\n", argv[1]); exit(1); } SoSeparator * root = SoDB::readAll(&input); if (root) { root->ref(); SoCallbackAction cbaction; cbaction.addPreCallback(SoTexture2::getClassTypeId(), pre_tex2_cb, NULL); cbaction.addPreCallback(SoShape::getClassTypeId(), pre_shape_cb, NULL); cbaction.apply(root); root->unref(); return 0; } return 1; }
Author
Generated automatically by Doxygen for Coin from the source code.
Fri Sep 6 2024 15:32:06 | Version 4.0.3 |