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:
+22
-3
@@ -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 ;
|
||||
|
||||
Reference in New Issue
Block a user