diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 58fac06..69591e1 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ diff --git a/Operation.cpp b/Operation.cpp index 1afdacf..8f642c2 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -1027,7 +1027,7 @@ Operation::GetClPathInitialAxesValues( int nClPathId, DBLVECTOR& vAxVal) const //---------------------------------------------------------------------------- bool -Operation::GetFinalAxesValues( DBLVECTOR& vAxVal) const +Operation::GetFinalAxesValues( bool bSkipRise, DBLVECTOR& vAxVal) const { if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr) return false ; @@ -1038,17 +1038,26 @@ Operation::GetFinalAxesValues( DBLVECTOR& vAxVal) const // recupero l'ultimo percorso CL int nClPathId = m_pGeomDB->GetLastGroupInGroup( nClId) ; // restituisco i valori finali degli assi di questo percorso di lavorazione - return GetClPathFinalAxesValues( nClPathId, vAxVal) ; + return GetClPathFinalAxesValues( nClPathId, bSkipRise, vAxVal) ; } //---------------------------------------------------------------------------- bool -Operation::GetClPathFinalAxesValues( int nClPathId, DBLVECTOR& vAxVal) const +Operation::GetClPathFinalAxesValues( int nClPathId, bool bSkipRise, DBLVECTOR& vAxVal) const { if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr) return false ; // recupero l'ultima entità di questo percorso int nEntId = m_pGeomDB->GetLastInGroup( nClPathId) ; + // se richiesto di ignorare le entità RISE + if ( bSkipRise) { + while ( nEntId != GDB_ID_NULL) { + string sName ; + if ( ! m_pGeomDB->GetName( nEntId, sName) || sName != MCH_CL_RISE) + break ; + nEntId = m_pGeomDB->GetPrev( nEntId) ; + } + } // recupero i dati Cam dell'entità CamData* pCamData = GetCamData( m_pGeomDB->GetUserObj( nEntId)) ; if ( pCamData == nullptr) @@ -1129,7 +1138,7 @@ Operation::CalculateAxesValues( const string& sHint, bool bSolChExact) DBLVECTOR vAxVal ; // se utensile non cambiato, uso gli angoli finali della lavorazione precedente if ( ! sPrevTool.empty() && ! ToolChangeNeeded( *pPrevOp, *this) && - pPrevOp->GetFinalAxesValues( vAxVal)) { + pPrevOp->GetFinalAxesValues( true, vAxVal)) { for ( int i = 0 ; i < nRotAxes ; ++ i) vAxRotPrec[i] = vAxVal[nLinAxes + i] ; } @@ -1606,7 +1615,7 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink) // cancello risalita lavorazione precedente pPrevOp->RemoveRise() ; // recupero posizione finale lavorazione precedente - if ( ! pPrevOp->GetFinalAxesValues( vAxVal)) + if ( ! pPrevOp->GetFinalAxesValues( false, vAxVal)) return false ; // se richiesta verifica collegamento con lavorazione precedente if ( bVerifyPreviousLink) { @@ -1676,7 +1685,7 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink) // cancello eventuale risalita parziale della lavorazione precedente pPrevOp->RemoveRise() ; // recupero le nuove quote finali (per calcolare il corretto delta) - pPrevOp->GetFinalAxesValues( vAxVal) ; + pPrevOp->GetFinalAxesValues( false, vAxVal) ; // aggiungo risalita a Zsafe if ( ! pPrevOp->AddRise( vAxVal, dSafeZ - vAxVal[2])) return false ; @@ -1751,7 +1760,7 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink) bMaxZ = false ; // recupero nuovi finali RemoveRise( nClPathId) ; - if ( ! GetClPathFinalAxesValues( nClPathId, vAxVal)) + if ( ! GetClPathFinalAxesValues( nClPathId, false, vAxVal)) bOk = false ; // passo al successivo nPrevClPathId = nClPathId ; diff --git a/Operation.h b/Operation.h index 911924c..84f34b3 100644 --- a/Operation.h +++ b/Operation.h @@ -93,8 +93,8 @@ class Operation : public IUserObj bool GetInitialAxesValues( DBLVECTOR& vAxVal) const ; bool GetClPathInitialAxesValues( int nClPathId, DBLVECTOR& vAxVal) const ; - bool GetFinalAxesValues( DBLVECTOR& vAxVal) const ; - bool GetClPathFinalAxesValues( int nClPathId, DBLVECTOR& vAxVal) const ; + bool GetFinalAxesValues( bool bSkipRise, DBLVECTOR& vAxVal) const ; + bool GetClPathFinalAxesValues( int nClPathId, bool bSkipRise, DBLVECTOR& vAxVal) const ; std::string ExtractInfo( const std::string& sNotes, const std::string& sKey) const ; std::string ExtractHint( const std::string& sNotes) const ; bool CalculateAxesValues( const std::string& sHint, bool bSolChExact = false) ; diff --git a/Sawing.cpp b/Sawing.cpp index 333ce09..b1039e2 100644 --- a/Sawing.cpp +++ b/Sawing.cpp @@ -1194,7 +1194,7 @@ Sawing::GetCurve( SelData Id) pCrvCompo->ToGlob( frGlob) ; vtN.ToGlob( frGlob) ; // sistemazioni varie - AdjustCurveFromSurf( pCrvCompo, TOOL_ORTUP, FACE_DOWN, m_TParams.m_dThick) ; + AdjustCurveFromSurf( pCrvCompo, TOOL_ORTUP, FACE_DOWN, 0) ; // aggiusto lato lavoro e inverti, angolo di fianco e lato mandrino if ( m_Params.m_nWorkSide == SAW_WS_CENTER) m_Params.m_nWorkSide = SAW_WS_RIGHT ; @@ -1207,12 +1207,12 @@ Sawing::GetCurve( SelData Id) // taglio soprasquadra else if ( dSideAng < ANG_RIGHT) { m_Params.m_dSideAngle = ANG_RIGHT - dSideAng ; - m_Params.m_nHeadSide = ( m_Params.m_nWorkSide = SAW_WS_RIGHT ? SAW_HS_RIGHT : SAW_HS_LEFT) ; + m_Params.m_nHeadSide = ( m_Params.m_nWorkSide == SAW_WS_RIGHT ? SAW_HS_RIGHT : SAW_HS_LEFT) ; } // taglio sottosquadra else { m_Params.m_dSideAngle = ANG_RIGHT - dSideAng ; - m_Params.m_nHeadSide = ( m_Params.m_nWorkSide = SAW_WS_RIGHT ? SAW_HS_LEFT : SAW_HS_RIGHT) ; + m_Params.m_nHeadSide = ( m_Params.m_nWorkSide == SAW_WS_RIGHT ? SAW_HS_LEFT : SAW_HS_RIGHT) ; } // la restituisco return Release( pCrvCompo) ; @@ -1241,7 +1241,7 @@ Sawing::GetCurve( SelData Id) pCrvCompo->ToGlob( frGlob) ; vtN.ToGlob( frGlob) ; // sistemazioni varie - AdjustCurveFromSurf( pCrvCompo, TOOL_ORTUP, FACE_DOWN, m_TParams.m_dThick) ; + AdjustCurveFromSurf( pCrvCompo, TOOL_ORTUP, FACE_DOWN, 0) ; // aggiusto lato lavoro e inverti, angolo di fianco e lato mandrino if ( m_Params.m_nWorkSide == SAW_WS_CENTER) m_Params.m_nWorkSide = SAW_WS_RIGHT ; @@ -1254,12 +1254,12 @@ Sawing::GetCurve( SelData Id) // taglio soprasquadra else if ( dSideAng < ANG_RIGHT) { m_Params.m_dSideAngle = ANG_RIGHT - dSideAng ; - m_Params.m_nHeadSide = ( m_Params.m_nWorkSide = SAW_WS_RIGHT ? SAW_HS_RIGHT : SAW_HS_LEFT) ; + m_Params.m_nHeadSide = ( m_Params.m_nWorkSide == SAW_WS_RIGHT ? SAW_HS_RIGHT : SAW_HS_LEFT) ; } // taglio sottosquadra else { m_Params.m_dSideAngle = ANG_RIGHT - dSideAng ; - m_Params.m_nHeadSide = ( m_Params.m_nWorkSide = SAW_WS_RIGHT ? SAW_HS_LEFT : SAW_HS_RIGHT) ; + m_Params.m_nHeadSide = ( m_Params.m_nWorkSide == SAW_WS_RIGHT ? SAW_HS_LEFT : SAW_HS_RIGHT) ; } // la restituisco return Release( pCrvCompo) ; @@ -2031,6 +2031,8 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V double dActBstep = GetStepBack() ; if ( abs( m_Params.m_dSideAngle) > 10 * EPS_ANG_SMALL) { dActStep = GetStepSideAng() ; + if ( dActStep < EPS_SMALL) + dActStep = m_Params.m_dStep ; dActBstep = GetStepSideAngBack() ; } if ( dActBstep < EPS_SMALL)