00001
00002
00004
00005 #ifndef X3DDATA_H
00006 #define X3DDATA_H
00007
00008 #include "X3DTypes.h"
00009 #include "MESH_SceneGraphTypes.h"
00010
00011 #include <iostream>
00012 #include <map>
00013 #include <list>
00014
00015 namespace X3DTK {
00016 namespace MESH {
00017
00018 class VertexData;
00019 class EdgeData;
00020 class FaceData;
00021
00023
00024 class VertexData
00025 {
00026 public:
00028 VertexData();
00030 ~VertexData();
00031
00033 void setPoint(const SFPoint3f &point);
00035 void setNormalOfFace(const SFVec3f &normal, SFTemplateFace<FaceData, VertexData, EdgeData> *face);
00037 void setColorOfFace(const SFColorRGBA &color, SFTemplateFace<FaceData, VertexData, EdgeData> *face);
00039 void setTexCoordOfFace(const SFVec2f &texCoord, SFTemplateFace<FaceData, VertexData, EdgeData> *face);
00040
00042 inline const SFPoint3f &getPoint() const {return _point;};
00044 const SFVec3f &getNormalOfFace(SFTemplateFace<FaceData, VertexData, EdgeData> *face) const;
00046 const SFColorRGBA &getColorOfFace(SFTemplateFace<FaceData, VertexData, EdgeData> *face) const;
00048 const SFVec2f &getTexCoordOfFace(SFTemplateFace<FaceData, VertexData, EdgeData> *face) const;
00049
00051 inline const MFVec3f &getNormalArray() const {return _normalArray;};
00053 inline const MFColorRGBA &getColorArray() const {return _colorArray;};
00055 inline const MFVec2f &getTexCoordArray() const {return _texCoordArray;};
00056
00058 inline std::map<SFTemplateFace<FaceData, VertexData, EdgeData> *, unsigned short> &getNormalMap() {return _normalMap;};
00060 inline std::map<SFTemplateFace<FaceData, VertexData, EdgeData> *, unsigned short> &getColorMap() {return _colorMap;};
00062 inline std::map<SFTemplateFace<FaceData, VertexData, EdgeData> *, unsigned short> &getTexCoordMap() {return _texCoordMap;};
00063
00064 private:
00065 SFPoint3f _point;
00066 MFVec3f _normalArray;
00067 std::map<SFTemplateFace<FaceData, VertexData, EdgeData> *, unsigned short> _normalMap;
00068
00069 MFColorRGBA _colorArray;
00070 std::map<SFTemplateFace<FaceData, VertexData, EdgeData> *, unsigned short> _colorMap;
00071
00072 MFVec2f _texCoordArray;
00073 std::map<SFTemplateFace<FaceData, VertexData, EdgeData> *, unsigned short> _texCoordMap;
00074 };
00075
00077
00078 class EdgeData
00079 {
00080 public:
00082 EdgeData();
00083 };
00084
00086
00087 class FaceData
00088 {
00089 public:
00091 FaceData();
00092
00094 void setNormal(const SFVec3f &normal);
00096 void setColor(const SFColorRGBA &color);
00097
00099 inline const SFVec3f &getNormal() const {return _normal;};
00101 inline const SFColorRGBA &getColor() const {return _color;};
00102
00103 private:
00104 SFVec3f _normal;
00105 SFColorRGBA _color;
00106 };
00107
00109
00110 class MeshData
00111 {
00112 public:
00114 MeshData();
00115
00117 void setNormal(bool value);
00119 void setColor(bool value);
00121 void setTexCoord(bool value);
00123 void setNormalPerVertex(bool value);
00125 void setColorPerVertex(bool value);
00126
00128 inline bool hasNormal() const {return _normal;};
00130 inline bool hasColor() const {return _color;};
00132 inline bool hasTexCoord() const {return _texCoord;};
00134 inline bool getNormalPerVertex() const {return _normalPerVertex;};
00136 inline bool getColorPerVertex() const {return _colorPerVertex;};
00137
00138 private:
00139 bool _normal;
00140 bool _color;
00141 bool _texCoord;
00142 bool _normalPerVertex;
00143 bool _colorPerVertex;
00144 };
00145
00146 }
00147 }
00148
00149 #endif