EgtGeomKernel :

- migliorie a Zmap per gestione più colori.
This commit is contained in:
Dario Sassi
2018-01-20 12:00:08 +00:00
parent 447c6ab8bc
commit 3c9b68d73e
+30 -57
View File
@@ -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) ;