From 7e656dab012ee667dfe4761646e7afb8ba7a0ffd Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 6 Oct 2016 17:58:06 +0000 Subject: [PATCH] EgtMachKernel : - in fresatura di percorsi chiusi aggiunta gestione overlap. --- MachMgrMachGroups.cpp | 2 +- Milling.cpp | 62 ++++++++++++++++++++++++++----------------- 2 files changed, 39 insertions(+), 25 deletions(-) diff --git a/MachMgrMachGroups.cpp b/MachMgrMachGroups.cpp index 7e16492..58897ab 100644 --- a/MachMgrMachGroups.cpp +++ b/MachMgrMachGroups.cpp @@ -71,7 +71,7 @@ MachMgr::GetMachGroupNewName( string& sName) const // se gruppo base per le lavorazioni assente if ( ! VerifyMachBase()) { if ( sName.empty()) - sName = "Mach01" ; + sName = "Mach_1" ; return true ; } // se nome vuoto, assegno radice standard diff --git a/Milling.cpp b/Milling.cpp index e96f4c6..a983368 100644 --- a/Milling.cpp +++ b/Milling.cpp @@ -922,10 +922,6 @@ Milling::ProcessPath( int nPathId, int nPvId, int nClId) return false ; ICurveComposite* pCompo = GetCurveComposite( m_pGeomDB->GetGeoObj( nCopyId)) ; - // unisco le parti allineate (tranne inizio-fine se chiusa) - if ( ! pCompo->MergeCurves( 10 * EPS_SMALL, 10 * EPS_ANG_SMALL, false)) - return false ; - // eventuale inversione percorso if ( m_Params.m_bInvert) pCompo->Invert() ; @@ -934,30 +930,48 @@ Milling::ProcessPath( int nPathId, int nPvId, int nClId) Point3d ptStart ; pCompo->GetStartPoint( ptStart) ; - // eventuale allungamento/accorciamento dell'inizio - if ( ! pCompo->IsClosed() && abs( m_Params.m_dStartAddLen) > EPS_SMALL) { - if ( m_Params.m_dStartAddLen > 0) { - if ( ! pCompo->ExtendStartByLen( m_Params.m_dStartAddLen)) - return false ; + // eventuali allungamenti per percorso aperto + if ( ! pCompo->IsClosed()) { + // eventuale allungamento/accorciamento dell'inizio + if ( abs( m_Params.m_dStartAddLen) > EPS_SMALL) { + if ( m_Params.m_dStartAddLen > 0) { + if ( ! pCompo->ExtendStartByLen( m_Params.m_dStartAddLen)) + return false ; + } + else { + if ( ! pCompo->TrimStartAtLen( - m_Params.m_dStartAddLen)) + return false ; + } } - else { - if ( ! pCompo->TrimStartAtLen( - m_Params.m_dStartAddLen)) - return false ; + // eventuale allungamento/accorciamento della fine + if ( abs( m_Params.m_dEndAddLen) > EPS_SMALL) { + if ( m_Params.m_dEndAddLen > 0) { + if ( ! pCompo->ExtendEndByLen( m_Params.m_dEndAddLen)) + return false ; + } + else { + double dLen ; + if ( ! pCompo->GetLength( dLen) || ! pCompo->TrimEndAtLen( dLen + m_Params.m_dEndAddLen)) + return false ; + } + } + } + // eventuale sovrapposizione per percorso chiuso + else { + if ( m_Params.m_dOverlap > EPS_SMALL) { + double dParS, dParE ; + if ( pCompo->GetParamAtLength( 0.0, dParS) && + pCompo->GetParamAtLength( m_Params.m_dOverlap, dParE)) { + PtrOwner pCrv( pCompo->CopyParamRange( dParS, dParE)) ; + if ( ! IsNull( pCrv)) + pCompo->AddCurve( Release( pCrv)) ; + } } } - // eventuale allungamento/accorciamento della fine - if ( ! pCompo->IsClosed() && abs( m_Params.m_dEndAddLen) > EPS_SMALL) { - if ( m_Params.m_dEndAddLen > 0) { - if ( ! pCompo->ExtendEndByLen( m_Params.m_dEndAddLen)) - return false ; - } - else { - double dLen ; - if ( ! pCompo->GetLength( dLen) || ! pCompo->TrimEndAtLen( dLen + m_Params.m_dEndAddLen)) - return false ; - } - } + // unisco le parti allineate (tranne inizio-fine se chiusa) + if ( ! pCompo->MergeCurves( 10 * EPS_SMALL, 10 * EPS_ANG_SMALL, false)) + return false ; // se utensile non centrato, eseguo correzione raggio utensile ed eventuale offset double dOffs = 0.5 * m_TParams.m_dDiam + GetOffsR() ;