EgtGeomKernel 1.5e3 :

- correzioni a Trimesh
- modifiche varie per gestione punti notevoli
- creazione linee con DirLen e con VersLen
- crezione curve composite da vettori di punti anche con bulge.
This commit is contained in:
Dario Sassi
2014-05-12 08:58:11 +00:00
parent ebd6b8b4a5
commit ef75e1d83a
19 changed files with 1283 additions and 192 deletions
+22 -3
View File
@@ -114,6 +114,22 @@ SurfTriMesh::AddTriangle( const int nIdVert[3])
nIdVert[1] == nIdVert[2] ||
nIdVert[2] == nIdVert[0])
return SVT_DEL ;
// verifico che i tre vertici siano ben definiti
if ( nIdVert[0] < 0 || nIdVert[0] >= int( m_vVert.size()) ||
m_vVert[nIdVert[0]].nIdTria == SVT_DEL ||
nIdVert[1] < 0 || nIdVert[1] >= int( m_vVert.size()) ||
m_vVert[nIdVert[1]].nIdTria == SVT_DEL ||
nIdVert[2] < 0 || nIdVert[2] >= int( m_vVert.size()) ||
m_vVert[nIdVert[2]].nIdTria == SVT_DEL)
return SVT_DEL ;
// verifico che la normale sia ben definita
// calcolo vettori come due lati consecutivi del triangolo
Vector3d vtV1 = m_vVert[nIdVert[1]].ptP - m_vVert[nIdVert[0]].ptP ;
Vector3d vtV2 = m_vVert[nIdVert[2]].ptP - m_vVert[nIdVert[1]].ptP ;
// normale da prodotto vettoriale
Vector3d vtN = vtV1 ^ vtV2 ;
if ( vtN.IsZero())
return SVT_DEL ;
// imposto ricalcolo
m_nStatus = TO_VERIFY ;
m_OGrMgr.Reset() ;
@@ -473,8 +489,8 @@ SurfTriMesh::Validate( void)
m_vVert[ m_vTria[i].nIdVert[j]].nIdTria == SVT_DEL)
m_nStatus = ERR ;
}
// calcolo eventuali normale mancante
if ( m_vTria[i].vtN.IsSmall())
// calcolo eventuale normale mancante
if ( m_nStatus == OK && m_vTria[i].vtN.IsSmall())
CalcTriangleNormal( i) ;
}
}
@@ -1513,10 +1529,13 @@ SurfTriMesh::CalcTriangleNormal( int nT)
if ( m_vTria[nT].nIdVert[0] == SVT_DEL)
return false ;
// controllo validità vertici riferiti dal triangolo
if ( m_vTria[nT].nIdVert[0] >= GetVertexNum() ||
if ( m_vTria[nT].nIdVert[0] < 0 ||
m_vTria[nT].nIdVert[0] >= GetVertexNum() ||
m_vVert[m_vTria[nT].nIdVert[0]].nIdTria == SVT_DEL ||
m_vTria[nT].nIdVert[1] < 0 ||
m_vTria[nT].nIdVert[1] >= GetVertexNum() ||
m_vVert[m_vTria[nT].nIdVert[1]].nIdTria == SVT_DEL ||
m_vTria[nT].nIdVert[2] < 0 ||
m_vTria[nT].nIdVert[2] >= GetVertexNum() ||
m_vVert[m_vTria[nT].nIdVert[2]].nIdTria == SVT_DEL)
return false ;