EgtMachKernel :

- modifiche per visualizzazione utensili con lavorazioni.
This commit is contained in:
Dario Sassi
2017-07-01 19:21:38 +00:00
parent 0be287551f
commit d598c1a66b
14 changed files with 177 additions and 38 deletions
+49 -26
View File
@@ -1012,35 +1012,46 @@ Machine::GetDirection( const Vector3d& vtDir, const DBLVECTOR& vAng, Vector3d& v
{
// è espressa nel riferimento di macchina (tiene conto delle sole rotazioni di testa)
// verifico dimensione vettore angoli rispetto al numero di assi rotanti
if ( vAng.size() < m_vCalcRotAx.size())
return false ;
// direzione a riposo
vtNew = vtDir ;
// se c'è terzo asse rotante di testa
if ( m_vCalcRotAx.size() >= 3 && m_vCalcRotAx[2].bHead) {
// posizione e direzione secondo asse rotante
Point3d ptAx3 = m_vCalcRotAx[2].ptPos ;
Vector3d vtAx3 = m_vCalcRotAx[2].vtDir ;
// ruoto dati a riposo
vtNew.Rotate( vtAx3, vAng[2]) ;
// ciclo sugli assi di testa dall'ultimo (prima assi di tavola, poi di testa)
for ( size_t i = m_vCalcRotAx.size() ; i >= 1 ; -- i) {
// se asse di testa
if ( m_vCalcRotAx[i-1].bHead)
vtNew.Rotate( m_vCalcRotAx[i-1].vtDir, vAng[i-1]) ;
}
// se c'è secondo asse rotante di testa
if ( m_vCalcRotAx.size() >= 2 && m_vCalcRotAx[1].bHead) {
// posizione e direzione secondo asse rotante
Point3d ptAx2 = m_vCalcRotAx[1].ptPos ;
Vector3d vtAx2 = m_vCalcRotAx[1].vtDir ;
// ruoto dati a riposo
vtNew.Rotate( vtAx2, vAng[1]) ;
return true ;
}
//----------------------------------------------------------------------------
bool
Machine::GetBackDirection( const Vector3d& vtDir, const DBLVECTOR& vAng, Vector3d& vtNew) const
{
// è espressa nel riferimento del pezzo (tiene conto delle rotazioni di testa e al contrario di quelle di tavola)
// verifico dimensione vettore angoli rispetto al numero di assi rotanti
if ( vAng.size() < m_vCalcRotAx.size())
return false ;
// direzione a riposo
vtNew = vtDir ;
// ciclo sugli assi dall'ultimo (prima assi di tavola, poi di testa)
for ( size_t i = m_vCalcRotAx.size() ; i >= 1 ; -- i) {
// se asse di testa
if ( m_vCalcRotAx[i-1].bHead)
vtNew.Rotate( m_vCalcRotAx[i-1].vtDir, vAng[i-1]) ;
// altrimenti di tavola
else
vtNew.Rotate( m_vCalcRotAx[i-1].vtDir, - vAng[i-1]) ;
}
// se c'è primo asse rotante di testa
if ( m_vCalcRotAx.size() >= 1 && m_vCalcRotAx[0].bHead) {
// posizione e direzione primo asse rotante
Point3d ptAx1 = m_vCalcRotAx[0].ptPos ;
Vector3d vtAx1 = m_vCalcRotAx[0].vtDir ;
// ruoto dati a riposo
vtNew.Rotate( vtAx1, vAng[0]) ;
}
return true ;
}
@@ -1084,20 +1095,32 @@ Machine::GetTipFromPositions( double dX, double dY, double dZ, const DBLVECTOR&
//----------------------------------------------------------------------------
bool
Machine::GetToolDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) const
Machine::GetToolDirFromAngles( const DBLVECTOR& vAng, Vector3d& vtDir) const
{
DBLVECTOR vAng( 2) ; vAng[0] = dAngA ; vAng[1] = dAngB ;
return GetDirection( m_vtCalcDir, vAng, vtDir) ;
}
//----------------------------------------------------------------------------
bool
Machine::GetAuxDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) const
Machine::GetAuxDirFromAngles( const DBLVECTOR& vAng, Vector3d& vtDir) const
{
DBLVECTOR vAng( 2) ; vAng[0] = dAngA ; vAng[1] = dAngB ;
return GetDirection( m_vtCalcADir, vAng, vtDir) ;
}
//----------------------------------------------------------------------------
bool
Machine::GetBackToolDirFromAngles( const DBLVECTOR& vAng, Vector3d& vtDir) const
{
return GetBackDirection( m_vtCalcDir, vAng, vtDir) ;
}
//----------------------------------------------------------------------------
bool
Machine::GetBackAuxDirFromAngles( const DBLVECTOR& vAng, Vector3d& vtDir) const
{
return GetBackDirection( m_vtCalcADir, vAng, vtDir) ;
}
//----------------------------------------------------------------------------
bool
Machine::GetSccDir( int nSolCh, const Vector3d& vtDirA, Vector3d& vtDirScc) const