EgtGeomKernel 1.9e5 :
- correzione calcolo triangoli di superficie Zmap (caso speciale 6 ExtMC).
This commit is contained in:
+70
-47
@@ -943,9 +943,9 @@ VolZmap::ProcessCube( int nVoxI, int nVoxJ, int nVoxK, TRIA3DEXLIST& lstTria, Vo
|
||||
// Costruzione dei triangoli
|
||||
for ( int TriIndex = 0 ; TriIndex < 15 ; TriIndex += 3) {
|
||||
// Indici vertici
|
||||
int i0 = Cases6Plus[nRotCase][TriIndex + 2] ;
|
||||
int i1 = Cases6Plus[nRotCase][TriIndex + 1] ;
|
||||
int i2 = Cases6Plus[nRotCase][TriIndex] ;
|
||||
int i0 = Cases6Plus[nRotCase][0][TriIndex + 2] ;
|
||||
int i1 = Cases6Plus[nRotCase][0][TriIndex + 1] ;
|
||||
int i2 = Cases6Plus[nRotCase][0][TriIndex] ;
|
||||
// Costruzione triangolo
|
||||
Triangle3dEx CurrentTriangle ;
|
||||
CurrentTriangle.Set( VecField[i0].ptPApp, VecField[i1].ptPApp, VecField[i2].ptPApp) ;
|
||||
@@ -1541,51 +1541,74 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, VoxelContainer& vV
|
||||
++ nt ;
|
||||
int nRotCase = nIndexVsIndex6[nt][1] ;
|
||||
|
||||
// Costruzione dei triangoli
|
||||
for ( int TriIndex = 0 ; TriIndex < 15 ; TriIndex += 3) {
|
||||
// Indici vertici
|
||||
int i0 = Cases6Plus[nRotCase][TriIndex + 2] ;
|
||||
int i1 = Cases6Plus[nRotCase][TriIndex + 1] ;
|
||||
int i2 = Cases6Plus[nRotCase][TriIndex] ;
|
||||
// Costruzione triangolo
|
||||
Triangle3dEx CurrentTriangle ;
|
||||
CurrentTriangle.Set( VecField[i0].ptPApp, VecField[i1].ptPApp, VecField[i2].ptPApp) ;
|
||||
CurrentTriangle.Validate( true) ;
|
||||
CurrentTriangle.SetVertexNorm( 0, VecField[i0].vtVec) ;
|
||||
CurrentTriangle.SetVertexNorm( 1, VecField[i1].vtVec) ;
|
||||
CurrentTriangle.SetVertexNorm( 2, VecField[i2].vtVec) ;
|
||||
// Setto il numero di utensile (conta solo positivo, nullo o negativo)
|
||||
int nTool0 = Clamp( VecField[i0].nPropIndex, -1, 1) ;
|
||||
int nTool1 = Clamp( VecField[i1].nPropIndex, -1, 1) ;
|
||||
int nTool2 = Clamp( VecField[i2].nPropIndex, -1, 1) ;
|
||||
if ( nTool0 == nTool1 || nTool0 == nTool2)
|
||||
CurrentTriangle.SetGrade( nTool0) ;
|
||||
else if ( nTool1 == nTool2)
|
||||
CurrentTriangle.SetGrade( nTool1) ;
|
||||
// Valido il triangolo e setto le normali del campo vettoriale ai corrispondenti vertici
|
||||
if ( CurrentTriangle.Validate( true)) {
|
||||
Vector3d vtVertNorm = VecField[i0].vtVec ;
|
||||
if ( CurrentTriangle.GetN() * vtVertNorm > 0.6)
|
||||
CurrentTriangle.SetVertexNorm( 0, vtVertNorm) ;
|
||||
else
|
||||
CurrentTriangle.SetVertexNorm( 0, CurrentTriangle.GetN()) ;
|
||||
vtVertNorm = VecField[i1].vtVec ;
|
||||
if ( CurrentTriangle.GetN() * vtVertNorm > 0.6)
|
||||
CurrentTriangle.SetVertexNorm( 1, vtVertNorm) ;
|
||||
else
|
||||
CurrentTriangle.SetVertexNorm( 1, CurrentTriangle.GetN()) ;
|
||||
vtVertNorm = VecField[i2].vtVec ;
|
||||
if ( CurrentTriangle.GetN() * vtVertNorm > 0.6)
|
||||
CurrentTriangle.SetVertexNorm( 2, vtVertNorm) ;
|
||||
else
|
||||
CurrentTriangle.SetVertexNorm( 2, CurrentTriangle.GetN()) ;
|
||||
//// Costruzione dei triangoli
|
||||
//for ( int TriIndex = 0 ; TriIndex < 15 ; TriIndex += 3) {
|
||||
// // Indici vertici
|
||||
// int i0 = Cases6Plus[nRotCase][TriIndex + 2] ;
|
||||
// int i1 = Cases6Plus[nRotCase][TriIndex + 1] ;
|
||||
// int i2 = Cases6Plus[nRotCase][TriIndex] ;
|
||||
// // Costruzione triangolo
|
||||
// Triangle3dEx CurrentTriangle ;
|
||||
// CurrentTriangle.Set( VecField[i0].ptPApp, VecField[i1].ptPApp, VecField[i2].ptPApp) ;
|
||||
// CurrentTriangle.Validate( true) ;
|
||||
// CurrentTriangle.SetVertexNorm( 0, VecField[i0].vtVec) ;
|
||||
// CurrentTriangle.SetVertexNorm( 1, VecField[i1].vtVec) ;
|
||||
// CurrentTriangle.SetVertexNorm( 2, VecField[i2].vtVec) ;
|
||||
// // Setto il numero di utensile (conta solo positivo, nullo o negativo)
|
||||
// int nTool0 = Clamp( VecField[i0].nPropIndex, -1, 1) ;
|
||||
// int nTool1 = Clamp( VecField[i1].nPropIndex, -1, 1) ;
|
||||
// int nTool2 = Clamp( VecField[i2].nPropIndex, -1, 1) ;
|
||||
// if ( nTool0 == nTool1 || nTool0 == nTool2)
|
||||
// CurrentTriangle.SetGrade( nTool0) ;
|
||||
// else if ( nTool1 == nTool2)
|
||||
// CurrentTriangle.SetGrade( nTool1) ;
|
||||
// // Valido il triangolo e setto le normali del campo vettoriale ai corrispondenti vertici
|
||||
// if ( CurrentTriangle.Validate( true)) {
|
||||
// Vector3d vtVertNorm = VecField[i0].vtVec ;
|
||||
// if ( CurrentTriangle.GetN() * vtVertNorm > 0.6)
|
||||
// CurrentTriangle.SetVertexNorm( 0, vtVertNorm) ;
|
||||
// else
|
||||
// CurrentTriangle.SetVertexNorm( 0, CurrentTriangle.GetN()) ;
|
||||
// vtVertNorm = VecField[i1].vtVec ;
|
||||
// if ( CurrentTriangle.GetN() * vtVertNorm > 0.6)
|
||||
// CurrentTriangle.SetVertexNorm( 1, vtVertNorm) ;
|
||||
// else
|
||||
// CurrentTriangle.SetVertexNorm( 1, CurrentTriangle.GetN()) ;
|
||||
// vtVertNorm = VecField[i2].vtVec ;
|
||||
// if ( CurrentTriangle.GetN() * vtVertNorm > 0.6)
|
||||
// CurrentTriangle.SetVertexNorm( 2, vtVertNorm) ;
|
||||
// else
|
||||
// CurrentTriangle.SetVertexNorm( 2, CurrentTriangle.GetN()) ;
|
||||
// }
|
||||
// // Riporto il triangolo nel sistema in cui è immerso quello dello Zmap
|
||||
// CurrentTriangle.ToGlob( m_MapFrame) ;
|
||||
// // Aggiungo alla lista
|
||||
// lstTria.emplace_back( CurrentTriangle) ;
|
||||
//}
|
||||
//continue ;
|
||||
|
||||
// Aggiorno numero di componenti
|
||||
nComponents = Cases6Plus[nRotCase][1][0] ;
|
||||
// Riaggiorno gli offsets
|
||||
nExtTabOff = nComponents ;
|
||||
nStdTabOff = 0 ;
|
||||
// Modifico le matrici
|
||||
for ( int nC = 1 ; nC <= nComponents ; ++ nC) {
|
||||
// Numero vertici per componenti
|
||||
nVertComp[nC - 1] = Cases6Plus[nRotCase][1][nC] ;
|
||||
// Matrice dei vertici della base del fan
|
||||
for ( int nFanVert = 0 ; nFanVert < nVertComp[nC - 1] ; ++ nFanVert)
|
||||
CompoVert[nC - 1][nFanVert] = VecField[Cases6Plus[nRotCase][1][nFanVert + nExtTabOff + 1]] ;
|
||||
// Matrici dei vertici dei triangoli in assenza di sharp feature
|
||||
for ( int nTriVert = 0 ; nTriVert < 3 * ( nVertComp[nC - 1] - 2) ; nTriVert += 3) {
|
||||
CompoTriVert[nC - 1][nTriVert] = VecField[Cases6Plus[nRotCase][0][nStdTabOff + nTriVert+2]] ;
|
||||
CompoTriVert[nC - 1][nTriVert+1] = VecField[Cases6Plus[nRotCase][0][nStdTabOff + nTriVert+1]] ;
|
||||
CompoTriVert[nC - 1][nTriVert+2] = VecField[Cases6Plus[nRotCase][0][nStdTabOff + nTriVert]] ;
|
||||
}
|
||||
// Riporto il triangolo nel sistema in cui è immerso quello dello Zmap
|
||||
CurrentTriangle.ToGlob( m_MapFrame) ;
|
||||
// Aggiungo alla lista
|
||||
lstTria.emplace_back( CurrentTriangle) ;
|
||||
}
|
||||
continue ;
|
||||
// Aggiorno gli offsets per raggiungere i vertici della componente successiva.
|
||||
nExtTabOff += nVertComp[nC - 1] ;
|
||||
nStdTabOff += 3 * ( nVertComp[nC - 1] - 2) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user