EgtMachKernel 2.2g3 :

- quando si prendono gli angoli finali della lavorazione precedente, possibilità di saltare le posizioni RISE
- in tagli con lama corretta gestione spessore lama su facce lavorate al contrario.
This commit is contained in:
Dario Sassi
2020-07-11 09:24:56 +00:00
parent 14e7894c23
commit eb98dfcf07
4 changed files with 26 additions and 15 deletions
+16 -7
View File
@@ -1027,7 +1027,7 @@ Operation::GetClPathInitialAxesValues( int nClPathId, DBLVECTOR& vAxVal) const
//----------------------------------------------------------------------------
bool
Operation::GetFinalAxesValues( DBLVECTOR& vAxVal) const
Operation::GetFinalAxesValues( bool bSkipRise, DBLVECTOR& vAxVal) const
{
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
return false ;
@@ -1038,17 +1038,26 @@ Operation::GetFinalAxesValues( DBLVECTOR& vAxVal) const
// recupero l'ultimo percorso CL
int nClPathId = m_pGeomDB->GetLastGroupInGroup( nClId) ;
// restituisco i valori finali degli assi di questo percorso di lavorazione
return GetClPathFinalAxesValues( nClPathId, vAxVal) ;
return GetClPathFinalAxesValues( nClPathId, bSkipRise, vAxVal) ;
}
//----------------------------------------------------------------------------
bool
Operation::GetClPathFinalAxesValues( int nClPathId, DBLVECTOR& vAxVal) const
Operation::GetClPathFinalAxesValues( int nClPathId, bool bSkipRise, DBLVECTOR& vAxVal) const
{
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
return false ;
// recupero l'ultima entità di questo percorso
int nEntId = m_pGeomDB->GetLastInGroup( nClPathId) ;
// se richiesto di ignorare le entità RISE
if ( bSkipRise) {
while ( nEntId != GDB_ID_NULL) {
string sName ;
if ( ! m_pGeomDB->GetName( nEntId, sName) || sName != MCH_CL_RISE)
break ;
nEntId = m_pGeomDB->GetPrev( nEntId) ;
}
}
// recupero i dati Cam dell'entità
CamData* pCamData = GetCamData( m_pGeomDB->GetUserObj( nEntId)) ;
if ( pCamData == nullptr)
@@ -1129,7 +1138,7 @@ Operation::CalculateAxesValues( const string& sHint, bool bSolChExact)
DBLVECTOR vAxVal ;
// se utensile non cambiato, uso gli angoli finali della lavorazione precedente
if ( ! sPrevTool.empty() && ! ToolChangeNeeded( *pPrevOp, *this) &&
pPrevOp->GetFinalAxesValues( vAxVal)) {
pPrevOp->GetFinalAxesValues( true, vAxVal)) {
for ( int i = 0 ; i < nRotAxes ; ++ i)
vAxRotPrec[i] = vAxVal[nLinAxes + i] ;
}
@@ -1606,7 +1615,7 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink)
// cancello risalita lavorazione precedente
pPrevOp->RemoveRise() ;
// recupero posizione finale lavorazione precedente
if ( ! pPrevOp->GetFinalAxesValues( vAxVal))
if ( ! pPrevOp->GetFinalAxesValues( false, vAxVal))
return false ;
// se richiesta verifica collegamento con lavorazione precedente
if ( bVerifyPreviousLink) {
@@ -1676,7 +1685,7 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink)
// cancello eventuale risalita parziale della lavorazione precedente
pPrevOp->RemoveRise() ;
// recupero le nuove quote finali (per calcolare il corretto delta)
pPrevOp->GetFinalAxesValues( vAxVal) ;
pPrevOp->GetFinalAxesValues( false, vAxVal) ;
// aggiungo risalita a Zsafe
if ( ! pPrevOp->AddRise( vAxVal, dSafeZ - vAxVal[2]))
return false ;
@@ -1751,7 +1760,7 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink)
bMaxZ = false ;
// recupero nuovi finali
RemoveRise( nClPathId) ;
if ( ! GetClPathFinalAxesValues( nClPathId, vAxVal))
if ( ! GetClPathFinalAxesValues( nClPathId, false, vAxVal))
bOk = false ;
// passo al successivo
nPrevClPathId = nClPathId ;