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