From dee744725c1ec77b2b747ba0f0882af1c06cb76c Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Fri, 27 Mar 2026 15:11:28 +0100 Subject: [PATCH] EgtGeomKernel : - rimossi try/catch dalla classe SurfFlatRegion. - rimosso ricalcolo delle autointersezioni in AddSimpleExtLoop e AddSimpleIntLoop. --- SurfFlatRegion.cpp | 66 ++++++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/SurfFlatRegion.cpp b/SurfFlatRegion.cpp index 80f3859..550f687 100644 --- a/SurfFlatRegion.cpp +++ b/SurfFlatRegion.cpp @@ -29,7 +29,9 @@ #include "/EgtDev/Include/EgtPointerOwner.h" #define SAVECLASSCRV 0 -#if SAVECLASSCRV +#define SAVEADJUSTCRV 0 +#if SAVECLASSCRV || SAVEADJUSTCRV +std::vector vGeo ; #include "/EgtDev/Include/EGkGeoObjSave.h" #endif @@ -112,8 +114,20 @@ SurfFlatRegion::AddExtLoop( ICurve* pCrv) pMyCrv->SetThickness( 0) ; // rimuovo eventuali sovrapposizioni (calcolate nel suo piano) ICURVEPLIST CrvLst ; + +#if SAVEADJUSTCRV + SaveGeoObj( pMyCrv->Clone(), "D:\\Temp\\inters\\CrvCrvInters\\before_adjust.nge") ; +#endif + if ( ! AdjustLoops( Release( pMyCrv), CrvLst, true)) return false ; + +#if SAVEADJUSTCRV + for ( auto& pSingCrv : CrvLst) + vGeo.push_back( pSingCrv->Clone()) ; + SaveGeoObj( vGeo, "D:\\Temp\\inters\\CrvCrvInters\\after_adjust.nge") ; +#endif + // aggiungo le singole curve int nExtAdded = 0 ; bool bOk = true ; @@ -174,10 +188,7 @@ SurfFlatRegion::AddSimpleExtLoop( ICurve* pCrv, bool& bAdded) Vector3d vtExtr ; if ( pMyCrv->GetExtrusion( vtExtr) && ! vtExtr.IsSmall()) pMyCrv->SetExtrusion( Z_AX) ; - // verifico non abbia auto-intersezioni che si attraversano o si sovrappongano - SelfIntersCurve sInt( *pMyCrv) ; - if ( sInt.GetCrossOrOverlapIntersCount() > 0) - return false ; + // verifico che sia esterna alle curve esterne degli altri chunk bool bOk = true ; CRVCVECTOR ccClass ; @@ -221,14 +232,9 @@ SurfFlatRegion::AddSimpleExtLoop( ICurve* pCrv, bool& bAdded) bool SurfFlatRegion::MyAddExtLoop( ICurve* pCrv) { - try { - m_vpLoop.push_back( pCrv) ; - m_vExtInd.push_back( int( m_vpLoop.size()) - 1) ; - m_nStatus = OK ; - } - catch (...) { - return false ; - } + m_vpLoop.push_back( pCrv) ; + m_vExtInd.push_back( int( m_vpLoop.size()) - 1) ; + m_nStatus = OK ; return true ; } @@ -309,10 +315,7 @@ SurfFlatRegion::AddSimpleIntLoop( ICurve* pCrv) // sistemo il senso di rotazione (deve essere CW -> se N==Z+ area < 0, se N==Z- area > 0) if ( ( plPlane.GetVersN().z > 0 && dArea > 0) || ( plPlane.GetVersN().z < 0 && dArea < 0)) pMyCrv->Invert() ; - // verifico non abbia auto-intersezioni - SelfIntersCurve sInt( *pMyCrv) ; - if ( sInt.GetCrossOrOverlapIntersCount() > 0) - return false ; + // ricerca del chunk in cui andrebbe inserito int nChunk = -1 ; for ( int i = 0 ; i < int( m_vExtInd.size()) ; ++ i) { @@ -359,23 +362,18 @@ SurfFlatRegion::AddSimpleIntLoop( ICurve* pCrv) bool SurfFlatRegion::MyAddIntLoop( ICurve* pCrv, int nChunk) { - try { - // se da aggiungere all'ultimo chunk - if ( nChunk == -1) - m_vpLoop.push_back( pCrv) ; - // altrimenti aggiungo al chunck indicato - else { - int nLoopCnt = GetLoopCount( nChunk) ; - if ( nLoopCnt == 0) - return false ; - int nOffset = m_vExtInd[nChunk] + nLoopCnt ; - m_vpLoop.insert( m_vpLoop.begin() + nOffset, pCrv) ; - for ( int i = nChunk + 1 ; i < int( m_vExtInd.size()) ; ++ i) - ++ m_vExtInd[i] ; - } - } - catch (...) { - return false ; + //se da aggiungere all'ultimo chunk + if ( nChunk == -1) + m_vpLoop.push_back( pCrv) ; + //altrimenti aggiungo al chunck indicato + else { + int nLoopCnt = GetLoopCount( nChunk) ; + if ( nLoopCnt == 0) + return false ; + int nOffset = m_vExtInd[nChunk] + nLoopCnt ; + m_vpLoop.insert( m_vpLoop.begin() + nOffset, pCrv) ; + for ( int i = nChunk + 1 ; i < int( m_vExtInd.size()) ; ++ i) + ++ m_vExtInd[i] ; } return true ;