diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index cd35321..82bbc45 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ diff --git a/Pocketing.cpp b/Pocketing.cpp index a216759..a351e98 100644 --- a/Pocketing.cpp +++ b/Pocketing.cpp @@ -1424,6 +1424,10 @@ Pocketing::ProcessPath( int nPathId, int nPvId, int nClId) if ( plPlane.GetVersN() * vtExtr * dArea < 0) pCompo->Invert() ; + // unisco le parti allineate (tranne inizio-fine se chiusa) + if ( ! pCompo->MergeCurves( 10 * EPS_SMALL, 10 * EPS_ANG_SMALL, false, true)) + return false ; + // se ci sono lati aperti bool bMidOpen = false ; Point3d ptMidOpen ; @@ -1438,10 +1442,6 @@ Pocketing::ProcessPath( int nPathId, int nPvId, int nClId) } } - // unisco le parti allineate (tranne inizio-fine se chiusa) - if ( ! pCompo->MergeCurves( 10 * EPS_SMALL, 10 * EPS_ANG_SMALL, false)) - return false ; - // sposto l'inizio a metą del tratto pił lungo ( o aperto pił lungo) if ( bMidOpen) { double dPar ; int nFlag ; @@ -3764,20 +3764,37 @@ Pocketing::GetMidOfLongestOpenSide( const ICurveComposite* pCompo, Point3d& ptMi double dMaxLen = m_TParams.m_dDiam + 2 * GetOffsR() - EPS_SMALL ; // ciclo sulle singole curve bool bFound = false ; + const ICurve* pPrevCrv = pCompo->GetLastCurve() ; + double dLenPrev = 0 ; + if ( pPrevCrv != nullptr && pPrevCrv->GetTempProp() == 1) + pPrevCrv->GetLength( dLenPrev) ; const ICurve* pCrv = pCompo->GetFirstCurve() ; while ( pCrv != nullptr) { + // analizzo la curva successiva + const ICurve* pNextCrv = pCompo->GetNextCurve() ; + bool bNextOk = ( pNextCrv != nullptr) ; + if ( ! bNextOk) + pNextCrv = pCompo->GetFirstCurve() ; + double dLenNext = 0 ; + if ( pNextCrv != nullptr && pNextCrv->GetTempProp() == 1) + pNextCrv->GetLength( dLenNext) ; + // verifico la curva corrente if ( pCrv->GetTempProp() == 1) { - double dLen ; - if ( pCrv->GetLength( dLen) && dLen > dMaxLen) { - dMaxLen = dLen ; + double dLen = 0 ; + if ( pCrv->GetLength( dLen) && dLen + dLenPrev + dLenNext > dMaxLen) { + dMaxLen = dLen + dLenPrev + dLenNext ; pCrv->GetMidPoint( ptMid) ; - // vettore ortogonale verso l'esterno (ruotato -90deg rispetto a estrusione9 + // vettore ortogonale verso l'esterno (ruotato -90deg rispetto a estrusione) pCrv->GetMidDir( vtMidOrt) ; vtMidOrt.Rotate( vtExtr, 0, -1) ; bFound = true ; } + dLenPrev = dLen ; } - pCrv = pCompo->GetNextCurve() ; + else + dLenPrev = 0 ; + // vado alla successiva + pCrv = ( bNextOk ? pNextCrv : nullptr) ; } return bFound ; @@ -3796,7 +3813,7 @@ Pocketing::AdjustContourWithOpenEdges( ICurveComposite* pCompo) // sposto l'inizio a metą del tratto pił lungo AdjustContourStart( pCompo) ; // raggio di riferimento per offset - double dRad = 0.25 * m_TParams.m_dDiam + GetOffsR() ; + double dRad = 0.5 * m_TParams.m_dDiam + GetOffsR() ; // estraggo tutte le curve in un vettore ICURVEPOVECTOR vpCrvs ; vpCrvs.reserve( pCompo->GetCurveCount()) ;