EgtMachKernel :
- gestione posizionamento pezzi su tavole con home assi non nullo - migliorata rotazione grezzi su centroide.
This commit is contained in:
+35
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user