00001
00002
00004
00005 #ifndef TEMPLATEVERTEXSET_H
00006 #define TEMPLATEVERTEXSET_H
00007
00008 #include "MESH_X3DNode.h"
00009 #include "MESH_SFTemplateVertex.h"
00010
00011 namespace X3DTK {
00012 namespace MESH {
00013
00014 template<class VData, class EData, class FData>
00015 class TemplateVertexSet : public X3DNode
00016 {
00017 public:
00019 TemplateVertexSet()
00020 : X3DNode()
00021 {
00022 };
00023
00025 virtual SFNode clone() const
00026 {
00027 return new TemplateVertexSet(*this);
00028 };
00029
00031 virtual ~TemplateVertexSet()
00032 {
00033
00034 for (typename MFTemplateVertex<VData, EData, FData>::iterator it = _vertices.begin(); it != _vertices.end(); ++it)
00035 delete (*it);
00036 };
00037
00039 SFTemplateVertex<VData, EData, FData> *createVertex()
00040 {
00041 SFTemplateVertex<VData, EData, FData> *V = new SFTemplateVertex<VData, EData, FData>(_vertices.size());
00042 _vertices.push_back(V);
00043 return V;
00044 };
00046 SFTemplateVertex<VData, EData, FData> *createVertex(unsigned int i)
00047 {
00048 if (i > _vertices.size())
00049 _vertices.resize(i + 1, 0);
00050 else
00051 {
00052 if (_vertices[i] != 0)
00053 {
00054 cx3d << "TemplateVertexSet::createVertex: cannot create a Vertex at index " << i << ", a Vertex already exists!" << std::endl;
00055 return 0;
00056 }
00057 }
00058
00059 SFTemplateVertex<VData, EData, FData> *V = new SFTemplateVertex<VData, EData, FData>(i);
00060 _vertices[i] = V;
00061
00062 return V;
00063 };
00064
00066 inline const MFTemplateVertex<VData, EData, FData> &getVertices() const {return _vertices;};
00067
00068 protected:
00070 TemplateVertexSet(const TemplateVertexSet &S)
00071 : X3DNode(S), _vertices(S._vertices)
00072 {
00073 };
00074
00075 private:
00076 MFTemplateVertex<VData, EData, FData> _vertices;
00077 };
00078
00079 }
00080 }
00081
00082 #endif