00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00027
00029 #ifndef __X3DPROTOTYPEINSTANCE_H__
00030 #define __X3DPROTOTYPEINSTANCE_H__
00031
00032 #include "X3DNode.h"
00033 #include "H3DDynamicFieldsObject.h"
00034
00035
00036 namespace yy {
00037 class VrmlParser;
00038 class location;
00039 }
00040 namespace H3D {
00041
00042
00043 namespace X3D {
00044 class X3DSAX2Handlers;
00045 }
00046
00058 class H3DAPI_API X3DPrototypeInstance:
00059 public X3DNode,
00060 public H3DDynamicFieldsObject {
00061 public:
00062
00064 X3DPrototypeInstance( Inst< SFNode> _metadata = 0 );
00065
00067 virtual void render();
00068
00069 #ifdef USE_HAPTICS
00070
00071 virtual void traverseSG( TraverseInfo &ti );
00072 #endif
00073
00075 virtual void setPrototypedNode( Node *n ) {
00076 prototyped_node.reset( n );
00077 }
00078
00080 virtual Node *getPrototypedNode() {
00081 return prototyped_node.get();
00082 }
00083
00085 virtual string defaultXMLContainerField() {
00086 if( prototyped_node.get() )
00087 return prototyped_node->defaultXMLContainerField();
00088 else
00089 return X3DNode::defaultXMLContainerField();
00090 }
00091
00093 static H3DNodeDatabase database;
00094
00097 friend class X3D::X3DSAX2Handlers;
00098
00101 friend class yy::VrmlParser;
00102 protected:
00103 AutoRef< Node > prototyped_node;
00104 };
00105 }
00106
00107 #endif