00001 #ifndef X3DTK_MESH_VERTEX_H 00002 #define X3DTK_MESH_VERTEX_H 00003 00004 #include "MESH_X3DVertexNode.h" 00005 #include "MESH_SFVertex.h" 00006 #include "MESH_SFDirectEdge.h" 00007 #include "MESH_SFIndirectEdge.h" 00008 #include "MESH_MeshData.h" 00009 00010 namespace X3DTK { 00011 namespace MESH { 00012 00013 template<class MData, class VData, class EData, class FData, bool RW> class MeshMFTemplateVertex; 00014 template<class MData, class VData, class EData, class FData, bool RW> class MeshMFTemplateEdge; 00015 template<class MData, class VData, class EData, class FData, bool RW> class MeshMFTemplateFace; 00016 00023 template<class MData, class VData, class EData, class FData, bool RW> 00024 class TemplateVertex : public X3DVertexNode 00025 { 00026 friend class TemplateMesh<MData, VData, EData, FData, RW>; 00027 public: 00028 typedef MeshMFTemplateVertex<MData, VData, EData, FData, RW> MFVertex; 00029 typedef MeshMFTemplateEdge<MData, VData, EData, FData, RW> MFEdge; 00030 typedef MeshMFTemplateFace<MData, VData, EData, FData, RW> MFFace; 00031 00033 TemplateVertex(); 00035 virtual SFAbstractNode clone() const; 00037 virtual ~TemplateVertex(); 00038 00040 SFTemplateVertex<MData, VData, EData, FData, RW> *createVertex(); 00042 SFTemplateVertex<MData, VData, EData, FData, RW> *createVertex(unsigned int i); 00043 00045 bool removeVertex(SFTemplateVertex<MData, VData, EData, FData, RW> *vertex); 00046 00048 static SFTemplateEdge<MData, VData, EData, FData, RW> *getEdge(SFTemplateVertex<MData, VData, EData, FData, RW> *from, SFTemplateVertex<MData, VData, EData, FData, RW> *to); 00050 inline const MFVertex &getVertices() const; 00052 inline const MFEdge &getEdges() const; 00053 00054 protected: 00056 TemplateVertex(const TemplateVertex &S); 00057 00058 private: 00059 MFVertex _vertices; 00060 MFEdge _edges; 00061 00063 SFTemplateEdge<MData, VData, EData, FData, RW> *createEdge(SFTemplateVertex<MData, VData, EData, FData, RW> *from, SFTemplateVertex<MData, VData, EData, FData, RW> *to); 00065 void removeEdge(SFTemplateEdge<MData, VData, EData, FData, RW> *edge); 00066 00067 }; 00068 00071 typedef TemplateVertex<MeshData, VertexData, EdgeData, FaceData, true> Vertex; 00072 00073 } 00074 } 00075 00076 #include "MESH_Vertex.inl" 00077 00078 #endif