Open Inventor Release 2024.2.0
 
Loading...
Searching...
No Matches
Creating a New Element

This example creates an element called TemperatureElement that holds the current temperature of shapes during traversal. This element is derived from the SoFloatElement class.

The example shows the header file for the TemperatureElement.

Example : TemperatureElement.h

#include <Inventor/elements/SoFloatElement.h>
class TemperatureElement : public SoFloatElement
{
SO_ELEMENT_HEADER( TemperatureElement );
public:
// Initializes the TemperatureElement class
static void initClass();
static void exitClass();
// Initializes element
virtual void init( SoState* state );
// Sets the current temperature in the state to the given
// temperature (in degrees Fahrenheit)
static void set( SoState* state, SoNode* node, float temp );
// Returns the current temperature from the state
static float get( SoState* state );
// Returns the default temperature
static float
getDefault()
{
return 98.6;
}
private:
virtual ~TemperatureElement();
};

The example below shows the source code for the TemperatureElement.

Example : TemperatureElement.c++

#include "TemperatureElement.h"
SO_ELEMENT_SOURCE( TemperatureElement );
// Initializes the TemperatureElement class.
void
TemperatureElement::initClass()
{
SO_ELEMENT_INIT_CLASS( TemperatureElement, SoFloatElement );
}
void
TemperatureElement::exitClass()
{
SO_ELEMENT_EXIT_CLASS( TemperatureElement );
}
// Destructor
TemperatureElement::~TemperatureElement() {}
// Initializes the first instance used in an action's state.
void
TemperatureElement::init( SoState* )
{
data = getDefault();
}
// Sets the current temperature in the state.
void
TemperatureElement::set( SoState* state, SoNode* node, float temp )
{
// Use the corresponding method on SoFloatElement to set the
// value in the top instance in the state
SoFloatElement::set( classStackIndex, state, node, temp );
}
// Returns the current temperature from the state.
float
TemperatureElement::get( SoState* state )
{
// Use the corresponding method on SoFloatElement to get the
// value from the top instance in the state
return SoFloatElement::get( classStackIndex, state );
}