From 03305139801c71e2a1e74dddcc797389da7d336e Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 7 Mar 2019 12:31:41 +0000 Subject: [PATCH] EgtMachKernel 2.1c2 : - aggiunta gestione tre assi rotanti su testa. --- EgtMachKernel.rc | Bin 11774 -> 11774 bytes MachineCalc.cpp | 18 +++++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index b6ae9a59e8c5e0ea12e027f87299670c6836a54e..fe6bb3737958c08dda551a13c256c3c6150b5482 100644 GIT binary patch delta 97 zcmewt{V#gMFE&P_&A-`fnHh~HKa|wnoW?bQ1uSxrY4Qod0+^@}R1`^_2jk{d(jGv4 NK<#LXK~l;gTmU8!BZvS1 delta 97 zcmewt{V#gMFE&QQ&A-`fnHdcyKa|wnoW?bQ1uSxrY4Qod0+^@}R1`^_2jk{d(jGv4 NK<#LXK~l;gTmU3rBY*$^ 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 ;