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