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 readOnly> 00022 class StatsCalculatorStateVariables : public StateVariables 00023 { 00024 public: 00026 StatsCalculatorStateVariables(); 00027 00029 void init(); 00031 void finish(); 00032 00034 void addNode(SFAbstractNode N); 00036 bool getNode(SFAbstractNode N) const; 00037 00039 void setCurrentMesh(Mesh<MData, VData, EData, FData, readOnly> *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(X3DNode *N); 00059 inline unsigned int getVerticesOf(X3DNode *N); 00061 inline unsigned int getEdgesOf(X3DNode *N); 00062 00064 inline const MeshInfo<MData, VData, EData, FData, readOnly> &getModelMeshInfo() const; 00066 inline const std::list<std::pair<X3DNode *, MeshInfo<MData, VData, EData, FData, readOnly> > > &getMeshInfoList() const; 00068 inline const VertexInfo<VData, EData, FData, readOnly> &getModelVertexInfo() const; 00070 inline const std::list<std::pair<X3DNode *, VertexInfo<VData, EData, FData, readOnly> > > &getVertexInfoList() const; 00071 00073 void setSelectedNodes(const MFNode &selectedNodes); 00075 MFNode getSelectedNodes() const; 00076 00077 private: 00078 std::list<SFAbstractNode> _nodeList; 00079 Mesh<MData, VData, EData, FData, readOnly> *_currentMesh; 00080 MeshInfo<MData, VData, EData, FData, readOnly> _modelMeshInfo; 00081 VertexInfo<VData, EData, FData, readOnly> _modelVertexInfo; 00082 std::list<std::pair<X3DNode *, MeshInfo<MData, VData, EData, FData, readOnly> > > _meshInfoList; 00083 std::list<std::pair<X3DNode *, VertexInfo<VData, EData, FData, readOnly> > > _vertexInfoList; 00084 MFNode _selectedNodes; 00085 }; 00086 00087 } 00088 } 00089 00090 #include "MESH_StatsCalculatorStateVariables.inl" 00091 00092 #endif