openvrml::script_node Class Reference

Represents a VRML Script node. More...

#include <openvrml/browser.h>

Inherits openvrml::child_node.

Classes

class  eventout
 An event_emitter along with the emitted value. More...
 

Public Types

typedef std::map< std::string, boost::shared_ptr< field_value > > field_value_map_t
 A std::map that keys field values on their field name. More...
 
typedef boost::shared_ptr< eventouteventout_ptr
 Reference-counted smart pointer to an eventout. More...
 
typedef std::map< std::string, eventout_ptreventout_map_t
 Map of eventout instances. More...
 

Public Member Functions

 script_node (script_node_metatype &class_, const boost::shared_ptr< openvrml::scope > &scope, const node_interface_set &interfaces, const initial_value_map &initial_values) throw ( unsupported_interface , std::bad_cast , std::bad_alloc , std::invalid_argument )
 Construct. More...
 
virtual ~script_node () throw ()
 Destroy. More...
 
void update (double current_time)
 Update the script_node for the current time. More...
 
const event_listener_map_t & event_listener_map () const throw ()
 Event listener map accessor. More...
 
const field_value_map_tfield_value_map () const throw ()
 Field value map accessor. More...
 
const eventout_map_teventout_map () const throw ()
 eventOut map accessor. More...
 

Private Member Functions

virtual void do_initialize (double timestamp) throw ( std::bad_alloc )
 Initialize. More...
 
virtual const field_valuedo_field (const std::string &id) const throw ( unsupported_interface )
 Get the value of a field. More...
 
virtual openvrml::event_listenerdo_event_listener (const std::string &id) throw ( unsupported_interface )
 Get an event listener. More...
 
virtual openvrml::event_emitterdo_event_emitter (const std::string &id) throw ( unsupported_interface )
 Get an event emitter. More...
 
virtual void do_shutdown (double timestamp) throw ()
 Called by node::shutdown. More...
 
virtual void do_render_child (viewer &v, rendering_context context)
 node::render_child implementation. More...
 

Detailed Description

Represents a VRML Script node.

Member Typedef Documentation

A std::map that keys field values on their field name.

Reference-counted smart pointer to an eventout.

Map of eventout instances.

Constructor & Destructor Documentation

openvrml::script_node::script_node ( script_node_metatype class_,
const boost::shared_ptr< openvrml::scope > &  scope,
const node_interface_set &  interfaces,
const initial_value_map &  initial_values 
)
throw ( unsupported_interface ,
std::bad_cast ,
std::bad_alloc ,
std::invalid_argument
)

Construct.

Unlike other concrete node types, which are always instantiated via node_type::create_node, the script_node constructor is called directly when creating a new script_node from scratch. However, a script_node can be duplicated (or “cloned”) by calling node_type::create_node on #type of a script_node instance. This provides a consistent interface for cloning any node, regardless of its type. OpenVRML uses this internally when instantiating PROTOs.

Parameters
[in]class_the script_node_metatype. Typically there is one script_node_metatype per browser instance.
[in]scopethe scope to which the node should belong.
[in]interfacesa node_interface_set containing specifications of user-defined fields, eventIns, and eventOuts particular to the script_node instance.
[in]initial_valuesa map of initial values for fields of the script_node.
Exceptions
unsupported_interfaceif initial_values specifies a field that is not supported by the script_node.
std::bad_castif initial_values includes a field value that is the wrong type for the specified field.
std::bad_allocif memory allocation fails.
std::invalid_argumentif:
  • interfaces includes an exposedField specification.
  • interfaces includes an interface specification that duplicates an existing Script node interface.
  • initial_values is missing an initial value for a user-defined field in interfaces.
openvrml::script_node::~script_node ( )
throw (
)
virtual

Destroy.

Member Function Documentation

void openvrml::script_node::update ( double  current_time)

Update the script_node for the current time.

Parameters
[in]current_timethe current time.
const openvrml::script_node::event_listener_map_t & openvrml::script_node::event_listener_map ( ) const
throw (
)

Event listener map accessor.

Returns
the event listener map.
const openvrml::script_node::field_value_map_t & openvrml::script_node::field_value_map ( ) const
throw (
)

Field value map accessor.

field value map.

Returns
the field value map.
const openvrml::script_node::eventout_map_t & openvrml::script_node::eventout_map ( ) const
throw (
)

eventOut map accessor.

eventOut map.

Returns
the eventOut map.
void openvrml::script_node::do_initialize ( double  timestamp)
throw (std::bad_alloc
)
privatevirtual

Initialize.

Parameters
[in]timestampthe current time.
Exceptions
std::bad_allocif memory allocation fails.
const openvrml::field_value & openvrml::script_node::do_field ( const std::string &  id) const
throw (unsupported_interface
)
privatevirtual

Get the value of a field.

Parameters
[in]idthe name of the field to get.
Returns
the value for field id.
Exceptions
unsupported_interfaceif the node has no field id.
openvrml::event_listener & openvrml::script_node::do_event_listener ( const std::string &  id)
throw (unsupported_interface
)
privatevirtual

Get an event listener.

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

Parameters
[in]ideventIn identifier.
Returns
the event listener.
Exceptions
unsupported_interfaceif the node has no eventIn id.
openvrml::event_emitter & openvrml::script_node::do_event_emitter ( const std::string &  id)
throw (unsupported_interface
)
privatevirtual

Get an event emitter.

This method is called by node::event_emitter.

Parameters
[in]ideventOut identifier.
Returns
the event emitter.
Exceptions
unsupported_interfaceif the node has no eventOut id.
void openvrml::script_node::do_shutdown ( double  timestamp)
throw (
)
privatevirtual

Called by node::shutdown.

Parameters
[in]timestampthe current time.
void openvrml::script_node::do_render_child ( viewer v,
rendering_context  context 
)
privatevirtual

node::render_child implementation.

Parameters
[in,out]vviewer implementation responsible for actually doing the drawing.
[in]contextgeneric context argument; holds things like the accumulated modelview transform.