From 3c9b68d73e869572491179f76d1ab7bcac09bc80 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Sat, 20 Jan 2018 12:00:08 +0000 Subject: [PATCH] =?UTF-8?q?EgtGeomKernel=20:=20-=20migliorie=20a=20Zmap=20?= =?UTF-8?q?per=20gestione=20pi=C3=B9=20colori.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VolZmapGraphics.cpp | 87 ++++++++++++++++----------------------------- 1 file changed, 30 insertions(+), 57 deletions(-) diff --git a/VolZmapGraphics.cpp b/VolZmapGraphics.cpp index d592aad..4fa5057 100644 --- a/VolZmapGraphics.cpp +++ b/VolZmapGraphics.cpp @@ -2106,11 +2106,13 @@ 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 < 0 || - CompoVert[nCompCount - 1][ni].nToolFlag < 0) + CurrentTriangle.SetAttrib( 1, CompoVert[nCompCount - 1][nj].nToolFlag) ; + CurrentTriangle.SetAttrib( 2, CompoVert[nCompCount - 1][ni].nToolFlag) ; + if ( CurrentTriangle.GetAttrib( 1) < 0 || + CurrentTriangle.GetAttrib( 2) < 0) CurrentTriangle.SetFlag( - 1) ; - else if ( CompoVert[nCompCount - 1][nj].nToolFlag > 0 || - CompoVert[nCompCount - 1][ni].nToolFlag > 0) + else if ( CurrentTriangle.GetAttrib( 1) > 0 || + CurrentTriangle.GetAttrib( 2) > 0) CurrentTriangle.SetFlag( 1) ; else CurrentTriangle.SetFlag( 0) ; @@ -2198,11 +2200,13 @@ 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 < 0 || - CompoVert[nCompCount - 1][ni].nToolFlag < 0) + CurrentTriangle.SetAttrib( 1, CompoVert[nCompCount - 1][nj].nToolFlag) ; + CurrentTriangle.SetAttrib( 2, CompoVert[nCompCount - 1][ni].nToolFlag) ; + if ( CurrentTriangle.GetAttrib( 1) < 0 || + CurrentTriangle.GetAttrib( 2) < 0) CurrentTriangle.SetFlag( - 1) ; - else if ( CompoVert[nCompCount - 1][nj].nToolFlag > 0 || - CompoVert[nCompCount - 1][ni].nToolFlag > 0) + else if ( CurrentTriangle.GetAttrib( 1) > 0 || + CurrentTriangle.GetAttrib( 2) > 0) CurrentTriangle.SetFlag( 1) ; else CurrentTriangle.SetFlag( 0) ; @@ -2279,11 +2283,13 @@ 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 < 0 || - CompoVert[nCompCount - 1][ni].nToolFlag < 0) + CurrentTriangle.SetAttrib( 1, CompoVert[nCompCount - 1][nj].nToolFlag) ; + CurrentTriangle.SetAttrib( 2, CompoVert[nCompCount - 1][ni].nToolFlag) ; + if ( CurrentTriangle.GetAttrib( 1) < 0 || + CurrentTriangle.GetAttrib( 2) < 0) CurrentTriangle.SetFlag( - 1) ; - else if ( CompoVert[nCompCount - 1][nj].nToolFlag > 0 || - CompoVert[nCompCount - 1][ni].nToolFlag > 0) + else if ( CurrentTriangle.GetAttrib( 1) > 0 || + CurrentTriangle.GetAttrib( 2) > 0) CurrentTriangle.SetFlag( 1) ; else CurrentTriangle.SetFlag( 0) ; @@ -2703,56 +2709,17 @@ 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 ; - } - } + int nCol1 = TriHold[n1].vCompoTria[nCompo1][nTri1].GetAttrib( SharedIndex[2]) ; + int nCol2 = TriHold[n2].vCompoTria[nCompo2][nTri2].GetAttrib( SharedIndex[1]) ; + + // Modifico i punti e gli indici TriHold[n1].vCompoTria[nCompo1][nTri1].SetP( SharedIndex[0], TriHold[n2].ptCompoVert[nCompo2]) ; TriHold[n2].vCompoTria[nCompo2][nTri2].SetP( SharedIndex[3], TriHold[n1].ptCompoVert[nCompo1]) ; + TriHold[n1].vCompoTria[nCompo1][nTri1].SetFlag( nCol1) ; + TriHold[n2].vCompoTria[nCompo2][nTri2].SetFlag( nCol2) ; TriHold[n1].vCompoTria[nCompo1][nTri1].Validate( true) ; TriHold[n2].vCompoTria[nCompo2][nTri2].Validate( true) ; @@ -2902,10 +2869,16 @@ VolZmap::FlipEdgesBB( TriaMatrix& InterTria) const } // Se non vi è inversione eseguo il flipping if ( ! bInv) { + // Vertice condiviso fra nTri1 e quello del suo fan + int nColF = InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].GetAttrib( SharedIndex[2]) ; + int nColL = InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].GetAttrib( SharedIndex[1]) ; + // modifico punti e colori InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].SetP( SharedIndex[0], InterTria[tLB][tVLB].ptCompoVert[tCmpL]) ; InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].SetP( SharedIndex[3], InterTria[tFB][tVFB].ptCompoVert[tCmpF]) ; + InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].SetFlag( nColF) ; + InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].SetFlag( nColL) ; InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].Validate( true) ; InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].Validate( true) ;