EgtGeomKernel :
- piccole correzioni a Zmap.
This commit is contained in:
+27
-7
@@ -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]) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user