00001 #ifndef X3DTK_MESH_STATSCALCULATORSTATEVARIABLES_H
00002 #define X3DTK_MESH_STATSCALCULATORSTATEVARIABLES_H
00003
00004 #include "MESH_SceneGraphTypes.h"
00005 #include "MESH_Mesh.h"
00006 #include "MESH_Info.h"
00007
00008 #include <list>
00009 #include <map>
00010 #include <vector>
00011
00012 namespace X3DTK {
00013 namespace MESH {
00014
00021 template<class MData, class VData, class EData, class FData, bool RW>
00022 class TemplateStatsCalculatorStateVariables : public StateVariables
00023 {
00024 public:
00026 TemplateStatsCalculatorStateVariables();
00027
00029 void init();
00031 void finish();
00032
00034 void addNode(SFNode N);
00036 bool getNode(SFNode N) const;
00037
00039 void setCurrentMesh(TemplateMesh<MData, VData, EData, FData, RW> *mesh);
00041 void addFaces(unsigned int faces);
00043 void addVertices(unsigned int vertices);
00045 void addEdges(unsigned int edges);
00047 void setInstances(unsigned int instances);
00048
00050 inline unsigned int getModelFaces() const;
00052 inline unsigned int getModelVertices() const;
00054 inline unsigned int getModelEdges() const;
00055
00057 inline unsigned int getFacesOf(SFNode N);
00059 inline unsigned int getVerticesOf(SFNode N);
00061 inline unsigned int getEdgesOf(SFNode N);
00062
00064 inline const TemplateMeshInfo<MData, VData, EData, FData, RW> &getModelMeshInfo() const;
00066 inline const std::list<std::pair<SFNode, TemplateMeshInfo<MData, VData, EData, FData, RW> > > &getMeshInfoList() const;
00068 inline const TemplateVertexInfo<MData, VData, EData, FData, RW> &getModelVertexInfo() const;
00070 inline const std::list<std::pair<SFNode, TemplateVertexInfo<MData, VData, EData, FData, RW> > > &getVertexInfoList() const;
00071
00073 void setSelectedNodes(const MFNode &selectedNodes);
00075 MFNode getSelectedNodes() const;
00076
00077 private:
00078 std::list<SFNode> _nodeList;
00079 TemplateMesh<MData, VData, EData, FData, RW> *_currentMesh;
00080 TemplateMeshInfo<MData, VData, EData, FData, RW> _modelMeshInfo;
00081 TemplateVertexInfo<MData, VData, EData, FData, RW> _modelVertexInfo;
00082 std::list<std::pair<SFNode, TemplateMeshInfo<MData, VData, EData, FData, RW> > > _meshInfoList;
00083 std::list<std::pair<SFNode, TemplateVertexInfo<MData, VData, EData, FData, RW> > > _vertexInfoList;
00084 MFNode _selectedNodes;
00085 };
00086
00087 }
00088 }
00089
00090 #include "MESH_StatsCalculatorStateVariables.inl"
00091
00092 #endif