From 447c6ab8bcbba44176e1afe2ff049e163e4cfbf8 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Fri, 19 Jan 2018 08:31:52 +0000 Subject: [PATCH] =?UTF-8?q?EgtGeomKernel=201.9a2=20:=20-=20migliorie=20a?= =?UTF-8?q?=20Zmap=20per=20gestione=20pi=C3=B9=20colori.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes VolZmapGraphics.cpp | 88 +++++++++++++++++++++++++++++++++++--------- 2 files changed, 70 insertions(+), 18 deletions(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index cfa5bef94dc87ac2050a2a434e2b57df468493fc..7afc5e92a02ee3e79843c2a7c10316790e7727dc 100644 GIT binary patch delta 94 zcmdlNy)SyhFE&P_&A-_cnHh~HD{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-Vf-5U delta 94 zcmdlNy)SyhFE&QQ&A-_cnHdcyD{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-U|t&X diff --git a/VolZmapGraphics.cpp b/VolZmapGraphics.cpp index 79723d2..d592aad 100644 --- a/VolZmapGraphics.cpp +++ b/VolZmapGraphics.cpp @@ -2106,12 +2106,14 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DLIST& lstTria, TriHolder& triHold) // Il triangolo è pronto Triangle3d CurrentTriangle ; CurrentTriangle.Set( ptSol, CompoVert[nCompCount - 1][nj].ptInt, CompoVert[nCompCount - 1][ni].ptInt) ; - if ( CompoVert[nCompCount - 1][nj].nToolFlag == CompoVert[nCompCount - 1][ni].nToolFlag) - CurrentTriangle.SetFlag( CompoVert[nCompCount - 1][nj].nToolFlag) ; - else if ( CompoVert[nCompCount - 1][nj].nToolFlag == 0) - CurrentTriangle.SetFlag( CompoVert[nCompCount - 1][ni].nToolFlag) ; - else if ( CompoVert[nCompCount - 1][ni].nToolFlag == 0) - CurrentTriangle.SetFlag( CompoVert[nCompCount - 1][nj].nToolFlag) ; + if ( CompoVert[nCompCount - 1][nj].nToolFlag < 0 || + CompoVert[nCompCount - 1][ni].nToolFlag < 0) + CurrentTriangle.SetFlag( - 1) ; + else if ( CompoVert[nCompCount - 1][nj].nToolFlag > 0 || + CompoVert[nCompCount - 1][ni].nToolFlag > 0) + CurrentTriangle.SetFlag( 1) ; + else + CurrentTriangle.SetFlag( 0) ; CurrentTriangle.Validate( true) ; // Aggiungo triangolo al vettore temporaneo triContainer.emplace_back( CurrentTriangle) ; @@ -2196,12 +2198,14 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DLIST& lstTria, TriHolder& triHold) // Il triangolo è pronto Triangle3d CurrentTriangle ; CurrentTriangle.Set( ptSol, CompoVert[nCompCount - 1][nj].ptInt, CompoVert[nCompCount - 1][ni].ptInt) ; - if ( CompoVert[nCompCount - 1][nj].nToolFlag == CompoVert[nCompCount - 1][ni].nToolFlag) - CurrentTriangle.SetFlag( CompoVert[nCompCount - 1][nj].nToolFlag) ; - else if ( CompoVert[nCompCount - 1][nj].nToolFlag == 0) - CurrentTriangle.SetFlag( CompoVert[nCompCount - 1][ni].nToolFlag) ; - else if ( CompoVert[nCompCount - 1][ni].nToolFlag == 0) - CurrentTriangle.SetFlag( CompoVert[nCompCount - 1][nj].nToolFlag) ; + if ( CompoVert[nCompCount - 1][nj].nToolFlag < 0 || + CompoVert[nCompCount - 1][ni].nToolFlag < 0) + CurrentTriangle.SetFlag( - 1) ; + else if ( CompoVert[nCompCount - 1][nj].nToolFlag > 0 || + CompoVert[nCompCount - 1][ni].nToolFlag > 0) + CurrentTriangle.SetFlag( 1) ; + else + CurrentTriangle.SetFlag( 0) ; CurrentTriangle.Validate( true) ; // Aggiungo triangolo al vettore temporaneo triContainer.emplace_back( CurrentTriangle) ; @@ -2275,12 +2279,14 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DLIST& lstTria, TriHolder& triHold) // Il triangolo è pronto Triangle3d CurrentTriangle ; CurrentTriangle.Set( ptSol, CompoVert[nCompCount - 1][nj].ptInt, CompoVert[nCompCount - 1][ni].ptInt) ; - if ( CompoVert[nCompCount - 1][nj].nToolFlag == CompoVert[nCompCount - 1][ni].nToolFlag) - CurrentTriangle.SetFlag( CompoVert[nCompCount - 1][nj].nToolFlag) ; - else if ( CompoVert[nCompCount - 1][nj].nToolFlag == 0) - CurrentTriangle.SetFlag( CompoVert[nCompCount - 1][ni].nToolFlag) ; - else if ( CompoVert[nCompCount - 1][ni].nToolFlag == 0) - CurrentTriangle.SetFlag( CompoVert[nCompCount - 1][nj].nToolFlag) ; + if ( CompoVert[nCompCount - 1][nj].nToolFlag < 0 || + CompoVert[nCompCount - 1][ni].nToolFlag < 0) + CurrentTriangle.SetFlag( - 1) ; + else if ( CompoVert[nCompCount - 1][nj].nToolFlag > 0 || + CompoVert[nCompCount - 1][ni].nToolFlag > 0) + CurrentTriangle.SetFlag( 1) ; + else + CurrentTriangle.SetFlag( 0) ; CurrentTriangle.Validate( true) ; // Aggiungo triangolo al vettore temporaneo triContainer.emplace_back( CurrentTriangle) ; @@ -2697,6 +2703,52 @@ VolZmap::FlipEdgesII( TriHolder& TriHold, bool bGraph) const } // Se non vi è inversione eseguo il flipping if ( ! bInv) { + // Triangoli precedente e successivo rispetto a quelli sottoposti a flipping + int nPrev1 = ( nTri1 == 0 ? nTriNum1 - 1 : nTri1 - 1) ; + int nNext1 = ( nTri1 == nTriNum1 - 1 ? 0 : nTri1 + 1) ; + int nPrev2 = ( nTri2 == 0 ? nTriNum2 - 1 : nTri2 - 1) ; + int nNext2 = ( nTri2 == nTriNum2 - 1 ? 0 : nTri2 + 1) ; + // Vertice condiviso fra nTri1 e quello del suo fan + Point3d ptFan1 = TriHold[n1].vCompoTria[nCompo1][nTri1].GetP( SharedIndex[2]) ; + Point3d ptFan2 = TriHold[n2].vCompoTria[nCompo2][nTri2].GetP( SharedIndex[1]) ; + bool bToolFound1 = false ; + bool bToolFound2 = false ; + for ( int v = 0 ; v < 6 ; ++ v) { + // Vertici dei triangoli adiacenti + Point3d ptFanPrev1 = TriHold[n1].vCompoTria[nCompo1][nPrev1].GetP( v % 3) ; + Point3d ptFanNext1 = TriHold[n1].vCompoTria[nCompo1][nNext1].GetP( v % 3) ; + Point3d ptFanPrev2 = TriHold[n2].vCompoTria[nCompo2][nPrev2].GetP( v % 3) ; + Point3d ptFanNext2 = TriHold[n2].vCompoTria[nCompo2][nNext2].GetP( v % 3) ; + // + if ( v < 3) { + if ( AreSamePointApprox( ptFan1, ptFanPrev1)) { + int nToolPrev1 = TriHold[n1].vCompoTria[nCompo1][nPrev1].GetFlag() ; + TriHold[n1].vCompoTria[nCompo1][nTri1].SetFlag( nToolPrev1) ; + bToolFound1 = true ; + } + if ( AreSamePointApprox( ptFan2, ptFanPrev2)) { + int nToolPrev2 = TriHold[n2].vCompoTria[nCompo2][nPrev2].GetFlag() ; + TriHold[n2].vCompoTria[nCompo2][nTri2].SetFlag( nToolPrev2) ; + bToolFound2 = true ; + } + if ( bToolFound1 && bToolFound2) + break ; + } + else { + if ( AreSamePointApprox( ptFan1, ptFanNext1)) { + int nToolNext1 = TriHold[n1].vCompoTria[nCompo1][nNext1].GetFlag() ; + TriHold[n1].vCompoTria[nCompo1][nTri1].SetFlag( nToolNext1) ; + bToolFound1 = true ; + } + if ( AreSamePointApprox( ptFan2, ptFanNext2)) { + int nToolNext2 = TriHold[n2].vCompoTria[nCompo2][nNext2].GetFlag() ; + TriHold[n2].vCompoTria[nCompo2][nTri2].SetFlag( nToolNext2) ; + bToolFound2 = true ; + } + if ( bToolFound1 && bToolFound2) + break ; + } + } TriHold[n1].vCompoTria[nCompo1][nTri1].SetP( SharedIndex[0], TriHold[n2].ptCompoVert[nCompo2]) ; TriHold[n2].vCompoTria[nCompo2][nTri2].SetP( SharedIndex[3],