EgtGeomKernel 1.8h3 :

- migliorie e correzioni su Zmap
- aggiunta a PointGrid3d nuova FindNearest
- migliorie a TriMesh.
This commit is contained in:
Dario Sassi
2017-08-31 07:43:41 +00:00
parent 9e400bee15
commit c8a38f5aae
6 changed files with 251 additions and 196 deletions
+24 -6
View File
@@ -1219,19 +1219,34 @@ SurfTriMesh::PrevIndAroundVertex( int nInd, int nSize, bool bCirc) const
//----------------------------------------------------------------------------
bool
SurfTriMesh::AdjustAdjacencies( void)
SurfTriMesh::AdjustVertices( void)
{
// sistemo i puntatori dai vertici ai triangoli
for ( int i = 0 ; i < GetTriangleSize() ; ++ i) {
// se triangolo non cancellato
if ( m_vTria[i].nIdVert[0] != SVT_DEL) {
for ( int j = 0 ; j < 3 ; ++ j) {
if ( m_vVert[ m_vTria[i].nIdVert[j]].nIdTria == SVT_NULL)
if ( m_vVert[ m_vTria[i].nIdVert[j]].nIdTria == SVT_NULL ||
m_vVert[ m_vTria[i].nIdVert[j]].nIdTria == SVT_DEL)
m_vVert[ m_vTria[i].nIdVert[j]].nIdTria = i ;
}
}
}
// tutti i vertici che non puntano a triangoli vanno ora considerati cancellati
for ( int i = 0 ; i < GetVertexSize() ; ++ i) {
if ( m_vVert[i].nIdTria == SVT_NULL)
m_vVert[i].nIdTria = SVT_DEL ;
}
return true ;
}
//----------------------------------------------------------------------------
bool
SurfTriMesh::AdjustAdjacencies( void)
{
// sistemo le relazioni tra triangoli e vertici
if ( ! AdjustVertices())
return false ;
// sistemo i puntatori tra triangoli
bool bModif ;
do {
@@ -2196,7 +2211,7 @@ SurfTriMesh::DoCompacting( void)
// salvo l'Id nel vettore di reindirizzo
vVId.push_back( nId) ;
}
// c'e un vertice coincidente
// c'è un vertice coincidente
else {
// salvo l'Id alias nel vettore di reindirizzo
vVId.push_back( nAliasId) ;
@@ -2701,8 +2716,10 @@ SurfTriMesh::Cut( const Plane3d& plPlane, bool bSaveOnEq)
// classifico i vertici rispetto al piano
for ( int i = 0 ; i < GetVertexSize() ; ++ i) {
double dDist = DistPointPlane( m_vVert[i].ptP, plPlane) ;
if ( abs( dDist) < EPS_SMALL)
if ( abs( dDist) < 2.1 * EPS_SMALL) {
m_vVert[i].nTemp = 0 ;
m_vVert[i].ptP -= plPlane.vtN * dDist ;
}
else if ( dDist > 0)
m_vVert[i].nTemp = +1 ;
else
@@ -2891,8 +2908,9 @@ SurfTriMesh::Cut( const Plane3d& plPlane, bool bSaveOnEq)
}
// se necessario, aggiorno tutto
if ( bModif)
return DoCompacting() ;
if ( bModif) {
return AdjustVertices() && DoCompacting() ;
}
return true ;
}