diff --git a/Common/Visibility.cpp b/Common/Visibility.cpp index 42a0f00985afe8b9467d453a1a7bd538a29b709a..c9055bede2061c82b6e5c30f8e8a14d5123ebcfb 100644 --- a/Common/Visibility.cpp +++ b/Common/Visibility.cpp @@ -1,4 +1,4 @@ -// $Id: Visibility.cpp,v 1.32 2008-03-20 11:44:02 geuzaine Exp $ +// $Id: Visibility.cpp,v 1.33 2008-04-16 22:10:52 geuzaine Exp $ // // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle // @@ -48,7 +48,8 @@ class VisLessThan{ } }; -static void setLabels(void *a, void *b){ +static void setLabels(void *a, void *b) +{ Symbol *s = (Symbol *)a; for(int j = 0; j < List_Nbr(s->val); j++) { double tag; @@ -60,26 +61,18 @@ static void setLabels(void *a, void *b){ void VisibilityManager::update(int type) { _labels.clear(); - - // get old labels from parser - if(Tree_Nbr(Symbol_T)) Tree_Action(Symbol_T, setLabels); - - GModel *m = GModel::current(); - - // add new labels for physicals - if(type == 1){ - GModel::piter it = m->firstPhysicalName(); - while(it != m->lastPhysicalName()){ - setLabel(it->first, it->second); - ++it; - } - } - for(unsigned int i = 0; i < _entities.size(); i++) delete _entities[i]; _entities.clear(); + + GModel *m = GModel::current(); + + // get old labels from parser + if(Tree_Nbr(Symbol_T)) Tree_Action(Symbol_T, setLabels); if(type == 0){ // elementary entities + for(GModel::piter it = m->firstElementaryName(); it != m->lastElementaryName(); ++it) + setLabel(it->first, it->second); for(GModel::viter it = m->firstVertex(); it != m->lastVertex(); it++) _entities.push_back(new VisElementary(*it)); for(GModel::eiter it = m->firstEdge(); it != m->lastEdge(); it++) @@ -90,6 +83,8 @@ void VisibilityManager::update(int type) _entities.push_back(new VisElementary(*it)); } else if(type == 1){ // physical entities + for(GModel::piter it = m->firstPhysicalName(); it != m->lastPhysicalName(); ++it) + setLabel(it->first, it->second); std::map<int, std::vector<GEntity*> > groups[4]; m->getPhysicalGroups(groups); for(int i = 0; i < 4; i++){ diff --git a/Geo/GModel.h b/Geo/GModel.h index fa0864d7c36d38f4e71a7a459e0f91984415d27d..467ea034c35b4f11caa0aa6a633d1a1fb18cafe0 100644 --- a/Geo/GModel.h +++ b/Geo/GModel.h @@ -71,7 +71,7 @@ class GModel std::set<GEdge*, GEntityLessThan> edges; std::set<GVertex*, GEntityLessThan> vertices; std::set<int> meshPartitions; - std::map<int, std::string> physicalNames; + std::map<int, std::string> physicalNames, elementaryNames; public: GModel(std::string name=""); @@ -154,9 +154,11 @@ class GModel // Returns the highest number associated with a physical entity int getMaxPhysicalNumber(); - // Get an iterator on the physical name + // Get an iterator on the elementary/physical names piter firstPhysicalName() { return physicalNames.begin(); } piter lastPhysicalName() { return physicalNames.end(); } + piter firstElementaryName() { return elementaryNames.begin(); } + piter lastElementaryName() { return elementaryNames.end(); } // Get the number of physical names int numPhysicalNames(){ return physicalNames.size(); } diff --git a/Geo/GModelIO_MED.cpp b/Geo/GModelIO_MED.cpp index c9ca68d96af668f16f9f9cb389c035d517b53511..b221e9f60660602b2e33db643b5768b597bd8be7 100644 --- a/Geo/GModelIO_MED.cpp +++ b/Geo/GModelIO_MED.cpp @@ -1,4 +1,4 @@ -// $Id: GModelIO_MED.cpp,v 1.31 2008-04-16 12:31:37 geuzaine Exp $ +// $Id: GModelIO_MED.cpp,v 1.32 2008-04-16 22:10:53 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -315,19 +315,20 @@ int GModel::readMED(const std::string &name, int meshIndex) Msg(GERROR, "Could not read MED groups or attributes"); return 0; } - if(numGroups > 0){ // get physicals - std::vector<med_int> attribId(numAttrib + 1); - std::vector<med_int> attribVal(numAttrib + 1); - std::vector<char> attribDes(MED_TAILLE_DESC * numAttrib + 1); - std::vector<char> groupNames(MED_TAILLE_LNOM * numGroups + 1); - char familyName[MED_TAILLE_NOM + 1]; - med_int familyNum; - if(MEDfamInfo(fid, meshName, i + 1, familyName, &familyNum, &attribId[0], - &attribVal[0], &attribDes[0], &numAttrib, &groupNames[0], - &numGroups) < 0) { - Msg(GERROR, "Could not read info for MED family %d", i + 1); - } - else{ + std::vector<med_int> attribId(numAttrib + 1); + std::vector<med_int> attribVal(numAttrib + 1); + std::vector<char> attribDes(MED_TAILLE_DESC * numAttrib + 1); + std::vector<char> groupNames(MED_TAILLE_LNOM * numGroups + 1); + char familyName[MED_TAILLE_NOM + 1]; + med_int familyNum; + if(MEDfamInfo(fid, meshName, i + 1, familyName, &familyNum, &attribId[0], + &attribVal[0], &attribDes[0], &numAttrib, &groupNames[0], + &numGroups) < 0) { + Msg(GERROR, "Could not read info for MED family %d", i + 1); + } + else{ + elementaryNames[-familyNum] = familyName; + if(numGroups > 0){ GEntity *ge; // family tags are unique (for all dimensions) if((ge = getRegionByTag(-familyNum))){} else if((ge = getFaceByTag(-familyNum))){} diff --git a/Parser/OpenFile.cpp b/Parser/OpenFile.cpp index bdf38b6b2b220b69c094515233319fa3184b4b55..c42615c1dc6e46ea9913fd2948d3c0e23770975e 100644 --- a/Parser/OpenFile.cpp +++ b/Parser/OpenFile.cpp @@ -1,4 +1,4 @@ -// $Id: OpenFile.cpp,v 1.183 2008-04-07 12:13:16 geuzaine Exp $ +// $Id: OpenFile.cpp,v 1.184 2008-04-16 22:10:53 geuzaine Exp $ // // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle // @@ -359,7 +359,9 @@ int MergeFile(const char *name, int warn_if_missing) else if(!strcmp(ext, ".mesh") || !strcmp(ext, ".MESH")){ status = m->readMESH(name); } - else if(!strcmp(ext, ".med") || !strcmp(ext, ".MED")){ + else if(!strcmp(ext, ".med") || !strcmp(ext, ".MED") || + !strcmp(ext, ".mmed") || !strcmp(ext, ".MMED") || + !strcmp(ext, ".rmed") || !strcmp(ext, ".RMED")){ status = GModel::readMED(name); if(status > 1) status = PView::readMED(name); } diff --git a/Post/PViewDataGModel.cpp b/Post/PViewDataGModel.cpp index 148b912cd8df1eb2158cd6d54433cb5c83bf62bc..a93446da813078b1b2528b1ef75b961929b47c50 100644 --- a/Post/PViewDataGModel.cpp +++ b/Post/PViewDataGModel.cpp @@ -1,4 +1,4 @@ -// $Id: PViewDataGModel.cpp,v 1.49 2008-04-06 09:20:17 geuzaine Exp $ +// $Id: PViewDataGModel.cpp,v 1.50 2008-04-16 22:10:53 geuzaine Exp $ // // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle // @@ -99,6 +99,7 @@ SBoundingBox3d PViewDataGModel::getBoundingBox(int step) int PViewDataGModel::getNumScalars(int step) { if(_steps.empty()) return 0; + // to generalize if(_steps[0]->getNumComponents() == 1) return getNumElements(0); return 0; } @@ -106,6 +107,7 @@ int PViewDataGModel::getNumScalars(int step) int PViewDataGModel::getNumVectors(int step) { if(_steps.empty()) return 0; + // to generalize if(_steps[0]->getNumComponents() == 3) return getNumElements(0); return 0; } @@ -113,33 +115,95 @@ int PViewDataGModel::getNumVectors(int step) int PViewDataGModel::getNumTensors(int step) { if(_steps.empty()) return 0; + // to generalize if(_steps[0]->getNumComponents() == 9) return getNumElements(0); return 0; } +int PViewDataGModel::getNumLines(int step) +{ + if(_steps.empty()) return 0; + GModel *m = _steps[0]->getModel(); // to generalize + int n = 0; + for(GModel::eiter it = m->firstEdge(); it != m->lastEdge(); ++it) + n += (*it)->lines.size(); + return n; +} + +int PViewDataGModel::getNumTriangles(int step) +{ + if(_steps.empty()) return 0; + GModel *m = _steps[0]->getModel(); // to generalize + int n = 0; + for(GModel::fiter it = m->firstFace(); it != m->lastFace(); ++it) + n += (*it)->triangles.size(); + return n; +} + +int PViewDataGModel::getNumQuadrangles(int step) +{ + if(_steps.empty()) return 0; + GModel *m = _steps[0]->getModel(); // to generalize + int n = 0; + for(GModel::fiter it = m->firstFace(); it != m->lastFace(); ++it) + n += (*it)->quadrangles.size(); + return n; +} + +int PViewDataGModel::getNumTetrahedra(int step) +{ + if(_steps.empty()) return 0; + GModel *m = _steps[0]->getModel(); // to generalize + int n = 0; + for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); ++it) + n += (*it)->tetrahedra.size(); + return n; +} + +int PViewDataGModel::getNumHexahedra(int step) +{ + if(_steps.empty()) return 0; + GModel *m = _steps[0]->getModel(); // to generalize + int n = 0; + for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); ++it) + n += (*it)->hexahedra.size(); + return n; +} + +int PViewDataGModel::getNumPrisms(int step) +{ + if(_steps.empty()) return 0; + GModel *m = _steps[0]->getModel(); // to generalize + int n = 0; + for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); ++it) + n += (*it)->prisms.size(); + return n; +} + +int PViewDataGModel::getNumPyramids(int step) +{ + if(_steps.empty()) return 0; + GModel *m = _steps[0]->getModel(); // to generalize + int n = 0; + for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); ++it) + n += (*it)->pyramids.size(); + return n; +} + int PViewDataGModel::getNumEntities(int step) { - if(step < 0 || _steps.empty()){ - int num = 0; - for(unsigned int i = 0; i < _steps.size(); i++) - num += _steps[i]->getNumEntities(); - return num; - } + if(_steps.empty()) return 0; + // to generalize + if(step < 0) return _steps[0]->getNumEntities(); return _steps[step]->getNumEntities(); } int PViewDataGModel::getNumElements(int step, int ent) { - if(step < 0 || _steps.empty()){ - int num = 0; - for(unsigned int i = 0; i < _steps.size(); i++){ - if(ent < 0) - num += _steps[i]->getModel()->getNumMeshElements(); - else - num += _steps[i]->getEntity(ent)->getNumMeshElements(); - } - return num; - } + if(_steps.empty()) return 0; + // to generalize + if(step < 0 && ent < 0) return _steps[0]->getModel()->getNumMeshElements(); + if(step < 0) return _steps[0]->getEntity(ent)->getNumMeshElements(); if(ent < 0) return _steps[step]->getModel()->getNumMeshElements(); return _steps[step]->getEntity(ent)->getNumMeshElements(); } diff --git a/Post/PViewDataGModel.h b/Post/PViewDataGModel.h index 097d59ad9b2ebc843b2d01b6f4dc7c7e71c9c554..d8dce39d9fd58b099a8d0b1f2730c2eb77e92c07 100644 --- a/Post/PViewDataGModel.h +++ b/Post/PViewDataGModel.h @@ -154,6 +154,14 @@ class PViewDataGModel : public PViewData { int getNumScalars(int step=-1); int getNumVectors(int step=-1); int getNumTensors(int step=-1); + int getNumPoints(int step=-1){ return 0; } + int getNumLines(int step=-1); + int getNumTriangles(int step=-1); + int getNumQuadrangles(int step=-1); + int getNumTetrahedra(int step=-1); + int getNumHexahedra(int step=-1); + int getNumPrisms(int step=-1); + int getNumPyramids(int step=-1); int getNumEntities(int step=-1); int getNumElements(int step=-1, int ent=-1); int getDimension(int step, int ent, int ele);