EgtMachKernel 1.8c5 :

- aggiunta GetCalcAuxDirFromAngles
- migliorata gestione transizione tra una lavorazione e la successiva.
This commit is contained in:
Dario Sassi
2017-03-20 07:38:52 +00:00
parent 9707d91882
commit eb28adc272
7 changed files with 48 additions and 24 deletions
+29 -23
View File
@@ -1088,7 +1088,7 @@ Operation::AdjustStartEndMovements( void)
// determino posizione precedente assi
DBLVECTOR vAxVal ;
bool bHomeZ = false ;
bool bMaxZ = false ;
// se primo utensile o richiesto, uso la posizione home
if ( sPrevTool.empty() || NeedPrevHome()) {
// imposto l'utensile per i calcoli macchina
@@ -1097,8 +1097,8 @@ Operation::AdjustStartEndMovements( void)
// recupero posizione home
if ( ! m_pMchMgr->GetAllCalcAxesHomePos( vAxVal))
return false ;
// si parte da HomeZ
bHomeZ = true ;
// si parte da Z massima
bMaxZ = true ;
}
// se utensile non cambiato o su diversa uscita della stessa testa, uso posizione finale della lavorazione precedente
else if ( ! ToolChangeNeeded( *pPrevOp, *this)) {
@@ -1111,19 +1111,22 @@ Operation::AdjustStartEndMovements( void)
DBLVECTOR vAxIni ;
if ( ! pPrevOp->GetFinalAxesValues( vAxVal) || ! GetInitialAxesValues( vAxIni))
return false ;
// aggiungo eventuale delta Z
double dDelta = 0 ;
// determino delta Z rispetto a posizione finale
if ( vAxVal.size() >= 4 && vAxIni.size() >= 4) {
// verifico se movimento assi rotanti richiede una risalita parziale
double dDelta = 0 ;
if ( ! CalcDeltaZForHeadRotation( vAxVal, vAxIni, dDelta))
return false ;
// se necessaria, aggiungo risalita parziale
if ( dDelta > EPS_SMALL) {
if ( ! pPrevOp->AddRise( vAxVal, dDelta))
return false ;
// aggiorno quota in Z della posizione iniziale ( anche se verrà aggiornata solo in seguito)
vAxIni[2] = vAxVal[2] ;
}
}
// confronto con eventuale risalita di inizio lavorazione
dDelta = max( dDelta, ( vAxIni[2] - vAxVal[2])) ;
// se necessaria, aggiungo risalita parziale
if ( dDelta > 100 * EPS_SMALL) {
if ( ! pPrevOp->AddRise( vAxVal, dDelta))
return false ;
// aggiorno quota in Z della posizione iniziale ( anche se verrà aggiornata solo in seguito)
vAxIni[2] = vAxVal[2] ;
}
// verifico se la testa interferisce con i pezzi o i bloccaggi sulla tavola
if ( ! TestCollisionAvoid( vAxVal, vAxIni)) {
@@ -1132,8 +1135,8 @@ Operation::AdjustStartEndMovements( void)
// aggiungo risalita a Zmax
if ( ! pPrevOp->AddRise( vAxVal))
return false ;
// si parte da HomeZ
bHomeZ = true ;
// si parte da Z massima
bMaxZ = true ;
}
}
// altrimenti aggiungo uscita per cambio utensile alla lavorazione precedente e parto da questa
@@ -1148,8 +1151,8 @@ Operation::AdjustStartEndMovements( void)
// imposto l'utensile per i calcoli macchina
if ( ! m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()))
return false ;
// si parte da HomeZ
bHomeZ = true ;
// si parte da Z massima
bMaxZ = true ;
}
// aggiusto l'inizio di ogni percorso di lavoro
@@ -1157,9 +1160,9 @@ Operation::AdjustStartEndMovements( void)
int nClPathId = m_pGeomDB->GetFirstGroupInGroup( nClId) ;
while ( bOk && nClPathId != GDB_ID_NULL) {
// sistemo inizio
if ( ! AdjustOneStartMovement( nClPathId, vAxVal, bHomeZ))
if ( ! AdjustOneStartMovement( nClPathId, vAxVal, bMaxZ))
bOk = false ;
bHomeZ = false ;
bMaxZ = false ;
// recupero nuovi finali
if ( ! GetClPathFinalAxesValues( nClPathId, vAxVal))
bOk = false ;
@@ -1170,15 +1173,18 @@ Operation::AdjustStartEndMovements( void)
// aggiungo risalita finale
bOk = bOk && AddRise( vAxVal) ;
// vado in home
bOk = bOk && AddHome() ;
// se ultima operazione o la successiva lo richiede, vado in home
int nNextOpId = m_pMchMgr->GetNextActiveOperation( m_nOwnerId) ;
Operation* pNextOp = GetOperation( m_pGeomDB->GetUserObj( nNextOpId)) ;
if ( pNextOp == nullptr || pNextOp->NeedPrevHome())
bOk = bOk && AddHome() ;
return bOk ;
}
//----------------------------------------------------------------------------
bool
Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool bHomeZ)
Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool bMaxZ)
{
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
return false ;
@@ -1191,8 +1197,8 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool
// recupero i valori degli assi
DBLVECTOR vAxCurr ;
vAxCurr = pCamData->GetAxesVal() ;
// se provengo da HomeZ (ovvero Z massima)
if ( bHomeZ) {
// se provengo da Z massima
if ( bMaxZ) {
// copio l'entità
if ( m_pGeomDB->Copy( nEntId, GDB_ID_NULL, nEntId, GDB_AFTER) == GDB_ID_NULL)
return false ;
@@ -1283,7 +1289,7 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool
// altrimenti
else {
// se Z pressochè uguali non devo fare alcunché
if ( fabs( vAxCurr[2] - vAxPrev[2]) < 10 * EPS_SMALL)
if ( fabs( vAxCurr[2] - vAxPrev[2]) < 100 * EPS_SMALL)
return true ;
// se Z corrente maggiore della precedente
else if ( vAxCurr[2] > vAxPrev[2]) {