EgtMachKernel 3.1c7 :

- esportata VerifyOutstroke con angoli da vettore di double
- resa più robusta GetCalcAngles che restituisce due soli assi rotanti (ora i primi due)
- nelle GetCalcAngles ora si applicano gli assi bloccati impostati tramite SetBlockedRotAxis
- consentiti fino a 4 assi rotanti nelle catene cinematiche dei centri di lavoro.
This commit is contained in:
Dario Sassi
2026-03-25 16:42:53 +01:00
parent 8fed51ca79
commit b6ef052c50
5 changed files with 75 additions and 23 deletions
+29 -2
View File
@@ -742,9 +742,36 @@ Machine::CalculateKinematicChain( void)
}
}
}
// se più di 3
// se 4 va bene ( due dovranno poi avere valore assegnato)
else if ( m_vCalcRotAx.size() == 4) {
int n2ndHeadRotAx = - 1 ;
// se tutti e quattro di testa, devo invertire il primo con il quarto e il secondo con il terzo
if ( m_vCalcRotAx[0].bHead && m_vCalcRotAx[1].bHead && m_vCalcRotAx[2].bHead && m_vCalcRotAx[3].bHead) {
swap( m_vCalcRotAx[0], m_vCalcRotAx[3]) ;
swap( m_vCalcRotAx[1], m_vCalcRotAx[2]) ;
n2ndHeadRotAx = 1 ;
}
// se altrimenti ultimi tre di testa, devo invertire il secondo con il quarto
else if ( m_vCalcRotAx[1].bHead && m_vCalcRotAx[2].bHead && m_vCalcRotAx[3].bHead) {
swap( m_vCalcRotAx[1], m_vCalcRotAx[3]) ;
n2ndHeadRotAx = 2 ;
}
// se altrimenti ultimi due di testa, devo invertirne l'ordine
else if ( m_vCalcRotAx[2].bHead && m_vCalcRotAx[3].bHead) {
swap( m_vCalcRotAx[2], m_vCalcRotAx[3]) ;
n2ndHeadRotAx = 3 ;
}
// impongo limiti di corsa sul secondo asse rotante di testa
if ( n2ndHeadRotAx > 0) {
Head* pHead = GetHead( m_nCalcHeadId) ;
if ( pHead != nullptr) {
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) ;
}
}
}
// altrimenti più di 4 non ancora gestito, quindi errore
else {
// altrimenti non ancora gestito, quindi errore
LOG_ERROR( GetEMkLogger(), "Rotary Axes not manageable")
return false ;
}