diff --git a/Geo/MElementCut.cpp b/Geo/MElementCut.cpp index 3d14181dce643223e1add5790deb76c76d442018..43ff5c193e73ef6f133f84056e310f4ed592b1a1 100644 --- a/Geo/MElementCut.cpp +++ b/Geo/MElementCut.cpp @@ -1448,19 +1448,24 @@ GModel *buildCutMesh(GModel *gm, gLevelset *ls, fullMatrix<double> verticesLs(nbLs, numVert + 1); //compute all at once for ls POINTS (type = 11) - std::vector<MVertex *> vert; - for(unsigned int i = 0; i < gmEntities.size(); i++) { - for(unsigned int j = 0; j < gmEntities[i]->getNumMeshVertices(); j++) { - vert.push_back(gmEntities[i]->getMeshVertex(j)); + bool lsPoints = false; + for(int i = 0; i < primS; i++) + if(primitives[i]->type() == LSPOINTS) {lsPoints = true; break;} + if(lsPoints){ + std::vector<MVertex *> vert; + for(unsigned int i = 0; i < gmEntities.size(); i++) { + for(unsigned int j = 0; j < gmEntities[i]->getNumMeshVertices(); j++) { + vert.push_back(gmEntities[i]->getMeshVertex(j)); + } } - } - for(int k = 0; k < primS; k++){ - if (primitives[k]->type() == LSPOINTS){ - ((gLevelsetPoints*)primitives[k])->computeLS(vert); + for(int k = 0; k < primS; k++){ + if (primitives[k]->type() == LSPOINTS){ + ((gLevelsetPoints*)primitives[k])->computeLS(vert); + } } } - //compute and store levelset values + //compute and store levelset values + create new nodes for(unsigned int i = 0; i < gmEntities.size(); i++) { for(unsigned int j = 0; j < gmEntities[i]->getNumMeshVertices(); j++) { MVertex *vi = gmEntities[i]->getMeshVertex(j); @@ -1470,6 +1475,9 @@ GModel *buildCutMesh(GModel *gm, gLevelset *ls, verticesLs(k, vi->getIndex()) = (*primitives[k])(vi->x(), vi->y(), vi->z()); if(primS > 1) verticesLs(k, vi->getIndex()) = (*ls)(vi->x(), vi->y(), vi->z()); + + MVertex *vn = new MVertex(vi->x(), vi->y(), vi->z(), 0, vi->getNum()); + vertexMap[vi->getNum()] = vn; } } @@ -1604,6 +1612,7 @@ GModel *buildCutMesh(GModel *gm, gLevelset *ls, } #if 0 + int numElements = 0; for(int i = 0; i < 10; i++) { printf(" - element type : %d\n", i); for(std::map<int, std::vector<MElement*> >::iterator it = elements[i].begin(); @@ -1615,7 +1624,7 @@ GModel *buildCutMesh(GModel *gm, gLevelset *ls, if(e->getParent()) printf(" par=%d (%d)",e->getParent()->getNum(),e->ownsParent()); if(e->getDomain(0)) printf(" d0=%d",e->getDomain(0)->getNum()); if(e->getDomain(1)) printf(" d1=%d",e->getDomain(1)->getNum()); - printf("\n"); + printf("\n"); numElements++; } } } @@ -1624,13 +1633,11 @@ GModel *buildCutMesh(GModel *gm, gLevelset *ls, for(std::map<int, std::map<int, std::string> >::iterator it=physicals[i].begin();it!=physicals[i].end();it++) for(std::map<int, std::string>::iterator it2 = it->second.begin(); it2!=it->second.end(); it2++) printf(" dim=%d reg=%d phys=%d \"%s\"\n",i,it->first,it2->first,it2->second.c_str()); - printf("\n"); + printf("new Model : %d elements %d nodes\n\n",numElements,vertexMap.size()); #endif for(newVerticesContainer::iterator it = newVertices.begin(); it != newVertices.end(); ++it){ - if((*it)->getNum() <= gm->getMaxVertexNumber()) - (*it)->forceNum(cutGM->getMaxVertexNumber() + 1); vertexMap[(*it)->getNum()] = *it; }