EgtGeomKernel 2.2c2 :

- corretto aggiornamento adiacenze tra triangoli in TriMesh
- aggiunto reset hashgrid in compattazione vettore triangoli di TriMesh
- allargato controllo planarità loops di facet di TriMesh
- corretto controllo complanarità tra triangoli in IntersTriaTria.
This commit is contained in:
Dario Sassi
2020-03-18 12:06:07 +00:00
parent cd0771b6a9
commit 6e37c72698
4 changed files with 20 additions and 9 deletions
+18 -7
View File
@@ -553,7 +553,7 @@ SurfTriMesh::GetAllTriaAroundVertex( int nV, INTVECTOR& vT, bool& bCirc) const
// verifico esistenza del vertice
if ( nV < 0 || nV >= GetVertexSize() || m_vVert[nV].nIdTria == SVT_DEL)
return false ;
return 0 ;
// recupero il triangolo puntato dal vertice
int nT = m_vVert[nV].nIdTria ;
@@ -1329,6 +1329,17 @@ SurfTriMesh::AdjustAdjacencies( void)
// sistemo le relazioni tra triangoli e vertici
if ( ! AdjustVertices())
return false ;
// matrice di incidenza vertici-triangoli
INTMATRIX mVertTria( GetVertexSize()) ;
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) {
int nVert = m_vTria[i].nIdVert[j] ;
mVertTria[nVert].emplace_back( i) ;
}
}
}
// sistemo i puntatori tra triangoli
bool bModif ;
do {
@@ -1345,12 +1356,10 @@ SurfTriMesh::AdjustAdjacencies( void)
// indice altro vertice in altro triangolo
int k ;
int nN ;
bool bCirc ;
INTVECTOR vT ;
// triangoli con il vertice all'inizio dello half-edge
nN = GetAllTriaAroundVertex( nVi, vT, bCirc) ;
nN = int( mVertTria[nVi].size()) ;
for ( int l = 0 ; l < nN ; ++ l) {
int nTi = vT[l] ;
int nTi = mVertTria[nVi][l] ;
if ( nTi != i) {
// se altro vertice in comune, aggiusto le adiacenze dei due triangoli
if ( FindVertexInTria( nVf, nTi, k)) {
@@ -1367,9 +1376,9 @@ SurfTriMesh::AdjustAdjacencies( void)
}
}
// triangoli con il vertice alla fine dello half-edge
nN = GetAllTriaAroundVertex( nVf, vT, bCirc) ;
nN = int( mVertTria[nVf].size()) ;
for ( int l = 0 ; l < nN ; ++ l) {
int nTf = vT[l] ;
int nTf = mVertTria[nVf][l] ;
if ( nTf != i) {
// se altro vertice in comune, aggiusto le adiacenze dei due triangoli
if ( FindVertexInTria( nVi, nTf, k)) {
@@ -1619,6 +1628,8 @@ SurfTriMesh::PackTriangles( void)
// se non c'è stata compattazione, esco
if ( nFirstFree == SVT_NULL)
return true ;
// Invalido HashGrid
ResetHashGrids3d() ;
// lunghezza vettore indici triangoli
int nTIdSize = int( vTId.size()) ;
// aggiorno gli indici ai triangoli dai vertici