diff --git a/VolTriZmapGraphics.cpp b/VolTriZmapGraphics.cpp index 39ac2b0..a2e95a4 100644 --- a/VolTriZmapGraphics.cpp +++ b/VolTriZmapGraphics.cpp @@ -712,7 +712,7 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DLIST& lstTria, TriHolder& triHold) // Ciclo su tutti i voxel dello Zmap for ( int i = nLimits[0] ; i < nLimits[1] ; ++ i) { for ( int j = nLimits[2] ; j < nLimits[3] ; ++ j) { - for ( int k = nLimits[4] ; k < nLimits[5] ; ++ k) { + for ( int k = nLimits[4] ; k < nLimits[5] ; ++ k) { // Riconoscimento dei voxel di frontiera int nVoxIndexes[3] = { i, j, k} ; @@ -1720,6 +1720,10 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DLIST& lstTria, TriHolder& triHold) // vettore nello spazio genenrato dai due non appartenenti alla coppia Vector3d vtAv23 = 0.5 * ( CompoVert[nCompCount - 1][nCoupleIndex[2]].vtNorm + CompoVert[nCompCount - 1][nCoupleIndex[3]].vtNorm) ; + + vtAv01.Normalize() ; + vtAv23.Normalize() ; + double dDAvAV = vtAv01 * vtAv23 ; // se angolo grande si esegue std MC if ( abs( vtAv01 * vtAv23) < EPS_SMALL) { for ( int ni = 0 ; ni < 4 ; ++ ni) { @@ -1731,6 +1735,22 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DLIST& lstTria, TriHolder& triHold) } } } + else { + + double dD23 = CompoVert[nCompCount - 1][nCoupleIndex[2]].vtNorm * + CompoVert[nCompCount - 1][nCoupleIndex[3]].vtNorm ; + if ( dD23 > 0.7 && dDAvAV < 0.7) { + + for ( int ni = 0 ; ni < 4 ; ++ ni) { + int nj = ni == 3 ? 0 : ni + 1 ; + if ( triContainer[ni].GetN() * CompoVert[nCompCount - 1][ni].vtNorm < - 0.9 && + triContainer[ni].GetN() * CompoVert[nCompCount - 1][nj].vtNorm < - 0.9) { + bDangerInversion = true ; + break ; + } + } + } + } } } }