Main Page | Modules | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class 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_BaseSFEdge.h"
00005 #include "MESH_SFEdgeContent.h"
00006 
00007 namespace X3DTK {
00008 namespace MESH {
00009 
00010 template<class MData, class VData, class EData, class FData, bool RW> class TemplateVertex;
00011 template<class MData, class VData, class EData, class FData, bool RW> class SFTemplateVertex;
00012 template<class MData, class VData, class EData, class FData, bool RW> class SFTemplateFace;
00013 template<class MData, class VData, class EData, class FData, bool RW> class EntityMFTemplateFace;
00014 
00021 template<class MData, class VData, class EData, class FData, bool RW>
00022 class SFTemplateEdge : public BaseSFEdge
00023 {
00024   friend class TemplateVertex<MData, VData, EData, FData, RW>;
00025   friend class TemplateMesh<MData, VData, EData, FData, RW>;
00026   friend class SFTemplateDirectEdge<MData, VData, EData, FData, RW>;
00027   friend class SFTemplateIndirectEdge<MData, VData, EData, FData, RW>;
00028   friend class SFTemplateFace<MData, VData, EData, FData, RW>;
00029 public:
00030   typedef EntityMFTemplateFace<MData, VData, EData, FData, RW> MFFace;
00031   
00033   inline SFTemplateEdge *getSymetric();
00035   virtual SFTemplateVertex<MData, VData, EData, FData, RW> *getFromVertex() const = 0;
00037   virtual SFTemplateVertex<MData, VData, EData, FData, RW> *getToVertex() const = 0;
00039   virtual const MFFace &getLeftFaces() const = 0;
00041   virtual const MFFace &getRightFaces() const = 0;
00043   MFFace getFaces() const;
00045   inline bool isBoundary() const;
00047   inline bool isNonManifold() const;
00049   inline EData &data();
00051   inline const EData &data() const;
00052 
00053 #ifdef TEMPLATE_SPECIALIZATION_SUPPORTED
00054 
00055   template<class F>  
00056   F &getData();
00058   template<class F>  
00059   F &ogetData();
00060 #endif
00061   
00062 protected:    
00064   SFTemplateEdge(SFTemplateEdgeContent<MData, VData, EData, FData, RW> *const edgeContent);
00066   virtual ~SFTemplateEdge();
00067   
00069   void setSymetric(SFTemplateEdge *symetric);
00071   virtual void addLeftFace(SFTemplateFace<MData, VData, EData, FData, RW> *face) = 0;
00073   virtual void addRightFace(SFTemplateFace<MData, VData, EData, FData, RW> *face) = 0;
00074 
00076   virtual void removeLeftFace(SFTemplateFace<MData, VData, EData, FData, RW> *face) = 0;
00078   virtual void removeRightFace(SFTemplateFace<MData, VData, EData, FData, RW> *face) = 0;
00079 
00080 private:
00081   SFTemplateEdgeContent<MData, VData, EData, FData, RW> *const _edgeContent;
00082   SFTemplateEdge *_symetric;
00083   
00085   void reverse(SFTemplateFace<MData, VData, EData, FData, RW> *face);
00086 };
00087 
00089 template<class MData, class VData, class EData, class FData, bool RW>
00090 std::ostream& operator<<(std::ostream& o, const SFTemplateEdge<MData, VData, EData, FData, RW> &e);
00091 
00092 }
00093 }
00094 
00095 #include "MESH_SFEdge.inl"
00096 
00097 #endif

Generated on Thu Jun 3 10:12:09 2004 for X3DToolKit by doxygen 1.3.6