EgtGeomKernel 1.9h1 :
- sistemazioni varie in CAvToolTriangle - utilizzo di std::async in CAvToolSurfTm - corretto GetAllTriaAroundVertex di SurfTm - aggiunto ( nothrow) a tutti i new.
This commit is contained in:
+35
-29
@@ -373,14 +373,14 @@ SurfTriMesh::GetVertex( int nId, Point3d& ptP) const
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
SurfTriMesh::GetFirstVertex( Point3d& ptP) const
|
||||
SurfTriMesh::GetFirstVertex( Point3d& ptP) const
|
||||
{
|
||||
return GetNextVertex( SVT_NULL, ptP) ;
|
||||
return GetNextVertex( SVT_NULL, ptP) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
SurfTriMesh::GetNextVertex( int nId, Point3d& ptP) const
|
||||
SurfTriMesh::GetNextVertex( int nId, Point3d& ptP) const
|
||||
{
|
||||
// cerco il primo successivo valido
|
||||
do {
|
||||
@@ -392,12 +392,12 @@ SurfTriMesh::GetNextVertex( int nId, Point3d& ptP) const
|
||||
// recupero i dati
|
||||
ptP = m_vVert[nId].ptP ;
|
||||
// ritorno indice triangolo corrente
|
||||
return nId ;
|
||||
return nId ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfTriMesh::GetTriangle( int nId, int nIdVert[3]) const
|
||||
SurfTriMesh::GetTriangle( int nId, int nIdVert[3]) const
|
||||
{
|
||||
// verifico esistenza del triangolo
|
||||
if ( nId < 0 || nId >= GetTriangleSize() || m_vTria[nId].nIdVert[0] == SVT_DEL)
|
||||
@@ -406,19 +406,19 @@ SurfTriMesh::GetTriangle( int nId, int nIdVert[3]) const
|
||||
nIdVert[0] = m_vTria[nId].nIdVert[0] ;
|
||||
nIdVert[1] = m_vTria[nId].nIdVert[1] ;
|
||||
nIdVert[2] = m_vTria[nId].nIdVert[2] ;
|
||||
return true ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
SurfTriMesh::GetFirstTriangle( int nIdVert[3]) const
|
||||
SurfTriMesh::GetFirstTriangle( int nIdVert[3]) const
|
||||
{
|
||||
return GetNextTriangle( SVT_NULL, nIdVert) ;
|
||||
return GetNextTriangle( SVT_NULL, nIdVert) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
SurfTriMesh::GetNextTriangle( int nId, int nIdVert[3]) const
|
||||
SurfTriMesh::GetNextTriangle( int nId, int nIdVert[3]) const
|
||||
{
|
||||
// cerco il primo successivo valido
|
||||
do {
|
||||
@@ -432,12 +432,12 @@ SurfTriMesh::GetNextTriangle( int nId, int nIdVert[3]) const
|
||||
nIdVert[1] = m_vTria[nId].nIdVert[1] ;
|
||||
nIdVert[2] = m_vTria[nId].nIdVert[2] ;
|
||||
// ritorno indice triangolo corrente
|
||||
return nId ;
|
||||
return nId ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfTriMesh::GetTriangle( int nId, Triangle3d& Tria) const
|
||||
SurfTriMesh::GetTriangle( int nId, Triangle3d& Tria) const
|
||||
{
|
||||
// verifico esistenza del triangolo
|
||||
if ( nId < 0 || nId >= GetTriangleSize() || m_vTria[nId].nIdVert[0] == SVT_DEL)
|
||||
@@ -447,19 +447,19 @@ SurfTriMesh::GetTriangle( int nId, Triangle3d& Tria) const
|
||||
m_vVert[m_vTria[nId].nIdVert[1]].ptP,
|
||||
m_vVert[m_vTria[nId].nIdVert[2]].ptP,
|
||||
m_vTria[nId].vtN) ;
|
||||
return true ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
SurfTriMesh::GetFirstTriangle( Triangle3d& Tria) const
|
||||
SurfTriMesh::GetFirstTriangle( Triangle3d& Tria) const
|
||||
{
|
||||
return GetNextTriangle( SVT_NULL, Tria) ;
|
||||
return GetNextTriangle( SVT_NULL, Tria) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
SurfTriMesh::GetNextTriangle( int nId, Triangle3d& Tria) const
|
||||
SurfTriMesh::GetNextTriangle( int nId, Triangle3d& Tria) const
|
||||
{
|
||||
// cerco il primo successivo valido
|
||||
do {
|
||||
@@ -474,7 +474,7 @@ SurfTriMesh::GetNextTriangle( int nId, Triangle3d& Tria) const
|
||||
m_vVert[m_vTria[nId].nIdVert[2]].ptP,
|
||||
m_vTria[nId].vtN) ;
|
||||
// ritorno indice triangolo corrente
|
||||
return nId ;
|
||||
return nId ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -500,17 +500,20 @@ SurfTriMesh::GetAllTriaAroundVertex( int nV, INTVECTOR& vT, bool& bCirc) const
|
||||
int k ;
|
||||
int nTa = nT ;
|
||||
do {
|
||||
// ricerco triangolo
|
||||
if ( FindVertexInTria( nV, nTa, k))
|
||||
nTa = m_vTria[nTa].nIdAdjac[Prev(k)] ;
|
||||
else
|
||||
nTa = SVT_NULL ;
|
||||
// per evitare cicli infiniti dovuti a triangoli invertiti
|
||||
if ( vT.size() >= 2 && nTa == vT[vT.size()-2])
|
||||
// se non valido, esco
|
||||
if ( nTa == nT || nTa == SVT_NULL)
|
||||
break ;
|
||||
// se valido
|
||||
if ( nTa != nT && nTa != SVT_NULL)
|
||||
vT.push_back( nTa) ;
|
||||
} while ( nTa != nT && nTa != SVT_NULL && vT.size() < MAX_VT_SIZE) ;
|
||||
// per evitare cicli infiniti dovuti a triangoli invertiti
|
||||
if ( find( vT.begin(), vT.end(), nTa) != vT.end())
|
||||
break ;
|
||||
// inserisco in elenco
|
||||
vT.push_back( nTa) ;
|
||||
} while ( vT.size() < MAX_VT_SIZE) ;
|
||||
|
||||
// se sono ritornato al triangolo di partenza ho fatto un giro e concluso la ricerca
|
||||
if ( nTa == nT) {
|
||||
@@ -521,17 +524,20 @@ SurfTriMesh::GetAllTriaAroundVertex( int nV, INTVECTOR& vT, bool& bCirc) const
|
||||
// altrimenti, devo cercare i triangoli adiacenti con lo stesso vertice in CW
|
||||
nTa = nT ;
|
||||
do {
|
||||
// ricerco triangolo
|
||||
if ( FindVertexInTria( nV, nTa, k))
|
||||
nTa = m_vTria[nTa].nIdAdjac[k] ;
|
||||
else
|
||||
nTa = SVT_NULL ;
|
||||
// per evitare cicli infiniti dovuti a triangoli invertiti
|
||||
if ( vT.size() >= 2 && nTa == vT[vT.size()-2])
|
||||
// se non valido, esco
|
||||
if ( nTa == nT || nTa == SVT_NULL)
|
||||
break ;
|
||||
// se valido
|
||||
if ( nTa != nT && nTa != SVT_NULL)
|
||||
vT.insert( vT.begin(), nTa) ;
|
||||
} while ( nTa != nT && nTa != SVT_NULL && vT.size() < MAX_VT_SIZE) ;
|
||||
// per evitare cicli infiniti dovuti a triangoli invertiti
|
||||
if ( find( vT.begin(), vT.end(), nTa) != vT.end())
|
||||
break ;
|
||||
// inserisco in elenco
|
||||
vT.insert( vT.begin(), nTa) ;
|
||||
} while ( vT.size() < MAX_VT_SIZE) ;
|
||||
|
||||
bCirc = ( nTa == nT) ;
|
||||
return int( vT.size()) ;
|
||||
@@ -873,7 +879,7 @@ SurfTriMesh*
|
||||
SurfTriMesh::Clone( void) const
|
||||
{
|
||||
// alloco oggetto
|
||||
SurfTriMesh* pStm = new(nothrow) SurfTriMesh ;
|
||||
SurfTriMesh* pStm = new( nothrow) SurfTriMesh ;
|
||||
if ( pStm != nullptr) {
|
||||
if ( ! pStm->CopyFrom( *this)) {
|
||||
delete pStm ;
|
||||
|
||||
Reference in New Issue
Block a user