00001 #ifndef X3DTK_MESH_X3DBUILDERGLOBALVARIABLES_H 00002 #define X3DTK_MESH_X3DBUILDERGLOBALVARIABLES_H 00003 00004 #include "StateVariables.h" 00005 #include "MESH_X3DNode.h" 00006 #include "X3D_X3DNode.h" 00007 #include "Cloner.h" 00008 00009 #include <map> 00010 00011 namespace X3DTK { 00012 namespace MESH { 00013 00020 template<class MData, class VData, class EData, class FData, bool RW> 00021 class TemplateX3DBuilderStateVariables : public StateVariables 00022 { 00023 public: 00025 TemplateX3DBuilderStateVariables(); 00027 virtual ~TemplateX3DBuilderStateVariables(); 00028 00030 virtual void init(); 00032 virtual void finish(); 00033 00035 void addCoupleNode(SFNode N, X3D::X3DNode *NN); 00037 void pushNode(X3D::X3DNode *N); 00039 void popNode(); 00040 00042 inline X3D::X3DNode *getRoot() const; 00044 inline X3D::X3DNode *getTop() const; 00046 X3D::X3DNode *getNode(SFNode N) const; 00048 SFNode clone(SFNode N); 00049 00050 private: 00051 X3D::X3DNode *_root; 00052 std::list<X3D::X3DNode *> _nodeStack; 00053 std::map<SFNode, X3D::X3DNode *> _nodeCoupleMap; 00054 Cloner *_cloner; 00055 }; 00056 00057 } 00058 } 00059 00060 #include "MESH_X3DBuilderStateVariables.inl" 00061 00062 #endif