From 01bf44cf1e95ed3e2c6d45d8aff07441e5e6dce1 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 30 May 2024 16:45:38 +0200 Subject: [PATCH] EgtGeomKernel : - correzione a chiusura composita formata da un solo arco (il nuovo angolo giro al centro deve avere lo steso segno del precedente). --- CurveComposite.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/CurveComposite.cpp b/CurveComposite.cpp index 2af9c4f..225e40f 100644 --- a/CurveComposite.cpp +++ b/CurveComposite.cpp @@ -292,8 +292,10 @@ CurveComposite::Close( void) // 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) ; + if ( m_CrvSmplS.size() == 1 && m_CrvSmplS.front()->GetType() == CRV_ARC) { + CurveArc* pArc = GetBasicCurveArc( m_CrvSmplS.front()) ; + return pArc->ChangeAngCenter( pArc->GetAngCenter() > 0 ? ANG_FULL : -ANG_FULL) ; + } // caso generale Point3d ptMid = Media( ptStart, ptEnd) ; if ( ! m_CrvSmplS.front()->ModifyStart( ptMid) || @@ -883,8 +885,10 @@ CurveComposite::TestClosure( void) // se distanza superiore al limite ridotto forzo i punti a coincidere if ( ! AreSamePointEpsilon( ptStart, ptEnd, EPS_CONNECT)) { // se un solo arco - if ( m_CrvSmplS.size() == 1 && m_CrvSmplS.front()->GetType() == CRV_ARC) - return GetBasicCurveArc( m_CrvSmplS.front())->ChangeAngCenter( ANG_FULL) ; + if ( m_CrvSmplS.size() == 1 && m_CrvSmplS.front()->GetType() == CRV_ARC) { + CurveArc* pArc = GetBasicCurveArc( m_CrvSmplS.front()) ; + return pArc->ChangeAngCenter( pArc->GetAngCenter() > 0 ? ANG_FULL : -ANG_FULL) ; + } // caso generale Point3d ptM = Media( ptStart, ptEnd) ; return ( m_CrvSmplS.front()->ModifyStart( ptM) &&