diff --git a/SurfBezier.cpp b/SurfBezier.cpp index 70ebca4..70a730c 100644 --- a/SurfBezier.cpp +++ b/SurfBezier.cpp @@ -6520,12 +6520,12 @@ SurfBezier::CreateByIsoParamSet( const ICurve* pCurve0, const ICurve* pCurve1, c bool bSplitToAdd = true ; int c0 = 0, c1 = 0 ; while ( bSplitToAdd) { - if ( c0 > ssize( vdParamPos0) - 1 && c1 > ssize( vdParamPos1) - 1) { + if ( c0 > ssize( vdParamPos0) - 1 || c1 > ssize( vdParamPos1) - 1) { LOG_DBG_ERR( GetEGkLogger(), "Surf Bez Ruled Guided: error while reparametrizing some section") ; return false ; } // se ho una corrispondenza tra punti ( e non sono alla fine del tratto) allora non aggiungo split - if ( abs( vdParamPos0[c0] - vdParamPos1[c1]) < EPS_SMALL && vdParamPos0[c0] < 1) { + if ( abs( vdParamPos0[c0] - vdParamPos1[c1]) < EPS_PARAM && vdParamPos0[c0] < 1) { ++c0 ; ++c1 ; ++nLastParam0 ; @@ -6535,14 +6535,17 @@ SurfBezier::CreateByIsoParamSet( const ICurve* pCurve0, const ICurve* pCurve1, c // se non ho corrispondenza allora aggiungo uno split sulla curva a cui manca il punto corrispondente else if ( vdParamPos0[c0] < vdParamPos1[c1]) { double dPar ; CrvU1.GetParamAtLength( dLenPrev1 + dLen1 * vdParamPos0[c0], dPar) ; - if ( abs( dPar - round( dPar)) > EPS_SMALL) { - vdSplit1.push_back( dPar) ; - nSplit1 = vdSplit1.size() ; - } - else if ( dPar = round( dPar) ; dPar > nLastParam1){ - ++ c1 ; - ++ nLastParam1 ; + if ( dPar > dLastParam1 + EPS_PARAM) { + if ( abs( dPar - round( dPar)) > EPS_PARAM) { + vdSplit1.push_back( dPar) ; + nSplit1 = vdSplit1.size() ; + } + else if ( dPar = round( dPar) ; dPar > nLastParam1){ + ++ c1 ; + ++ nLastParam1 ; + } } + dLastParam1 = dPar ; ++nLastParam0 ; vPairs.emplace_back( nLastParam0 + nSplit0, nLastParam1 + nSplit1) ; ++c0 ; @@ -6550,14 +6553,17 @@ SurfBezier::CreateByIsoParamSet( const ICurve* pCurve0, const ICurve* pCurve1, c else if ( vdParamPos0[c0] > vdParamPos1[c1]) { double dPar ; CrvU0.GetParamAtLength( dLenPrev0 + dLen0 * vdParamPos1[c1], dPar) ; // se lo split non è in prossimità di una joint già esistente allora lo aggiungo - if ( abs( dPar - round( dPar)) > EPS_SMALL) { - vdSplit0.push_back( dPar) ; - nSplit0 = vdSplit0.size() ; - } - else if ( dPar = round( dPar) ; dPar > nLastParam0){ - ++ c0 ; - ++ nLastParam0 ; + if ( dPar > dLastParam0 + EPS_PARAM) { + if ( abs( dPar - round( dPar)) > EPS_PARAM) { + vdSplit0.push_back( dPar) ; + nSplit0 = vdSplit0.size() ; + } + else if ( dPar = round( dPar) ; dPar > nLastParam0){ + ++ c0 ; + ++ nLastParam0 ; + } } + dLastParam0 = dPar ; ++nLastParam1 ; vPairs.emplace_back( nLastParam0 + nSplit0, nLastParam1 + nSplit1) ; ++c1 ;