openvrml::node Class Reference
[Nodes]

Inheritance diagram for openvrml::node:
[legend]

List of all members.


Detailed Description

A node in the scene graph.

Public Member Functions

virtual ~node ()=0 throw ()
 Destructor.
const node_typetype () const throw ()
 The type information object for the node.
const std::string & id () const throw ()
 Retrieve the name of this node.
void id (const std::string &node_id) throw (std::bad_alloc)
 Set the name of the node.
const boost::shared_ptr
< openvrml::scope > & 
scope () const throw ()
 Get the scope to which the node belongs.
openvrml::scenescene () const throw ()
 Get the scene with which the node is associated.
std::ostream & print (std::ostream &out, size_t indent) const
 Pretty print.
void initialize (openvrml::scene &scene, double timestamp) throw (std::bad_alloc)
 Initialize the node.
const field_valuefield (const std::string &id) const throw (unsupported_interface)
 Generalized field accessor.
openvrml::event_listenerevent_listener (const std::string &id) throw (unsupported_interface)
 Get an event listener.
openvrml::event_emitterevent_emitter (const std::string &id) throw (unsupported_interface)
 Get an event emitter.
void shutdown (double timestamp) throw ()
 Shut down the node.
virtual vrml97_node::anchor_nodeto_anchor () const
 Cast to an anchor_node.
virtual
vrml97_node::audio_clip_node
to_audio_clip () const
 Cast to an audio_clip_node.
virtual
vrml97_node::cylinder_sensor_node
to_cylinder_sensor () const
 Cast to a cylinder_sensor_node.
virtual
vrml97_node::abstract_light_node
to_light () const
 Cast to an abstract_light_node.
virtual
vrml97_node::movie_texture_node
to_movie_texture () const
 Cast to a movie_texture_node.
virtual
vrml97_node::navigation_info_node
to_navigation_info () const
 Cast to a navigation_info_node.
virtual
vrml97_node::plane_sensor_node
to_plane_sensor () const
 Cast to a plane_sensor_node.
virtual
vrml97_node::point_light_node
to_point_light () const
 Cast to a point_light_node.
virtual
vrml97_node::sphere_sensor_node
to_sphere_sensor () const
 Cast to a sphere_sensor_node.
virtual
vrml97_node::spot_light_node
to_spot_light () const
 Cast to a spot_light_node.
virtual
vrml97_node::time_sensor_node
to_time_sensor () const
 Cast to a time_sensor_node.
virtual
vrml97_node::touch_sensor_node
to_touch_sensor () const
 Cast to a touch_sensor_node.
virtual bool modified () const
 Determine whether the node has been modified.
void modified (bool value)
 Set the modified flag.
virtual void bounding_volume (const openvrml::bounding_volume &v)
virtual const
openvrml::bounding_volume
bounding_volume () const
 Get this node's bounding volume.
virtual void bounding_volume_dirty (bool f)
virtual bool bounding_volume_dirty () const

Protected Member Functions

 node (const node_type &type, const boost::shared_ptr< openvrml::scope > &scope) throw ()
 Construct.

Static Protected Member Functions

static void emit_event (openvrml::event_emitter &emitter, double timestamp) throw (std::bad_alloc)
 Emit an event.

Private Member Functions

virtual void do_initialize (double timestamp) throw (std::bad_alloc)
 node subclass-specific initialization.
virtual const field_valuedo_field (const std::string &id) const =0 throw (unsupported_interface)
 Called by node::field to get a field.
virtual openvrml::event_listenerdo_event_listener (const std::string &id)=0 throw (unsupported_interface)
 Get an event listener.
virtual openvrml::event_emitterdo_event_emitter (const std::string &id)=0 throw (unsupported_interface)
 Get an event emitter.
virtual void do_shutdown (double timestamp) throw ()
 Called by node::shutdown.
virtual script_nodeto_script () throw ()
 Cast to a script_node.
virtual appearance_nodeto_appearance () throw ()
 Cast to an appearance_node.
virtual child_nodeto_child () throw ()
 Cast to a child_node.
virtual color_nodeto_color () throw ()
 Cast to a color_node.
virtual coordinate_nodeto_coordinate () throw ()
 Cast to a coordinate_node.
virtual font_style_nodeto_font_style () throw ()
 Cast to a font_style_node.
virtual geometry_nodeto_geometry () throw ()
 Cast to a geometry_node.
virtual grouping_nodeto_grouping () throw ()
 Cast to a grouping_node.
virtual material_nodeto_material () throw ()
 Cast to a material_node.
virtual normal_nodeto_normal () throw ()
 Cast to a normal_node.
virtual sound_source_nodeto_sound_source () throw ()
 Cast to a sound_source_node.
virtual texture_nodeto_texture () throw ()
 Cast to a texture_node.
virtual texture_coordinate_nodeto_texture_coordinate () throw ()
 Cast to a texture_coordinate_node.
virtual texture_transform_nodeto_texture_transform () throw ()
 Cast to a texture_transform_node.
virtual transform_nodeto_transform () throw ()
 Cast to a transform_node.
virtual viewpoint_nodeto_viewpoint () throw ()
 Cast to a viewpoint_node.

Private Attributes

const node_typetype_
 The type information object for the node.
boost::shared_ptr
< openvrml::scope
scope_
 The scope to which the node belongs.
openvrml::scenescene_
 The scene with which the node is associated.
bool modified_
 Indicate whether the node has been modified.
bool bounding_volume_dirty_
 Indicate whether the node's cached bounding volume needs updating.

Friends

class exposedfield< sfbool >
class exposedfield< sfcolor >
class exposedfield< sffloat >
class exposedfield< sfimage >
class exposedfield< sfint32 >
class exposedfield< sfnode >
class exposedfield< sfrotation >
class exposedfield< sfstring >
class exposedfield< sftime >
class exposedfield< sfvec2f >
class exposedfield< sfvec3f >
class exposedfield< mfcolor >
class exposedfield< mffloat >
class exposedfield< mfint32 >
class exposedfield< mfnode >
class exposedfield< mfrotation >
class exposedfield< mfstring >
class exposedfield< mftime >
class exposedfield< mfvec2f >
class exposedfield< mfvec3f >
std::ostream & operator<< (std::ostream &out, const node &n)
 Stream output.
script_nodenode_cast (node *n) throw ()
 Downcast a node to one of the abstract node types.
appearance_nodenode_cast (node *n) throw ()
child_nodenode_cast (node *n) throw ()
color_nodenode_cast (node *n) throw ()
coordinate_nodenode_cast (node *n) throw ()
font_style_nodenode_cast (node *n) throw ()
geometry_nodenode_cast (node *n) throw ()
grouping_nodenode_cast (node *n) throw ()
material_nodenode_cast (node *n) throw ()
normal_nodenode_cast (node *n) throw ()
sound_source_nodenode_cast (node *n) throw ()
texture_nodenode_cast (node *n) throw ()
texture_coordinate_nodenode_cast (node *n) throw ()
texture_transform_nodenode_cast (node *n) throw ()
transform_nodenode_cast (node *n) throw ()
viewpoint_nodenode_cast (node *n) throw ()

Constructor & Destructor Documentation

openvrml::node::~node (  )  throw () [pure virtual]

Destructor.

Remove node name (if any) from the scope.

openvrml::node::node ( const node_type type,
const boost::shared_ptr< openvrml::scope > &  scope 
) throw () [protected]

Construct.

Parameters:
type the node_type associated with the instance.
scope the Scope associated with the instance.


Member Function Documentation

const node_type & openvrml::node::type (  )  const throw ()

The type information object for the node.

Returns:
the type information object for the node.

const std::string & openvrml::node::id (  )  const throw ()

Retrieve the name of this node.

Returns:
the node name.

void openvrml::node::id ( const std::string &  node_id  )  throw (std::bad_alloc)

Set the name of the node.

Parameters:
node_id the name for the node.
Exceptions:
std::bad_alloc if memory allocation fails.

const boost::shared_ptr< scope > & openvrml::node::scope (  )  const throw () [inline]

Get the scope to which the node belongs.

Returns:
the scope to which the node belongs.

openvrml::scene * openvrml::node::scene (  )  const throw () [inline]

Get the scene with which the node is associated.

Returns:
the scene with which the node is associated.

std::ostream & openvrml::node::print ( std::ostream &  out,
size_t  indent 
) const

Pretty print.

Parameters:
out output stream.
indent number of spaces per indentation level.
Returns:
out.

void openvrml::node::initialize ( openvrml::scene scene,
double  timestamp 
) throw (std::bad_alloc)

Initialize the node.

This method works recursively, initializing any child nodes to the same scene and timestamp. If the node has already been initialized, this method has no effect.

Parameters:
scene the Scene to which the node will belong.
timestamp the current time.
Exceptions:
std::bad_alloc if memory allocation fails.
Postcondition:
scene points to scene.

const field_value & openvrml::node::field ( const std::string &  id  )  const throw (unsupported_interface)

Generalized field accessor.

Parameters:
id the name of the field.
Returns:
the field value.
Exceptions:
unsupported_interface if the node has no field named id.

event_listener & openvrml::node::event_listener ( const std::string &  id  )  throw (unsupported_interface)

Get an event listener.

Parameters:
id an eventIn identifier.
Exceptions:
unsupported_interface if the node has no eventIn id.

event_emitter & openvrml::node::event_emitter ( const std::string &  id  )  throw (unsupported_interface)

Get an event emitter.

Parameters:
id an eventOut identifier.
Exceptions:
unsupported_interface if the node has no eventOut id.

void openvrml::node::shutdown ( double  timestamp  )  throw ()

Shut down the node.

This method works recursively, shutting down any child nodes. If the node has already been shut down, this method has no effect.

Parameters:
timestamp the current time.
Postcondition:
scene is 0.

vrml97_node::anchor_node * openvrml::node::to_anchor (  )  const [virtual]

Cast to an anchor_node.

Returns:
0.

Reimplemented in openvrml::vrml97_node::anchor_node.

vrml97_node::audio_clip_node * openvrml::node::to_audio_clip (  )  const [virtual]

Cast to an audio_clip_node.

Returns:
0.

Reimplemented in openvrml::vrml97_node::audio_clip_node.

vrml97_node::cylinder_sensor_node * openvrml::node::to_cylinder_sensor (  )  const [virtual]

Cast to a cylinder_sensor_node.

Returns:
0.

Reimplemented in openvrml::vrml97_node::cylinder_sensor_node.

vrml97_node::abstract_light_node * openvrml::node::to_light (  )  const [virtual]

Cast to an abstract_light_node.

Returns:
0.

Reimplemented in openvrml::vrml97_node::abstract_light_node.

vrml97_node::movie_texture_node * openvrml::node::to_movie_texture (  )  const [virtual]

Cast to a movie_texture_node.

Returns:
0.

Reimplemented in openvrml::vrml97_node::movie_texture_node.

vrml97_node::navigation_info_node * openvrml::node::to_navigation_info (  )  const [virtual]

Cast to a navigation_info_node.

Returns:
0.

Reimplemented in openvrml::vrml97_node::navigation_info_node.

vrml97_node::plane_sensor_node * openvrml::node::to_plane_sensor (  )  const [virtual]

Cast to a plane_sensor_node.

Returns:
0.

Reimplemented in openvrml::vrml97_node::plane_sensor_node.

vrml97_node::point_light_node * openvrml::node::to_point_light (  )  const [virtual]

Cast to a point_light_node.

Returns:
0.

Reimplemented in openvrml::vrml97_node::point_light_node.

vrml97_node::sphere_sensor_node * openvrml::node::to_sphere_sensor (  )  const [virtual]

Cast to a sphere_sensor_node.

Returns:
0.

Reimplemented in openvrml::vrml97_node::sphere_sensor_node.

vrml97_node::spot_light_node * openvrml::node::to_spot_light (  )  const [virtual]

Cast to a spot_light_node.

Returns:
0.

Reimplemented in openvrml::vrml97_node::spot_light_node.

vrml97_node::time_sensor_node * openvrml::node::to_time_sensor (  )  const [virtual]

Cast to a time_sensor_node.

Returns:
0.

Reimplemented in openvrml::vrml97_node::time_sensor_node.

vrml97_node::touch_sensor_node * openvrml::node::to_touch_sensor (  )  const [virtual]

Cast to a touch_sensor_node.

Returns:
0.

Reimplemented in openvrml::vrml97_node::touch_sensor_node.

bool openvrml::node::modified (  )  const [virtual]

Determine whether the node has been modified.

The default implementation returns whether this node has been modified. Subclasses that can have child nodes should override this method and return true if any of their children have been modified.

Returns:
true if the node has been modified; false otherwise.

Reimplemented in openvrml::vrml97_node::abstract_indexed_set_node, openvrml::vrml97_node::group_node, openvrml::vrml97_node::appearance_node, openvrml::vrml97_node::collision_node, openvrml::vrml97_node::elevation_grid_node, openvrml::vrml97_node::indexed_face_set_node, openvrml::vrml97_node::lod_node, openvrml::vrml97_node::point_set_node, openvrml::vrml97_node::shape_node, openvrml::vrml97_node::switch_node, and openvrml::vrml97_node::text_node.

void openvrml::node::modified ( bool  value  ) 

Set the modified flag.

Indicates the node needs to be revisited for rendering.

Parameters:
value 

void openvrml::node::bounding_volume ( const openvrml::bounding_volume v  )  [virtual]

Override a node's calculated bounding volume. Not implemented.

Todo:
Implement me!

const bounding_volume & openvrml::node::bounding_volume (  )  const [virtual]

Get this node's bounding volume.

Nodes that have no bounding volume, or have a difficult to calculate bvolume (like, say, Extrusion or Billboard) can just return an infinite bsphere. Note that returning an infinite bvolume means that all the node's ancestors will also end up with an infinite bvolume, and will never be culled.

Returns:
a maximized bounding volume.

Reimplemented in openvrml::vrml97_node::group_node, openvrml::vrml97_node::anchor_node, openvrml::vrml97_node::box_node, openvrml::vrml97_node::indexed_face_set_node, openvrml::vrml97_node::lod_node, openvrml::vrml97_node::point_set_node, openvrml::vrml97_node::shape_node, openvrml::vrml97_node::sphere_node, openvrml::vrml97_node::switch_node, and openvrml::vrml97_node::transform_node.

void openvrml::node::bounding_volume_dirty ( bool  f  )  [virtual]

Indicate that a node's bounding volume needs to be recalculated (or not). If a node's bvolume is invalid, then the bvolumes of all that node's ancestors are also invalid. Normally, the node itself will determine when its bvolume needs updating.

bool openvrml::node::bounding_volume_dirty (  )  const [virtual]

Return true if the node's bounding volume needs to be recalculated.

void openvrml::node::emit_event ( openvrml::event_emitter emitter,
double  timestamp 
) throw (std::bad_alloc) [static, protected]

Emit an event.

Parameters:
emitter an event_emitter.
timestamp the current time.
Exceptions:
std::bad_alloc if memory allocation fails.

void openvrml::node::do_initialize ( double  timestamp  )  throw (std::bad_alloc) [private, virtual]

node subclass-specific initialization.

This method is called by node::initialize. Subclasses of node should override this method for any subclass-specific initialization.

The default implementation of this method does nothing.

Parameters:
timestamp the current time.
Exceptions:
std::bad_alloc if memory allocation fails.

Reimplemented in openvrml::script_node, openvrml::vrml97_node::audio_clip_node, openvrml::vrml97_node::background_node, openvrml::vrml97_node::fog_node, openvrml::vrml97_node::movie_texture_node, openvrml::vrml97_node::navigation_info_node, openvrml::vrml97_node::point_light_node, openvrml::vrml97_node::spot_light_node, openvrml::vrml97_node::text_node, openvrml::vrml97_node::time_sensor_node, and openvrml::vrml97_node::viewpoint_node.

const field_value & openvrml::node::do_field ( const std::string &  id  )  const throw (unsupported_interface) [private, pure virtual]

Called by node::field to get a field.

Parameters:
id field identifier.
Returns:
the field value.
Exceptions:
unsupported_interface if the node has no field id.

Implemented in openvrml::script_node, and openvrml::vrml97_node::abstract_base.

event_listener & openvrml::node::do_event_listener ( const std::string &  id  )  throw (unsupported_interface) [private, pure virtual]

Get an event listener.

This method is called by node::event_listener. Subclasses must implement this method.

Parameters:
id eventIn identifier.
Returns:
the event listener.
Exceptions:
unsupported_interface if the node has no eventIn id.

Implemented in openvrml::script_node, and openvrml::vrml97_node::abstract_base.

event_emitter & openvrml::node::do_event_emitter ( const std::string &  id  )  throw (unsupported_interface) [private, pure virtual]

Get an event emitter.

This method is called by node::event_emitter. Subclasses must implement this method.

Parameters:
id eventOut identifier.
Returns:
the event emitter.
Exceptions:
unsupported_interface if the node has no eventOut id.

Implemented in openvrml::script_node, and openvrml::vrml97_node::abstract_base.

void openvrml::node::do_shutdown ( double  timestamp  )  throw () [private, virtual]

Called by node::shutdown.

node subclass-specific shut down.

Parameters:
timestamp the current time.
This method is called by node::shutdown. Subclasses of node should override this method for any subclass-specific shut down. Note that this method cannot throw.

The default implementation of this method does nothing.

Parameters:
timestamp the current time.

Reimplemented in openvrml::script_node, openvrml::vrml97_node::audio_clip_node, openvrml::vrml97_node::background_node, openvrml::vrml97_node::fog_node, openvrml::vrml97_node::movie_texture_node, openvrml::vrml97_node::navigation_info_node, openvrml::vrml97_node::point_light_node, openvrml::vrml97_node::spot_light_node, openvrml::vrml97_node::text_node, openvrml::vrml97_node::time_sensor_node, and openvrml::vrml97_node::viewpoint_node.

script_node * openvrml::node::to_script (  )  throw () [private, virtual]

Cast to a script_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::script_node.

appearance_node * openvrml::node::to_appearance (  )  throw () [private, virtual]

Cast to an appearance_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::appearance_node.

child_node * openvrml::node::to_child (  )  throw () [private, virtual]

Cast to a child_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::child_node.

color_node * openvrml::node::to_color (  )  throw () [private, virtual]

Cast to a color_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::color_node.

coordinate_node * openvrml::node::to_coordinate (  )  throw () [private, virtual]

Cast to a coordinate_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::coordinate_node.

font_style_node * openvrml::node::to_font_style (  )  throw () [private, virtual]

Cast to a font_style_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::font_style_node.

geometry_node * openvrml::node::to_geometry (  )  throw () [private, virtual]

Cast to a geometry_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::geometry_node.

grouping_node * openvrml::node::to_grouping (  )  throw () [private, virtual]

Cast to a grouping_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::grouping_node.

material_node * openvrml::node::to_material (  )  throw () [private, virtual]

Cast to a material_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::material_node.

normal_node * openvrml::node::to_normal (  )  throw () [private, virtual]

Cast to a normal_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::normal_node.

sound_source_node * openvrml::node::to_sound_source (  )  throw () [private, virtual]

Cast to a sound_source_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::sound_source_node.

texture_node * openvrml::node::to_texture (  )  throw () [private, virtual]

Cast to a texture_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::texture_node.

texture_coordinate_node * openvrml::node::to_texture_coordinate (  )  throw () [private, virtual]

Cast to a texture_coordinate_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::texture_coordinate_node.

texture_transform_node * openvrml::node::to_texture_transform (  )  throw () [private, virtual]

Cast to a texture_transform_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::texture_transform_node.

transform_node * openvrml::node::to_transform (  )  throw () [private, virtual]

Cast to a transform_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::transform_node.

viewpoint_node * openvrml::node::to_viewpoint (  )  throw () [private, virtual]

Cast to a viewpoint_node.

For internal use only.

Default implementation returns 0.

Returns:
0

Reimplemented in openvrml::viewpoint_node.


Friends And Related Function Documentation

std::ostream & openvrml::node::operator<< ( std::ostream &  out,
const node n 
) [friend]

Stream output.

Parameters:
out output stream.
n a node.
Returns:
out.


Member Data Documentation

The type information object for the node.

For internal use only.

Reimplemented in openvrml::vrml97_node::navigation_info_node.

scope_ptr openvrml::node::scope_ [private]

The scope to which the node belongs.

For internal use only.

The scene with which the node is associated.

For internal use only.

bool openvrml::node::modified_ [private]

Indicate whether the node has been modified.

For internal use only.

See also:
node::modified

Indicate whether the node's cached bounding volume needs updating.

For internal use only.

See also:
node::bounding_volume_dirty