diff --git a/RemoveCurveDefects.cpp b/RemoveCurveDefects.cpp index fbc0a55..fcdd695 100644 --- a/RemoveCurveDefects.cpp +++ b/RemoveCurveDefects.cpp @@ -183,8 +183,8 @@ RemoveCurveSmallParts( ICurveComposite* pCurve, double dLinTol) if ( dLen < dLinTol) { // recupero il punto medio della curva Point3d ptMid ; pCurrCrv->GetMidPoint( ptMid) ; - // rimuovo il segmento oppure in caso di fallimento rimuovo anche il successivo - if ( pCurve->RemoveJoint( i) || ( pCurve->RemoveJoint( i + 1) && pCurve->RemoveJoint( i))) { + // rimuovo il segmento + if ( pCurve->RemoveJoint( i)) { // porto il nuovo estremo sul punto medio pCurve->ModifyJoint( i, ptMid) ; // aggiorno valore di i tenendo conto che ModifyJoint potrebbe modificare la curva precedente @@ -193,6 +193,13 @@ RemoveCurveSmallParts( ICurveComposite* pCurve, double dLinTol) // aggiorno valore di nEnd ( ModifyJoint potrebbe aver rimosso la curva precedente e la successiva) nEnd = pCurve->GetCurveCount() - ( pCurve->IsClosed() ? 0 : 1) ; } + // altrimenti rimuovo anche il successivo + else if ( pCurve->RemoveJoint( i + 1)) { + pCurve->RemoveJoint( i) ; + pCurve->ModifyJoint( i, ptMid) ; + i = max( i - 2, nStart - 1) ; + nEnd = pCurve->GetCurveCount() - ( pCurve->IsClosed() ? 0 : 1) ; + } } }