EgtGeomKernel 2.5e1 :
- modifiche al recupero dei triangoli che appartengono ad una stessa faccia (eliminata recursione).
This commit is contained in:
Binary file not shown.
+1
-1
@@ -360,7 +360,7 @@ class SurfTriMesh : public ISurfTriMesh, public IGeoObjRW
|
||||
bool UpdateOneFace( int nFacet, int nT) ;
|
||||
bool UpdateTriaFaceting( int nRefT, int nFacet, const Plane3d& plPlane, int nT) ;
|
||||
bool SetFacet( int nInd, int nT) ;
|
||||
bool VerifyAdjacTriaFacet( int nT, INTVECTOR& vT) const ;
|
||||
bool VerifyAdjacTriaFacet( INTVECTOR& vT) const ;
|
||||
bool MarchAlongFacetLoop( int nF, int nT, int nV, int nTimeStamp, PolyLine& PL) const ;
|
||||
bool MarchOneFacetTria( int nF, int& nT, int& nV, int nTimeStamp, PolyLine& PL, bool& bEnd) const ;
|
||||
void ResetHashGrids3d( void) const ;
|
||||
|
||||
+21
-12
@@ -17,6 +17,7 @@
|
||||
#include "GeoConst.h"
|
||||
#include "PolygonPlane.h"
|
||||
#include "/EgtDev/Include/EgtPointerOwner.h"
|
||||
#include <array>
|
||||
#include <set>
|
||||
#include <unordered_map>
|
||||
|
||||
@@ -223,25 +224,33 @@ SurfTriMesh::GetAllTriaInFacet( int nF, INTVECTOR& vT) const
|
||||
vT.reserve( 10) ;
|
||||
vT.push_back( nT) ;
|
||||
m_vTria[nT].nTemp = m_nTimeStamp ;
|
||||
return VerifyAdjacTriaFacet( nT, vT) ;
|
||||
return VerifyAdjacTriaFacet( vT) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
SurfTriMesh::VerifyAdjacTriaFacet( int nT, INTVECTOR& vT) const
|
||||
SurfTriMesh::VerifyAdjacTriaFacet( INTVECTOR& vT) const
|
||||
{
|
||||
// verifico i triangoli adiacenti
|
||||
for ( int j = 0 ; j < 3 ; ++ j) {
|
||||
int nAdjT = m_vTria[nT].nIdAdjac[j] ;
|
||||
if ( nAdjT != SVT_NULL &&
|
||||
m_vTria[nAdjT].nTemp != m_nTimeStamp &&
|
||||
m_vTria[nAdjT].nIdFacet == m_vTria[nT].nIdFacet) {
|
||||
vT.push_back( nAdjT) ;
|
||||
m_vTria[nAdjT].nTemp = m_nTimeStamp ;
|
||||
if ( ! VerifyAdjacTriaFacet( nAdjT, vT))
|
||||
return false ;
|
||||
INTVECTOR vStack{ vT.back()} ;
|
||||
while ( ! vStack.empty()) {
|
||||
array<int,3> vNew{ SVT_NULL, SVT_NULL, SVT_NULL} ;
|
||||
for ( int j = 0 ; j < 3 ; ++ j) {
|
||||
int nAdjT = m_vTria[vStack.back()].nIdAdjac[j] ;
|
||||
if ( nAdjT != SVT_NULL &&
|
||||
m_vTria[nAdjT].nTemp != m_nTimeStamp &&
|
||||
m_vTria[nAdjT].nIdFacet == m_vTria[vStack.back()].nIdFacet) {
|
||||
vT.push_back( nAdjT) ;
|
||||
vNew[j] = nAdjT ;
|
||||
m_vTria[nAdjT].nTemp = m_nTimeStamp ;
|
||||
}
|
||||
}
|
||||
vStack.pop_back() ;
|
||||
for ( int j = 0 ; j < 3 ; ++ j) {
|
||||
if ( vNew[j] != SVT_NULL)
|
||||
vStack.push_back( vNew[j]) ;
|
||||
}
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user