diff --git a/Post/PViewDataGModel.cpp b/Post/PViewDataGModel.cpp index 2eaca1f66f29e478f83fe81d00e9f4d86b2778e7..954a24166393892ea3941e1ca5a411d7147c7649 100644 --- a/Post/PViewDataGModel.cpp +++ b/Post/PViewDataGModel.cpp @@ -1,4 +1,4 @@ -// $Id: PViewDataGModel.cpp,v 1.15 2008-02-24 16:18:19 geuzaine Exp $ +// $Id: PViewDataGModel.cpp,v 1.16 2008-02-24 17:23:20 geuzaine Exp $ // // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle // @@ -23,14 +23,21 @@ // #include "PViewDataGModel.h" +#include "MElement.h" #include "Message.h" PViewDataGModel::PViewDataGModel(GModel *model) : _model(model) { + // store linear vector of GEntities so we can index in them + // efficiently + for(GModel::eiter it = _model->firstEdge(); it != _model->lastEdge(); ++it) + _entities.push_back(*it); + for(GModel::fiter it = _model->firstFace(); it != _model->lastFace(); ++it) + _entities.push_back(*it); + for(GModel::riter it = _model->firstRegion(); it != _model->lastRegion(); ++it) + _entities.push_back(*it); + /* - store linear vector of GEntity* (index in that vector used for - all element access later) - create a vector (one entry per time step) of class data{ @@ -65,7 +72,6 @@ PViewDataGModel::PViewDataGModel(GModel *model) : _model(model) PViewDataGModel::~PViewDataGModel() { - } double PViewDataGModel::getTime(int step) @@ -85,29 +91,31 @@ double PViewDataGModel::getMax(int step) int PViewDataGModel::getNumEntities() { - return 0; + return _entities.size(); } int PViewDataGModel::getNumElements(int ent) { - if(ent < 0) - return _model->getNumMeshElements(); - else - return 0; // TODO + if(ent < 0) return _model->getNumMeshElements(); + return _entities[ent]->getNumMeshElements(); } int PViewDataGModel::getDimension(int ent, int ele) { - return 0; + return _entities[ent]->getMeshElement(ele)->getDim(); } int PViewDataGModel::getNumNodes(int ent, int ele) { - return 0; + return _entities[ent]->getMeshElement(ele)->getNumVertices(); } void PViewDataGModel::getNode(int ent, int ele, int nod, double &x, double &y, double &z) { + MVertex *v = _entities[ent]->getMeshElement(ele)->getVertex(nod); + x = v->x(); + y = v->y(); + z = v->z(); } int PViewDataGModel::getNumComponents(int ent, int ele) @@ -115,36 +123,38 @@ int PViewDataGModel::getNumComponents(int ent, int ele) return 1; } -void PViewDataGModel::getValue(int ent, int ele, int node, int comp, int step, double &val) +void PViewDataGModel::getValue(int ent, int ele, int nod, int comp, int step, double &val) { - + MVertex *v = _entities[ent]->getMeshElement(ele)->getVertex(nod); + val = v->x() * v->y() * v->z(); } int PViewDataGModel::getNumEdges(int ent, int ele) { - return 0; + return _entities[ent]->getMeshElement(ele)->getNumEdges(); } bool PViewDataGModel::skipEntity(int ent) { - return false; + return !_entities[ent]->getVisibility(); } bool PViewDataGModel::skipElement(int ent, int ele) { - return false; + return !_entities[ent]->getMeshElement(ele)->getVisibility(); } bool PViewDataGModel::readMSH(FILE *fp) { Msg(INFO, "Filling PViewDataGModel..."); - MVertex *v = _model->getMeshVertexByTag(10); + MVertex *v = _model->getMeshVertexByTag(10); if(v){ printf("vertex 10 in mesh is %p\n", v); } - return false; + finalize(); + return true; } bool PViewDataGModel::writePOS(std::string name, bool binary, bool parsed, diff --git a/Post/PViewDataGModel.h b/Post/PViewDataGModel.h index 215f925fb759724854510d0ff9fd61231e32fc56..79044661d09c73a6b89f8c4239a4e98f5aa95b97 100644 --- a/Post/PViewDataGModel.h +++ b/Post/PViewDataGModel.h @@ -29,6 +29,7 @@ class PViewDataGModel : public PViewData { private: GModel *_model; + std::vector<GEntity*> _entities; PViewDataList *_cloneToList(); // create old-style data from this public: PViewDataGModel(GModel *model); diff --git a/Post/PViewDataList.h b/Post/PViewDataList.h index e860d57503047a88ee08a44ca6cc7a2b7330ff51..ef4def82bf03277b55f035bbc3d14cdf77f9bd02 100644 --- a/Post/PViewDataList.h +++ b/Post/PViewDataList.h @@ -98,7 +98,7 @@ class PViewDataList : public PViewData { int getNumNodes(int ent, int ele); void getNode(int ent, int ele, int nod, double &x, double &y, double &z); int getNumComponents(int ent, int ele); - void getValue(int ent, int ele, int node, int comp, int step, double &val); + void getValue(int ent, int ele, int nod, int comp, int step, double &val); int getNumEdges(int ent, int ele); int getNumStrings2D(){ return NbT2; } int getNumStrings3D(){ return NbT3; }