diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 1fd1035..4817995 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ diff --git a/SurfRoughing.cpp b/SurfRoughing.cpp index fda138b..8da6ecd 100644 --- a/SurfRoughing.cpp +++ b/SurfRoughing.cpp @@ -420,6 +420,11 @@ SurfRoughing::SetParam( int nType, double dVal) m_nStatus |= MCH_ST_PARAM_MODIF ; m_Params.m_dOffsL = dVal ; return true ; + case MPA_OVERL : + if ( ! AreSameLenValue( dVal, m_Params.m_dOverlap)) + m_nStatus |= MCH_ST_PARAM_MODIF ; + m_Params.m_dOverlap = dVal ; + return true ; case MPA_DEPTH: { string sVal = ToString( dVal) ; if ( sVal != m_Params.m_sDepth) @@ -836,6 +841,9 @@ SurfRoughing::GetParam( int nType, double& dVal) const case MPA_STARTPOS : dVal = m_Params.m_dStartPos ; return true ; + case MPA_OVERL : + dVal = m_Params.m_dOverlap ; + return true ; case MPA_STEP : dVal = m_Params.m_dStep ; return true ; @@ -1537,6 +1545,12 @@ SurfRoughing::ProcessPath( int nPathId, int nPvId, int nClId) return false ; } + // verifico se presente parametro di Overlap + if ( m_Params.m_dOverlap > 10. * EPS_SMALL) { + if ( ! pSfrSgro->Offset( m_Params.m_dOverlap, ICurve::OFF_EXTEND) || ! pSfrSgro->IsValid()) + return false ; + } + // inizializzo la classe di intersezione tra grezzo e piani paralleli ( quelli di lavoro) // traslo leggermente il grezzo per gestire il primo e l'ultimo Step pStmRaw->Translate( - vtTool * 5 * EPS_SMALL) ; diff --git a/SurfRoughingData.cpp b/SurfRoughingData.cpp index 5c544f9..c150b19 100644 --- a/SurfRoughingData.cpp +++ b/SurfRoughingData.cpp @@ -45,6 +45,7 @@ enum nSurfRoughingKey { KEY_NNU, KEY_OL, KEY_OR, + KEY_OVL, KEY_PS, KEY_S, KEY_SA, @@ -78,6 +79,7 @@ static const array sSurfRoughingKey = { "NNU", "OL", "OR", + "OVL", "PS", "S", "SA", @@ -113,7 +115,7 @@ SurfRoughingData::Clone( void) const bool SurfRoughingData::CopyFrom( const MachiningData* pMdata) { - // è inutile copiare se sorgente coincide con destinazione + // è inutile copiare se sorgente coincide con destinazione if ( pMdata == this) return true ; // la sorgente deve essere dello stesso tipo @@ -138,6 +140,7 @@ SurfRoughingData::CopyFrom( const MachiningData* pMdata) m_bInvert = pSdata->m_bInvert ; m_sDepth = pSdata->m_sDepth ; m_dStartPos = pSdata->m_dStartPos ; + m_dOverlap = pSdata->m_dOverlap ; m_dStep = pSdata->m_dStep ; m_dSubStep = pSdata->m_dSubStep ; m_dSideStep = pSdata->m_dSideStep ; @@ -183,6 +186,7 @@ SurfRoughingData::SameAs(const MachiningData* pMdata) const m_bInvert == pSdata->m_bInvert && m_sDepth == pSdata->m_sDepth && abs( m_dStartPos - pSdata->m_dStartPos) < EPS_MACH_LEN_PAR && + abs( m_dOverlap - pSdata->m_dOverlap) < EPS_MACH_LEN_PAR && abs( m_dStep - pSdata->m_dStep) < EPS_MACH_LEN_PAR && abs( m_dSubStep - pSdata->m_dSubStep) < EPS_MACH_LEN_PAR && abs( m_dSideStep - pSdata->m_dSideStep) < EPS_MACH_LEN_PAR && @@ -202,7 +206,7 @@ SurfRoughingData::SameAs(const MachiningData* pMdata) const int SurfRoughingData::GetSize( void) const { - // in debug verifico validità ultimo campo + // in debug verifico validità ultimo campo assert( sSurfRoughingKey[KEY_UUID] == "UUID") ; return KEY_ZZZ ; } @@ -294,6 +298,9 @@ SurfRoughingData::FromString( const string& sString, int& nKey) case KEY_OL : bOk = ::FromString( sVal, m_dOffsL) ; break ; + case KEY_OVL : + bOk = ::FromString( sVal, m_dOverlap) ; + break ; case KEY_PS : bOk = ::FromString( sVal, m_dStartPos) ; break ; @@ -358,6 +365,7 @@ SurfRoughingData::ToString( int nInd) const case KEY_NNU : return ( sSurfRoughingKey[KEY_NNU] + "=" + m_sUserNotes) ; case KEY_OL : return ( sSurfRoughingKey[KEY_OL] + "=" + ::ToString( m_dOffsL)) ; case KEY_OR : return ( sSurfRoughingKey[KEY_OR] + "=" + ::ToString( m_dOffsR)) ; + case KEY_OVL : return ( sSurfRoughingKey[KEY_OVL] + "=" + ::ToString( m_dOverlap)) ; case KEY_PS : return ( sSurfRoughingKey[KEY_PS] + "=" + ::ToString( m_dStartPos)) ; case KEY_S : return ( sSurfRoughingKey[KEY_S] + "=" + ::ToString( m_dSpeed)) ; case KEY_SA : return ( sSurfRoughingKey[KEY_SA] + "=" + ::ToString( m_dSideAngle)) ; @@ -377,7 +385,7 @@ SurfRoughingData::ToString( int nInd) const bool SurfRoughingData::IsOptional( int nKey) const { - return ( nKey == KEY_LIEL || nKey == KEY_SST) ; + return ( nKey == KEY_LIEL || nKey == KEY_SST || nKey == KEY_OVL) ; } //---------------------------------------------------------------------------- @@ -502,6 +510,9 @@ SurfRoughingData::SetParam( int nType, double dVal) case MPA_OFFSL : m_dOffsL = dVal ; return true ; + case MPA_OVERL : + m_dOverlap = dVal ; + return true ; case MPA_DEPTH : m_sDepth = ::ToString( dVal) ; return true ; @@ -643,6 +654,9 @@ SurfRoughingData::GetParam( int nType, double& dVal) const case MPA_OFFSL : dVal = m_dOffsL ; return true ; + case MPA_OVERL : + dVal = m_dOverlap ; + return true ; case MPA_STARTPOS : dVal = m_dStartPos ; return true ; diff --git a/SurfRoughingData.h b/SurfRoughingData.h index 1ad27b0..13f0210 100644 --- a/SurfRoughingData.h +++ b/SurfRoughingData.h @@ -23,16 +23,17 @@ struct SurfRoughingData : public MachiningData std::string m_sInitAngs ; // angoli iniziali suggeriti (Nome1=val1,Nome2=val2) std::string m_sBlockedAxis ; // eventuale asse rotante bloccato (Nome=val) int m_nSolCh ; // criterio scelta soluzione (quando possibili molteplici) - double m_dSpeed ; // velocità di rotazione (+ se CCW, - se CW) ( se 0 da utensile) - double m_dFeed ; // velocità di lavorazione normale ( se 0 da utensile) - double m_dStartFeed ; // velocità di lavorazione iniziale ( se 0 da utensile) - double m_dEndFeed ; // velocità di lavorazione finale ( se 0 da utensile) - double m_dTipFeed ; // velocità di lavorazione di testa ( se 0 da utensile) + double m_dSpeed ; // velocità di rotazione (+ se CCW, - se CW) ( se 0 da utensile) + double m_dFeed ; // velocità di lavorazione normale ( se 0 da utensile) + double m_dStartFeed ; // velocità di lavorazione iniziale ( se 0 da utensile) + double m_dEndFeed ; // velocità di lavorazione finale ( se 0 da utensile) + double m_dTipFeed ; // velocità di lavorazione di testa ( se 0 da utensile) double m_dOffsR ; // offset radiale ( se UNKNOWN_PAR da utensile) double m_dOffsL ; // offset longitudinale ( se UNKNOWN_PAR da utensile) bool m_bInvert ; // flag di inversione direzione lavorazione std::string m_sDepth ; // affondamento massimo (espressione numerica) double m_dStartPos ; // quota di inizio lavorazione (sempre >= 0) + double m_dOverlap ; // distanza di sovrapposizione con il contorno double m_dStep ; // passo di affondamento (0=nessun passo) double m_dSideStep ; // distanza tra le passate double m_dSubStep ; // distanza tra le passate intermedie @@ -50,7 +51,7 @@ struct SurfRoughingData : public MachiningData SurfRoughingData( void) : m_ToolUuid(), m_nSolCh( 0), m_dSpeed( 0), m_dFeed( 0), m_dStartFeed( 0), m_dEndFeed( 0), m_dTipFeed( 0), m_dOffsR( UNKNOWN_PAR), m_dOffsL( UNKNOWN_PAR), m_bInvert( false), - m_dStartPos( 0), m_dStep( 0), m_dSideStep( 0), m_dSubStep( 0), m_nSubType( 0), m_dSideAngle( 0), + m_dStartPos( 0), m_dOverlap( 0), m_dStep( 0), m_dSideStep( 0), m_dSubStep( 0), m_nSubType( 0), m_dSideAngle( 0), m_nLeadInType( 0), m_dLiTang( 0), m_dLiElev( 0), m_nLeadOutType( 0), m_dLoTang( 0), m_dApprox( 0) {} SurfRoughingData* Clone( void) const override ;