diff --git a/Geo/GModelIO_MSH.cpp b/Geo/GModelIO_MSH.cpp index 4c986a60a48c28d16c47a79612f1e42f9e799b72..33b349f4a93aa08a5397740a8296062b14995113 100644 --- a/Geo/GModelIO_MSH.cpp +++ b/Geo/GModelIO_MSH.cpp @@ -361,6 +361,7 @@ int GModel::readMSH(const std::string &name) if(sscanf(str, "%d", &numElements) != 1){ fclose(fp); return 0; } Msg::Info("%d elements", numElements); Msg::ResetProgressMeter(); + _elementMapCache.clear(); for(int i = 0; i < numElements; i++) { int num, type, entity, numData; if(!binary){ @@ -395,6 +396,20 @@ int GModel::readMSH(const std::string &name) if(swap) SwapBytes((char*)&data[0], sizeof(int), numData); } } + if(type==MSH_PNT_SUB || type==MSH_LIN_SUB || + type==MSH_TRI_SUB || type==MSH_TET_SUB){ + if (_elementMapCache.size()==0){ + for(int j=0; j<11; j++){ + std::map<int, std::vector<MElement*> >::const_iterator it; + for (it = elements[j].begin(); it != elements[j].end(); ++it){ + for(int k=0; k<it->second.size(); k++){ + MElement* e = it->second[k]; + _elementMapCache[e->getNum()] = e; + } + } + } + } + } MElementFactory f; MElement *element = f.create(num, type, data, this); if(!element){ fclose(fp); return 0; } @@ -411,6 +426,8 @@ int GModel::readMSH(const std::string &name) case TYPE_POLYG: elements[9][entity].push_back(element); break; case TYPE_POLYH: elements[10][entity].push_back(element); break; } + if (_elementMapCache.size()) + _elementMapCache[num] = element; if(numElements > 100000) Msg::ProgressMeter(i + 1, numElements, true, "Reading elements"); }