EgtGeomKernel 1.9a4 :

- piccole migliorie a Zmap.
This commit is contained in:
Dario Sassi
2018-01-30 07:07:02 +00:00
parent f6bb62dc7e
commit d90391c9dc
4 changed files with 33 additions and 25 deletions
+26 -18
View File
@@ -699,7 +699,7 @@ VolZmap::GetTriangles( bool bAllBlocks, INTVECTOR& nModifiedBlocks, TRIA3DEXLIST
for ( int nV = 0 ; nV < 3 ; ++ nV) {
Vector3d vtNV = VecTriHold[t][t1].vCompoTria[t2][t3].GetVertexNorm( nV) ;
bool bNormV = vtNV.IsNormalized() ;
if ( bNormN && bNormV && vtN * vtNV < 0.87)
if ( bNormN && bNormV && vtN * vtNV < 0.7)
VecTriHold[t][t1].vCompoTria[t2][t3].SetVertexNorm( nV, vtN) ;
}
// aggiungo triangolo alla lista
@@ -726,7 +726,7 @@ VolZmap::GetTriangles( bool bAllBlocks, INTVECTOR& nModifiedBlocks, TRIA3DEXLIST
for ( int nV = 0 ; nV < 3 ; ++ nV) {
Vector3d vtNV = InterBlockTria[t][t1].vCompoTria[t2][t3].GetVertexNorm( nV) ;
bool bNormV = vtNV.IsNormalized() ;
if ( bNormN && bNormV && vtN * vtNV < 0.87)
if ( bNormN && bNormV && vtN * vtNV < 0.7)
InterBlockTria[t][t1].vCompoTria[t2][t3].SetVertexNorm( nV, vtN) ;
}
// aggiungo triangolo alla lista
@@ -1984,8 +1984,8 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
for ( int ni = 0 ; ni < nVertComp[nCompCount - 1] ; ++ ni) {
int nj = ( ni + 1) % nVertComp[nCompCount - 1] ;
if ( vtNorm[ni] * vtNorm[nj] > 0.92) {
Vector3d vtNI = ( 0.66 * vtNorm[ni] + 0.33 * vtNorm[nj]) ;
Vector3d vtNJ = ( 0.33 * vtNorm[ni] + 0.66 * vtNorm[nj]) ;
Vector3d vtNI = ( 0.6 * vtNorm[ni] + 0.4 * vtNorm[nj]) ;
Vector3d vtNJ = ( 0.4 * vtNorm[ni] + 0.6 * vtNorm[nj]) ;
vtNorm[ni] = vtNI ;
vtNorm[ni].Normalize() ;
vtNorm[nj] = vtNJ ;
@@ -2396,14 +2396,10 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
CurrentTriangle.Set( CompoTriVert[nCompCount - 1][TriIndex].ptInt,
CompoTriVert[nCompCount - 1][TriIndex+1].ptInt,
CompoTriVert[nCompCount - 1][TriIndex+2].ptInt) ;
// 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 ;
// Quoziento gli indici
nTool0 = Clamp( nTool0, -1, 1) ;
nTool1 = Clamp( nTool1, -1, 1) ;
nTool2 = Clamp( nTool2, -1, 1) ;
// Setto il numero di utensile (conta solo positivo, nullo o negativo)
int nTool0 = Clamp( CompoTriVert[nCompCount - 1][TriIndex].nToolFlag, -1, 1) ;
int nTool1 = Clamp( CompoTriVert[nCompCount - 1][TriIndex+1].nToolFlag, -1, 1) ;
int nTool2 = Clamp( CompoTriVert[nCompCount - 1][TriIndex+2].nToolFlag, -1, 1) ;
// Setto il numero dei colori
if ( nTool0 == nTool1 || nTool0 == nTool2)
CurrentTriangle.SetGrade( nTool0) ;
@@ -2413,8 +2409,7 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
if ( CurrentTriangle.Validate( true)) {
for ( int nV = 0 ; nV < 3 ; ++ nV) {
const Vector3d& vtVertNorm = CompoTriVert[nCompCount - 1][TriIndex+nV].vtNorm ;
// si può inserire controllo su normalizzazione di vtVertNorm
if ( CurrentTriangle.GetN() * vtVertNorm > 0.87)
if ( CurrentTriangle.GetN() * vtVertNorm > 0.5)
CurrentTriangle.SetVertexNorm( nV, vtVertNorm) ;
else
CurrentTriangle.SetVertexNorm( nV, CurrentTriangle.GetN()) ;
@@ -2444,6 +2439,7 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
// Standard MC
else {
vector<Triangle3dEx> vTria ;
// Costruzione dei triangoli
for ( int TriIndex = 0; TriIndex < ( nVertComp[nCompCount - 1] - 2) * 3 ; TriIndex += 3) {
// Il triangolo è pronto
@@ -2463,20 +2459,32 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
if ( CurrentTriangle.Validate( true)) {
for ( int nV = 0 ; nV < 3 ; ++ nV) {
const Vector3d& vtVertNorm = CompoTriVert[nCompCount - 1][TriIndex+nV].vtNorm ;
if ( CurrentTriangle.GetN() * vtVertNorm > 0.87)
if ( CurrentTriangle.GetN() * vtVertNorm > 0.5)
CurrentTriangle.SetVertexNorm( nV, vtVertNorm) ;
else
CurrentTriangle.SetVertexNorm( nV, CurrentTriangle.GetN()) ;
}
}
else
int qqq = 0 ;
// si può inserire controllo sui colori per i casi 2 e 8 come per ext non confermato
// 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]) ;
}
}
}