EgtGeomKernel 1.9a2 :
- migliorie a Zmap per gestione più colori.
This commit is contained in:
+70
-18
@@ -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],
|
||||
|
||||
Reference in New Issue
Block a user