29 #ifndef __H3DDYNAMICFIELDSOBJECT_H__
30 #define __H3DDYNAMICFIELDSOBJECT_H__
42 class H3DAPI_API H3DDynamicFieldsObjectBase {
46 H3DDynamicFieldsObjectBase() {}
49 virtual ~H3DDynamicFieldsObjectBase() {
59 inline virtual bool addField(
const string &name,
63 DynamicFieldsMap::const_iterator j = object_dynamic_fields.find( name );
64 if ( field && j == object_dynamic_fields.end() ) {
65 field->setName( name );
66 field->setAccessType( access );
67 object_dynamic_fields.insert( std::pair< string, Field* >( name , field ) );
78 inline virtual bool removeField (
const string& _name ) {
80 DynamicFieldsMap::iterator j = object_dynamic_fields.find( _name );
81 if ( j != object_dynamic_fields.end() ) {
84 object_dynamic_fields.erase ( j );
97 inline Field *getObjectField (
const string& _name )
const {
98 DynamicFieldsMap::const_iterator j = object_dynamic_fields.find( _name );
99 if ( j != object_dynamic_fields.end() ) {
107 virtual void clearFields() {
108 for( DynamicFieldsMap::iterator i = object_dynamic_fields.begin();
109 i != object_dynamic_fields.end(); ++i ) {
113 object_dynamic_fields.clear();
117 typedef map< string, Field* > DynamicFieldsMap;
118 DynamicFieldsMap object_dynamic_fields;
140 Node *n =
dynamic_cast< Node *
>( this );
142 if( !database.get() ) {
146 if( !database->getField( n, name ) ) {
156 dynamic_fields.push_back( field );
167 if ( database.get() ) {
168 Field* f= inherited_node->getField ( _name );
171 if ( f && i != dynamic_fields.end() ) {
172 if ( database->removeField ( _name, inherited_node ) ) {
173 dynamic_fields.erase ( i );
186 return dynamic_fields.begin();
191 return dynamic_fields.end();
197 database->clearDynamicFields(inherited_node);
198 dynamic_fields.clear();
202 H3DUniquePtr< H3DNodeDatabase > database;
214 Node * inherited_node;
219 H3DDynamicFieldsObjectBase(), inherited_node( NULL ) {}
Header file for H3DNodeDatabase.
The Field class.
Definition: Field.h:46
void setOwner(Node *n)
Set the Node that contains this field.
Definition: Field.cpp:402
void setName(string _name)
Sets local the name of the field. Will be used in error reporting.
Definition: Field.h:125
AccessType
The different access types that a field can have.
Definition: Field.h:53
void setAccessType(AccessType _access_type)
Set the access type of the field.
Definition: Field.h:210
This abstract interface class is the base class for all classes that specify arbitrary fields.
Definition: H3DDynamicFieldsObject.h:128
field_iterator firstField()
Get an iterator to the first of the dynamic fields.
Definition: H3DDynamicFieldsObject.h:185
virtual void clearFields()
Remove all dynamic fields that have been previously added.
Definition: H3DDynamicFieldsObject.h:195
H3DDynamicFieldsObject()
Constructor.
Definition: H3DDynamicFieldsObject.h:218
virtual bool removeField(const string &_name)
Remove a field from the Node.
Definition: H3DDynamicFieldsObject.h:166
virtual bool addField(const string &name, const Field::AccessType &access, Field *field)
Add a field to the Node.
Definition: H3DDynamicFieldsObject.h:137
field_iterator endField()
Get an iterator pointing to the end of the dynamic fields.
Definition: H3DDynamicFieldsObject.h:190
Node is the base class for all classes that can be part of the H3D scene-graph.
Definition: Node.h:46
H3D API namespace.
Definition: Anchor.h:38
The DynamicFieldDBElement is a FieldDBElement for fields that are not actual members of a Node class,...
Definition: H3DNodeDatabase.h:100
The H3DNodeDatabase contains a mapping between a name of a Node and the constructor for the Node with...
Definition: H3DNodeDatabase.h:194
static H3DNodeDatabase * lookupTypeId(const type_info &t)
Search the node database for an entry with a matching type_info structure.
Definition: H3DNodeDatabase.cpp:228