diff --git a/CamData.cpp b/CamData.cpp index 82c8b6a..72a59c1 100644 --- a/CamData.cpp +++ b/CamData.cpp @@ -49,7 +49,10 @@ static int CAM_PARAM_V5 = 20 ; static std::string CAM_BDIR = "BDir" ; static int CAM_PARAM_V6 = 21 ; static std::string CAM_INDEX = "Idx" ; -static int CAM_TOTPARAM =CAM_PARAM_V6 ; +static int CAM_PARAM_V7 = 22 ; +static std::string CAM_ORIGFEED = "OrFeed" ; +static int CAM_TOTPARAM =CAM_PARAM_V7 ; + //---------------------------------------------------------------------------- USEROBJ_REGISTER( "EMkCamData", CamData) ; @@ -83,6 +86,7 @@ CamData::Clone( void) const pCam->m_vtN = m_vtN ; pCam->m_dDeltaN = m_dDeltaN ; pCam->m_dFeed = m_dFeed ; + pCam->m_dOrigFeed = m_dOrigFeed ; pCam->m_nFlag = m_nFlag ; pCam->m_nIndex = m_nIndex ; pCam->m_nAxesStatus = m_nAxesStatus ; @@ -118,6 +122,8 @@ CamData::Dump( string& sOut, bool bMM, const char* szNewLine) const sOut += CAM_ACEN + "=" + ToString( m_dAngCen) + szNewLine ; sOut += CAM_NDIR + "=" + ToString( m_vtN) + szNewLine ; sOut += CAM_FEED + "=" + ToString( m_dFeed) + szNewLine ; + if ( m_dOrigFeed >= 0) + sOut += CAM_ORIGFEED + "=" + ToString( m_dOrigFeed) + szNewLine ; sOut += CAM_FLAG + "=" + ToString( m_nFlag) + szNewLine ; sOut += CAM_INDEX + "=" + ToString( m_nIndex) + szNewLine ; sOut += CAM_AXSTS + "=" + ToString( m_nAxesStatus) + szNewLine ; @@ -189,6 +195,8 @@ CamData::Save( int nBaseId, STRVECTOR& vString) const vString[++k] = CAM_BDIR + "=" + ToString( m_vtBackAux) ; // parametri aggiunti V6 vString[++k] = CAM_INDEX + "=" + ToString( m_nIndex) ; + // parametri aggiunti V7 + vString[++k] = CAM_ORIGFEED + "=" + ToString( m_dOrigFeed) ; } catch( ...) { return false ; @@ -263,7 +271,15 @@ CamData::Load( const STRVECTOR& vString, int nBaseGdbId) return false ; } else { - m_vtBackAux = V_NULL ; + m_nIndex = 0 ; + } + // parametri aggiunti V7 + if ( int( vString.size()) >= CAM_PARAM_V7) { + if ( ! GetVal( vString[++k], CAM_ORIGFEED, m_dOrigFeed)) + return false ; + } + else { + m_dOrigFeed = -1 ; } return true ; } @@ -519,6 +535,7 @@ CamData::CamData( void) m_dAngCen = 0 ; m_dDeltaN = 0 ; m_dFeed = 0 ; + m_dOrigFeed = -1 ; m_nFlag = 0 ; m_nIndex = 0 ; m_nAxesStatus = AS_NONE ; @@ -617,6 +634,14 @@ CamData::SetFeed( double dFeed) return true ; } +//---------------------------------------------------------------------------- +bool +CamData::SetOrigFeed( double dOrigFeed) +{ + m_dOrigFeed = dOrigFeed ; + return true ; +} + //---------------------------------------------------------------------------- bool CamData::SetFlag( int nFlag) diff --git a/CamData.h b/CamData.h index 8de71d5..098ee97 100644 --- a/CamData.h +++ b/CamData.h @@ -55,6 +55,7 @@ class CamData : public IUserObj bool SetNormDir( const Vector3d& vtDir) ; bool SetDeltaN( double dDeltaN) ; bool SetFeed( double dFeed) ; + bool SetOrigFeed( double dOrigFeed) ; bool SetFlag( int nFlag) ; bool SetIndex( int nIndex) ; bool SetAxes( int nStatus, const DBLVECTOR& vAxVal) ; @@ -90,6 +91,8 @@ class CamData : public IUserObj { return m_dDeltaN ; } double GetFeed( void) const { return m_dFeed ; } + double GetOrigFeed( void) const + { return m_dOrigFeed ; } int GetFlag( void) const { return m_nFlag ; } int GetIndex( void) const @@ -142,6 +145,7 @@ class CamData : public IUserObj Vector3d m_vtN ; // vettore normale al piano di giacitura per archi double m_dDeltaN ; // delta fine rispetto a inizio su normale double m_dFeed ; // velocità di avanzamento in lavorazione + double m_dOrigFeed ; // velocità originale di avanzamento (sul tip utensile) int m_nFlag ; // flag per usi vari int m_nIndex ; // indice per usi vari int m_nAxesStatus ; // stato dei valori degli assi diff --git a/Sawing.cpp b/Sawing.cpp index 479e206..d5e206b 100644 --- a/Sawing.cpp +++ b/Sawing.cpp @@ -733,9 +733,8 @@ Sawing::Update( bool bPostApply) return false ; } - // aggiustamento feed per movimenti 4 assi (se lavorazione ricalcolata) - if ( m_nStatus == MCH_ST_TO_VERIFY) - AdjustFeeds() ; + // aggiustamento feed per movimenti 4 assi + AdjustFeeds() ; // gestione movimenti all'inizio di ogni singolo percorso di lavorazione e alla fine della lavorazione if ( ! AdjustStartEndMovements()) { @@ -794,8 +793,12 @@ Sawing::AdjustFeeds( void) // correggo la feed di movimento if ( dTipLen > EPS_SMALL && dAxLen > EPS_SMALL) { double dCoeff = dAxLen / dTipLen ; - double dFeed = pCamData->GetFeed() ; - pCamData->SetFeed( dFeed * dCoeff) ; + double dOrigFeed = pCamData->GetOrigFeed() ; + if ( dOrigFeed < 0) { + dOrigFeed = pCamData->GetFeed() ; + pCamData->SetOrigFeed( dOrigFeed) ; + } + pCamData->SetFeed( dOrigFeed * dCoeff) ; } } }