EgtGeomKernel 1.8h3 :
- migliorie e correzioni su Zmap - aggiunta a PointGrid3d nuova FindNearest - migliorie a TriMesh.
This commit is contained in:
+24
-6
@@ -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 ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user