From b33b6b06908b912025fb557981ee9fbd277dcf8d Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 14 May 2019 09:54:53 +0000 Subject: [PATCH] EgtGeomKernel : - correzione in Zmap per creazione da solidi con volume negativo. --- VolZmap.cpp | 11 +++++++++-- VolZmapCreation.cpp | 7 ++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/VolZmap.cpp b/VolZmap.cpp index e8cfd5b..1142da6 100644 --- a/VolZmap.cpp +++ b/VolZmap.cpp @@ -1346,7 +1346,12 @@ VolZmap::SetToModifyDexelBlocks( int nGrid, int nDex, int nInt) bool VolZmap::IsBox( void) { - for ( int nMap = 0 ; nMap < 3 ; ++ nMap) { + // se non tridexel, non posso stabilire con il metodo seguente se è un box + if ( m_nMapNum == 1) + return false ; + // analisi dei tridexel + bool bFound = true ; + for ( int nMap = 0 ; nMap < m_nMapNum ; ++ nMap) { double dMinZ = m_dMaxZ[nMap] ; double dMaxZ = m_dMinZ[nMap] ; for ( int n = 0 ; n < int( m_nDim[nMap]) ; ++ n) { @@ -1365,8 +1370,10 @@ VolZmap::IsBox( void) } } } + if ( dMaxZ < dMinZ) + bFound = false ; } - return true ; + return bFound ; } //---------------------------------------------------------------------------- diff --git a/VolZmapCreation.cpp b/VolZmapCreation.cpp index f3205ba..1941259 100644 --- a/VolZmapCreation.cpp +++ b/VolZmapCreation.cpp @@ -479,8 +479,9 @@ VolZmap::CreateFromFlatRegion( const ISurfFlatRegion& Surf, double dDimZ, double bool VolZmap::CreateFromTriMesh( const ISurfTriMesh& Surf, double dStep, bool bTriDex) { - // Se la superficie non è chiusa non ha senso continuare - if ( ! Surf.IsClosed()) + // Se la superficie non è chiusa oppure orientata al contrario non ha senso continuare + double dVol ; + if ( ! Surf.IsClosed() || ! Surf.GetVolume( dVol) || dVol < 0) return false ; // Assegno la dimensione della mappa 1 o 3 @@ -670,7 +671,7 @@ VolZmap::CreateFromTriMesh( const ISurfTriMesh& Surf, double dStep, bool bTriDex m_SliceYZ.resize( m_nNumBlock) ; // Tipologia - m_nShape = ( IsBox() ? BOX : EXTRUSION) ; + m_nShape = ( IsBox() ? BOX : GENERIC) ; // Aggiornamento dello stato m_nStatus = OK ;