diff --git a/WaterJetting.cpp b/WaterJetting.cpp index 25ef9cc..fc9cca7 100644 --- a/WaterJetting.cpp +++ b/WaterJetting.cpp @@ -1311,17 +1311,27 @@ WaterJetting::ProcessPath( int nPathId, int nPvId, int nClId) double dThick ; pCompo->GetThickness( dThick) ; - // se percorso chiuso con inizio/fine su angolo interno, porto la partenza a metą del primo lato + // se percorso chiuso con lavorazione all'interno, porto la partenza a metą del lato pił lungo if ( pCompo->IsClosed()) { - Vector3d vtStart, vtEnd ; - pCompo->GetStartDir( vtStart) ; - pCompo->GetEndDir( vtEnd) ; - if ( ! AreSameVectorApprox( vtStart, vtEnd)) { - bool bAngCCW = ( ( vtEnd ^ vtStart) * vtTool > 0.0) ; - if ( m_Params.m_nWorkSide == WJET_WS_CENTER || - ( m_Params.m_nWorkSide == WJET_WS_RIGHT && ! bAngCCW) || - ( m_Params.m_nWorkSide == WJET_WS_LEFT && bAngCCW)) - pCompo->ChangeStartPoint( 0.5) ; + double dArea ; + if ( pCompo->GetAreaXY( dArea) && + ( ( dArea < 0 && m_Params.m_nWorkSide == WJET_WS_RIGHT) || + ( dArea > 0 && m_Params.m_nWorkSide == WJET_WS_LEFT))) { + int i = 0 ; + int nMax = - 1 ; + double dLenMax = 0 ; + const ICurve* pCrv = pCompo->GetFirstCurve() ; + while ( pCrv != nullptr) { + double dLen ; + if ( pCrv->GetLength( dLen) && dLen > dLenMax) { + dLenMax = dLen ; + nMax = i ; + } + ++ i ; + pCrv = pCompo->GetNextCurve() ; + } + if ( nMax >= 0) + pCompo->ChangeStartPoint( nMax + 0.5) ; } }