diff --git a/SurfFinishing.cpp b/SurfFinishing.cpp index 9042df9..2327131 100644 --- a/SurfFinishing.cpp +++ b/SurfFinishing.cpp @@ -2472,6 +2472,9 @@ SurfFinishing::CorrectPathByCollision( ICAvToolSurfTm* pCAvTlStm, const Frame3d& // porto i dati geometrici in locale alle superfici Vector3d vtToolL = GetToLoc( vtTool, frSurf) ; // direzione utensile Vector3d vtMoveL = GetToLoc( vtMove, frSurf) ; // direzione risalita per collisione + const double MIN_DIST = 1. ; + const double MAX_DIST = 50. ; + double dDist = Clamp( m_TParams.m_dDiam / 2, MIN_DIST, MAX_DIST) ; // scorro le curve double dProgCoeff = 1. / max( int( vpCrvs.size()), 1) ; @@ -2485,9 +2488,6 @@ SurfFinishing::CorrectPathByCollision( ICAvToolSurfTm* pCAvTlStm, const Frame3d& if ( ! vpCrvs[i]->ApproxWithLines( LIN_TOL_STD, ANG_TOL_STD_DEG, ICurve::APL_SPECIAL, PL)) return false ; // eventuale aggiunta di punti per garantire max distanza - const double MIN_DIST = 1. ; - const double MAX_DIST = 50. ; - double dDist = Clamp( m_TParams.m_dDiam / 2, MIN_DIST, MAX_DIST) ; if ( ! PL.AdjustForMaxSegmentLen( dDist)) return false ; // porto nel riferimento delle superfici @@ -5703,7 +5703,7 @@ SurfFinishing::CalcOptimalZigZagCurves( ISURFFRPOVECTOR& vSfrZigZagProj, const F pSfrChunk->ToGlob( frSurf) ; // eseguo il calcolo della lavorazione ZigZag ICRVCOMPOPOVECTOR vpCrvs ; - if ( ! CalcPocketing( pSfrChunk, m_TParams.m_dDiam / 2., 0., m_Params.m_dSideStep, m_Params.m_dSideAngle, 5., + if ( ! CalcPocketing( pSfrChunk, m_TParams.m_dDiam / 2., 0., m_Params.m_dSideStep, GetLocalSideAngle(), 5., nSubType, false, false, false, true, true, false, false, P_INVALID, nullptr, true, m_Params.m_dSideStep, GetLeadInType(), m_Params.m_dLiTang, 0., GetLeadOutType(), m_Params.m_dLoTang, false, 0., 0., false, vpCrvs)) { m_pMchMgr->SetLastError( 3125, "Error in SurfFinishing : CalcPocketing failed") ; @@ -5715,9 +5715,7 @@ SurfFinishing::CalcOptimalZigZagCurves( ISURFFRPOVECTOR& vSfrZigZagProj, const F } // porto i dati geometrici in locale alle superfici ( proeittando) - Vector3d vtAxL = vtTool ; - vtAxL.ToLoc( frSurf) ; - Vector3d vtMoveL = vtAxL ; + Vector3d vtToolL = GetToLoc( vtTool, frSurf) ; const double MIN_DIST = 1. ; const double MAX_DIST = 50. ; double dDist = Clamp( m_Params.m_dApprox, MIN_DIST, MAX_DIST) ; @@ -5735,14 +5733,15 @@ SurfFinishing::CalcOptimalZigZagCurves( ISURFFRPOVECTOR& vSfrZigZagProj, const F if ( ! vCrvCompoZigZag[i]->ApproxWithLines( LIN_TOL_STD, ANG_TOL_STD_DEG, ICurve::APL_SPECIAL, PL) || ! PL.AdjustForMaxSegmentLen( dDist)) return false ; + // porto nel riferimento delle superfici PL.ToLoc( frSurf) ; // traslo della lunghezza utensile diminuita dell'affondamento - PL.Translate( vtAxL * ( m_TParams.m_dLen - dDepth)) ; + PL.Translate( vtToolL * ( m_TParams.m_dLen - dDepth)) ; // eseguo CAv - if ( ! pCAvTlStm->TestPath( PL.GetUPointList(), vtAxL, vtMoveL, m_Params.m_dApprox, ( i + 1) * dProgCoeff)) + if ( ! pCAvTlStm->TestPath( PL.GetUPointList(), vtToolL, vtToolL, m_Params.m_dApprox, ( i + 1) * dProgCoeff)) return false ; // contro-traslo della lunghezza utensile - PL.Translate( - vtAxL * m_TParams.m_dLen) ; + PL.Translate( - vtToolL * m_TParams.m_dLen) ; // elimino i punti allineati PL.RemoveAlignedPoints( 0.8 * m_Params.m_dApprox) ; // creo una curva composita a partire dalla polilinea @@ -6242,8 +6241,7 @@ SurfFinishing::AreSameSfrChunkEpsilon( const ISurfFlatRegion* pSfrChunkA, const //---------------------------------------------------------------------------- bool SurfFinishing::CalcOptimalZigZagRegion( const ISurfFlatRegion* pSfrCntLoc, const ISurfFlatRegion* pSfrZLevelColl, - const SURFLOCALVECTOR& vSrfLoc, const Frame3d& frSurf, const Vector3d& vtToolLoc, double dDepth, - double dSplitAngDeg, ISURFFRPOVECTOR& vpSfrZigZagProj) const + ISURFFRPOVECTOR& vpSfrZigZagProj) const { // verifico validità dei parametri if ( pSfrCntLoc == nullptr || ! pSfrCntLoc->IsValid()) @@ -6324,7 +6322,7 @@ SurfFinishing::AddOptimal( ICAvToolSurfTm* pCAvTlStm, const SURFLOCALVECTOR& vSr // [3°] calcolo della regione di proiezione ZigZag --- ISURFFRPOVECTOR vSfrZigZagProj ; - if ( ! CalcOptimalZigZagRegion( pSfrCntLimit, pSfrZLevelColl, vSrfLoc, frSurf, GetToLoc( vtTool, frSurf), dDepth, dAngDegSplit, vSfrZigZagProj)) { + if ( ! CalcOptimalZigZagRegion( pSfrCntLimit, pSfrZLevelColl, vSfrZigZagProj)) { m_pMchMgr->SetLastError( 3124, "Error in SurfFinishing : region not computable") ; return false ; } diff --git a/SurfFinishing.h b/SurfFinishing.h index 2e7f455..40c019b 100644 --- a/SurfFinishing.h +++ b/SurfFinishing.h @@ -222,8 +222,7 @@ class SurfFinishing : public Machining double dLimInfClippingAng, double dLimSupClippingAng, const Vector3d& vtAxL, const Vector3d& vtMoveL, ICAvToolSurfTm* pCAvTlStm, ICRVCOMPOPOVECTOR& vCrvCompo) const ; bool AreSameSfrChunkEpsilon( const ISurfFlatRegion* pSfrChunkA, const ISurfFlatRegion* pSfrChunkB, double dMaxDist) const ; - bool CalcOptimalZigZagRegion( const ISurfFlatRegion* pSfrCntLoc, const ISurfFlatRegion* pSfrZLevelColl, const SURFLOCALVECTOR& vSrfLoc, - const Frame3d& frSurf, const Vector3d& vtTool, double dDepth, double dSplitAngDeg, ISURFFRPOVECTOR& vpSfrZigZagProj) const ; + bool CalcOptimalZigZagRegion( const ISurfFlatRegion* pSfrCntLoc, const ISurfFlatRegion* pSfrZLevelColl, ISURFFRPOVECTOR& vpSfrZigZagProj) const ; double GetRightFeed( const Vector3d& vtMove, const Vector3d& vtTool) const ; double GetRadiusForStartEndElevation( void) const ; double GetLocalSideAngle() const ;