diff --git a/CurveComposite.cpp b/CurveComposite.cpp index b1a7f09..6419aba 100644 --- a/CurveComposite.cpp +++ b/CurveComposite.cpp @@ -209,8 +209,15 @@ CurveComposite::AddSimpleCurve( ICurve* pSmplCrv, bool bEndOrStart, double dLinT if ( ! AreSamePointEpsilon( ptCrvStart, ptEnd, 0.01 * EPS_SMALL)) { // se in tolleranza, modifico l'inizio dell'entità if ( SqDist( ptCrvStart, ptEnd) < ( dLinTol * dLinTol)) { + // lunghezza della curva originale + double dOldLen ; pCrv->GetLength( dOldLen) ; + // eseguo modifica if ( ! pCrv->ModifyStart( ptEnd)) return false ; + // verifico che la lunghezza non sia variata troppo + double dNewLen ; pCrv->GetLength( dNewLen) ; + if ( abs( dNewLen - dOldLen) > 10 * dLinTol) + return false ; } else return false ; diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index f08cb69..80e1d54 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ diff --git a/OffsetCurve.cpp b/OffsetCurve.cpp index a7e989c..f91b2eb 100644 --- a/OffsetCurve.cpp +++ b/OffsetCurve.cpp @@ -589,16 +589,18 @@ OffsetCurve::Make( const ICurve* pCrv, double dDist, int nType) pCrvCo2->GetEndPoint( ptEnd2) ; // verifiche di concatenamento if ( AreSamePointEpsilon( ptEnd, ptStart2, 10 * EPS_SMALL)) { - pCrvCo->AddCurve( pCrvCo2, true, 10 * EPS_SMALL) ; - m_CrvLst.erase( iIter2) ; - ptEnd = ptEnd2 ; - iIter2 = next( iIter) ; + if ( pCrvCo->AddCurve( pCrvCo2, true, 10 * EPS_SMALL)) { + m_CrvLst.erase( iIter2) ; + ptEnd = ptEnd2 ; + iIter2 = next( iIter) ; + } } else if ( AreSamePointEpsilon( ptEnd2, ptStart, 10 * EPS_SMALL)) { - pCrvCo->AddCurve( pCrvCo2, false, 10 * EPS_SMALL) ; - m_CrvLst.erase( iIter2) ; - ptStart = ptStart2 ; - iIter2 = next( iIter) ; + if ( pCrvCo->AddCurve( pCrvCo2, false, 10 * EPS_SMALL)) { + m_CrvLst.erase( iIter2) ; + ptStart = ptStart2 ; + iIter2 = next( iIter) ; + } } else ++ iIter2 ;