diff --git a/Milling.cpp b/Milling.cpp index 1f26db4..7fee94e 100644 --- a/Milling.cpp +++ b/Milling.cpp @@ -4228,13 +4228,46 @@ Milling::CalcTabsPositions( const ICurveComposite* pCompo, bool bPathTabsEnable, if ( ! bPathTabsEnable) return true ; + // lunghezza di un Tab + double dTabLen = tdTabs.m_dRampLen + tdTabs.m_dTopLen + tdTabs.m_dRampLen ; + // lunghezza del percorso double dLen ; pCompo->GetLength( dLen) ; dLen -= m_dAddedOverlap ; + // vettore estrusione del percorso + Vector3d vtExtr ; pCompo->GetExtrusion( vtExtr) ; + if ( vtExtr.IsSmall()) + vtExtr = Z_AX ; +#if 0 // determinazione intervalli validi Intervals ivTabs ; // inizializzo intervallo valido ivTabs.Set( 0, dLen) ; + // elimino le zone vicine agli angoli + bool bContinue = true ; + double dCurrLen = 0 ; + const ICurve* pCurrCrv = pCompo->GetFirstCurve() ; + const ICurve* pNextCrv = pCompo->GetNextCurve() ; + while ( pNextCrv != nullptr) { + // aggiorno lunghezza + double dTmp = 0 ; + pCurrCrv->GetLength( dTmp) ; + dCurrLen += dTmp ; + // verifico se angolo tra le entità + Vector3d vtTg1 ; pCurrCrv->GetEndDir( vtTg1) ; + Vector3d vtTg2 ; pCurrCrv->GetStartDir( vtTg2) ; + if ( abs( ( vtTg1 ^ vtTg2) * vtExtr) > sin( 5 * DEGTORAD)) { + + } + // passo al successivo + pCurrCrv = pNextCrv ; + pNextCrv = ( bContinue ? pCompo->GetNextCurve() : nullptr) ; + if ( pNextCrv == nullptr && pCompo->IsClosed()) { + pNextCrv = pCompo->GetFirstCurve() ; + bContinue = false ; + } + } + // elimino parti (test) if ( dLen > 300) { ivTabs.Subtract( 0, 100) ; @@ -4243,13 +4276,14 @@ Milling::CalcTabsPositions( const ICurveComposite* pCompo, bool bPathTabsEnable, else { ivTabs.Subtract( 0.4 * dLen, 0.6 * dLen) ; } +#endif // determino posizioni di inizio dei Tabs double dNextTab = 0.5 * tdTabs.m_dBottomLen ; double dCurrLen = 0 ; while ( dCurrLen + dNextTab < dLen) { vdTabs.emplace_back( dCurrLen + dNextTab) ; - dCurrLen += dNextTab + tdTabs.m_dRampLen + tdTabs.m_dTopLen + tdTabs.m_dRampLen ; + dCurrLen += dNextTab + dTabLen ; dNextTab = tdTabs.m_dBottomLen ; } if ( ! vdTabs.empty())