From 5f1f9ae06c624bd2f7478165efefa9cf45c12dd2 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Fri, 5 Feb 2016 17:28:17 +0000 Subject: [PATCH] EgtMachKernel : - aggiunto posizionamento in home alla fine delle lavorazioni. --- Drilling.cpp | 4 +-- Machining.cpp | 83 +++++++++++++++++++++++++++++++++++++++++++++++++-- Machining.h | 4 ++- Sawing.cpp | 4 +-- 4 files changed, 88 insertions(+), 7 deletions(-) diff --git a/Drilling.cpp b/Drilling.cpp index 8159336..52d31ac 100644 --- a/Drilling.cpp +++ b/Drilling.cpp @@ -425,8 +425,8 @@ Drilling::Apply( bool bRecalc) if ( ! CalculateAxesValues()) return false ; - // gestione movimenti all'inizio di ogni singolo percorso di lavorazione - if ( ! AdjustStartMovements()) + // gestione movimenti all'inizio di ogni singolo percorso di lavorazione e alla fine della lavorazione + if ( ! AdjustStartEndMovements()) return false ; return true ; diff --git a/Machining.cpp b/Machining.cpp index 96f59cd..d257657 100644 --- a/Machining.cpp +++ b/Machining.cpp @@ -686,7 +686,7 @@ Machining::CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes, //---------------------------------------------------------------------------- bool -Machining::AdjustStartMovements(void) +Machining::AdjustStartEndMovements(void) { if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr) return false ; @@ -761,7 +761,8 @@ Machining::AdjustStartMovements(void) } // aggiungo risalita finale - AddRise( vAxVal) ; + bOk = bOk && AddRise( vAxVal) ; + bOk = bOk && AddHome() ; return bOk ; } @@ -918,6 +919,84 @@ Machining::RemoveRise( void) m_pGeomDB->Erase( nId) ; nId = m_pGeomDB->GetFirstNameInGroup( nClPathId, MCH_RISE) ; } + // elimino a maggior ragione le entità HOME + nId = m_pGeomDB->GetFirstNameInGroup( nClPathId, MCH_HOME) ; + while ( nId != GDB_ID_NULL) { + m_pGeomDB->Erase( nId) ; + nId = m_pGeomDB->GetFirstNameInGroup( nClPathId, MCH_HOME) ; + } + + return true ; +} + +//---------------------------------------------------------------------------- +bool +Machining::AddHome( void) +{ + if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr) + return false ; + // recupero gruppo per geometria di lavorazione (Cutter Location) + int nClId = m_pGeomDB->GetFirstNameInGroup( GetOwner(), MCH_CL) ; + if ( nClId == GDB_ID_NULL) + return false ; + // recupero l'ultimo percorso + int nLastPxClId = m_pGeomDB->GetLastGroupInGroup( nClId) ; + // recupero l'ultima entità del percorso di nome RISE + int nEntId = m_pGeomDB->GetLastNameInGroup( nLastPxClId, MCH_RISE) ; + if ( nEntId == GDB_ID_NULL) + return false ; + // ne recupero i dati Cam + CamData* pCamData = dynamic_cast( m_pGeomDB->GetUserObj( nEntId)) ; + if ( pCamData == nullptr) + return false ; + // creo oggetto punto per DB geometrico + PtrOwner pGP( CreateGeoPoint3d()) ; + if ( IsNull( pGP)) + return false ; + // assegno le coordinate del punto + pGP->Set( pCamData->GetBasePoint()) ; + // inserisco l'oggetto nel DB geometrico + int nId = m_pGeomDB->AddGeoObj( GDB_ID_NULL, nLastPxClId, Release( pGP)) ; + if ( nId == GDB_ID_NULL) + return false ; + m_pGeomDB->SetName( nId, MCH_HOME) ; + // creo oggetto dati Cam + PtrOwner pCam( pCamData->Clone()) ; + if ( IsNull( pCam)) + return false ; + // flag di movimento in rapido (rapido a Home) + int nFlag = 4 ; + // recupero coordinate home + DBLVECTOR vAxHome ; + m_pMchMgr->GetAllCalcAxesHomePos( vAxHome) ; + // assegno i dati + pCam->SetAxes( CamData::AS_OK, vAxHome) ; + pCam->SetFeed( 0) ; + pCam->SetFlag( nFlag) ; + // associo questo oggetto a quello geometrico + m_pGeomDB->SetUserObj( nId, Release( pCam)) ; + + return true ; +} + +//---------------------------------------------------------------------------- +bool +Machining::RemoveHome( void) +{ + if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr) + return false ; + // recupero gruppo per geometria di lavorazione (Cutter Location) + int nClId = m_pGeomDB->GetFirstNameInGroup( GetOwner(), MCH_CL) ; + if ( nClId == GDB_ID_NULL) + return false ; + // recupero l'ultimo percorso CL + int nClPathId = m_pGeomDB->GetLastGroupInGroup( nClId) ; + // elimino tutte le entità HOME alla fine del percorso + int nId = m_pGeomDB->GetFirstNameInGroup( nClPathId, MCH_HOME) ; + while ( nId != GDB_ID_NULL) { + m_pGeomDB->Erase( nId) ; + nId = m_pGeomDB->GetFirstNameInGroup( nClPathId, MCH_HOME) ; + } return true ; } diff --git a/Machining.h b/Machining.h index f1aecd4..ce7ce43 100644 --- a/Machining.h +++ b/Machining.h @@ -65,11 +65,13 @@ class Machining : public IUserObj bool CalculateAxesValues( void) ; bool CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes, double dRot1W, double& dAngAprec, double& dAngBprec) ; - bool AdjustStartMovements( void) ; + bool AdjustStartEndMovements( void) ; bool AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev) ; bool ToolChangeNeeded( const ToolData& T1, const ToolData& T2) ; bool AddRise( DBLVECTOR& vAxVal, double dDelta = - 1) ; bool RemoveRise( void) ; + bool AddHome( void) ; + bool RemoveHome( void) ; bool CalcDeltaZForHeadRotation( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, double& dDeltaZ) ; protected : diff --git a/Sawing.cpp b/Sawing.cpp index 18c8030..055681f 100644 --- a/Sawing.cpp +++ b/Sawing.cpp @@ -478,8 +478,8 @@ Sawing::Apply( bool bRecalc) if ( ! CalculateAxesValues()) return false ; - // gestione movimenti all'inizio di ogni singolo percorso di lavorazione - if ( ! AdjustStartMovements()) + // gestione movimenti all'inizio di ogni singolo percorso di lavorazione e alla fine della lavorazione + if ( ! AdjustStartEndMovements()) return false ; return true ;