EgtMachKernel 1.6r4 :

- prima versione del bloccaggio assi rotanti.
This commit is contained in:
Dario Sassi
2016-05-18 15:24:18 +00:00
parent 9f60658c35
commit 7c4470b1d6
7 changed files with 98 additions and 92 deletions
+26 -60
View File
@@ -937,74 +937,40 @@ Machine::GetNearestAngleInStroke( int nId, double dAngRef, double& dAng) const
//----------------------------------------------------------------------------
bool
Machine::VerifyOutstroke( double dX, double dY, double dZ, double dAngA, double dAngB, int& nStat) const
Machine::VerifyOutstroke( double dX, double dY, double dZ, const DBLVECTOR& vAng, int& nStat) const
{
// default tutto ok
nStat = 0 ;
m_sOutstrokeInfo.clear() ;
// primo lineare
if ( m_vCalcLinAx.size() >= 1) {
if ( dX < m_vCalcLinAx[0].stroke.Min) {
nStat += 1 ;
string sAxName = GetAxis( m_vCalcLinAx[0].nGrpId)->GetName() ;
m_sOutstrokeInfo += sAxName + "=" + ToString( dX - m_vCalcLinAx[0].stroke.Min, 1) + " (L1-) " ;
// verifica degli assi lineari
DBLVECTOR vLin( 3) ; vLin[0] = dX ; vLin[1] = dY ; vLin[2] = dZ ;
for ( size_t i = 0 ; i < m_vCalcLinAx.size() && i < vLin.size() ; ++ i) {
if ( vLin[i] < m_vCalcLinAx[i].stroke.Min) {
nStat += ( 1 << ( 2 * i)) ;
string sAxName = GetAxis( m_vCalcLinAx[i].nGrpId)->GetName() ;
m_sOutstrokeInfo += sAxName + "=" + ToString( vLin[i] - m_vCalcLinAx[i].stroke.Min, 1) +
" (L" + ToString( int(i) + 1) + "-) " ;
}
else if( dX > m_vCalcLinAx[0].stroke.Max) {
nStat += 2 ;
string sAxName = GetAxis( m_vCalcLinAx[0].nGrpId)->GetName() ;
m_sOutstrokeInfo += sAxName + "=" + ToString( dX - m_vCalcLinAx[0].stroke.Max, 1) + " (L1+) " ;
else if( vLin[i] > m_vCalcLinAx[i].stroke.Max) {
nStat += ( 2 << ( 2 * i)) ;
string sAxName = GetAxis( m_vCalcLinAx[i].nGrpId)->GetName() ;
m_sOutstrokeInfo += sAxName + "=" + ToString( vLin[i] - m_vCalcLinAx[i].stroke.Max, 1) +
" (L" + ToString( int(i) + 1) + "+) " ;
}
}
// secondo lineare
if ( m_vCalcLinAx.size() >= 2) {
if ( dY < m_vCalcLinAx[1].stroke.Min) {
nStat += 4 ;
string sAxName = GetAxis( m_vCalcLinAx[1].nGrpId)->GetName() ;
m_sOutstrokeInfo += sAxName + "=" + ToString( dY - m_vCalcLinAx[1].stroke.Min, 1) + " (L2-) " ;
// verifica degli assi rotanti
for ( size_t i = 0 ; i < m_vCalcRotAx.size() && i < vAng.size() ; ++ i) {
if ( vAng[i] < m_vCalcRotAx[i].stroke.Min) {
nStat += ( 64 << ( 2 * i)) ;
string sAxName = GetAxis( m_vCalcRotAx[i].nGrpId)->GetName() ;
m_sOutstrokeInfo += sAxName + "=" + ToString( vAng[i] - m_vCalcRotAx[i].stroke.Min, 1) +
" (R" + ToString( int(i) + 1) + "-) " ;
}
else if( dY > m_vCalcLinAx[1].stroke.Max) {
nStat += 8 ;
string sAxName = GetAxis( m_vCalcLinAx[1].nGrpId)->GetName() ;
m_sOutstrokeInfo += sAxName + "=" + ToString( dY - m_vCalcLinAx[1].stroke.Max, 1) + " (L2+) " ;
}
}
// terzo lineare
if ( m_vCalcLinAx.size() >= 3) {
if ( dZ < m_vCalcLinAx[2].stroke.Min) {
nStat += 16 ;
string sAxName = GetAxis( m_vCalcLinAx[2].nGrpId)->GetName() ;
m_sOutstrokeInfo += sAxName + "=" + ToString( dZ - m_vCalcLinAx[2].stroke.Min, 1) + " (L3-) " ;
}
else if( dZ > m_vCalcLinAx[2].stroke.Max) {
nStat += 32 ;
string sAxName = GetAxis( m_vCalcLinAx[2].nGrpId)->GetName() ;
m_sOutstrokeInfo += sAxName + "=" + ToString( dZ - m_vCalcLinAx[2].stroke.Max, 1) + " (L3+) " ;
}
}
// eventuale primo rotante
if ( m_vCalcRotAx.size() >= 1) {
if ( dAngA < m_vCalcRotAx[0].stroke.Min) {
nStat += 64 ;
string sAxName = GetAxis( m_vCalcRotAx[0].nGrpId)->GetName() ;
m_sOutstrokeInfo += sAxName + "=" + ToString( dAngA - m_vCalcRotAx[0].stroke.Min, 1) + " (R1-) " ;
}
else if( dAngA > m_vCalcRotAx[0].stroke.Max) {
nStat += 128 ;
string sAxName = GetAxis( m_vCalcRotAx[0].nGrpId)->GetName() ;
m_sOutstrokeInfo += sAxName + "=" + ToString( dAngA - m_vCalcRotAx[0].stroke.Max, 1) + " (R1+) " ;
}
}
// eventuale secondo rotante
if ( m_vCalcRotAx.size() >= 2) {
if ( dAngB < m_vCalcRotAx[1].stroke.Min) {
nStat += 256 ;
string sAxName = GetAxis( m_vCalcRotAx[1].nGrpId)->GetName() ;
m_sOutstrokeInfo += sAxName + "=" + ToString( dAngB - m_vCalcRotAx[1].stroke.Min, 1) + " (R2-) " ;
}
else if( dAngB > m_vCalcRotAx[1].stroke.Max) {
nStat += 512 ;
string sAxName = GetAxis( m_vCalcRotAx[1].nGrpId)->GetName() ;
m_sOutstrokeInfo += sAxName + "=" + ToString( dAngB - m_vCalcRotAx[1].stroke.Max, 1) + " (R2+) " ;
else if( vAng[i] > m_vCalcRotAx[i].stroke.Max) {
nStat += ( 128 << ( 2 * i)) ;
string sAxName = GetAxis( m_vCalcRotAx[i].nGrpId)->GetName() ;
m_sOutstrokeInfo += sAxName + "=" + ToString( vAng[i] - m_vCalcRotAx[i].stroke.Max, 1) +
" (R" + ToString( int(i) + 1) + "+) " ;
}
}
return true ;