Merge commit '0ee84b1d1ae174054977df5c7e9a192ab8352d1b'

This commit is contained in:
Dario Sassi
2024-09-19 12:34:04 +02:00
+19 -14
View File
@@ -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<ISurfFlatRegion> pSfrFat( GetSurfFlatRegionFromFatCurve( pCrvLoc->Clone(), m_TParams.m_dDiam / 2, false, false)) ;
PtrOwner<ISurfFlatRegion> pSfrFat( GetSurfFlatRegionFromFatCurve( pCrvLoc->Clone(), m_TParams.m_dDiam / 2 - 50 * EPS_SMALL, false, false)) ;
if ( IsNull( pSfrFat) || ! pSfrFat->IsValid())
return false ;