EgtGeomKernel 2.5g1 :
- aggiunta funzione GetSurfTmNearestVertex - a SurfTriMesh aggiunti metodi MoveVertex e GetAllVertInFacet - corretta DoCompacting di SurfTriMesh aggiungendo verifica del calcolo della normale dei triangoli.
This commit is contained in:
+37
-16
@@ -121,6 +121,27 @@ SurfTriMesh::AddVertex( const Point3d& ptVert)
|
||||
return int( m_vVert.size() - 1) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfTriMesh::MoveVertex( int nInd, const Point3d& ptNewVert)
|
||||
{
|
||||
// verifico validità indice
|
||||
if ( nInd < 0 || nInd >= int( m_vVert.size()))
|
||||
return false ;
|
||||
// verifico non sia già cancellato
|
||||
if ( m_vVert[nInd].nIdTria == SVT_DEL)
|
||||
return false ;
|
||||
// sposto il vertice
|
||||
m_vVert[nInd].ptP = ptNewVert ;
|
||||
// imposto ricalcolo
|
||||
m_nStatus = TO_VERIFY ;
|
||||
m_nParts = - 1 ;
|
||||
m_OGrMgr.Reset() ;
|
||||
ResetHashGrids3d() ;
|
||||
// per aggiornare completamente la superficie chiamare DoCompacting
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfTriMesh::SetVertex( int nInd, const StmVert& vV)
|
||||
@@ -758,23 +779,23 @@ SurfTriMesh::GetTriangleAdjacencies( int nId, int nIdAdjTriaId[3]) const
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfTriMesh::GetTriangleFlag( int nId, int& nFlag) const
|
||||
SurfTriMesh::GetTFlag( int nTriaId, int& nTFlag) const
|
||||
{
|
||||
// verifico esistenza del triangolo
|
||||
if ( nId < 0 || nId >= GetTriangleSize() || m_vTria[nId].nIdVert[0] == SVT_DEL)
|
||||
if ( nTriaId < 0 || nTriaId >= GetTriangleSize() || m_vTria[nTriaId].nIdVert[0] == SVT_DEL)
|
||||
return false ;
|
||||
nFlag = m_vTria[nId].nTFlag ;
|
||||
nTFlag = m_vTria[nTriaId].nTFlag ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfTriMesh::GetTriangleTempInt( int nId, int& nTempInt) const
|
||||
SurfTriMesh::GetTempInt( int nTriaId, int& nTempInt) const
|
||||
{
|
||||
// verifico esistenza del triangolo
|
||||
if ( nId < 0 || nId >= GetTriangleSize() || m_vTria[nId].nIdVert[0] == SVT_DEL)
|
||||
if ( nTriaId < 0 || nTriaId >= GetTriangleSize() || m_vTria[nTriaId].nIdVert[0] == SVT_DEL)
|
||||
return false ;
|
||||
nTempInt = m_vTria[nId].nTemp ;
|
||||
nTempInt = m_vTria[nTriaId].nTemp ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -2950,14 +2971,13 @@ SurfTriMesh::DoCompacting( double dTol)
|
||||
|
||||
// sistemo gli indici dei vertici nei triangoli
|
||||
for ( int nId = 0 ; nId < GetTriangleSize() ; ++ nId) {
|
||||
// recupero gli indici dei vertici del triangolo
|
||||
int vOId[3] ;
|
||||
vOId[0] = m_vTria[nId].nIdVert[0] ;
|
||||
vOId[1] = m_vTria[nId].nIdVert[1] ;
|
||||
vOId[2] = m_vTria[nId].nIdVert[2] ;
|
||||
// salto i triangoli cancellati
|
||||
if ( vOId[0] == SVT_DEL)
|
||||
if ( m_vTria[nId].nIdVert[0] == SVT_DEL)
|
||||
continue ;
|
||||
// recupero gli indici dei vertici del triangolo
|
||||
int vOId[3]{ m_vTria[nId].nIdVert[0],
|
||||
m_vTria[nId].nIdVert[1],
|
||||
m_vTria[nId].nIdVert[2]} ;
|
||||
// verifico la validità degli indici
|
||||
if ( vOId[0] < 0 || vOId[0] >= nVIdSize ||
|
||||
vOId[1] < 0 || vOId[1] >= nVIdSize ||
|
||||
@@ -2967,11 +2987,12 @@ SurfTriMesh::DoCompacting( double dTol)
|
||||
m_vTria[nId].nIdVert[0] = vVId[vOId[0]] ;
|
||||
m_vTria[nId].nIdVert[1] = vVId[vOId[1]] ;
|
||||
m_vTria[nId].nIdVert[2] = vVId[vOId[2]] ;
|
||||
// se due vertici coincidono, cancello il triangolo
|
||||
// se due vertici coincidono o la normale non è calcolabile, cancello il triangolo
|
||||
if ( m_vTria[nId].nIdVert[0] == m_vTria[nId].nIdVert[1] ||
|
||||
m_vTria[nId].nIdVert[0] == m_vTria[nId].nIdVert[2] ||
|
||||
m_vTria[nId].nIdVert[1] == m_vTria[nId].nIdVert[2])
|
||||
RemoveTriangle( nId) ;
|
||||
m_vTria[nId].nIdVert[1] == m_vTria[nId].nIdVert[2] ||
|
||||
! CalcTriangleNormal( nId))
|
||||
RemoveTriangle( nId) ;
|
||||
}
|
||||
|
||||
// compatto il vettore dei vertici
|
||||
@@ -3662,7 +3683,7 @@ SurfTriMesh::ResetTFlags( void)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfTriMesh::ResetTempInt( void) const
|
||||
SurfTriMesh::ResetTempInts( void) const
|
||||
{
|
||||
for ( int i = 0 ; i < int( m_vTria.size()) ; ++ i)
|
||||
m_vTria[i].nTemp = 0 ;
|
||||
|
||||
Reference in New Issue
Block a user