diff --git a/Mesh/meshGRegion.cpp b/Mesh/meshGRegion.cpp index 447d0c6aac64b6c49aab0944b5399b43794884f0..4506b336e11e50f553551cb66b4768c3bec21dcf 100644 --- a/Mesh/meshGRegion.cpp +++ b/Mesh/meshGRegion.cpp @@ -1560,10 +1560,9 @@ int intersect_line_triangle(double X[3], double Y[3], double Z[3] , b[1] = P[1] - Y[0]; b[2] = P[2] - Z[0]; - if(!sys3x3_with_tol(mat, b, res, &det)) - { - return 0; - } + if(!sys3x3_with_tol(mat, b, res, &det)){ + return 0; + } // printf("coucou %g %g %g\n",res[0],res[1],res[2]); if(res[0] >= eps_prec && res[0] <= 1.0 - eps_prec && res[1] >= eps_prec && res[1] <= 1.0 - eps_prec && @@ -1595,8 +1594,13 @@ void meshNormalsPointOutOfTheRegion(GRegion *gr) std::list<GFace*> faces = gr->faces(); std::list<GFace*>::iterator it = faces.begin(); - //for (std::list<GFace*>::iterator itb = faces.begin(); itb != faces.end(); itb ++) - // printf("face=%d size =%d\n", (*itb)->tag(), faces.size()); + // perform intersection check in normalized coordinates + SBoundingBox3d bbox = gr->bounds(); + double scaling = norm(SVector3(bbox.max(), bbox.min())); + if(!scaling){ + Msg::Warning("Bad scaling in meshNormalsPointOutOfTheRegion"); + scaling = 1.; + } double rrr[6]; setRand(rrr); @@ -1609,6 +1613,12 @@ void meshNormalsPointOutOfTheRegion(GRegion *gr) double X[3] = {t->getVertex(0)->x(), t->getVertex(1)->x(), t->getVertex(2)->x()}; double Y[3] = {t->getVertex(0)->y(), t->getVertex(1)->y(), t->getVertex(2)->y()}; double Z[3] = {t->getVertex(0)->z(), t->getVertex(1)->z(), t->getVertex(2)->z()}; + for(int i = 0; i < 3; i++){ + X[i] /= scaling; + Y[i] /= scaling; + Z[i] /= scaling; + } + double P[3] = {(X[0] + X[1] + X[2]) / 3., (Y[0] + Y[1] + Y[2]) / 3., (Z[0] + Z[1] + Z[2]) / 3.}; @@ -1635,6 +1645,11 @@ void meshNormalsPointOutOfTheRegion(GRegion *gr) t_b->getVertex(2)->y()}; double Z_b[3] = {t_b->getVertex(0)->z(), t_b->getVertex(1)->z(), t_b->getVertex(2)->z()}; + for(int i = 0; i < 3; i++){ + X_b[i] /= scaling; + Y_b[i] /= scaling; + Z_b[i] /= scaling; + } int inters = intersect_line_triangle(X_b, Y_b, Z_b, P, N, 1.e-9); nb_intersect += inters; }