00001 #ifndef X3DTK_MESH_SFFACE_H 00002 #define X3DTK_MESH_SFFACE_H 00003 00004 #include "MESH_BaseSFFace.h" 00005 00006 #include <vector> 00007 #include <iostream> 00008 00009 namespace X3DTK { 00010 namespace MESH { 00011 00012 template<class MData, class VData, class EData, class FData, bool RW> class TemplateMesh; 00013 template<class MData, class VData, class EData, class FData, bool RW> class SFTemplateEdge; 00014 template<class MData, class VData, class EData, class FData, bool RW> class EntityMFTemplateEdge; 00015 00022 template<class MData, class VData, class EData, class FData, bool RW> 00023 class SFTemplateFace : public BaseSFFace 00024 { 00025 friend class TemplateMesh<MData, VData, EData, FData, RW>; 00026 public: 00027 typedef EntityMFTemplateEdge<MData, VData, EData, FData, RW> MFEdge; 00028 00030 inline const MFEdge &getEdges() const; 00032 inline FData &data(); 00034 inline const FData &data() const; 00036 void reverse(); 00037 00038 #ifdef TEMPLATE_SPECIALIZATION_SUPPORTED 00039 00040 template<class F> 00041 F &getData(); 00043 template<class F> 00044 F &ogetData(); 00045 #endif 00046 00047 private: 00048 MFEdge _edges; 00049 FData _data; 00050 00052 SFTemplateFace(unsigned int i); 00054 ~SFTemplateFace(); 00055 00057 void addEdge(SFTemplateEdge<MData, VData, EData, FData, RW> *edge); 00058 }; 00059 00061 template<class MData, class VData, class EData, class FData, bool RW> 00062 std::ostream& operator<<(std::ostream& o, const SFTemplateFace<MData, VData, EData, FData, RW> &f); 00063 00064 } 00065 } 00066 00067 #include "MESH_SFFace.inl" 00068 00069 #endif