diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index a9d2b63..4498fe8 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ diff --git a/MachineCalc.cpp b/MachineCalc.cpp index af93532..664ae96 100644 --- a/MachineCalc.cpp +++ b/MachineCalc.cpp @@ -1344,7 +1344,7 @@ Machine::GetNearestAngleInStroke( int nInd, double dAngRef, double& dAng) const // cerco l'angolo pił vicino stando nella corsa while ( dAng - dAngRef > ANG_STRAIGHT && dAng - ANG_FULL >= m_vCalcRotAx[nInd].stroke.Min) dAng -= ANG_FULL ; - while ( dAng - dAngRef < - ANG_STRAIGHT && dAng + ANG_FULL <= m_vCalcRotAx[nInd].stroke.Max) + while ( dAng - dAngRef < -ANG_STRAIGHT && dAng + ANG_FULL <= m_vCalcRotAx[nInd].stroke.Max) dAng += ANG_FULL ; return ( dAng >= m_vCalcRotAx[nInd].stroke.Min && dAng <= m_vCalcRotAx[nInd].stroke.Max) ; diff --git a/Mortising.cpp b/Mortising.cpp index e3c850e..2c01c8a 100644 --- a/Mortising.cpp +++ b/Mortising.cpp @@ -1184,9 +1184,14 @@ Mortising::ProcessPath( int nPathId, int nPvId, int nClId) // eventuali allungamenti/accorciamenti { + // inclinazione della direzione utensile rispetto al movimento + Vector3d vtTg ; pCompo->GetMidDir( vtTg) ; + double dSinAng = max( ( vtTg ^ vtExtr).Len(), sin( 45 * DEGTORAD)) ; + double dStartAddLen = m_Params.m_dStartAddLen / dSinAng ; + double dEndAddLen = m_Params.m_dEndAddLen / dSinAng ; // verifico che il percorso sia abbastanza lungo double dLen ; pCompo->GetLength( dLen) ; - if ( dLen + m_Params.m_dStartAddLen + m_Params.m_dEndAddLen < 10 * EPS_SMALL) { + if ( dLen + dStartAddLen + dEndAddLen < 10 * EPS_SMALL) { m_pMchMgr->SetWarning( 2555, "Warning in Mortising : skipped Path too short") ; return true ; } @@ -1194,26 +1199,26 @@ Mortising::ProcessPath( int nPathId, int nPvId, int nClId) if ( pCompo->GetCurveCount() == 1 && pCompo->IsClosed()) pCompo->AddJoint( 0.5) ; // eventuali allungamenti - if ( m_Params.m_dStartAddLen > EPS_SMALL) { - if ( ! pCompo->ExtendStartByLen( m_Params.m_dStartAddLen)) + if ( dStartAddLen > EPS_SMALL) { + if ( ! pCompo->ExtendStartByLen( dStartAddLen)) return false ; - dLen += m_Params.m_dStartAddLen ; + dLen += dStartAddLen ; } - if ( m_Params.m_dEndAddLen > EPS_SMALL) { - if ( ! pCompo->ExtendEndByLen( m_Params.m_dEndAddLen)) + if (dEndAddLen > EPS_SMALL) { + if ( ! pCompo->ExtendEndByLen( dEndAddLen)) return false ; - dLen += m_Params.m_dEndAddLen ; + dLen += dEndAddLen ; } // eventuale accorciamenti (da fare dopo tutti gli allungamenti) - if ( m_Params.m_dStartAddLen < - EPS_SMALL) { - if ( ! pCompo->TrimStartAtLen( - m_Params.m_dStartAddLen)) + if ( dStartAddLen < - EPS_SMALL) { + if ( ! pCompo->TrimStartAtLen( -dStartAddLen)) return false ; - dLen += m_Params.m_dStartAddLen ; + dLen += dStartAddLen ; } - if ( m_Params.m_dEndAddLen < - EPS_SMALL) { - if ( ! pCompo->TrimEndAtLen( dLen + m_Params.m_dEndAddLen)) + if ( dEndAddLen < - EPS_SMALL) { + if ( ! pCompo->TrimEndAtLen( dLen + dEndAddLen)) return false ; - dLen += m_Params.m_dEndAddLen ; + dLen += dEndAddLen ; } } diff --git a/Operation.cpp b/Operation.cpp index b07035c..c63b888 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -689,6 +689,8 @@ Operation::AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nF while ( pCrv != nullptr) { Vector3d vtDir ; pCrv->GetMidDir( vtDir) ; if ( ( vtN ^ vtDir) * vtRef < COS_ANG_MAX) { + vtDirPrev = vtDir ; + vtDirNext = vtDir ; pCrvCompo->ChangeStartPoint( i) ; break ; }