00001 #ifndef X3DTK_MESH_MESH_H 00002 #define X3DTK_MESH_MESH_H 00003 00004 #include "MESH_X3DMeshNode.h" 00005 #include "MESH_SFVertex.h" 00006 #include "MESH_SFEdge.h" 00007 #include "MESH_SFFace.h" 00008 #include "MESH_MeshData.h" 00009 00010 #include <iostream> 00011 #include <typeinfo> 00012 00013 namespace X3DTK { 00014 namespace MESH { 00015 00016 template<class MData, class VData, class EData, class FData, bool RW> class MeshMFTemplateVertex; 00017 template<class MData, class VData, class EData, class FData, bool RW> class MeshMFTemplateEdge; 00018 template<class MData, class VData, class EData, class FData, bool RW> class MeshMFTemplateFace; 00019 00028 template<class MData, class VData, class EData, class FData, bool RW> 00029 class TemplateMesh : public X3DMeshNode 00030 { 00031 public: 00032 typedef MeshMFTemplateVertex<MData, VData, EData, FData, RW> MFVertex; 00033 typedef MeshMFTemplateEdge<MData, VData, EData, FData, RW> MFEdge; 00034 typedef MeshMFTemplateFace<MData, VData, EData, FData, RW> MFFace; 00035 00037 TemplateMesh(); 00039 virtual SFAbstractNode clone() const; 00041 virtual ~TemplateMesh(); 00042 00044 void setVertex(TemplateVertex<MData, VData, EData, FData, RW> *vertexSet); 00046 virtual MFAbstractNode getChildList() const; 00047 00050 bool addChild(const SFAbstractNode &N); 00053 bool setChild(const SFAbstractNode &N); 00055 bool removeChild(const SFAbstractNode &N); 00056 00058 const MFVertex &getVertices() const; 00060 const MFEdge &getEdges() const; 00062 inline const MFFace &getFaces() const; 00064 inline MData &data(); 00066 inline const MData &data() const; 00067 00068 #ifdef TEMPLATE_SPECIALIZATION_SUPPORTED 00069 00070 template<class F> 00071 F &getData(); 00073 template<class F> 00074 F &ogetData(); 00075 #endif 00076 00079 SFTemplateFace<MData, VData, EData, FData, RW> *createFace(const MFInt32 &coordIndex, bool ccw = true); 00081 SFTemplateFace<MData, VData, EData, FData, RW> *createFace(unsigned int i, const MFInt32 &coordIndex, bool ccw = true); 00082 00084 bool removeFace(SFTemplateFace<MData, VData, EData, FData, RW> *face); 00085 00086 protected: 00088 TemplateMesh(const TemplateMesh &N); 00089 00091 void removeFaceFromNeighBourhood(SFTemplateFace<MData, VData, EData, FData, RW> *face); 00092 00093 private: 00094 MFFace _faces; 00095 MData _data; 00096 }; 00097 00100 typedef TemplateMesh<MeshData, VertexData, EdgeData, FaceData, true> Mesh; 00101 typedef SFTemplateVertex<MeshData, VertexData, EdgeData, FaceData, true> SFVertex; 00102 typedef SFTemplateEdge<MeshData, VertexData, EdgeData, FaceData, true> SFEdge; 00103 typedef SFTemplateFace<MeshData, VertexData, EdgeData, FaceData, true> SFFace; 00104 00105 } 00106 } 00107 00108 #include "MESH_Mesh.inl" 00109 00110 #endif