EgtMachKernel 2.6g2 :
- in sgrossatura superfici corretti approcci ai vari step e feed di discesa in aria - in calcolo movimenti 5assi corretto controllo punto medio (sbagliato con tavole mobili).
This commit is contained in:
+25
-3
@@ -1369,10 +1369,11 @@ Machine::GetNoseFromPositions( double dX, double dY, double dZ, const DBLVECTOR&
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::GetTipFromPositions( double dX, double dY, double dZ, const DBLVECTOR& vAng,
|
||||
bool bOverall, bool bBottom, Point3d& ptTip) const
|
||||
bool bOverall, bool bBottom, bool bBack, Point3d& ptTip) const
|
||||
{
|
||||
// la posizione deve essere espressa rispetto allo ZERO MACCHINA
|
||||
// è espressa nel riferimento di macchina (tiene conto delle sole rotazioni di testa)
|
||||
// se bBack vero, allora è nel riferimento pezzo
|
||||
|
||||
// verifico dimensione vettore angoli rispetto al numero di assi rotanti
|
||||
if ( vAng.size() < m_vCalcRotAx.size())
|
||||
@@ -1419,12 +1420,33 @@ Machine::GetTipFromPositions( double dX, double dY, double dZ, const DBLVECTOR&
|
||||
if ( m_nCalcChainType == KIN_CHAIN_ROBOT)
|
||||
ptTip.ToGlob( m_frRobot) ;
|
||||
|
||||
// Se richiesto nel riferimento pezzo
|
||||
if ( bBack) {
|
||||
// ciclo sugli assi lineari di tavola all'indietro
|
||||
DBLVECTOR vMov( {dX, dY, dZ}) ;
|
||||
for ( int i = int( m_vCalcLinAx.size()) ; i > 0 ; -- i) {
|
||||
if ( ! m_vCalcLinAx[i-1].bHead)
|
||||
ptTip += m_vCalcLinAx[i-1].vtDir * ( vMov[i-1] - m_vCalcLinAx[i-1].dHomeVal) ;
|
||||
}
|
||||
// ciclo sugli assi rotanti di tavola all'indietro !!! NON VERIFICATO !!!
|
||||
for ( int i = int( m_vCalcRotAx.size()) ; i > 0 ; -- i) {
|
||||
if ( ! m_vCalcRotAx[i-1].bHead)
|
||||
ptTip.Rotate( m_vCalcRotAx[i-1].ptPos, m_vCalcRotAx[i-1].vtDir, -vAng[i-1]) ;
|
||||
}
|
||||
}
|
||||
|
||||
// Se richiesto ingombro totale o punto sotto del tip utensile
|
||||
if ( bOverall || bBottom) {
|
||||
// calcolo la direzione fresa
|
||||
Vector3d vtDirT ;
|
||||
if ( ! GetDirection( m_vtCalcDir, vAng, vtDirT))
|
||||
return false ;
|
||||
if ( bBack) {
|
||||
if ( ! GetBackDirection( m_vtCalcDir, vAng, vtDirT))
|
||||
return false ;
|
||||
}
|
||||
else {
|
||||
if ( ! GetDirection( m_vtCalcDir, vAng, vtDirT))
|
||||
return false ;
|
||||
}
|
||||
// se richiesto ingombro totale
|
||||
if ( bOverall)
|
||||
ptTip -= vtDirT * max( m_dCalcTOvLen - m_dCalcTLen, 0.) ;
|
||||
|
||||
Reference in New Issue
Block a user