From 11eba1ffb39d67dac5d4d35ba687ed0fc9d1a29a Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Wed, 24 Jan 2018 18:53:17 +0000 Subject: [PATCH] EgtGeomKernel : - piccole correzioni a Zmap. --- VolZmapGraphics.cpp | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/VolZmapGraphics.cpp b/VolZmapGraphics.cpp index 42d43b5..57cec72 100644 --- a/VolZmapGraphics.cpp +++ b/VolZmapGraphics.cpp @@ -1660,7 +1660,7 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold 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) { - + // Classificazione dei vertici: interni o esterni al materiale int nIndex = CalcIndex( i, j, k) ; @@ -2454,7 +2454,8 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold } // ExtMC non confermato, si passa a MC - else { + else { + std::vector vTria ; // Costruzione dei triangoli for ( int TriIndex = 0; TriIndex < ( nVertComp[nCompCount - 1] - 2) * 3 ; TriIndex += 3) { // Il triangolo è pronto @@ -2465,16 +2466,21 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold // Setto il numero di utensile int nTool0 = CompoTriVert[nCompCount - 1][TriIndex].nToolFlag ; int nTool1 = CompoTriVert[nCompCount - 1][TriIndex+1].nToolFlag ; - int nTool2 = CompoTriVert[nCompCount - 1][TriIndex+2].nToolFlag ; + int nTool2 = CompoTriVert[nCompCount - 1][TriIndex+2].nToolFlag ; + // Quoziento gli indici + nTool0 = Clamp( nTool0, -1, 1) ; + nTool1 = Clamp( nTool1, -1, 1) ; + nTool2 = Clamp( nTool2, -1, 1) ; + // Setto il numero dei colori if ( nTool0 == nTool1 || nTool0 == nTool2) CurrentTriangle.SetGrade( nTool0) ; else if ( nTool1 == nTool2) CurrentTriangle.SetGrade( nTool1) ; // Setto le normali del campo vettoriali ai relativi vertici se non siamo in // caso di triangoli ribaltati, altrimenti chiamiamo solo Validate( true) - if ( CurrentTriangle.GetVertexNorm( 0).SqLen() > EPS_SMALL * EPS_SMALL && - CurrentTriangle.GetVertexNorm( 1).SqLen() > EPS_SMALL * EPS_SMALL && - CurrentTriangle.GetVertexNorm( 2).SqLen() > EPS_SMALL * EPS_SMALL) { + if ( ! CurrentTriangle.GetVertexNorm( 0).IsSmall() && + ! CurrentTriangle.GetVertexNorm( 1).IsSmall() && + ! CurrentTriangle.GetVertexNorm( 2).IsSmall()) { CurrentTriangle.SetVertexNorm( 0, CompoTriVert[nCompCount - 1][TriIndex].vtNorm) ; CurrentTriangle.SetVertexNorm( 1, CompoTriVert[nCompCount - 1][TriIndex+1].vtNorm) ; CurrentTriangle.SetVertexNorm( 2, CompoTriVert[nCompCount - 1][TriIndex+2].vtNorm) ; @@ -2484,8 +2490,22 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold // Riporto le coordinate nel sistema in cui è immerso lo Zmap CurrentTriangle.ToGlob( m_MapFrame) ; // Aggiungo alla lista - lstTria.emplace_back( CurrentTriangle) ; + vTria.emplace_back( CurrentTriangle) ; } + // Controllo i colori di configurazioni 2 e 8 + if ( ( nAllConfig[nIndex] == 2 || nAllConfig[nIndex] == 8) && + vTria[0].GetN() * vTria[1].GetN() > 0.8) { + if ( vTria[0].GetGrade() < 0 || vTria[1].GetGrade() < 0) { + vTria[0].SetGrade( -1) ; + vTria[1].SetGrade( -1) ; + } + else if ( vTria[0].GetGrade() > 0 || vTria[1].GetGrade() > 0) { + vTria[0].SetGrade( 1) ; + vTria[1].SetGrade( 1) ; + } + } + for ( int nT = 0 ; nT < int( vTria.size()) ; ++ nT) + lstTria.emplace_back( vTria[nT]) ; } }