From 538126cfe51398cf97439797d9ca94bbf678ddc2 Mon Sep 17 00:00:00 2001 From: DarioS Date: Fri, 21 Jul 2023 17:20:09 +0200 Subject: [PATCH] EgtGeomKernel : - aggiunti altri controlli per superfici trimesh vuote in CutWithOtherSurf, Cut e GeneralizedCut. --- SurfTriMeshBooleans.cpp | 4 ++++ SurfTriMeshCuts.cpp | 12 ++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/SurfTriMeshBooleans.cpp b/SurfTriMeshBooleans.cpp index db60d5e..c3dfa8e 100644 --- a/SurfTriMeshBooleans.cpp +++ b/SurfTriMeshBooleans.cpp @@ -1697,6 +1697,10 @@ SurfTriMesh::CutWithOtherSurf( const ISurfTriMesh& CutterSurf, bool bInVsOut, bo if ( ! IsValid() || ! CutterSurf.IsValid()) return false ; + // Se una delle due è vuota non devo fare alcunchè + if ( IsEmpty() || CutterSurf.IsEmpty()) + return true ; + m_OGrMgr.Clear() ; SurfTriMesh SurfC ; diff --git a/SurfTriMeshCuts.cpp b/SurfTriMeshCuts.cpp index 8bfda97..7e8991c 100644 --- a/SurfTriMeshCuts.cpp +++ b/SurfTriMeshCuts.cpp @@ -32,10 +32,14 @@ const double CUT_SCALE = 1024 ; bool SurfTriMesh::Cut( const Plane3d& plPlane, bool bSaveOnEq) { - // la superficie deve essere validata + // La superficie deve essere validata if ( m_nStatus != OK) return false ; + // Se la superficie è vuota non devo fare alcunchè + if ( IsEmpty()) + return true ; + // recupero il numero originale di triangoli e di facce int nTriaOriCnt = GetTriangleCount() ; int nFacetOriCnt = GetFacetCount() ; @@ -354,6 +358,10 @@ SurfTriMesh::GeneralizedCut( const ICurve& cvCurve, bool bSaveOnEq) if ( ! cvCurve.GetExtrusion( vtExtr) || vtExtr.IsSmall() || ! cvCurve.IsClosed()) return false ; + // Se la superficie è vuota non devo fare alcunchè + if ( IsEmpty()) + return true ; + // Recupero il numero originale di triangoli e di facce int nTriaOriCnt = GetTriangleCount() ; int nFacetOriCnt = GetFacetCount() ; @@ -367,7 +375,7 @@ SurfTriMesh::GeneralizedCut( const ICurve& cvCurve, bool bSaveOnEq) } // Eseguo scalature - Frame3d frScalingRef; + Frame3d frScalingRef ; frScalingRef.Set( m_vVert[0].ptP, X_AX, Y_AX, Z_AX) ; Scale( frScalingRef, CUT_SCALE, CUT_SCALE, CUT_SCALE) ; cvCompo.Scale( frScalingRef, CUT_SCALE, CUT_SCALE, CUT_SCALE) ;