diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index b6ae9a5..fe6bb37 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ diff --git a/MachineCalc.cpp b/MachineCalc.cpp index adae4c4..892e1fd 100644 --- a/MachineCalc.cpp +++ b/MachineCalc.cpp @@ -446,15 +446,23 @@ Machine::CalculateKinematicChain( void) } // se 3 va bene ( uno dovrà poi avere valore assegnato) if ( m_vCalcRotAx.size() == 3) { - // se ultimi due di testa, devo invertirne l'ordine - if ( m_vCalcRotAx[1].bHead && m_vCalcRotAx[2].bHead) + int n2ndHeadRotAx = - 1 ; + // se tutti e tre di testa, devo invertire il primo con il terzo + if ( m_vCalcRotAx[0].bHead && m_vCalcRotAx[1].bHead && m_vCalcRotAx[2].bHead) { + swap( m_vCalcRotAx[0], m_vCalcRotAx[2]) ; + n2ndHeadRotAx = 1 ; + } + // se altrimenti ultimi due di testa, devo invertirne l'ordine + else if ( m_vCalcRotAx[1].bHead && m_vCalcRotAx[2].bHead) { swap( m_vCalcRotAx[1], m_vCalcRotAx[2]) ; + n2ndHeadRotAx = 2 ; + } // impongo limiti di corsa sul secondo asse rotante di testa - if ( m_vCalcRotAx[2].bHead) { + if ( n2ndHeadRotAx > 0) { Head* pHead = GetHead( m_nCalcHeadId) ; if ( pHead != nullptr) { - m_vCalcRotAx[2].stroke.Min = max( m_vCalcRotAx[2].stroke.Min, pHead->GetRot2Stroke().Min) ; - m_vCalcRotAx[2].stroke.Max = min( m_vCalcRotAx[2].stroke.Max, pHead->GetRot2Stroke().Max) ; + m_vCalcRotAx[n2ndHeadRotAx].stroke.Min = max( m_vCalcRotAx[n2ndHeadRotAx].stroke.Min, pHead->GetRot2Stroke().Min) ; + m_vCalcRotAx[n2ndHeadRotAx].stroke.Max = min( m_vCalcRotAx[n2ndHeadRotAx].stroke.Max, pHead->GetRot2Stroke().Max) ; } } return true ;