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) &&