diff --git a/PocketingNT.cpp b/PocketingNT.cpp index ac6c395..c69b5ab 100644 --- a/PocketingNT.cpp +++ b/PocketingNT.cpp @@ -44,7 +44,6 @@ #include "/EgtDev/Include/EGkCalcPocketing.h" #include "/EgtDev/Include/EGkSurfLocal.h" #include "/EgtDev/Include/EGkDistPointSurfFr.h" -#include "/EgtDev/Include/EGkDistPointSurfTm.h" #include using namespace std ; @@ -723,6 +722,20 @@ PocketingNT::MyApply( bool bRecalc, bool bPostApply) m_pGeomDB->EmptyGroup( nAuxId) ; bChain = true ; } + // altrimenti, controllo esistenza delle regioni (per compatibilità) + else { + int nPathId = m_pGeomDB->GetFirstGroupInGroup( nAuxId) ; + while ( nPathId != GDB_ID_NULL && ! bChain) { + int nGeoId = m_pGeomDB->GetFirstInGroup( nPathId) ; + while ( nGeoId != GDB_ID_NULL && ! bChain) { + bChain = ( m_pGeomDB->GetGeoType( nGeoId) != SRF_FLATRGN) ; + nGeoId = m_pGeomDB->GetNext( nGeoId) ; + } + nPathId = m_pGeomDB->GetNextGroup( nPathId) ; + } + if ( bChain) + m_pGeomDB->EmptyGroup( nAuxId) ; + } // rendo corrente l'utensile usato nella lavorazione if ( ! m_pMchMgr->SetCalcTool( m_TParams.m_sName, m_TParams.m_sHead, m_TParams.m_nExit)) { @@ -3629,7 +3642,8 @@ PocketingNT::CalcPaths( STEPINFOPOVECTOR& vStepInfo) ICRVCOMPOPOVECTOR vCrvPaths ; if ( ! CalcPocketing( vStepInfo[i].pSfrPock, m_TParams.m_dDiam / 2, GetOffsR(), m_Params.m_dSideStep, m_Params.m_dSideAngle, m_dOpenMinSafe, m_Params.m_nSubType, true, m_Params.m_bInvert, - false, true, bAdjustFeed, ptStartRef, vStepInfo[i].pSfrLimit, false, dMaxOptSize, vCrvPaths)) { + false, true, bAdjustFeed, ptStartRef, vStepInfo[i].pSfrLimit, false, dMaxOptSize, + m_Params.m_dLiTang, GetLeadInType(), vCrvPaths)) { m_pMchMgr->SetLastError( 3028, "Error in PocketingNT : Error in CalcPocketing") ; return false ; } @@ -3697,7 +3711,18 @@ PocketingNT::CalcPaths( STEPINFOPOVECTOR& vStepInfo) ! vStepInfo[i].vPaths[0].bOutStart && ! vStepInfo[i].vPaths[0].bOutEnd) ; } - + // se svuotatura a spirale ed entrata ad elica, aggiusto il raggio massimo + if ( m_Params.m_nSubType == POCKET_SUB_SPIRALOUT && GetLeadInType() == POCKET_LI_HELIX) { + for ( const StepInfoPO& currStep : vStepInfo) { + if ( currStep.pSfrPock != nullptr && currStep.pSfrPock->IsValid()) { + double dRad = 0. ; + currStep.pSfrPock->GetMaxOffset( dRad) ; + m_dMaxHelixRad = min( 0.5 * min( m_Params.m_dLiTang, m_TParams.m_dDiam), dRad - ( m_TParams.m_dDiam / 2. + GetOffsR())) ; ; + break ; + } + } + } + // calcolo la curva di ritorno ( se necessaria) for ( int i = 0 ; i < int( vStepInfo.size()) ; ++ i) { for ( int j = 0 ; j < int( vStepInfo[i].vPaths.size()) ; ++ j) { diff --git a/SurfFinishing.cpp b/SurfFinishing.cpp index 2628e21..07e505d 100644 --- a/SurfFinishing.cpp +++ b/SurfFinishing.cpp @@ -527,7 +527,7 @@ SurfFinishing::Apply( bool bRecalc, bool bPostApply) bool SurfFinishing::MyApply( bool bRecalc, bool bPostApply) { - // reset numero tagli nella lavorazione + // reset numero percorsi di finitura generati int nCurrPaths = m_nPaths ; m_nPaths = 0 ; @@ -586,6 +586,25 @@ SurfFinishing::MyApply( bool bRecalc, bool bPostApply) m_pGeomDB->EmptyGroup( nAuxId) ; bChain = true ; } + else { + // altrimenti, controllo esistenza delle regioni (per compatibilità) + int nPathId = m_pGeomDB->GetFirstGroupInGroup( nAuxId) ; + while ( nPathId != GDB_ID_NULL && ! bChain) { + int nGeoId = m_pGeomDB->GetFirstInGroup( nPathId) ; + while ( nGeoId != GDB_ID_NULL && ! bChain) { + if ( m_Params.m_nSubType == SURFFIN_SUB_ZIGZAG || m_Params.m_nSubType == SURFFIN_SUB_ONEWAY || + m_Params.m_nSubType == SURFFIN_SUB_SPIRALIN || m_Params.m_nSubType == SURFFIN_SUB_SPIRALOUT || + m_Params.m_nSubType == SURFFIN_SUB_Z_CONST || m_Params.m_nSubType == SURFFIN_SUB_OPTIMAL) + bChain = ( m_pGeomDB->GetGeoType( nGeoId) != SRF_FLATRGN) ; + else if ( m_Params.m_nSubType == SURFFIN_SUB_PROJECT) + bChain = ( m_pGeomDB->GetGeoType( nPathId) != CRV_COMPO) ; + nGeoId = m_pGeomDB->GetNext( nGeoId) ; + } + nPathId = m_pGeomDB->GetNextGroup( nPathId) ; + } + if ( bChain) + m_pGeomDB->EmptyGroup( nAuxId) ; + } // rendo corrente l'utensile usato nella lavorazione if ( ! m_pMchMgr->SetCalcTool( m_TParams.m_sName, m_TParams.m_sHead, m_TParams.m_nExit)) { @@ -1802,7 +1821,8 @@ SurfFinishing::AddZigZag( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf, cons double dPockRadOffs = m_TParams.m_dDiam / 2 - m_Params.m_dSideStep - m_Params.m_dOverlap ; ICRVCOMPOPOVECTOR vpCrvs ; if ( ! CalcPocketing( pSfrPock, dPockRad, dPockRadOffs, m_Params.m_dSideStep, m_Params.m_dSideAngle, 5., - POCKET_ZIGZAG, false, false, true, false, false, P_INVALID, nullptr, true, m_Params.m_dSideStep, vpCrvs)) { + POCKET_ZIGZAG, false, false, true, false, false, P_INVALID, nullptr, true, m_Params.m_dSideStep, + m_Params.m_dLiTang, GetLeadInType(), vpCrvs)) { m_pMchMgr->SetLastError( 3125, "Error in SurfFinishing : CalcPocketing failed") ; return false ; } @@ -2003,7 +2023,8 @@ SurfFinishing::AddOneWay( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf, cons double dPockRadOffs = m_TParams.m_dDiam / 2 - m_Params.m_dSideStep - m_Params.m_dOverlap ; ICRVCOMPOPOVECTOR vpCrvs ; if ( ! CalcPocketing( pSfrPock, dPockRad, dPockRadOffs, m_Params.m_dSideStep, m_Params.m_dSideAngle, 5., - POCKET_ONEWAY, false, false, true, false, false, P_INVALID, nullptr, true, m_Params.m_dSideStep, vpCrvs)) { + POCKET_ONEWAY, false, false, true, false, false, P_INVALID, nullptr, true, m_Params.m_dSideStep, + m_Params.m_dLiTang, GetLeadInType(), vpCrvs)) { m_pMchMgr->SetLastError( 3125, "Error in SurfFinishing : CalcPocketing failed") ; return false ; } @@ -2205,7 +2226,8 @@ SurfFinishing::AddSpiral( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf, cons int nType = ( bInVsOut ? POCKET_SPIRALIN : POCKET_SPIRALOUT) ; ICRVCOMPOPOVECTOR vpCrvs ; if ( ! CalcPocketing( pSfrPock, dPockRad, dPockRadOffs, m_Params.m_dSideStep, m_Params.m_dSideAngle, 5., - nType, false, false, true, false, false, P_INVALID, nullptr, true, m_Params.m_dSideStep, vpCrvs)) { + nType, false, false, true, false, false, P_INVALID, nullptr, true, m_Params.m_dSideStep, + m_Params.m_dLiTang, GetLeadInType(), vpCrvs)) { m_pMchMgr->SetLastError( 3125, "Error in SurfFinishing : CalcPocketing failed") ; return false ; } @@ -4502,7 +4524,8 @@ SurfFinishing::AddOptimal( ICAvToolSurfTm* pCAvTlStm, const SURFLOCALVECTOR& vSr // lavorazione Spiral ICRVCOMPOPOVECTOR vpCrvs ; if ( ! CalcPocketing( pSfrSpiral, m_Params.m_dSideStep, 0., m_Params.m_dSideStep, m_Params.m_dSideAngle, 5., - POCKET_SPIRALIN, false, false, true, false, false, P_INVALID, nullptr, true, m_Params.m_dSideStep, vpCrvs)) { + POCKET_SPIRALIN, false, false, true, false, false, P_INVALID, nullptr, true, m_Params.m_dSideStep, + m_Params.m_dLiTang, GetLeadInType(), vpCrvs)) { m_pMchMgr->SetLastError( 3125, "Error in SurfFinishing : CalcPocketing failed") ; return false ; } diff --git a/SurfRoughing.cpp b/SurfRoughing.cpp index 5e95cdb..ebc733a 100644 --- a/SurfRoughing.cpp +++ b/SurfRoughing.cpp @@ -2409,7 +2409,8 @@ SurfRoughing::CalcPaths( const INTINTVECTOR& vPocket, STEPINFOSRVECTOR& vStepInf ICRVCOMPOPOVECTOR vCrvPaths ; if ( ! CalcPocketing( vStepInfo[nInd].pSfrPock, m_TParams.m_dDiam / 2, 0., m_Params.m_dSideStep, m_Params.m_dSideAngle, 5., vStepInfo[nInd].nSubType, true, vStepInfo[nInd].bInverted, - false, true, true, ptEndLastPath, vStepInfo[nInd].pSfrLimit, false, m_Params.m_dSideStep, vCrvPaths)) { + false, true, true, ptEndLastPath, vStepInfo[nInd].pSfrLimit, false, m_Params.m_dSideStep, + m_Params.m_dLiTang, GetLeadInType(), vCrvPaths)) { if ( vStepInfo[nInd].bIsExtraStep) { string sWarn = "Warning in SurfRoughing : CalcPocketing failed with substep (" + ToString( vStepInfo[nInd].dDepth, 1) + ")" ; m_pMchMgr->SetWarning( 3055, sWarn) ;