From 5b0dfd16e13d23f6a45ae0f22bcea255d0d09ac3 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 31 Dec 2020 11:14:30 +0000 Subject: [PATCH] EgtGeomKernel : - modifiche a SurfTriMesh per superfici degeneri. --- StmFromTriangleSoup.cpp | 8 -------- SurfTriMesh.cpp | 37 ++++++++++++++++++++++++------------- SurfTriMesh.h | 1 + 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/StmFromTriangleSoup.cpp b/StmFromTriangleSoup.cpp index ac90055..23838da 100644 --- a/StmFromTriangleSoup.cpp +++ b/StmFromTriangleSoup.cpp @@ -119,14 +119,6 @@ StmFromTriangleSoup::End( void) // verifico inizializzazione if ( m_pSTM == nullptr) return false ; - // verifica sul numero minimo di vertici e triangoli - if ( m_pSTM->GetVertexCount() < 3 || m_pSTM->GetTriangleCount() < 1) { - delete m_pSTM ; - m_pSTM = CreateSurfTriMesh() ; - if ( m_pSTM == nullptr) - return false ; - m_pSTM->Init( 3, 1) ; - } // sistemazioni finali della superficie return m_pSTM->AdjustTopology() ; } diff --git a/SurfTriMesh.cpp b/SurfTriMesh.cpp index be52177..10f98b9 100644 --- a/SurfTriMesh.cpp +++ b/SurfTriMesh.cpp @@ -82,6 +82,23 @@ SurfTriMesh::Init( int nNumVert, int nNumTria, int nNumFacet) return true ; } +//---------------------------------------------------------------------------- +bool +SurfTriMesh::Clear( void) +{ + m_nStatus = OK ; + m_bOriented = false ; + m_bClosed = false ; + m_bFaceted = false ; + m_vVert.clear() ; + m_vTria.clear() ; + m_vFacet.clear() ; + ResetHashGrids3d() ; + m_nMaxTFlag = 0 ; + m_nParts = -1 ; + return true ; +} + //---------------------------------------------------------------------------- int SurfTriMesh::AddVertex( const Point3d& ptVert) @@ -1586,6 +1603,13 @@ SurfTriMesh::TestSealing( void) bool SurfTriMesh::AdjustTopology( void) { + // se non è rimasto alcunché di valido, pulisco tutto ed esco + if ( GetVertexCount() < 3 || GetTriangleCount() < 1) { + Clear() ; + m_bOriented = true ; + m_bClosed = true ; + return true ; + } // dichiaro sfaccettatura da ricalcolare ResetFaceting() ; // invalido calcolo connessione @@ -3483,19 +3507,6 @@ SurfTriMesh::Cut( const Plane3d& plPlane, bool bSaveOnEq) // aggiorno tutto if ( ! AdjustVertices() || ! DoCompacting()) return false ; - // se non è rimasto alcunché di valido, pulisco tutto - if ( bModif && ( GetVertexCount() < 3 || GetTriangleCount() < 1)) { - m_nStatus = OK ; - m_bOriented = false ; - m_bClosed = false ; - m_bFaceted = false ; - m_vVert.clear() ; - m_vTria.clear() ; - m_vFacet.clear() ; - ResetHashGrids3d() ; - m_nMaxTFlag = 0 ; - m_nParts = -1 ; - } } return true ; diff --git a/SurfTriMesh.h b/SurfTriMesh.h index 8a16c6c..6c37cb8 100644 --- a/SurfTriMesh.h +++ b/SurfTriMesh.h @@ -261,6 +261,7 @@ class SurfTriMesh : public ISurfTriMesh, public IGeoObjRW { if ( ! CopyFrom( stSrc)) LOG_ERROR( GetEGkLogger(), "SurfTriMesh : copy error") return *this ; } + bool Clear( void) ; bool GetTriangleAdjacencies( int nId, int nIdAdjTriaId[3]) const ; bool GetTriangleFlag( int nId, int& nFlag) const ; bool GetTriangleTempInt( int nId, int& nTempInt) const ;