diff --git a/SurfRoughing.cpp b/SurfRoughing.cpp index 777bc7f..ae7771c 100644 --- a/SurfRoughing.cpp +++ b/SurfRoughing.cpp @@ -1764,6 +1764,9 @@ SurfRoughing::CalcPaths( const INTINTVECTOR& vPocket, const ICRVCOMPOPOVECTOR& v for ( auto& vId : vPocket) { // recupero la superficie da lavorare + const ISurfFlatRegion* pSfrPock = GetSurfFlatRegion( m_pGeomDB->GetGeoObj( vId.first)) ; + if ( pSfrPock == nullptr || ! pSfrPock->IsValid()) + continue ; vStepInfo[nInd].pSfrPock.Set( CloneSurfFlatRegion( m_pGeomDB->GetGeoObj( vId.first))) ; // controllo se la regione è relativa ad uno step base o ad uno step intermedio vStepInfo[nInd].bIsSubStep = ( vStepInfo[nInd].pSfrPock->GetTempProp( 0) == 1) ; @@ -1833,17 +1836,6 @@ SurfRoughing::CalcPaths( const INTINTVECTOR& vPocket, const ICRVCOMPOPOVECTOR& v return false ; } } - // se la svuotatura è di tipo conformal ZigZag ma la geometria non è valida - if ( nSubType == SURFROU_SUB_CONFORMAL_ZIGZAG && vStepInfo[nInd].vPaths.empty()) { - if ( vStepInfo[nInd].bIsSubStep) { - string sWarn = "Warning in SurfRoughing : invalid Conformal ZigZag at substep (" + ToString( vStepInfo[nInd].dDepth, 1) + ")" ; - m_pMchMgr->SetWarning( 3056, sWarn) ; - } - else { - m_pMchMgr->SetLastError( 3030, "Error in SurfRoughing : Conformal ZigZag not valid at step (" + ToString( vStepInfo[nInd].dDepth, 1) + ")") ; - return false ; - } - } // se non ho ottenuto percorsi, allora passo allo step successivo ( nInd non viene aggiornato!) if ( vCrvPaths.empty()) continue ; @@ -2108,8 +2100,21 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co dCurrElev = dSafeZ ; double dNextElev = dSafeZ ; if ( bSafe) { - if ( bSamePlane && ! vStepInfo[i].vPaths[j+1].bOutStart) - dCurrElev -= currStep.dRelativeDepth ; + /* Questo controllo serve se passando da un chunk all'altro si interseca un ulteriore + Chunk non ancora svuotato; per ora non capita mai... + */ + //if ( bSamePlane) { + // dCurrElev -= currStep.dRelativeDepth ; + // dNextElev = dCurrElev ; + //} + if ( bSamePlane) { + if ( ( ( currStep.nSubType == SURFROU_SUB_SPIRALIN || currStep.nSubType == SURFROU_SUB_SPIRALOUT) && + ! vStepInfo[i].vPaths[j+1].bOutStart) || + ( currStep.nSubType != SURFROU_SUB_SPIRALIN && currStep.nSubType != SURFROU_SUB_SPIRALOUT)) { + dCurrElev -= currStep.dRelativeDepth ; + dNextElev = dCurrElev ; + } + } else if ( bNextIsBelow) dNextElev += ( ptEnd - ptDest) * vtTool ; else { @@ -3143,7 +3148,7 @@ SurfRoughing::VerifyLeadInLeadOut( const ICurve* pCrv, const ICurveComposite* pC return false ; // calcolo la Fat Curve del tratto lineare e la porto in globale - PtrOwner pSfrFat( GetSurfFlatRegionFromFatCurve( pCrvLoc->Clone(), m_TParams.m_dDiam / 2, false, false)) ; + PtrOwner pSfrFat( GetSurfFlatRegionFromFatCurve( pCrvLoc->Clone(), m_TParams.m_dDiam / 2 - 50 * EPS_SMALL, false, false)) ; if ( IsNull( pSfrFat) || ! pSfrFat->IsValid()) return false ;