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

MESH_SFTemplateEdge.h

Go to the documentation of this file.
00001 
00002 //                            MESH_SFTemplateEdge.h                           //
00004 
00005 #ifndef TEMPLATEEDGE_H
00006 #define TEMPLATEEDGE_H
00007 
00008 #include "MESH_SceneGraphTypes.h"
00009 #include "MESH_SFTemplateEdgeContent.h"
00010 
00011 namespace X3DTK {
00012 namespace MESH {
00013 
00014 template<class A, class B, class C> class SFTemplateVertex;
00015 template<class A, class B, class C> class SFTemplateFace;
00016 
00018 
00019 template<class EData, class FData, class VData>
00020 class SFTemplateEdge
00021 {
00022   template<class A, class B, class C, class D> friend class TemplateMesh;
00023   template<class A, class B, class C> friend class SFTemplateDirectEdge;
00024   template<class A, class B, class C> friend class SFTemplateIndirectEdge;
00025 public:
00027   inline SFTemplateEdge *getSymetric() {return _symetric;};
00029   inline SFTemplateVertex<VData, EData, FData> *getFromVertex() const {return (_direct ? _edgeContent->getFromVertex() : _edgeContent->getToVertex());};
00031   inline SFTemplateVertex<VData, EData, FData> *getToVertex() const {return (_direct ? _edgeContent->getToVertex() : _edgeContent->getFromVertex());};
00033   inline const MFTemplateFace<FData, VData, EData> &getLeftFaces() const {return (_direct ? _edgeContent->get1Faces() : _edgeContent->get2Faces());};
00035   inline const MFTemplateFace<FData, VData, EData> &getRightFaces() const {return (_direct ? _edgeContent->get2Faces() : _edgeContent->get1Faces());};
00037   MFTemplateFace<FData, VData, EData> getFaces() const 
00038   {
00039     MFTemplateFace<FData, VData, EData> faces;
00040     const MFTemplateFace<FData, VData, EData> &r1faces = _edgeContent->get1Faces();
00041     const MFTemplateFace<FData, VData, EData> &r2faces = _edgeContent->get2Faces();
00042     
00043     //faces.reserve(r1faces.size() + r2faces.size() + 1);
00044     for (typename MFTemplateFace<FData, VData, EData>::const_iterator it = r1faces.begin(); it != r1faces.end(); ++it)
00045       faces.push_back(*it);
00046 
00047     for (typename MFTemplateFace<FData, VData, EData>::const_iterator it = r2faces.begin(); it != r2faces.end(); ++it)
00048       faces.push_back(*it);
00049 
00050     return faces;
00051   };
00053   inline bool isBoundary() const {return _edgeContent->isBoundary();};
00055   inline EData &data() {return _edgeContent->data();};
00057   inline const EData &data() const {return _edgeContent->data();};
00058 
00059 protected:  
00060   void setDirect(bool value) {_direct = value;};
00061 
00062 private:
00063   SFTemplateEdgeContent<EData, FData, VData> *const _edgeContent;
00064   bool _direct;
00065   SFTemplateEdge *_symetric;
00066   
00068   SFTemplateEdge(SFTemplateEdgeContent<EData, FData, VData> *const edgeContent)
00069   : _edgeContent(edgeContent), _symetric(0)
00070   {};
00071 
00073   ~SFTemplateEdge() {};
00074   
00075   void setSymetric(SFTemplateEdge *symetric) {_symetric = symetric;};
00076   
00078   void addLeftFace(SFTemplateFace<FData, VData, EData> *face) 
00079   {
00080     if (_direct)
00081       _edgeContent->add1Face(face);
00082     else
00083       _edgeContent->add2Face(face);    
00084   };
00086   void addRightFace(SFTemplateFace<FData, VData, EData> *face) 
00087   {
00088     if (_direct)
00089       _edgeContent->add2Face(face);
00090     else
00091       _edgeContent->add1Face(face);    
00092   };
00093 };
00094 
00095 
00096 }
00097 }
00098 
00099 #endif

Generated on Thu Dec 4 13:25:46 2003 for X3DToolKit by doxygen1.2.18