diff --git a/Sawing.cpp b/Sawing.cpp index ef957b8..9361754 100644 --- a/Sawing.cpp +++ b/Sawing.cpp @@ -2138,12 +2138,14 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V } if ( dActBstep < EPS_SMALL) dActBstep = dActStep ; + double dActLstep = GetStepLast() ; // direzione della linea Vector3d vtDir ; pLine->GetStartDir( vtDir) ; // Se una sola passata - if ( dActStep < EPS_SMALL || ( dElev - dExtraCut) <= dActStep || - ( ! bSideAng && m_Params.m_dStepLast > EPS_SMALL && ( dElev - dExtraCut) <= m_Params.m_dStepLast)) { + if ( m_Params.m_nStepType != SAW_ST_TOANDFROM && + ( dActStep < EPS_SMALL || ( dElev - dExtraCut) <= dActStep || + ( ! bSideAng && dActLstep > EPS_SMALL && ( dElev - dExtraCut) <= dActLstep))) { // 1 -> approccio Point3d ptP1 = pLine->GetStart() - vtDir * m_Params.m_dLiTang ; if ( ! AddApproach( ptP1, vtCorr, dSafeZ, dElev, dAppr)) @@ -2240,11 +2242,17 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V int nStep = 2 ; if ( m_Params.m_nStepType == SAW_ST_ZIGZAG) nStep = 2 * static_cast( ceil( dCutH / ( dActStep + dActBstep + EPS_SMALL))) ; + else { + if ( dActStep < EPS_SMALL) + dActStep = dCutH / nStep ; + if ( dActBstep < EPS_SMALL) + dActBstep = dCutH / nStep ; + } double dMeanStep = dCutH / nStep ; double dBstep = dActBstep * 2 * dMeanStep / ( dActStep + dActBstep) ; double dLastStep = dBstep ; - if ( ! bSideAng && m_Params.m_dStepLast > EPS_SMALL) { - dLastStep = m_Params.m_dStepLast ; + if ( ! bSideAng && dActLstep > EPS_SMALL) { + dLastStep = dActLstep ; double dCoeff = ( dCutH - dLastStep) / ( nStep / 2 * dActStep + ( nStep / 2 - 1) * dActBstep) ; dMeanStep = dCoeff * ( dActStep + dActBstep) / 2 ; dBstep = dCoeff * dActBstep ; @@ -2286,8 +2294,8 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V int nStep = static_cast( ceil( dCutH / ( dActStep + EPS_SMALL))) ; double dStep = dCutH / nStep ; double dLastStep = dStep ; - if ( ! bSideAng && m_Params.m_dStepLast > EPS_SMALL) { - dLastStep = m_Params.m_dStepLast ; + if ( ! bSideAng && dActLstep > EPS_SMALL) { + dLastStep = dActLstep ; nStep = static_cast( ceil( ( dCutH - dLastStep) / ( dActStep + EPS_SMALL))) + 1 ; dStep = ( dCutH - dLastStep) / ( nStep - 1) ; }