EgtMachKernel :

- nel calcolo angoli dopo il primo punto di un percorso richiedo la continuità limitando il DeltaR2 a 30gradi.
This commit is contained in:
Dario Sassi
2020-12-02 16:59:18 +00:00
parent 1b778cf969
commit 3c49d6bdde
+10 -1
View File
@@ -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() ;