Main Page | Modules | Namespace List | Class Hierarchy | Compound List | File List | Namespace Members | Compound Members | File Members | Related Pages

MESH_Mesh.h

Go to the documentation of this file.
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_Vertex.h"
00007 #include "MESH_SFDirectEdge.h"
00008 #include "MESH_SFIndirectEdge.h"
00009 #include "MESH_SFFace.h"
00010 #include "MESH_MeshData.h"
00011 
00012 #include <iostream>
00013 #include <typeinfo>
00014 
00015 namespace X3DTK {
00016 namespace MESH {
00017 
00027 template<class MData, class VData, class EData, class FData, bool readOnly = true>
00028 class Mesh : public X3DMeshNode
00029 {
00030 public:
00032   typedef SFVertex<VData, EData, FData, readOnly> SFVertex;
00034   typedef MeshMFVertex<VData, EData, FData, readOnly> MFVertex;
00036   typedef SFEdge<EData, FData, VData, readOnly> SFEdge;
00038   typedef MeshMFEdge<EData, FData, VData, readOnly> MFEdge;
00040   typedef SFFace<FData, VData, EData, readOnly> SFFace;
00042   typedef MeshMFFace<FData, VData, EData, readOnly> MFFace;
00043   
00045   Mesh();
00047   virtual SFNode clone() const;
00049   virtual ~Mesh(); 
00050    
00052   void setVertex(Vertex<VData, EData, FData, readOnly> *vertexSet);
00054   virtual MFAbstractNode getChildList() const;
00055   
00058   bool addChild(const SFAbstractNode &N);
00061   bool setChild(const SFAbstractNode &N);
00063   bool removeChild(const SFAbstractNode &N);
00064  
00066   SFEdge *getEdge(SFVertex *from, SFVertex *to);
00068   const MFVertex &getVertices() const;
00069     
00071   inline const MFEdge &getEdges() const;
00073   inline const MFFace &getFaces() const;
00075   inline MData &data();
00077   inline const MData &data() const;
00079   template<class F>  
00080   F &getData();
00082   template<class F>  
00083   F &ogetData();
00084     
00087   SFFace *createFace(const MFInt32 &coordIndex, bool ccw = true);
00089   SFFace *createFace(unsigned int i, const MFInt32 &coordIndex, bool ccw = true);
00090 
00092   void removeFace(SFFace *face);
00094   void removeFace(unsigned int i);
00095   
00096 protected:
00098   Mesh(const Mesh &N);
00099   
00100 private:
00101   MFEdge _edges;
00102   MFFace _faces;
00103   MData _data;
00104   
00106   SFEdge *createEdge(SFVertex *from, SFVertex *to);
00107 };
00108 
00111 typedef Mesh<MeshData, VertexData, EdgeData, FaceData, true> DefMesh;
00112 typedef SFVertex<VertexData, EdgeData, FaceData, true> DefSFVertex;
00113 typedef SFEdge<EdgeData, FaceData, VertexData, true> DefSFEdge;
00114 typedef SFFace<FaceData, VertexData, EdgeData, true> DefSFFace;
00115 
00116 }
00117 }
00118 
00119 #include "MESH_Mesh.inl"
00120 
00121 #endif

Generated on Wed Apr 7 12:15:20 2004 for X3DToolKit by doxygen 1.3.3