00001
00002
00004
00005 #ifndef MESH_SceneGraphTYPES_H
00006 #define MESH_SceneGraphTYPES_H
00007
00008 #include "Platform.h"
00009
00010 #include <vector>
00011 #include <list>
00012 #include <iostream>
00013
00014 namespace X3DTK {
00015 namespace MESH {
00016
00017 class X3DNode;
00018 typedef X3DNode *SFNode;
00019 typedef std::list<SFNode> MFNode;
00020
00021 template<class A, class B, class C> class SFTemplateVertex;
00022 template<class A, class B, class C> class SFTemplateEdge;
00023 template<class A, class B, class C> class SFTemplateFace;
00024
00026
00027 template<class VData, class EData, class FData>
00028 class MFTemplateVertex : public std::vector<SFTemplateVertex<VData, EData, FData> *>
00029 {
00030 public:
00032 MFTemplateVertex() : std::vector<SFTemplateVertex<VData, EData, FData> *>() {};
00034 explicit MFTemplateVertex(const std::vector<SFTemplateVertex<VData, EData, FData> *> &vector)
00035 : std::vector<SFTemplateVertex<VData, EData, FData> *>(vector)
00036 {};
00037 };
00038
00040
00041 template<class EData, class FData, class VData>
00042 class MFTemplateEdge : public std::vector<SFTemplateEdge<EData, FData, VData> *>
00043 {
00044 public:
00046 MFTemplateEdge() : std::vector<SFTemplateEdge<EData, FData, VData> *>() {};
00048 explicit MFTemplateEdge(const std::vector<SFTemplateEdge<EData, FData, VData> *> &vector, bool ccw)
00049 : std::vector<SFTemplateEdge<EData, FData, VData> *>(vector)
00050 {
00051 if (!ccw)
00052 {
00053 unsigned int last = vector.size() - 1;
00054 unsigned int mid = (last + 1)/2;
00055 for (unsigned int i = 0; i < mid; ++i)
00056 {
00057 SFTemplateEdge<EData, FData, VData> *temp = (*this)[i];
00058 (*this)[i] = (*this)[last - i];
00059 (*this)[last - i] = temp;
00060 }
00061 }
00062 };
00063 };
00064
00066
00067 template<class FData, class VData, class EData>
00068 class MFTemplateFace : public std::vector<SFTemplateFace<FData, VData, EData> *>
00069 {
00070 public:
00072 MFTemplateFace() : std::vector<SFTemplateFace<FData, VData, EData> *>() {};
00074 explicit MFTemplateFace(const std::vector<SFTemplateFace<FData, VData, EData> *> &vector)
00075 : std::vector<SFTemplateFace<FData, VData, EData> *>(vector)
00076 {};
00077 };
00078
00079 }
00080 }
00081
00082 #endif