EgtMachKernel 2.6g2 :

- in sgrossatura superfici corretti approcci ai vari step e feed di discesa in aria
- in calcolo movimenti 5assi corretto controllo punto medio (sbagliato con tavole mobili).
This commit is contained in:
Dario Sassi
2024-07-08 17:04:14 +02:00
parent 6755753509
commit 375a7f4636
7 changed files with 47 additions and 18 deletions
BIN
View File
Binary file not shown.
+2 -2
View File
@@ -775,7 +775,7 @@ MachMgr::GetCalcTipFromPositions( double dX, double dY, double dZ, double dAngA,
{
DBLVECTOR vAng( 2) ; vAng[0] = dAngA ; vAng[1] = dAngB ;
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetTipFromPositions( dX, dY, dZ, vAng, bOverall, bBottom, ptTip) : false) ;
return ( ( pMch != nullptr) ? pMch->GetTipFromPositions( dX, dY, dZ, vAng, bOverall, bBottom, false, ptTip) : false) ;
}
//----------------------------------------------------------------------------
@@ -784,7 +784,7 @@ MachMgr::GetCalcTipFromPositions( double dX, double dY, double dZ, const DBLVECT
bool bOverall, bool bBottom, Point3d& ptTip) const
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetTipFromPositions( dX, dY, dZ, vAng, bOverall, bBottom, ptTip) : false) ;
return ( ( pMch != nullptr) ? pMch->GetTipFromPositions( dX, dY, dZ, vAng, bOverall, bBottom, false, ptTip) : false) ;
}
//----------------------------------------------------------------------------
+1 -1
View File
@@ -147,7 +147,7 @@ class Machine
bool GetNoseFromPositions( double dX, double dY, double dZ, const DBLVECTOR& vAng,
Point3d& ptNose) const ;
bool GetTipFromPositions( double dX, double dY, double dZ, const DBLVECTOR& vAng,
bool bOverall, bool bBottom, Point3d& ptTip) const ;
bool bOverall, bool bBottom, bool bBack, Point3d& ptTip) const ;
bool GetToolDirFromAngles( const DBLVECTOR& vAng, Vector3d& vtDir) const ;
bool GetAuxDirFromAngles( const DBLVECTOR& vAng, Vector3d& vtDir) const ;
bool GetPartDirFromAngles( const Vector3d& vtPart, const DBLVECTOR& vAng, Vector3d& vtDir) const ;
+25 -3
View File
@@ -1369,10 +1369,11 @@ Machine::GetNoseFromPositions( double dX, double dY, double dZ, const DBLVECTOR&
//----------------------------------------------------------------------------
bool
Machine::GetTipFromPositions( double dX, double dY, double dZ, const DBLVECTOR& vAng,
bool bOverall, bool bBottom, Point3d& ptTip) const
bool bOverall, bool bBottom, bool bBack, Point3d& ptTip) const
{
// la posizione deve essere espressa rispetto allo ZERO MACCHINA
// è espressa nel riferimento di macchina (tiene conto delle sole rotazioni di testa)
// se bBack vero, allora è nel riferimento pezzo
// verifico dimensione vettore angoli rispetto al numero di assi rotanti
if ( vAng.size() < m_vCalcRotAx.size())
@@ -1419,12 +1420,33 @@ Machine::GetTipFromPositions( double dX, double dY, double dZ, const DBLVECTOR&
if ( m_nCalcChainType == KIN_CHAIN_ROBOT)
ptTip.ToGlob( m_frRobot) ;
// Se richiesto nel riferimento pezzo
if ( bBack) {
// ciclo sugli assi lineari di tavola all'indietro
DBLVECTOR vMov( {dX, dY, dZ}) ;
for ( int i = int( m_vCalcLinAx.size()) ; i > 0 ; -- i) {
if ( ! m_vCalcLinAx[i-1].bHead)
ptTip += m_vCalcLinAx[i-1].vtDir * ( vMov[i-1] - m_vCalcLinAx[i-1].dHomeVal) ;
}
// ciclo sugli assi rotanti di tavola all'indietro !!! NON VERIFICATO !!!
for ( int i = int( m_vCalcRotAx.size()) ; i > 0 ; -- i) {
if ( ! m_vCalcRotAx[i-1].bHead)
ptTip.Rotate( m_vCalcRotAx[i-1].ptPos, m_vCalcRotAx[i-1].vtDir, -vAng[i-1]) ;
}
}
// Se richiesto ingombro totale o punto sotto del tip utensile
if ( bOverall || bBottom) {
// calcolo la direzione fresa
Vector3d vtDirT ;
if ( ! GetDirection( m_vtCalcDir, vAng, vtDirT))
return false ;
if ( bBack) {
if ( ! GetBackDirection( m_vtCalcDir, vAng, vtDirT))
return false ;
}
else {
if ( ! GetDirection( m_vtCalcDir, vAng, vtDirT))
return false ;
}
// se richiesto ingombro totale
if ( bOverall)
ptTip -= vtDirT * max( m_dCalcTOvLen - m_dCalcTLen, 0.) ;
+1 -1
View File
@@ -2332,7 +2332,7 @@ Operation::VerifyLineMidPoint( const Point3d& ptPrec, const Vector3d& vtDirPrec,
vAxRotMid[i-3] = vAxMid[i] ;
// ricavo il punto medio del movimento
Point3d ptMoveMid ;
if ( ! pMachine->GetTipFromPositions( vAxMid[0], vAxMid[1], vAxMid[2], vAxRotMid, false, false, ptMoveMid))
if ( ! pMachine->GetTipFromPositions( vAxMid[0], vAxMid[1], vAxMid[2], vAxRotMid, false, false, true, ptMoveMid))
return false ;
// verifico le differenze
double dDist ;
+17 -10
View File
@@ -1847,6 +1847,8 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co
else if ( ! bSingleCrv && nSubType == SURFROU_SUB_SPIRALIN)
if ( ! CalcRetCrv( vpCrvs[k], ptUp, bOutStart, pRCrv))
return false ;
// flag approccio libero in aria
bool bOutLeadIn = ( bOutStart || bSingleCrv || bOptTrap) ;
// determino inizio attacco
Point3d ptP1 ;
if ( ! CalcLeadInStart( ptStart, vtStart, vtExtr, pRCrv, ptP1))
@@ -1871,16 +1873,21 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co
}
// altrimenti, approccio di collegamento
else {
// cambio posizione punto per fare elica o similari solo sulla parte con materiale
if ( ( GetLeadInType() == POCKET_LI_ZIGZAG ||
GetLeadInType() == POCKET_LI_HELIX ||
GetLeadInType() == POCKET_LI_GLIDE) && ! bIsSubStep) {
ptP1 -= ( nBasicStep * dStep) * vtTool ;
}
if ( ! AddLinkApproach( ptP1, vtTool, dSafeZ, dStElev, dAppr)) {
if ( ! AddLinkApproach( ptP1, vtTool, dSafeZ, dStElev, dAppr, bOutLeadIn)) {
m_pMchMgr->SetLastError( 3012, "Error in SurfRoughing : Link not computable") ;
return false ;
}
// se attacco elica od equivalente di step pieno, devo fare elica o similari solo sulla parte con materiale
if ( ! bIsSubStep &&
( GetLeadInType() == POCKET_LI_ZIGZAG ||
GetLeadInType() == POCKET_LI_HELIX ||
GetLeadInType() == POCKET_LI_GLIDE)) {
ptP1 -= ( nBasicStep * dStep) * vtTool ;
SetFeed( GetStartFeed()) ;
SetFlag( 0) ;
if ( AddLinearMove( ptP1) == GDB_ID_NULL)
return false ;
}
}
// aggiungo attacco
SetFeed( GetStartFeed()) ;
@@ -1900,7 +1907,7 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co
if ( ! AddLeadIn( ptP1, ptStart, vtStart, vtExtr, pCompo,
( ( nSubType == SURFROU_SUB_SPIRALIN || nSubType == SURFROU_SUB_SPIRALOUT)) ? Get( pRCrv) : nullptr,
( nSubType == SURFROU_SUB_SPIRALOUT) ? m_Params.m_bInvert : ! m_Params.m_bInvert,
bSplitArcs, ( bOutStart || bSingleCrv || bOptTrap), false)) {
bSplitArcs, bOutLeadIn, false)) {
m_pMchMgr->SetLastError( 3013, "Error in SurfRoughing : LeadIn not computable") ;
return false ;
}
@@ -2013,7 +2020,7 @@ SurfRoughing::AddApproach( const Point3d& ptP, const Vector3d& vtTool, double dS
//----------------------------------------------------------------------------
bool
SurfRoughing::AddLinkApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr)
SurfRoughing::AddLinkApproach(const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr, bool bOutMove)
{
// se sopra attacco c'è spazio per approccio
if ( ( dElev + dAppr) > 10 * EPS_SMALL) {
@@ -2026,7 +2033,7 @@ SurfRoughing::AddLinkApproach( const Point3d& ptP, const Vector3d& vtTool, doubl
}
// affondo al punto iniziale
SetFlag( 0) ;
SetFeed( GetTipFeed()) ;
SetFeed( bOutMove ? GetStartFeed() : GetTipFeed()) ;
if ( AddLinearMove( ptP) == GDB_ID_NULL)
return false ;
}
+1 -1
View File
@@ -79,7 +79,7 @@ class SurfRoughing : public Machining
bool AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, const Vector3d& vtExtr,
double dElev, double dStep, bool bSplitArcs) ;
bool AddApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr) ;
bool AddLinkApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr) ;
bool AddLinkApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr, bool bOutMove) ;
bool AddLinkRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr) ;
bool AddRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr) ;
bool CalcLeadInStart( const Point3d& ptStart, const Vector3d& vtStart, const Vector3d& vtTool, const ICurveComposite* pCrvPath, Point3d& ptP1) const ;