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:
+29
-2
@@ -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 ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user