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

MESH_SFEdge.h

Go to the documentation of this file.
00001 #ifndef X3DTK_MESH_SFEDGE_H
00002 #define X3DTK_MESH_SFEDGE_H
00003 
00004 #include "MESH_SceneGraphTypes.h"
00005 #include "MESH_SFEdgeContent.h"
00006 
00007 namespace X3DTK {
00008 namespace MESH {
00009 
00010 template<class VData, class EData, class FData, bool readOnly> class SFVertex;
00011 template<class FData, class VData, class EData, bool readOnly> class SFFace;
00012 
00019 template<class EData, class FData, class VData, bool readOnly = true>
00020 class SFEdge
00021 {
00022   template<class A, class B, class C, class D, bool E> friend class Mesh;
00023   template<class A, class B, class C, bool D> friend class SFDirectEdge;
00024   template<class A, class B, class C, bool D> friend class SFIndirectEdge;
00025   template<class A, class B, class C, bool D> friend class SFFace;
00026 public:
00027   typedef EntityMFFace<FData, VData, EData, readOnly> MFFace;
00028   
00030   inline SFEdge *getSymetric();
00032   virtual SFVertex<VData, EData, FData, readOnly> *getFromVertex() const = 0;
00034   virtual SFVertex<VData, EData, FData, readOnly> *getToVertex() const = 0;
00036   virtual const MFFace &getLeftFaces() const = 0;
00038   virtual const MFFace &getRightFaces() const = 0;
00040   MFFace getFaces() const;
00042   inline bool isBoundary() const;
00044   inline bool isNonManifold() const;
00046   inline EData &data();
00048   inline const EData &data() const;
00050   template<class F>  
00051   F &getData();
00053   template<class F>  
00054   F &ogetData();
00055   
00056 protected:    
00058   SFEdge(SFEdgeContent<EData, FData, VData, readOnly> *const edgeContent);
00060   virtual ~SFEdge();
00061   
00063   void setSymetric(SFEdge *symetric);
00065   virtual void addLeftFace(SFFace<FData, VData, EData, readOnly> *face) = 0;
00067   virtual void addRightFace(SFFace<FData, VData, EData, readOnly> *face) = 0;
00068 
00070   virtual void removeLeftFace(SFFace<FData, VData, EData, readOnly> *face) = 0;
00072   virtual void removeRightFace(SFFace<FData, VData, EData, readOnly> *face) = 0;
00073 
00074 private:
00075   SFEdgeContent<EData, FData, VData, readOnly> *const _edgeContent;
00076   SFEdge *_symetric;
00077   
00079   void reverse(SFFace<FData, VData, EData, readOnly> *face);
00080 };
00081 
00083 template<class EData, class FData, class VData, bool readOnly>
00084 std::ostream& operator<<(std::ostream& o, const SFEdge<EData, FData, VData, readOnly> &e);
00085 
00086 }
00087 }
00088 
00089 #include "MESH_SFEdge.inl"
00090 
00091 #endif

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