diff --git a/VolZmapVolume.cpp b/VolZmapVolume.cpp index b563f56..aa31b3d 100644 --- a/VolZmapVolume.cpp +++ b/VolZmapVolume.cpp @@ -505,6 +505,7 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& if ( vtAs.IsSmall() || vtAe.IsSmall()) return false ; } + // Reset numero di parti m_nConnectedCompoCount = - 1 ; @@ -538,35 +539,30 @@ bool VolZmap::MillingGeneralMotionStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& vtAs, const Point3d& ptPe, const Vector3d& vtDe, const Vector3d& vtAe) { - // Ciclo sulle mappe - double dAngDeg ; - vtDs.GetAngle( vtDe, dAngDeg) ; - int nNumSubStep = int( abs( dAngDeg) / 0.5) ; - Vector3d vtMove = ptPe - ptPs ; - double dLenPath = vtMove.Len() ; - double dDeltaLen = dLenPath / nNumSubStep ; - vtMove /= dLenPath ; - bool bSuccessful = true ; - for ( int n = 0 ; n < nNumSubStep + 1 && bSuccessful ; ++ n) { - double dPathSt = 0 ; - double dPathEn = 0.5 * dDeltaLen ; - if ( n == nNumSubStep) { - dPathSt = ( n - 0.5) * dDeltaLen ; - dPathEn = n * dDeltaLen ; + // Divido il movimento in tratti con direzione utensile costante + const double ANG_STEP = 0.5 ; + double dAngDeg ; vtDs.GetAngle( vtDe, dAngDeg) ; + int nStepCnt = int( abs( dAngDeg) / ANG_STEP) + 1 ; + bool bOk = true ; + Point3d ptSt = ptPs ; + for ( int i = 0 ; i <= nStepCnt && bOk ; ++ i) { + double dPosCoeff, dDirCoeff ; + if ( i < nStepCnt) { + dPosCoeff = ( i + 0.5) / nStepCnt ; + dDirCoeff = double( i) / nStepCnt ; } - else if ( n > 0) { - dPathSt = ( n - 0.5) * dDeltaLen ; - dPathEn = ( n + 0.5) * dDeltaLen ; + else { + dPosCoeff = 1 ; + dDirCoeff = 1 ; } - Point3d ptSt = ptPs + dPathSt * vtMove ; - Point3d ptEn = ptPs + dPathEn * vtMove ; - Vector3d vtD = ( dLenPath - dPathSt) * vtDs + dPathSt * vtDe ; - vtD.Normalize() ; - Vector3d vtA = ( dLenPath - dPathSt) * vtAs + dPathSt * vtAe ; - vtA.Normalize() ; - bSuccessful = bSuccessful && MillingTranslationStep( ptSt, ptEn, vtD, vtA) ; + Point3d ptEn = Media( ptPs, ptPe, dPosCoeff) ; + Vector3d vtD = Media( vtDs, vtDe, dDirCoeff) ; vtD.Normalize() ; + Vector3d vtA = Media( vtAs, vtAe, dDirCoeff) ; vtA.Normalize() ; + bOk = bOk && MillingTranslationStep( ptSt, ptEn, vtD, vtA) ; + // aggiorno prossimo inizio + ptSt = ptEn ; } - return bSuccessful ; + return bOk ; } //----------------------------------------------------------------------------