00001 #ifndef X3DTK_MESH_SFVERTEX_H 00002 #define X3DTK_MESH_SFVERTEX_H 00003 00004 #include "MESH_BaseSFVertex.h" 00005 #include "TypeList.h" 00006 00007 #include <vector> 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 TemplateVertex; 00014 template<class MData, class VData, class EData, class FData, bool RW> class SFTemplateEdge; 00015 template<class MData, class VData, class EData, class FData, bool RW> class SFTemplateFace; 00016 template<class MData, class VData, class EData, class FData, bool RW> class EntityMFTemplateEdge; 00017 template<class MData, class VData, class EData, class FData, bool RW> class EntityMFTemplateFace; 00018 00025 template<class MData, class VData, class EData, class FData, bool RW> 00026 class SFTemplateVertex : public BaseSFVertex 00027 { 00028 friend class TemplateVertex<MData, VData, EData, FData, RW>; 00029 friend class TemplateMesh<MData, VData, EData, FData, RW>; 00030 public: 00031 typedef EntityMFTemplateFace<MData, VData, EData, FData, RW> MFFace; 00032 typedef EntityMFTemplateEdge<MData, VData, EData, FData, RW> MFEdge; 00033 00035 inline const MFEdge &getEdges() const; 00037 inline const MFFace &getFaces() const; 00039 inline VData &data(); 00041 inline const VData &data() const; 00043 inline bool isIsolated() const; 00044 00045 #ifdef TEMPLATE_SPECIALIZATION_SUPPORTED 00046 00047 template<class F> 00048 F &getData(); 00050 template<class F> 00051 F &ogetData(); 00052 #endif 00053 00054 private: 00055 MFEdge _edges; 00056 MFFace _faces; 00057 VData _data; 00058 00060 SFTemplateVertex(unsigned int i); 00062 ~SFTemplateVertex(); 00063 00065 void addEdge(SFTemplateEdge<MData, VData, EData, FData, RW> *edge); 00067 void addFace(SFTemplateFace<MData, VData, EData, FData, RW> *face); 00068 00070 void removeEdge(SFTemplateEdge<MData, VData, EData, FData, RW> *edge); 00072 void removeFace(SFTemplateFace<MData, VData, EData, FData, RW> *face); 00073 }; 00074 00076 template<class MData, class VData, class EData, class FData, bool RW> 00077 std::ostream& operator<<(std::ostream& o, const SFTemplateVertex<MData, VData, EData, FData, RW> &v); 00078 00079 } 00080 } 00081 00082 #include "MESH_SFVertex.inl" 00083 00084 #endif