EgtGeomKernel :
- migliorie a Zmap per gestione più colori.
This commit is contained in:
+30
-57
@@ -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) ;
|
||||
|
||||
Reference in New Issue
Block a user