diff --git a/Mesh/meshGRegionDelaunayInsertion.cpp b/Mesh/meshGRegionDelaunayInsertion.cpp index 68ef26206363275e3385927451ee8ed658ae15d4..ba940332b35923ec11c8f4ced4befe6832ce6ff6 100644 --- a/Mesh/meshGRegionDelaunayInsertion.cpp +++ b/Mesh/meshGRegionDelaunayInsertion.cpp @@ -1325,6 +1325,8 @@ void insertVerticesInRegion (GRegion *gr, int maxVert, bool _classify) FOUND = isCavityCompatibleWithEmbeddedEdges(cavity, shell, allEmbeddedEdges); } + bool correctedCavityIncompatibleWithEmbeddedEdge = false; + if(FOUND){ MVertex *v = new MVertex(center[0], center[1], center[2], worst->onWhat()); v->setIndex(NUM++); @@ -1338,62 +1340,44 @@ void insertVerticesInRegion (GRegion *gr, int maxVert, bool _classify) else if (k == 0) break; else if (k == 1) correctCavity = true; } - if (correctCavity && starShaped) NB_CORRECTION_OF_CAVITY ++; + if (correctCavity && starShaped) { + NB_CORRECTION_OF_CAVITY ++; + if(!isCavityCompatibleWithEmbeddedEdges(cavity, shell, allEmbeddedEdges)){ + correctedCavityIncompatibleWithEmbeddedEdge = true; + // printf("ARGH\n"); + } + } // printTets ("after.pos", cavity, true); - //} - - double lc1 = - (1 - uvw[0] - uvw[1] - uvw[2]) * vSizes[worst->tet()->getVertex(0)->getIndex()] + - uvw[0] * vSizes[worst->tet()->getVertex(1)->getIndex()] + - uvw[1] * vSizes[worst->tet()->getVertex(2)->getIndex()] + - uvw[2] * vSizes[worst->tet()->getVertex(3)->getIndex()]; - double lc = BGM_MeshSize(gr, 0, 0, center[0], center[1], center[2]); - // double lc = std::min(lc1, BGM_MeshSize(gr, 0, 0, center[0], center[1], center[2])); - vSizes.push_back(lc1); - vSizesBGM.push_back(lc); - // compute mesh spacing there - if(!starShaped || !insertVertexB(shell,cavity,v, worst, myFactory, allTets, vSizes,vSizesBGM)){ + // compute mesh spacing there + if(correctedCavityIncompatibleWithEmbeddedEdge || !starShaped || !insertVertexB(shell,cavity,v, worst, myFactory, allTets, vSizes,vSizesBGM)){ COUNT_MISS_1++; - // printf("coucou 1 %d\n",ITER); - myFactory.changeTetRadius(allTets.begin(), 0.); + // printf("coucou 1 %d %d\n",correctedCavityIncompatibleWithEmbeddedEdge, starShaped); + myFactory.changeTetRadius(allTets.begin(), 0.); for (std::list<MTet4*>::iterator itc = cavity.begin(); itc != cavity.end(); ++itc) (*itc)->setDeleted(false); - delete v; - } - else{ + delete v; + NUM--; + } + else{ + //} + double lc1 = + (1 - uvw[0] - uvw[1] - uvw[2]) * vSizes[worst->tet()->getVertex(0)->getIndex()] + + uvw[0] * vSizes[worst->tet()->getVertex(1)->getIndex()] + + uvw[1] * vSizes[worst->tet()->getVertex(2)->getIndex()] + + uvw[2] * vSizes[worst->tet()->getVertex(3)->getIndex()]; + double lc = BGM_MeshSize(gr, 0, 0, center[0], center[1], center[2]); + // double lc = std::min(lc1, BGM_MeshSize(gr, 0, 0, center[0], center[1], center[2])); + vSizes.push_back(lc1); + vSizesBGM.push_back(lc); REALCOUNT++; - v->onWhat()->mesh_vertices.push_back(v); + v->onWhat()->mesh_vertices.push_back(v); } } + else{ - // printf("%d %d %d %d\n",worst->tet()->getVertex(0)->getNum() - // ,worst->tet()->getVertex(1)->getNum() - // ,worst->tet()->getVertex(2)->getNum() - // ,worst->tet()->getVertex(3)->getNum()); - /* printf("coucou 2 % cavity size %d\n",ITER,cavity.size()); - for (std::list<MTet4*>::iterator itc = cavity.begin(); itc != cavity.end(); ++itc){ - MTetrahedron *toto = (*itc)->tet(); - // toto->xyz2uvw(center,uvw); - double mat[3][3], b[3], det; - toto->getMat(mat); - b[0] = center[0] - toto->getVertex(0)->x(); - b[1] = center[1] - toto->getVertex(0)->y(); - b[2] = center[2] - toto->getVertex(0)->z(); - sys3x3(mat, b, uvw, &det); - printf("det = %g\n",det); - printf("%g %g %g -- \n",toto->getVertex(0)->x(),toto->getVertex(0)->y(),toto->getVertex(0)->z()); - printf("%g %g %g -- \n",toto->getVertex(1)->x(),toto->getVertex(1)->y(),toto->getVertex(1)->z()); - printf("%g %g %g -- \n",toto->getVertex(2)->x(),toto->getVertex(2)->y(),toto->getVertex(2)->z()); - printf("%g %g %g -- \n",toto->getVertex(3)->x(),toto->getVertex(3)->y(),toto->getVertex(3)->z()); - printf("tet quality %g\n",toto->gammaShapeMeasure()); - printf("point %g %g %g outside %12.5E %12.5E %12.5E %12.5E\n",center[0],center[1],center[2],uvw[0], uvw[1], uvw[2],1-uvw[0]-uvw[1]-uvw[2]); - } - getchar(); - */ myFactory.changeTetRadius(allTets.begin(), 0.0); COUNT_MISS_2++; for (std::list<MTet4*>::iterator itc = cavity.begin(); itc != cavity.end(); ++itc) (*itc)->setDeleted(false); - // if (cavity.size() > 10)printTets ("cavity.pos", cavity, true); } }