00001 #ifndef X3DTK_MESH_SFFACE_H 00002 #define X3DTK_MESH_SFFACE_H 00003 00004 #include "MESH_SceneGraphTypes.h" 00005 00006 #include <vector> 00007 #include <iostream> 00008 00009 namespace X3DTK { 00010 namespace MESH { 00011 00012 template<class EData, class FData, class VData, bool readOnly> class SFEdge; 00013 00020 template<class FData, class VData, class EData, bool readOnly = true> 00021 class SFFace 00022 { 00023 template<class A, class B, class C, class D, bool E> friend class Mesh; 00024 public: 00025 typedef EntityMFEdge<EData, FData, VData, readOnly> MFEdge; 00026 00028 inline unsigned int getIndex() const; 00030 inline const MFEdge &getEdges() const; 00032 inline FData &data(); 00034 inline const FData &data() const; 00036 template<class F> 00037 F &getData(); 00039 template<class F> 00040 F &ogetData(); 00042 void reverse(); 00043 00044 private: 00045 const unsigned int _index; 00046 MFEdge _edges; 00047 FData _data; 00048 00050 SFFace(unsigned int i); 00052 ~SFFace(); 00053 00055 void addEdge(SFEdge<EData, FData, VData, readOnly> *edge); 00056 }; 00057 00059 template<class FData, class VData, class EData, bool readOnly> 00060 std::ostream& operator<<(std::ostream& o, const SFFace<FData, VData, EData, readOnly> &f); 00061 00062 } 00063 } 00064 00065 #include "MESH_SFFace.inl" 00066 00067 #endif