EgtMachKernel 1.6w4 :
- migliorie varie per gestire tre assi rotanti - aggiunta a MachMgr funzione GetAxisToken.
This commit is contained in:
+19
-10
@@ -828,7 +828,7 @@ Machine::GetPositions( const Point3d& ptP, double dAngA, double dAngB,
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::GetPositions( const Point3d& ptP, DBLVECTOR vAng,
|
||||
Machine::GetPositions( const Point3d& ptP, const DBLVECTOR& vAng,
|
||||
int& nStat, double& dX, double& dY, double& dZ) const
|
||||
{
|
||||
// la posizione deve essere espressa rispetto allo ZERO MACCHINA
|
||||
@@ -881,7 +881,7 @@ Machine::GetPositions( const Point3d& ptP, DBLVECTOR vAng,
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::GetHeadOffsetDelta( DBLVECTOR vAng,
|
||||
Machine::GetHeadOffsetDelta( const DBLVECTOR& vAng,
|
||||
double& dRecX, double& dRecY, double& dRecZ) const
|
||||
{
|
||||
// ovviamente tutto è espresso nel riferimento ZERO MACCHINA
|
||||
@@ -917,20 +917,29 @@ Machine::GetHeadOffsetDelta( DBLVECTOR vAng,
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::GetDirection( const Vector3d& vtDir, double dAngA, double dAngB, Vector3d& vtNew) const
|
||||
Machine::GetDirection( const Vector3d& vtDir, const DBLVECTOR& vAng, Vector3d& vtNew) const
|
||||
{
|
||||
// è espressa nel riferimento di macchina (tiene conto delle sole rotazioni di testa)
|
||||
|
||||
// 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]) ;
|
||||
}
|
||||
|
||||
// se c'è secondo asse rotante di testa
|
||||
if ( m_vCalcRotAx.size() >= 2 && m_vCalcRotAx[1].bHead) {
|
||||
// posizione e direzione primo asse rotante
|
||||
// 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, dAngB) ;
|
||||
vtNew.Rotate( vtAx2, vAng[1]) ;
|
||||
}
|
||||
|
||||
// se c'è primo asse rotante di testa
|
||||
@@ -939,14 +948,14 @@ Machine::GetDirection( const Vector3d& vtDir, double dAngA, double dAngB, Vector
|
||||
Point3d ptAx1 = m_vCalcRotAx[0].ptPos ;
|
||||
Vector3d vtAx1 = m_vCalcRotAx[0].vtDir ;
|
||||
// ruoto dati a riposo
|
||||
vtNew.Rotate( vtAx1, dAngA) ;
|
||||
vtNew.Rotate( vtAx1, vAng[0]) ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::GetTipFromPositions( double dX, double dY, double dZ, double dAngA, double dAngB,
|
||||
Machine::GetTipFromPositions( double dX, double dY, double dZ, const DBLVECTOR& vAng,
|
||||
bool bOverall, bool bBottom, Point3d& ptTip) const
|
||||
{
|
||||
// la posizione deve essere espressa rispetto allo ZERO MACCHINA
|
||||
@@ -954,7 +963,6 @@ Machine::GetTipFromPositions( double dX, double dY, double dZ, double dAngA, dou
|
||||
|
||||
// Calcoli recuperi della testa e lunghezza utensile per orientamento
|
||||
double dRecX, dRecY, dRecZ ;
|
||||
DBLVECTOR vAng( 2) ; vAng[0] = dAngA ; vAng[1] = dAngB ;
|
||||
if ( ! GetHeadOffsetDelta( vAng, dRecX, dRecY, dRecZ))
|
||||
return false ;
|
||||
ptTip.Set( dX - dRecX, dY - dRecY, dZ - dRecZ) ;
|
||||
@@ -963,7 +971,7 @@ Machine::GetTipFromPositions( double dX, double dY, double dZ, double dAngA, dou
|
||||
if ( bOverall || bBottom) {
|
||||
// calcolo la direzione fresa
|
||||
Vector3d vtDirT ;
|
||||
if ( ! GetDirection( m_vtCalcDir, dAngA, dAngB, vtDirT))
|
||||
if ( ! GetDirection( m_vtCalcDir, vAng, vtDirT))
|
||||
return false ;
|
||||
// se richiesto ingombro totale
|
||||
if ( bOverall)
|
||||
@@ -987,7 +995,8 @@ Machine::GetTipFromPositions( double dX, double dY, double dZ, double dAngA, dou
|
||||
bool
|
||||
Machine::GetToolDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) const
|
||||
{
|
||||
return GetDirection( m_vtCalcDir, dAngA, dAngB, vtDir) ;
|
||||
DBLVECTOR vAng( 2) ; vAng[0] = dAngA ; vAng[1] = dAngB ;
|
||||
return GetDirection( m_vtCalcDir, vAng, vtDir) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user