diff --git a/Operation.cpp b/Operation.cpp index e3d78cc..513ba80 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -1172,7 +1172,7 @@ Operation::CalculateAxesValues( const string& sHint, bool bSolChExact) // recupero peso primo asse rotante di testa double dRot1W = m_pMchMgr->GetCalcRot1W() ; - // recupero la minima differenza angolare da posizione precedente per stare vivino a posizione home + // recupero la minima differenza angolare da posizione precedente per stare vicino a posizione home double dAngDeltaMinForHome = m_pMchMgr->GetAngDeltaMinForHome() ; // applico eventuali blocchi di assi rotanti @@ -1222,6 +1222,8 @@ Operation::CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes, { if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr) return false ; + // massima variazione secondo asse rotante per continuitą + double dDeltaR2Max = 30 ; // recupero il numero degli assi lineari e rotanti // predispongo variabile per valori assi DBLVECTOR vAxVal ; @@ -1369,6 +1371,13 @@ Operation::CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes, } if ( bAng2 && ( dDelta2 < dDelta1 - EPS_ANG_SMALL || ! bAng1)) vAng1 = vAng2 ; + // se imposto limite su variazione di secondo asse rotante + if ( dDeltaR2Max > EPS_ANG_SMALL && vAng1.size() >= 2) { + double dR2Diff1 = vAng1[1] - vAxRotPrec[1] ; + double dR2Diff2 = vAng2[1] - vAxRotPrec[1] ; + if ( abs( dR2Diff1) > abs( dR2Diff2) && abs( dR2Diff1) > dDeltaR2Max) + vAng1 = vAng2 ; + } } // ricavo posizione con eventuali modifiche dipendenti dalla lavorazione Point3d ptP = pCamData->GetEndPoint() ;