EgtMachKernel :

- gestione posizionamento pezzi su tavole con home assi non nullo
- migliorata rotazione grezzi su centroide.
This commit is contained in:
Dario Sassi
2016-10-04 07:33:38 +00:00
parent 7468c3bf17
commit d7234d57d1
5 changed files with 82 additions and 9 deletions
+35 -1
View File
@@ -108,6 +108,31 @@ Machine::GetCurrTableArea1( BBox3d& b3Area1) const
return true ;
}
//----------------------------------------------------------------------------
bool
Machine::GetCurrTableDeltaRef1( Vector3d& vtDelta1) const
{
Table* pTab = GetTable( m_nCalcTabId) ;
if ( pTab == nullptr)
return false ;
// recupero la posizione corrente del riferimento 1 della tavola
// riferimento globale del gruppo tavola
Frame3d frTable ;
m_pGeomDB->GetGroupGlobFrame( m_nCalcTabId, frTable) ;
// recupero il primo riferimento della tavola
int nRef1 = m_pGeomDB->GetFirstNameInGroup( m_nCalcTabId, MCH_TREF + "1") ;
if ( nRef1 == GDB_ID_NULL || m_pGeomDB->GetGeoType( nRef1) != GEO_FRAME3D)
return false ;
// recupero frame
const Frame3d& frFrame = GetGeoFrame3d( m_pGeomDB->GetGeoObj( nRef1))->GetFrame() ;
// ne calcolo l'origine in globale
Point3d ptPos = frFrame.Orig() ;
ptPos.ToGlob( frTable) ;
// calcolo il delta
vtDelta1 = ptPos - pTab->GetRef1() ;
return true ;
}
//----------------------------------------------------------------------------
bool
Machine::SetCurrTool( const string& sTool, const string& sHead, int nExit)
@@ -367,6 +392,7 @@ Machine::AddKinematicAxis( bool bOnHead, int nId)
kAx.ptPos = pAx->GetPos() ;
kAx.vtDir = pAx->GetDir() ;
kAx.stroke = pAx->GetStroke() ;
kAx.dHomeVal = pAx->GetHomeVal() ;
// se lineare di tavola, devo invertirlo
if ( kAx.bLinear && ! kAx.bHead)
kAx.vtDir.Invert() ;
@@ -802,13 +828,21 @@ Machine::GetPositions( const Point3d& ptP, DBLVECTOR vAng,
int& nStat, double& dX, double& dY, double& dZ) const
{
// la posizione deve essere espressa rispetto allo ZERO MACCHINA
// il punto è dato rispetto alla posizione home della tavola
// aggiorno punto di lavoro mediante ciclo diretto sugli assi di tavola
Point3d ptW = ptP ;
// annullo la posizione home degli assi lineari
for ( size_t i = 0 ; i < m_vCalcLinAx.size() ; ++ i) {
// se asse di tavola
if ( ! m_vCalcLinAx[i].bHead)
ptW.Translate( - m_vCalcLinAx[i].dHomeVal * ( - m_vCalcLinAx[i].vtDir)) ;
}
// effettuo rotazione diminuita della posizione home degli assi rotanti
for ( size_t i = 0 ; i < m_vCalcRotAx.size() ; ++ i) {
// se asse di tavola
if ( ! m_vCalcRotAx[i].bHead)
ptW.Rotate( m_vCalcRotAx[i].ptPos, m_vCalcRotAx[i].vtDir, vAng[i]) ;
ptW.Rotate( m_vCalcRotAx[i].ptPos, m_vCalcRotAx[i].vtDir, vAng[i] - m_vCalcRotAx[i].dHomeVal) ;
}
// aggiorno posizione e direzione fresa su testa a riposo mediante ciclo inverso sugli assi di testa