EgtGeomKernel 1.9a2 :

- migliorie a Zmap per gestione più colori.
This commit is contained in:
Dario Sassi
2018-01-19 08:31:52 +00:00
parent f50fbdf0b5
commit 447c6ab8bc
2 changed files with 70 additions and 18 deletions
+70 -18
View File
@@ -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],