From b5d879cd3dd11b903d0f2d67758f0d7c205cbb5e Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 30 May 2024 11:20:45 +0200 Subject: [PATCH] EgtGeomKernel : - in creazione regioni aggiunta chiusura loops di sicurezza dopo aggiustamenti - in curve composite corretta chiusura per caso di un solo arco. --- AdjustLoops.cpp | 2 ++ CurveComposite.cpp | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/AdjustLoops.cpp b/AdjustLoops.cpp index 9b37a4d..956e199 100644 --- a/AdjustLoops.cpp +++ b/AdjustLoops.cpp @@ -317,6 +317,8 @@ AdjustLoops( ICurve* pCurve, ICURVEPLIST& CrvLst, bool bNeedSameProp) pCrvCo->RemoveSmallDefects( 2 * LIN_TOL_MIN, ANG_TOL_STD_DEG, true) ; // unisco eventuali tratti allineati pCrvCo->MergeCurves( LIN_TOL_MIN, ANG_TOL_STD_DEG, true, bNeedSameProp) ; + // richiudo i loop per sicurezza + pCrvCo->Close() ; } } diff --git a/CurveComposite.cpp b/CurveComposite.cpp index 9b1d850..2af9c4f 100644 --- a/CurveComposite.cpp +++ b/CurveComposite.cpp @@ -291,9 +291,13 @@ CurveComposite::Close( void) return true ; // se molto vicini li modifico if ( AreSamePointEpsilon( ptStart, ptEnd, 10 * EPS_SMALL)) { + // se un solo arco + if ( m_CrvSmplS.size() == 1 && m_CrvSmplS.front()->GetType() == CRV_ARC) + return GetBasicCurveArc( m_CrvSmplS.front())->ChangeAngCenter( ANG_FULL) ; + // caso generale Point3d ptMid = Media( ptStart, ptEnd) ; - if ( ! ModifyStart( ptMid) || - ! ModifyEnd( ptMid)) + if ( ! m_CrvSmplS.front()->ModifyStart( ptMid) || + ! m_CrvSmplS.back()->ModifyEnd( ptMid)) return false ; } // altrimenti aggiungo la linea di chiusura