EgtGeomKernel :

- piccole correzioni a Zmap.
This commit is contained in:
Dario Sassi
2018-01-24 18:53:17 +00:00
parent 3babdc7cd1
commit 11eba1ffb3
+27 -7
View File
@@ -1660,7 +1660,7 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
for ( int i = nLimits[0] ; i < nLimits[1] ; ++ i) {
for ( int j = nLimits[2] ; j < nLimits[3] ; ++ j) {
for ( int k = nLimits[4] ; k < nLimits[5] ; ++ k) {
// Classificazione dei vertici: interni o esterni al materiale
int nIndex = CalcIndex( i, j, k) ;
@@ -2454,7 +2454,8 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
}
// ExtMC non confermato, si passa a MC
else {
else {
std::vector<Triangle3dEx> vTria ;
// Costruzione dei triangoli
for ( int TriIndex = 0; TriIndex < ( nVertComp[nCompCount - 1] - 2) * 3 ; TriIndex += 3) {
// Il triangolo è pronto
@@ -2465,16 +2466,21 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
// Setto il numero di utensile
int nTool0 = CompoTriVert[nCompCount - 1][TriIndex].nToolFlag ;
int nTool1 = CompoTriVert[nCompCount - 1][TriIndex+1].nToolFlag ;
int nTool2 = CompoTriVert[nCompCount - 1][TriIndex+2].nToolFlag ;
int nTool2 = CompoTriVert[nCompCount - 1][TriIndex+2].nToolFlag ;
// Quoziento gli indici
nTool0 = Clamp( nTool0, -1, 1) ;
nTool1 = Clamp( nTool1, -1, 1) ;
nTool2 = Clamp( nTool2, -1, 1) ;
// Setto il numero dei colori
if ( nTool0 == nTool1 || nTool0 == nTool2)
CurrentTriangle.SetGrade( nTool0) ;
else if ( nTool1 == nTool2)
CurrentTriangle.SetGrade( nTool1) ;
// Setto le normali del campo vettoriali ai relativi vertici se non siamo in
// caso di triangoli ribaltati, altrimenti chiamiamo solo Validate( true)
if ( CurrentTriangle.GetVertexNorm( 0).SqLen() > EPS_SMALL * EPS_SMALL &&
CurrentTriangle.GetVertexNorm( 1).SqLen() > EPS_SMALL * EPS_SMALL &&
CurrentTriangle.GetVertexNorm( 2).SqLen() > EPS_SMALL * EPS_SMALL) {
if ( ! CurrentTriangle.GetVertexNorm( 0).IsSmall() &&
! CurrentTriangle.GetVertexNorm( 1).IsSmall() &&
! CurrentTriangle.GetVertexNorm( 2).IsSmall()) {
CurrentTriangle.SetVertexNorm( 0, CompoTriVert[nCompCount - 1][TriIndex].vtNorm) ;
CurrentTriangle.SetVertexNorm( 1, CompoTriVert[nCompCount - 1][TriIndex+1].vtNorm) ;
CurrentTriangle.SetVertexNorm( 2, CompoTriVert[nCompCount - 1][TriIndex+2].vtNorm) ;
@@ -2484,8 +2490,22 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
// Riporto le coordinate nel sistema in cui è immerso lo Zmap
CurrentTriangle.ToGlob( m_MapFrame) ;
// Aggiungo alla lista
lstTria.emplace_back( CurrentTriangle) ;
vTria.emplace_back( CurrentTriangle) ;
}
// Controllo i colori di configurazioni 2 e 8
if ( ( nAllConfig[nIndex] == 2 || nAllConfig[nIndex] == 8) &&
vTria[0].GetN() * vTria[1].GetN() > 0.8) {
if ( vTria[0].GetGrade() < 0 || vTria[1].GetGrade() < 0) {
vTria[0].SetGrade( -1) ;
vTria[1].SetGrade( -1) ;
}
else if ( vTria[0].GetGrade() > 0 || vTria[1].GetGrade() > 0) {
vTria[0].SetGrade( 1) ;
vTria[1].SetGrade( 1) ;
}
}
for ( int nT = 0 ; nT < int( vTria.size()) ; ++ nT)
lstTria.emplace_back( vTria[nT]) ;
}
}