diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 4495130..43e1f58 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ diff --git a/Milling.cpp b/Milling.cpp index 1c1c71f..f04d845 100644 --- a/Milling.cpp +++ b/Milling.cpp @@ -2321,7 +2321,7 @@ Milling::AddStandardMilling( const ICurveComposite* pCompo, const Vector3d& vtTo pCurve->GetStartDir( vtStart) ; // determino elevazione su inizio percorso di lavoro double dStElev ; - if ( ! GetElevation( m_nPhase, ptStart - 10 * EPS_SMALL * vtTool, vtTool, GetRadiusForStartEndElevation(), vtTool, dStElev)) + if ( ! GetElevation( m_nPhase, ptStart, vtTool, GetRadiusForStartEndElevation(), vtTool, dStElev)) dStElev = dElev ; // determino inizio attacco Point3d ptP1 ; @@ -2356,10 +2356,8 @@ Milling::AddStandardMilling( const ICurveComposite* pCompo, const Vector3d& vtTo vtEscape.Normalize() ; } double dNewStElev ; - if ( GetElevation( m_nPhase, ptP1 - 10 * EPS_SMALL * vtTool, vtTool, GetRadiusForStartEndElevation(), vtEscape, dNewStElev)) { - if ( bAboveStart || dNewStElev > EPS_SMALL) - dStElev = min( dStElev, dNewStElev) ; - } + if ( GetElevation( m_nPhase, ptP1, vtTool, GetRadiusForStartEndElevation(), vtEscape, dNewStElev)) + dStElev = min( dStElev, dNewStElev) ; // se testa sopra, determino se l'inizio dell'attacco è esattamente sotto il grezzo, nel qual caso ricalcolo l'elevazione bool bAhUnderStart = m_bAboveHead && GetAhPointUnderRaw( ptP1, vtTool, 0, GetRadiusForStartEndElevation(), m_TParams.m_dLen, false, dSafeZ, vtEscape, dStElev) ; @@ -2496,7 +2494,7 @@ Milling::AddStandardMilling( const ICurveComposite* pCompo, const Vector3d& vtTo pCurve->GetEndDir( vtEnd) ; // elevazione sul punto finale double dEndElev ; - if ( ! GetElevation( m_nPhase, ptEnd - 10 * EPS_SMALL * vtTool, vtTool, GetRadiusForStartEndElevation(), vtTool, dEndElev)) + if ( ! GetElevation( m_nPhase, ptEnd, vtTool, GetRadiusForStartEndElevation(), vtTool, dEndElev)) dEndElev = dElev ; // aggiungo uscita Point3d ptP1 ; @@ -2532,10 +2530,8 @@ Milling::AddStandardMilling( const ICurveComposite* pCompo, const Vector3d& vtTo vtEscape.Normalize() ; } double dNewEndElev ; - if ( GetElevation( m_nPhase, ptP1 - 10 * EPS_SMALL * vtTool, vtTool, GetRadiusForStartEndElevation(), vtEscape, dNewEndElev)) { - if ( bAboveEnd || dNewEndElev > EPS_SMALL) - dEndElev = min( dEndElev, dNewEndElev) ; - } + if ( GetElevation( m_nPhase, ptP1, vtTool, GetRadiusForStartEndElevation(), vtEscape, dNewEndElev)) + dEndElev = min( dEndElev, dNewEndElev) ; // se testa sopra, determino se l'inizio dell'uscita è esattamente sotto il grezzo, nel qual caso ricalcolo l'elevazione bool bAhUnderEnd = m_bAboveHead && GetAhPointUnderRaw( ptP1, vtTool, 0, GetRadiusForStartEndElevation(), m_TParams.m_dLen, false, dSafeZ, vtEscape, dEndElev) ; @@ -5826,13 +5822,13 @@ Milling::GetPointOutOfRaw( const Point3d& ptP, const Vector3d& vtTool, const Vec Vector3d vtSafe = vtCorr ; vtSafe.z = 0 ; vtSafe.Normalize() ; Point3d ptQ = ptP - ( vtSafe + vtMove) * max( 0.2 * dSafeZ, MIN_SAFEDIST) ; bool bOut = true ; - if ( ! GetElevation( m_nPhase, ptQ, vtTool, 0.5 * m_TParams.m_dDiam, vtMove, dTemp) || dTemp > 10 * EPS_SMALL) { + if ( ! GetElevation( m_nPhase, ptQ, vtTool, 0.5 * m_TParams.m_dDiam, m_TParams.m_dThick, vtMove, dTemp) || dTemp > 10 * EPS_SMALL) { bOut = false ; if ( ! m_bTiltingTab) return false ; } Point3d ptR = ptP + vtTool * m_TParams.m_dThick ; - if ( ! GetElevation( m_nPhase, ptR, vtTool, 0.5 * m_TParams.m_dDiam, vtMove, dTemp) || dTemp > 10 * EPS_SMALL) { + if ( ! GetElevation( m_nPhase, ptR, vtTool, 0.5 * m_TParams.m_dDiam, m_TParams.m_dThick, vtMove, dTemp) || dTemp > 10 * EPS_SMALL) { bOut = false ; if ( ! m_bTiltingTab) return false ; @@ -5840,9 +5836,9 @@ Milling::GetPointOutOfRaw( const Point3d& ptP, const Vector3d& vtTool, const Vec // se tavola basculante (o asse ralla) e non esterno, provo in direzione utensile if ( m_bTiltingTab && ! bOut) { vtMove = vtTool ; - if ( ! GetElevation( m_nPhase, ptQ, vtTool, 0.5 * m_TParams.m_dDiam, vtMove, dTemp) || dTemp > 10 * EPS_SMALL) + if ( ! GetElevation( m_nPhase, ptQ, vtTool, 0.5 * m_TParams.m_dDiam, m_TParams.m_dThick, vtMove, dTemp) || dTemp > 10 * EPS_SMALL) return false ; - if ( ! GetElevation( m_nPhase, ptR, vtTool, 0.5 * m_TParams.m_dDiam, vtMove, dTemp) || dTemp > 10 * EPS_SMALL) + if ( ! GetElevation( m_nPhase, ptR, vtTool, 0.5 * m_TParams.m_dDiam, m_TParams.m_dThick, vtMove, dTemp) || dTemp > 10 * EPS_SMALL) return false ; } return true ; diff --git a/Operation.cpp b/Operation.cpp index 8a9791a..f6b0b11 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -378,7 +378,7 @@ Operation::GetElevation( int nPhase, const Point3d& ptP1, const Point3d& ptP2, c return true ; } -#if 1 +#if 0 //---------------------------------------------------------------------------- bool @@ -506,10 +506,18 @@ Operation::GetElevation( int nPhase, const Point3d& ptP, const Vector3d& vtTool, pCAvTlStm->SetStdTool( dLen, dRad, 0) ; pCAvTlStm->SetSurfTm( *pStm) ; double dDist = 0 ; - // per Collision Avoid il punto di riferimento non è il tip dell'utensile ma il naso mandrino - if ( ! pCAvTlStm->TestPosition( ptPL + dLen * vtToolL, vtToolL, vtDirL, dDist)) - return false ; - if ( dDist > 0) + // non è ammesso un angolo oltre 90deg tra direzione utensile e vettore movimento + if ( vtToolL * vtDirL < 0) { + // il tip utensile è qui il naso mandrino per Collision Avoid + if ( ! pCAvTlStm->TestPosition( ptPL, -vtToolL, vtDirL, dDist)) + return false ; + } + else { + // per Collision Avoid il punto di riferimento non è il tip dell'utensile ma il naso mandrino + if ( ! pCAvTlStm->TestPosition( ptPL + dLen * vtToolL, vtToolL, vtDirL, dDist)) + return false ; + } + if ( dDist > EPS_SMALL) vRawElev.emplace_back( nStmId, dDist) ; } } @@ -539,7 +547,7 @@ Operation::GetElevation( int nPhase, const Point3d& ptP, const Vector3d& vtTool, } b3Tool.Expand( MAX_DIST_RAW) ; // verifico la reale interferenza dell'utensile con i diversi grezzi - for ( int i = 0 ; i < vRawElev.size() ; ++ i) { + for ( int i = 0 ; i < int( vRawElev.size()) ; ++ i) { // box del grezzo BBox3d b3Raw ; m_pGeomDB->GetGlobalBBox( vRawElev[i].first, b3Raw) ;