diff --git a/Drilling.cpp b/Drilling.cpp index 50c36bc..be2a017 100644 --- a/Drilling.cpp +++ b/Drilling.cpp @@ -228,19 +228,37 @@ bool Drilling::SetParam( int nType, double dVal) { switch ( nType) { - case MPA_TOOLSPEED : + case MPA_SPEED : if ( ! m_TParams.VerifySpeed( dVal)) return false ; - m_TParams.m_dSpeed = dVal ; + if ( abs( m_TParams.m_dSpeed - dVal) < EPS_MACH_ANG_PAR) + m_Params.m_dSpeed = 0 ; + else + m_Params.m_dSpeed = dVal ; return true ; - case MPA_TOOLFEED : - m_TParams.m_dFeed = dVal ; + case MPA_FEED : + if ( abs( m_TParams.m_dFeed - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dFeed = 0 ; + else + m_Params.m_dFeed = dVal ; return true ; - case MPA_TOOLSTARTFEED : - m_TParams.m_dStartFeed = dVal ; + case MPA_STARTFEED : + if ( abs( m_TParams.m_dStartFeed - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dStartFeed = 0 ; + else + m_Params.m_dStartFeed = dVal ; return true ; - case MPA_TOOLENDFEED : - m_TParams.m_dEndFeed = dVal ; + case MPA_ENDFEED : + if ( abs( m_TParams.m_dEndFeed - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dEndFeed = 0 ; + else + m_Params.m_dEndFeed = dVal ; + return true ; + case MPA_TIPFEED : + if ( abs( m_TParams.m_dTipFeed - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dTipFeed = 0 ; + else + m_Params.m_dTipFeed = dVal ; return true ; case MPA_DEPTH : m_Params.m_sDepth = ::ToString( dVal) ; @@ -924,17 +942,20 @@ bool Drilling::GetParam( int nType, double& dVal) const { switch ( nType) { - case MPA_TOOLSPEED : - dVal = m_TParams.m_dSpeed ; + case MPA_SPEED : + dVal = GetSpeed() ; return true ; - case MPA_TOOLFEED : - dVal = m_TParams.m_dFeed ; + case MPA_FEED : + dVal = GetFeed() ; return true ; - case MPA_TOOLSTARTFEED : - dVal = m_TParams.m_dStartFeed ; + case MPA_STARTFEED : + dVal = GetStartFeed() ; return true ; - case MPA_TOOLENDFEED : - dVal = m_TParams.m_dEndFeed ; + case MPA_ENDFEED : + dVal = GetEndFeed() ; + return true ; + case MPA_TIPFEED : + dVal = GetTipFeed() ; return true ; case MPA_STARTPOS : dVal = m_Params.m_dStartPos ; @@ -1114,7 +1135,7 @@ Drilling::DoStandardDrilling( const Hole& hole, SelData Id, int nPathId) } // 3 -> punto termine velocità ridotta iniziale (se previsto) if ( bStartSlow) { - SetFeed( m_TParams.m_dStartFeed) ; + SetFeed( GetStartFeed()) ; if ( ! bStd && ! bEndSlow) SetFlag( 101) ; // fondo del foro Point3d ptP3 = hole.ptIni - hole.vtDir * dStartSlowLen ; @@ -1125,7 +1146,7 @@ Drilling::DoStandardDrilling( const Hole& hole, SelData Id, int nPathId) } // 4 -> punto termine velocità standard (se risulta) if ( bStd) { - SetFeed( m_TParams.m_dFeed) ; + SetFeed( GetFeed()) ; if ( ! bEndSlow) SetFlag( 101) ; // fondo del foro Point3d ptP4 = hole.ptIni - hole.vtDir * ( hole.dLen - dEndSlowLen) ; @@ -1136,14 +1157,14 @@ Drilling::DoStandardDrilling( const Hole& hole, SelData Id, int nPathId) } // 5 -> punto termine velocità finale ridotta (se previsto) if ( bEndSlow) { - SetFeed( m_TParams.m_dTipFeed) ; + SetFeed( GetTipFeed()) ; SetFlag( 101) ; // fondo del foro Point3d ptP5 = hole.ptIni - hole.vtDir * ( hole.dLen + dAddLen) ; if ( AddLinearMove( ptP5) == GDB_ID_NULL) return false ; } // 6 -> ritorno all'approccio del foro - SetFeed( m_TParams.m_dEndFeed) ; + SetFeed( GetEndFeed()) ; SetFlag( 0) ; if ( AddLinearMove( ptP1) == GDB_ID_NULL) return false ; @@ -1207,13 +1228,13 @@ Drilling::DoPeckDrilling( const Hole& hole, SelData Id, int nPathId) // se non è primo step faccio retrazione e riaffondo if ( i != 1) { // retrazione - SetFeed( m_TParams.m_dEndFeed) ; + SetFeed( GetEndFeed()) ; SetFlag( 103) ; // punto di scarico truciolo Point3d ptPr = hole.ptIni + hole.vtDir * dReturnPos ; if ( AddLinearMove( ptPr) == GDB_ID_NULL) return false ; // riaffondo - SetFeed( m_TParams.m_dEndFeed) ; + SetFeed( GetEndFeed()) ; SetFlag( 0) ; Point3d ptPa = hole.ptIni - hole.vtDir * ( dCurrLen - APPR_STEP) ; if ( AddLinearMove( ptPa) == GDB_ID_NULL) @@ -1230,7 +1251,7 @@ Drilling::DoPeckDrilling( const Hole& hole, SelData Id, int nPathId) // determino se arrivo in fondo allo step bool bStepEnd = ( dLen > dEndLen - EPS_SMALL) ; // assegno parametri - SetFeed( m_TParams.m_dStartFeed) ; + SetFeed( GetStartFeed()) ; if ( bHoleEnd) SetFlag( 101) ; // fondo del foro else if ( bStepEnd) @@ -1255,7 +1276,7 @@ Drilling::DoPeckDrilling( const Hole& hole, SelData Id, int nPathId) // determino se arrivo in fondo allo step bool bStepEnd = ( dLen > dEndLen - EPS_SMALL) ; // assegno parametri - SetFeed( m_TParams.m_dFeed) ; + SetFeed( GetFeed()) ; if ( bHoleEnd) SetFlag( 101) ; // fondo del foro else if ( bStepEnd) @@ -1279,7 +1300,7 @@ Drilling::DoPeckDrilling( const Hole& hole, SelData Id, int nPathId) bool bHoleEnd = ( dLen > hole.dLen - EPS_SMALL) ; // sono sempre in fondo allo step // assegno parametri - SetFeed( m_TParams.m_dTipFeed) ; + SetFeed( GetTipFeed()) ; if ( bHoleEnd) SetFlag( 101) ; // fondo del foro else @@ -1296,7 +1317,7 @@ Drilling::DoPeckDrilling( const Hole& hole, SelData Id, int nPathId) } // 6 -> ritorno all'approccio del foro - SetFeed( m_TParams.m_dEndFeed) ; + SetFeed( GetEndFeed()) ; SetFlag( 0) ; if ( AddLinearMove( ptP1) == GDB_ID_NULL) return false ; diff --git a/Drilling.h b/Drilling.h index da25155..91e1ac9 100644 --- a/Drilling.h +++ b/Drilling.h @@ -16,6 +16,7 @@ #include "Machining.h" #include "DrillingData.h" #include "ToolData.h" +#include "MachiningConst.h" struct Hole ; class ICurve ; @@ -68,6 +69,18 @@ class Drilling : public Machining bool DoStandardDrilling( const Hole& hole, SelData Id, int nPathId) ; bool DoPeckDrilling( const Hole& hole, SelData Id, int nPathId) ; + private : + double GetSpeed() const + { return ( abs( m_Params.m_dSpeed) < EPS_MACH_ANG_PAR ? m_TParams.m_dSpeed : m_Params.m_dSpeed) ; } + double GetFeed() const + { return ( abs( m_Params.m_dFeed) < EPS_MACH_LEN_PAR ? m_TParams.m_dFeed : m_Params.m_dFeed) ; } + double GetStartFeed() const + { return ( abs( m_Params.m_dStartFeed) < EPS_MACH_LEN_PAR ? m_TParams.m_dStartFeed : m_Params.m_dStartFeed) ; } + double GetEndFeed() const + { return ( abs( m_Params.m_dEndFeed) < EPS_MACH_LEN_PAR ? m_TParams.m_dEndFeed : m_Params.m_dEndFeed) ; } + double GetTipFeed() const + { return ( abs( m_Params.m_dTipFeed) < EPS_MACH_LEN_PAR ? m_TParams.m_dTipFeed : m_Params.m_dTipFeed) ; } + private : SELVECTOR m_vId ; // identificativi entità geometriche da lavorare DrillingData m_Params ; // parametri lavorazione diff --git a/DrillingData.cpp b/DrillingData.cpp index 28b6689..cc53a46 100644 --- a/DrillingData.cpp +++ b/DrillingData.cpp @@ -27,6 +27,10 @@ using namespace std ; enum nDrillingKey { KEY_DH = 0, KEY_EAL, + KEY_F, + KEY_FE, + KEY_FS, + KEY_FT, KEY_INV, KEY_LAT, KEY_LSE, @@ -38,6 +42,7 @@ enum nDrillingKey { KEY_OVL, KEY_PR, KEY_PS, + KEY_S, KEY_SAL, KEY_ST, KEY_SUBTYPE, @@ -49,6 +54,10 @@ enum nDrillingKey { static const std::array sDrillingKey = { "DH", "EAL", + "F", + "FE", + "FS", + "FT", "INV", "LAT", "LSE", @@ -60,6 +69,7 @@ static const std::array sDrillingKey = { "OVL", "PR", "PS", + "S", "SAL", "ST", "SUB", @@ -102,6 +112,11 @@ DrillingData::CopyFrom( const MachiningData* pMdata) m_sName = pDdata->m_sName ; m_ToolUuid = pDdata->m_ToolUuid ; m_sToolName = pDdata->m_sToolName ; + m_dSpeed = pDdata->m_dSpeed ; + m_dFeed = pDdata->m_dFeed ; + m_dEndFeed = pDdata->m_dEndFeed ; + m_dStartFeed = pDdata->m_dStartFeed ; + m_dTipFeed = pDdata->m_dTipFeed ; m_bInvert = pDdata->m_bInvert ; m_sDepth = pDdata->m_sDepth ; m_dStartPos = pDdata->m_dStartPos ; @@ -136,6 +151,11 @@ DrillingData::SameAs(const MachiningData* pMdata) const m_sName == pDdata->m_sName && m_ToolUuid == pDdata->m_ToolUuid && m_sToolName == pDdata->m_sToolName && + abs( m_dSpeed - pDdata->m_dSpeed) < EPS_MACH_ANG_PAR && + abs( m_dFeed - pDdata->m_dFeed) < EPS_MACH_LEN_PAR && + abs( m_dEndFeed - pDdata->m_dEndFeed) < EPS_MACH_LEN_PAR && + abs( m_dStartFeed - pDdata->m_dStartFeed) < EPS_MACH_LEN_PAR && + abs( m_dTipFeed - pDdata->m_dTipFeed) < EPS_MACH_LEN_PAR && m_bInvert == pDdata->m_bInvert && m_sDepth == pDdata->m_sDepth && abs( m_dStartPos - pDdata->m_dStartPos) < EPS_MACH_LEN_PAR && @@ -197,6 +217,18 @@ DrillingData::FromString( const string& sString, int& nKey) case KEY_EAL : bOk = ::FromString( sVal, m_dEndAddLen) ; break ; + case KEY_F : + bOk = ::FromString( sVal, m_dFeed) ; + break ; + case KEY_FE : + bOk = ::FromString( sVal, m_dEndFeed) ; + break ; + case KEY_FS : + bOk = ::FromString( sVal, m_dStartFeed) ; + break ; + case KEY_FT : + bOk = ::FromString( sVal, m_dTipFeed) ; + break ; case KEY_INV : bOk = ::FromString( sVal, m_bInvert) ; break ; @@ -235,6 +267,9 @@ DrillingData::FromString( const string& sString, int& nKey) case KEY_PS : bOk = ::FromString( sVal, m_dStartPos) ; break ; + case KEY_S : + bOk = ::FromString( sVal, m_dSpeed) ; + break ; case KEY_SAL : bOk = ::FromString( sVal, m_dStartAddLen) ; break ; @@ -267,6 +302,10 @@ DrillingData::ToString( int nKey) const switch ( nKey) { case KEY_DH : return ( sDrillingKey[KEY_DH] + "=" + m_sDepth) ; case KEY_EAL : return ( sDrillingKey[KEY_EAL] + "=" + ::ToString( m_dEndAddLen)) ; + case KEY_F : return ( sDrillingKey[KEY_F] + "=" + ::ToString( m_dFeed)) ; + case KEY_FE : return ( sDrillingKey[KEY_FE] + "=" + ::ToString( m_dEndFeed)) ; + case KEY_FS : return ( sDrillingKey[KEY_FS] + "=" + ::ToString( m_dStartFeed)) ; + case KEY_FT : return ( sDrillingKey[KEY_FT] + "=" + ::ToString( m_dTipFeed)) ; case KEY_INV : return ( sDrillingKey[KEY_INV] + "=" + ::ToString( m_bInvert)) ; case KEY_LAT : return ( sDrillingKey[KEY_LAT] + "=" + ::ToString( m_dThroughAddLen)) ; case KEY_LSE : return ( sDrillingKey[KEY_LSE] + "=" + ::ToString( m_dEndSlowLen)) ; @@ -278,6 +317,7 @@ DrillingData::ToString( int nKey) const case KEY_OVL : return ( sDrillingKey[KEY_OVL] + "=" + m_sOverlap) ; case KEY_PR : return ( sDrillingKey[KEY_PR] + "=" + ::ToString( m_dReturnPos)) ; case KEY_PS : return ( sDrillingKey[KEY_PS] + "=" + ::ToString( m_dStartPos)) ; + case KEY_S : return ( sDrillingKey[KEY_S] + "=" + ::ToString( m_dSpeed)) ; case KEY_SAL : return ( sDrillingKey[KEY_SAL] + "=" + ::ToString( m_dStartAddLen)) ; case KEY_ST : return ( sDrillingKey[KEY_ST] + "=" + ::ToString( m_dStep)) ; case KEY_TNAME : return ( sDrillingKey[KEY_TNAME] + "=" + m_sToolName) ; @@ -292,7 +332,8 @@ DrillingData::ToString( int nKey) const bool DrillingData::IsOptional( int nKey) const { - return ( nKey == KEY_EAL || nKey == KEY_NNS || nKey == KEY_NNU || nKey == KEY_SAL || + return ( nKey == KEY_EAL || nKey == KEY_F || nKey == KEY_FE || nKey == KEY_FS || nKey == KEY_FT || + nKey == KEY_NNS || nKey == KEY_NNU || nKey == KEY_S || nKey == KEY_SAL || nKey == KEY_SUBTYPE || nKey == KEY_OFF || nKey == KEY_OVL) ; } @@ -311,6 +352,16 @@ DrillingData::VerifyTool( const ToolsMgr* pToolsMgr, const std::string& sVal, co return true ; } +//---------------------------------------------------------------------------- +bool +DrillingData::GetTool( const ToolsMgr* pToolsMgr, const ToolData*& pTdata) const +{ + if ( pToolsMgr == nullptr) + return false ; + pTdata = pToolsMgr->GetTool( m_ToolUuid) ; + return ( pTdata != nullptr) ; +} + //---------------------------------------------------------------------------- bool DrillingData::SetParam( int nType, bool bVal) @@ -340,6 +391,21 @@ bool DrillingData::SetParam( int nType, double dVal) { switch ( nType) { + case MPA_SPEED : + m_dSpeed = dVal ; + return true ; + case MPA_FEED : + m_dFeed = dVal ; + return true ; + case MPA_STARTFEED : + m_dStartFeed = dVal ; + return true ; + case MPA_ENDFEED : + m_dEndFeed = dVal ; + return true ; + case MPA_TIPFEED : + m_dTipFeed = dVal ; + return true ; case MPA_DEPTH : m_sDepth = ::ToString( dVal) ; return true ; @@ -411,6 +477,15 @@ DrillingData::SetParam( int nType, const string& sVal) return false ; } +//---------------------------------------------------------------------------- +bool +DrillingData::ResetTool( void) +{ + m_sToolName.clear() ; + m_ToolUuid.Clear() ; + return true ; +} + //---------------------------------------------------------------------------- bool DrillingData::GetParam( int nType, bool& bVal) const @@ -443,6 +518,21 @@ bool DrillingData::GetParam( int nType, double& dVal) const { switch ( nType) { + case MPA_SPEED : + dVal = m_dSpeed ; + return true ; + case MPA_FEED : + dVal = m_dFeed ; + return true ; + case MPA_STARTFEED : + dVal = m_dStartFeed ; + return true ; + case MPA_ENDFEED : + dVal = m_dEndFeed ; + return true ; + case MPA_TIPFEED : + dVal = m_dTipFeed ; + return true ; case MPA_STARTPOS : dVal = m_dStartPos ; return true ; diff --git a/DrillingData.h b/DrillingData.h index 2c24841..282a3e7 100644 --- a/DrillingData.h +++ b/DrillingData.h @@ -20,6 +20,11 @@ struct DrillingData : public MachiningData { EgtUUID m_ToolUuid ; // identificativo universale dell'utensile std::string m_sToolName ; // nome dell'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 sfondamento ( se 0 da utensile) bool m_bInvert ; // flag di inversione direzione lavorazione per fori aperti std::string m_sDepth ; // affondamento (espressione numerica) double m_dStartPos ; // quota di inizio lavorazione (sempre >= 0) @@ -37,7 +42,8 @@ struct DrillingData : public MachiningData std::string m_sUserNotes ; // note dell'utente DrillingData( void) - : m_ToolUuid(), m_bInvert( false), m_dStartPos( 0), m_dStartSlowLen( 0), m_dEndSlowLen( 0), + : m_ToolUuid(), m_dSpeed( 0), m_dFeed( 0), m_dStartFeed( 0), m_dEndFeed( 0), m_dTipFeed( 0), + m_bInvert( false), m_dStartPos( 0), m_dStartSlowLen( 0), m_dEndSlowLen( 0), m_dThroughAddLen( 0), m_dStep( 0), m_dReturnPos( 0), m_nSubType(0), m_dStartAddLen(0), m_dEndAddLen( 0) {} DrillingData* Clone( void) const override ; @@ -54,10 +60,12 @@ struct DrillingData : public MachiningData bool SetParam( int nType, int nVal) override ; bool SetParam( int nType, double dVal) override ; bool SetParam( int nType, const std::string& sVal) override ; + bool ResetTool( void) override ; bool GetParam( int nType, bool& bVal) const override ; bool GetParam( int nType, int& nVal) const override ; bool GetParam( int nType, double& dVal) const override ; bool GetParam( int nType, std::string& sVal) const override ; + bool GetTool( const ToolsMgr* pToolsMgr, const ToolData*& pTdata) const override ; bool VerifyTool( const ToolsMgr* pToolsMgr, const std::string& sVal, const ToolData*& pTdata) const override ; } ; diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index a2303da..d6f02b1 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ diff --git a/Generator.cpp b/Generator.cpp index 39c412e..24baed6 100644 --- a/Generator.cpp +++ b/Generator.cpp @@ -318,8 +318,13 @@ Generator::ProcessMachining( int nOpId, int nOpInd) return false ; } + // Recupero speed + double dSpeed ; + if ( ! m_pMchMgr->GetMachiningParam( MPA_SPEED, dSpeed)) + return false ; + // Emetto inizio lavorazione - if ( ! OnMachiningStart( nOpId, nOpInd)) + if ( ! OnMachiningStart( nOpId, nOpInd, dSpeed)) return false ; // Ciclo su tutti i percorsi CL della lavorazione @@ -626,13 +631,15 @@ Generator::OnToolDeselect( void) //---------------------------------------------------------------------------- bool -Generator::OnMachiningStart( int nOpId, int nOpInd) +Generator::OnMachiningStart( int nOpId, int nOpInd, double dSpeed) { // definisco tavola variabili locali (temporanee) bool bOk = m_pMachine->LuaCreateGlobTable( TEMP_VAR) ; // assegno identificativo e indice lavorazione bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MCHID, nOpId) ; bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MCHIND, nOpInd) ; + // assegno speed + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_S, dSpeed) ; // chiamo la funzione di inizio lavorazione bOk = bOk && m_pMachine->LuaCallFunction( ON_MACHINING_START) ; // cancello variabili locali diff --git a/Generator.h b/Generator.h index 53c793b..51fd760 100644 --- a/Generator.h +++ b/Generator.h @@ -47,7 +47,7 @@ class Generator bool OnFixtureData( int nFixId, int nFixInd, const std::string& sName, const Point3d& ptPos, double dAngDeg) ; bool OnRawMoveData( int nRawId, int RawMoveInd, int nType, const Point3d& ptPos, int nFlag) ; - bool OnMachiningStart( int nOpId, int nOpInd) ; + bool OnMachiningStart( int nOpId, int nOpInd, double dSpeed) ; bool OnMachiningEnd( void) ; bool OnPathStart( int nClPathId, int nClPathInd) ; bool OnPathEnd( void) ; diff --git a/MachiningConst.h b/MachiningConst.h index 04983e5..4cb4eb6 100644 --- a/MachiningConst.h +++ b/MachiningConst.h @@ -15,9 +15,29 @@ #include "/EgtDev/Include/EMkMachiningConst.h" #include "/EgtDev/Include/EMkMachiningGeoConst.h" +#include "/EgtDev/Include/EMkToolConst.h" #include "/EgtDev/Include/EGkGeoConst.h" //---------------------------------------------------------------------------- // Epsilon per parametri lavorazioni const double EPS_MACH_LEN_PAR = 10 * EPS_SMALL ; const double EPS_MACH_ANG_PAR = 10 * EPS_ANG_SMALL ; +// Valore parametro lavorazione non inizializzato +const double UNKNOWN_PAR = 9999999 ; + +//---------------------------------------------------------------------------- +// Conversione dei parametri lavorazione negli equivalenti utensile, ove esistano +inline int +MPA2TPA( int nType) +{ + switch ( nType) { + case MPA_SPEED : return TPA_SPEED ; + case MPA_FEED : return TPA_FEED ; + case MPA_STARTFEED : return TPA_STARTFEED ; + case MPA_ENDFEED : return TPA_ENDFEED ; + case MPA_TIPFEED : return TPA_TIPFEED ; + case MPA_OFFSR : return TPA_RADOFFSET ; + case MPA_OFFSL : return TPA_LONOFFSET ; + } + return TPA_NONE ; +} diff --git a/MachiningData.h b/MachiningData.h index df4b143..d2b7278 100644 --- a/MachiningData.h +++ b/MachiningData.h @@ -15,6 +15,7 @@ #pragma once #include "ToolsMgr.h" +#include "MachiningConst.h" #include "/EgtDEv/Include/EmkMachiningConst.h" #include "/EgtDev/Include/EGnEgtUUID.h" #include "/EgtDev/Include/EgtStringBase.h" @@ -41,10 +42,12 @@ struct MachiningData virtual bool SetParam( int nType, int nVal) = 0 ; virtual bool SetParam( int nType, double dVal) = 0 ; virtual bool SetParam( int nType, const std::string& sVal) = 0 ; + virtual bool ResetTool( void) = 0 ; virtual bool GetParam( int nType, bool& bVal) const = 0 ; virtual bool GetParam( int nType, int& nVal) const = 0 ; virtual bool GetParam( int nType, double& dVal) const = 0 ; virtual bool GetParam( int nType, std::string& sVal) const = 0 ; + virtual bool GetTool( const ToolsMgr* pToolsMgr, const ToolData*& pTdata) const = 0 ; virtual bool VerifyTool( const ToolsMgr* pToolsMgr, const std::string& sVal, const ToolData*& pTdata) const = 0 ; } ; diff --git a/MachiningsMgr.cpp b/MachiningsMgr.cpp index 20b193b..7ae322e 100644 --- a/MachiningsMgr.cpp +++ b/MachiningsMgr.cpp @@ -15,6 +15,7 @@ #include "stdafx.h" #include "MachiningsMgr.h" #include "MachiningDataFactory.h" +#include "MachiningConst.h" #include "DllMain.h" #include "/EgtDEv/Include/EGkGeoConst.h" #include "/EgtDEv/Include/EMkMachiningConst.h" @@ -34,7 +35,7 @@ const string MF_HEADER = "[HEADER]" ; const string MF_VERSION = "VERSION" ; const string MF_TOTAL = "TOTAL" ; const string MF_SIZE = "SIZE" ; -const int MF_CURR_VER = 1003 ; +const int MF_CURR_VER = 1004 ; const string MF_GENERAL = "[GENERAL]" ; const string MF_3AXCOMP = "3AXCOMP" ; const bool MF_CURR_3AXCOMP = false ; @@ -707,7 +708,51 @@ MachiningsMgr::SetCurrMachiningParam( int nType, int nVal) bool MachiningsMgr::SetCurrMachiningParam( int nType, double dVal) { - return ( ( m_pCurrMach != nullptr) ? m_pCurrMach->SetParam( nType, dVal) : false) ; + // deve esistere lavorazione corrente + if ( m_pCurrMach == nullptr) + return false ; + // se speed + if ( nType == MPA_SPEED) { + // recupero valore da utensile + const ToolData* pTdata ; + if ( ! m_pCurrMach->GetTool( m_pTsMgr, pTdata)) + return false ; + // verifico non superi il massimo consentito + if ( abs( dVal) > pTdata->m_dMaxSpeed + EPS_SMALL) + return false ; + // verifico se valore coincide con impostazione da utensile + double dTVal ; + if ( pTdata->GetParam( MPA2TPA( nType), dTVal) && abs( dVal - dTVal) < EPS_MACH_LEN_PAR) + dVal = 0 ; + return m_pCurrMach->SetParam( nType, dVal) ; + } + // se feed + else if ( nType == MPA_FEED || + nType == MPA_STARTFEED || nType == MPA_ENDFEED || nType == MPA_TIPFEED) { + // recupero valore da utensile + const ToolData* pTdata ; + if ( ! m_pCurrMach->GetTool( m_pTsMgr, pTdata)) + return false ; + // verifico se valore coincide con impostazione da utensile + double dTVal ; + if ( pTdata->GetParam( MPA2TPA( nType), dTVal) && abs( dVal - dTVal) < EPS_MACH_LEN_PAR) + dVal = 0 ; + return m_pCurrMach->SetParam( nType, dVal) ; + } + // se sovramateriale + else if ( nType == MPA_OFFSR || nType == MPA_OFFSL) { + // recupero valore da utensile + const ToolData* pTdata ; + if ( ! m_pCurrMach->GetTool( m_pTsMgr, pTdata)) + return false ; + // verifico se valore coincide con impostazione da utensile + double dTVal ; + if ( pTdata->GetParam( MPA2TPA( nType), dTVal) && abs( dVal - dTVal) < EPS_MACH_LEN_PAR) + dVal = UNKNOWN_PAR ; + return m_pCurrMach->SetParam( nType, dVal) ; + } + // in generale + return m_pCurrMach->SetParam( nType, dVal) ; } //---------------------------------------------------------------------------- @@ -726,8 +771,12 @@ MachiningsMgr::SetCurrMachiningParam( int nType, const std::string& sVal) if ( pMch != nullptr && pMch->m_Uuid != m_pCurrMach->m_Uuid) return false ; } - // è possibile cambiare l'utensile, solo se esiste + // è possibile cambiare l'utensile, solo se esiste o è nullo else if ( nType == MPA_TOOL) { + // se nome vuoto, voglio cancellare l'utensile + if ( sVal.empty()) + return m_pCurrMach->ResetTool() ; + // verifico utensile e assegno const ToolData* pTdata ; if ( ! m_pCurrMach->VerifyTool( m_pTsMgr, sVal, pTdata)) return false ; @@ -756,7 +805,42 @@ MachiningsMgr::GetCurrMachiningParam( int nType, int& nVal) const bool MachiningsMgr::GetCurrMachiningParam( int nType, double& dVal) const { - return ( ( m_pCurrMach != nullptr) ? m_pCurrMach->GetParam( nType, dVal) : false) ; + // deve esistere lavorazione corrente + if ( m_pCurrMach == nullptr) + return false ; + // se speed o feed + if ( nType == MPA_SPEED || + nType == MPA_FEED || nType == MPA_STARTFEED || nType == MPA_ENDFEED || nType == MPA_TIPFEED) { + // recupero il valore + if ( ! m_pCurrMach->GetParam( nType, dVal)) + return false ; + // se valore autonomo + if ( abs( dVal) > EPS_ANG_SMALL) + return true ; + // devo recuperare valore da utensile + const ToolData* pTdata ; + if ( ! m_pCurrMach->GetTool( m_pTsMgr, pTdata)) + return false ; + // recupero il corretto valore + return pTdata->GetParam( MPA2TPA( nType), dVal) ; + } + // se sovramateriale + else if ( nType == MPA_OFFSR || nType == MPA_OFFSL) { + // recupero il valore + if ( ! m_pCurrMach->GetParam( nType, dVal)) + return false ; + // se valore autonomo + if ( abs( dVal - UNKNOWN_PAR) > EPS_ANG_SMALL) + return true ; + // devo recuperare valore da utensile + const ToolData* pTdata ; + if ( ! m_pCurrMach->GetTool( m_pTsMgr, pTdata)) + return false ; + // recupero il corretto valore + return pTdata->GetParam( MPA2TPA( nType), dVal) ; + } + // in generale + return m_pCurrMach->GetParam( nType, dVal) ; } //---------------------------------------------------------------------------- diff --git a/Milling.cpp b/Milling.cpp index 3e5d878..b1a4fd4 100644 --- a/Milling.cpp +++ b/Milling.cpp @@ -199,6 +199,52 @@ Milling::SetParam( int nType, int nVal) bool Milling::SetParam( int nType, double dVal) { + switch ( nType) { + case MPA_SPEED : + if ( ! m_TParams.VerifySpeed( dVal)) + return false ; + if ( abs( m_TParams.m_dSpeed - dVal) < EPS_MACH_ANG_PAR) + m_Params.m_dSpeed = 0 ; + else + m_Params.m_dSpeed = dVal ; + return true ; + case MPA_FEED : + if ( abs( m_TParams.m_dFeed - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dFeed = 0 ; + else + m_Params.m_dFeed = dVal ; + return true ; + case MPA_STARTFEED : + if ( abs( m_TParams.m_dStartFeed - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dStartFeed = 0 ; + else + m_Params.m_dStartFeed = dVal ; + return true ; + case MPA_ENDFEED : + if ( abs( m_TParams.m_dEndFeed - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dEndFeed = 0 ; + else + m_Params.m_dEndFeed = dVal ; + return true ; + case MPA_TIPFEED : + if ( abs( m_TParams.m_dTipFeed - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dTipFeed = 0 ; + else + m_Params.m_dTipFeed = dVal ; + return true ; + case MPA_OFFSR : + if ( abs( m_TParams.m_dOffsR - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dOffsR = UNKNOWN_PAR ; + else + m_Params.m_dOffsR = dVal ; + return true ; + case MPA_OFFSL : + if ( abs( m_TParams.m_dOffsL - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dOffsL = UNKNOWN_PAR ; + else + m_Params.m_dOffsL = dVal ; + return true ; + } return false ; } @@ -278,26 +324,26 @@ bool Milling::GetParam( int nType, double& dVal) const { switch ( nType) { - case MPA_TOOLSPEED : - dVal = m_TParams.m_dSpeed ; + case MPA_SPEED : + dVal = GetSpeed() ; return true ; - case MPA_TOOLFEED : - dVal = m_TParams.m_dFeed ; + case MPA_FEED : + dVal = GetFeed() ; return true ; - case MPA_TOOLSTARTFEED : - dVal = m_TParams.m_dStartFeed ; + case MPA_STARTFEED : + dVal = GetStartFeed() ; return true ; - case MPA_TOOLENDFEED : - dVal = m_TParams.m_dEndFeed ; + case MPA_ENDFEED : + dVal = GetEndFeed() ; return true ; - case MPA_TOOLTIPFEED : - dVal = m_TParams.m_dTipFeed ; + case MPA_TIPFEED : + dVal = GetTipFeed() ; return true ; - case MPA_TOOLOFFSR : - dVal = m_TParams.m_dOffsR ; + case MPA_OFFSR : + dVal = GetOffsR() ; return true ; - case MPA_TOOLOFFSL : - dVal = m_TParams.m_dOffsL ; + case MPA_OFFSL : + dVal = GetOffsL() ; return true ; case MPA_STARTPOS : dVal = m_Params.m_dStartPos ; diff --git a/Milling.h b/Milling.h index fb1b2c6..843e331 100644 --- a/Milling.h +++ b/Milling.h @@ -58,6 +58,22 @@ class Milling : public Machining ICurve* GetCurve( SelData Id) ; bool Chain( int nGrpDestId) ; + private : + double GetSpeed() const + { return ( abs( m_Params.m_dSpeed) < EPS_MACH_ANG_PAR ? m_TParams.m_dSpeed : m_Params.m_dSpeed) ; } + double GetFeed() const + { return ( abs( m_Params.m_dFeed) < EPS_MACH_LEN_PAR ? m_TParams.m_dFeed : m_Params.m_dFeed) ; } + double GetStartFeed() const + { return ( abs( m_Params.m_dStartFeed) < EPS_MACH_LEN_PAR ? m_TParams.m_dStartFeed : m_Params.m_dStartFeed) ; } + double GetEndFeed() const + { return ( abs( m_Params.m_dEndFeed) < EPS_MACH_LEN_PAR ? m_TParams.m_dEndFeed : m_Params.m_dEndFeed) ; } + double GetTipFeed() const + { return ( abs( m_Params.m_dTipFeed) < EPS_MACH_LEN_PAR ? m_TParams.m_dTipFeed : m_Params.m_dTipFeed) ; } + double GetOffsL() const + { return ( abs( m_Params.m_dOffsL - UNKNOWN_PAR) < EPS_MACH_LEN_PAR ? m_TParams.m_dOffsL : m_Params.m_dOffsL) ; } + double GetOffsR() const + { return ( abs( m_Params.m_dOffsR - UNKNOWN_PAR) < EPS_MACH_LEN_PAR ? m_TParams.m_dOffsR : m_Params.m_dOffsR) ; } + private : SELVECTOR m_vId ; // identificativi entità geometriche da lavorare MillingData m_Params ; // parametri lavorazione diff --git a/MillingData.cpp b/MillingData.cpp index db2f601..3e172c0 100644 --- a/MillingData.cpp +++ b/MillingData.cpp @@ -26,6 +26,10 @@ using namespace std ; //---------------------------------------------------------------------------- enum nMillingKey { KEY_DH = 0, + KEY_F, + KEY_FE, + KEY_FS, + KEY_FT, KEY_INV, KEY_LICL, KEY_LIEL, @@ -41,8 +45,11 @@ enum nMillingKey { KEY_NAME, KEY_NNS, KEY_NNU, + KEY_OL, + KEY_OR, KEY_OVL, KEY_PS, + KEY_S, KEY_SA, KEY_ST, KEY_STY, @@ -58,6 +65,10 @@ enum nMillingKey { static const std::array sMillingKey = { "DH", + "F", + "FE", + "FS", + "FT", "INV", "LICL", "LIEL", @@ -73,8 +84,11 @@ static const std::array sMillingKey = { "NAME", "NNS", "NNU", + "OL", + "OR", "OVL", "PS", + "S", "SA", "ST", "STY", @@ -122,6 +136,13 @@ MillingData::CopyFrom( const MachiningData* pMdata) m_sName = pSdata->m_sName ; m_ToolUuid = pSdata->m_ToolUuid ; m_sToolName = pSdata->m_sToolName ; + m_dSpeed = pSdata->m_dSpeed ; + m_dFeed = pSdata->m_dFeed ; + m_dEndFeed = pSdata->m_dEndFeed ; + m_dStartFeed = pSdata->m_dStartFeed ; + m_dTipFeed = pSdata->m_dTipFeed ; + m_dOffsL = pSdata->m_dOffsL ; + m_dOffsR = pSdata->m_dOffsR ; m_bInvert = pSdata->m_bInvert ; m_nWorkSide = pSdata->m_nWorkSide ; m_sDepth = pSdata->m_sDepth ; @@ -166,6 +187,13 @@ MillingData::SameAs(const MachiningData* pMdata) const m_sName == pSdata->m_sName && m_ToolUuid == pSdata->m_ToolUuid && m_sToolName == pSdata->m_sToolName && + abs( m_dSpeed - pSdata->m_dSpeed) < EPS_MACH_ANG_PAR && + abs( m_dFeed - pSdata->m_dFeed) < EPS_MACH_LEN_PAR && + abs( m_dEndFeed - pSdata->m_dEndFeed) < EPS_MACH_LEN_PAR && + abs( m_dStartFeed - pSdata->m_dStartFeed) < EPS_MACH_LEN_PAR && + abs( m_dTipFeed - pSdata->m_dTipFeed) < EPS_MACH_LEN_PAR && + abs( m_dOffsL - pSdata->m_dOffsL) < EPS_MACH_LEN_PAR && + abs( m_dOffsR - pSdata->m_dOffsR) < EPS_MACH_LEN_PAR && m_bInvert == pSdata->m_bInvert && m_nWorkSide == pSdata->m_nWorkSide && m_sDepth == pSdata->m_sDepth && @@ -234,6 +262,18 @@ MillingData::FromString( const string& sString, int& nKey) if ( m_sDepth.empty()) m_sDepth = "0" ; break ; + case KEY_F : + bOk = ::FromString( sVal, m_dFeed) ; + break ; + case KEY_FE : + bOk = ::FromString( sVal, m_dEndFeed) ; + break ; + case KEY_FS : + bOk = ::FromString( sVal, m_dStartFeed) ; + break ; + case KEY_FT : + bOk = ::FromString( sVal, m_dTipFeed) ; + break ; case KEY_INV : bOk = ::FromString( sVal, m_bInvert) ; break ; @@ -280,12 +320,21 @@ MillingData::FromString( const string& sString, int& nKey) case KEY_NNU : m_sUserNotes = sVal ; break ; + case KEY_OL : + bOk = ::FromString( sVal, m_dOffsL) ; + break ; + case KEY_OR : + bOk = ::FromString( sVal, m_dOffsR) ; + break ; case KEY_OVL : bOk = ::FromString( sVal, m_dOverlap) ; break ; case KEY_PS : bOk = ::FromString( sVal, m_dStartPos) ; break ; + case KEY_S : + bOk = ::FromString( sVal, m_dSpeed) ; + break ; case KEY_SA : bOk = ::FromString( sVal, m_dSideAngle) ; break ; @@ -332,6 +381,10 @@ MillingData::ToString( int nInd) const { switch ( nInd) { case KEY_DH : return ( sMillingKey[KEY_DH] + "=" + m_sDepth) ; + case KEY_F : return ( sMillingKey[KEY_F] + "=" + ::ToString( m_dFeed)) ; + case KEY_FE : return ( sMillingKey[KEY_FE] + "=" + ::ToString( m_dEndFeed)) ; + case KEY_FS : return ( sMillingKey[KEY_FS] + "=" + ::ToString( m_dStartFeed)) ; + case KEY_FT : return ( sMillingKey[KEY_FT] + "=" + ::ToString( m_dTipFeed)) ; case KEY_INV : return ( sMillingKey[KEY_INV] + "=" + ::ToString( m_bInvert)) ; case KEY_LICL : return ( sMillingKey[KEY_LICL] + "=" + ::ToString( m_dLiCompLen)) ; case KEY_LIEL : return ( sMillingKey[KEY_LIEL] + "=" + ::ToString( m_dLiElev)) ; @@ -347,8 +400,11 @@ MillingData::ToString( int nInd) const case KEY_NAME : return ( sMillingKey[KEY_NAME] + "=" + m_sName) ; case KEY_NNS : return ( sMillingKey[KEY_NNS] + "=" + m_sSysNotes) ; case KEY_NNU : return ( sMillingKey[KEY_NNU] + "=" + m_sUserNotes) ; + case KEY_OL : return ( sMillingKey[KEY_OL] + "=" + ::ToString( m_dOffsL)) ; + case KEY_OR : return ( sMillingKey[KEY_OR] + "=" + ::ToString( m_dOffsR)) ; case KEY_OVL : return ( sMillingKey[KEY_OVL] + "=" + ::ToString( m_dOverlap)) ; case KEY_PS : return ( sMillingKey[KEY_PS] + "=" + ::ToString( m_dStartPos)) ; + case KEY_S : return ( sMillingKey[KEY_S] + "=" + ::ToString( m_dSpeed)) ; case KEY_SA : return ( sMillingKey[KEY_SA] + "=" + ::ToString( m_dSideAngle)) ; case KEY_ST : return ( sMillingKey[KEY_ST] + "=" + ::ToString( m_dStep)) ; case KEY_STY : return ( sMillingKey[KEY_STY] + "=" + ::ToString( m_nStepType)) ; @@ -368,7 +424,8 @@ MillingData::ToString( int nInd) const bool MillingData::IsOptional( int nKey) const { - return ( nKey == KEY_NNS || nKey == KEY_NNU) ; + return ( nKey == KEY_F || nKey == KEY_FE || nKey == KEY_FS || nKey == KEY_FT || + nKey == KEY_NNS || nKey == KEY_NNU || nKey == KEY_OL || nKey == KEY_OR || nKey == KEY_S) ; } //---------------------------------------------------------------------------- @@ -422,6 +479,16 @@ MillingData::VerifyTool( const ToolsMgr* pToolsMgr, const std::string& sVal, con return true ; } +//---------------------------------------------------------------------------- +bool +MillingData::GetTool( const ToolsMgr* pToolsMgr, const ToolData*& pTdata) const +{ + if ( pToolsMgr == nullptr) + return false ; + pTdata = pToolsMgr->GetTool( m_ToolUuid) ; + return ( pTdata != nullptr) ; +} + //---------------------------------------------------------------------------- bool MillingData::SetParam( int nType, bool bVal) @@ -471,6 +538,27 @@ bool MillingData::SetParam( int nType, double dVal) { switch ( nType) { + case MPA_SPEED : + m_dSpeed = dVal ; + return true ; + case MPA_FEED : + m_dFeed = dVal ; + return true ; + case MPA_STARTFEED : + m_dStartFeed = dVal ; + return true ; + case MPA_ENDFEED : + m_dEndFeed = dVal ; + return true ; + case MPA_TIPFEED : + m_dTipFeed = dVal ; + return true ; + case MPA_OFFSL : + m_dOffsL = dVal ; + return true ; + case MPA_OFFSR : + m_dOffsR = dVal ; + return true ; case MPA_DEPTH : m_sDepth = ::ToString( dVal) ; return true ; @@ -556,6 +644,15 @@ MillingData::SetParam( int nType, const string& sVal) return false ; } +//---------------------------------------------------------------------------- +bool +MillingData::ResetTool( void) +{ + m_sToolName.clear() ; + m_ToolUuid.Clear() ; + return true ; +} + //---------------------------------------------------------------------------- bool MillingData::GetParam( int nType, bool& bVal) const @@ -600,6 +697,27 @@ bool MillingData::GetParam( int nType, double& dVal) const { switch ( nType) { + case MPA_SPEED : + dVal = m_dSpeed ; + return true ; + case MPA_FEED : + dVal = m_dFeed ; + return true ; + case MPA_STARTFEED : + dVal = m_dStartFeed ; + return true ; + case MPA_ENDFEED : + dVal = m_dEndFeed ; + return true ; + case MPA_TIPFEED : + dVal = m_dTipFeed ; + return true ; + case MPA_OFFSL : + dVal = m_dOffsL ; + return true ; + case MPA_OFFSR : + dVal = m_dOffsR ; + return true ; case MPA_OVERLAP : dVal = m_dOverlap ; return true ; diff --git a/MillingData.h b/MillingData.h index 247d447..8cbe3ba 100644 --- a/MillingData.h +++ b/MillingData.h @@ -20,6 +20,13 @@ struct MillingData : public MachiningData { EgtUUID m_ToolUuid ; // identificativo universale dell'utensile std::string m_sToolName ; // nome dell'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 int m_nWorkSide ; // lato di lavoro (destra, sinistra, centro) std::string m_sDepth ; // affondamento (espressione numerica) @@ -47,7 +54,8 @@ struct MillingData : public MachiningData std::string m_sUserNotes ; // note dell'utente MillingData( void) - : m_bInvert( false), m_nWorkSide( 0), + : m_ToolUuid(), 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_nWorkSide( 0), m_dStartPos(0), m_dOverlap( 0), m_dStep( 0), m_nStepType( 0), m_dSideAngle( 0), m_bLeaveTab( false), m_dTabLen( 0), m_dTabDist( 0), m_dTabHeight( 0), m_dTabAngle( 0), m_nLeadInType( 0), m_dLiTang( 0), m_dLiPerp( 0), m_dLiElev( 0), m_dLiCompLen( 0), @@ -66,10 +74,12 @@ struct MillingData : public MachiningData bool SetParam( int nType, int nVal) override ; bool SetParam( int nType, double dVal) override ; bool SetParam( int nType, const std::string& sVal) override ; + bool ResetTool( void) override ; bool GetParam( int nType, bool& bVal) const override; bool GetParam( int nType, int& nVal) const override ; bool GetParam( int nType, double& dVal) const override ; bool GetParam( int nType, std::string& sVal) const override ; + bool GetTool( const ToolsMgr* pToolsMgr, const ToolData*& pTdata) const override ; bool VerifyTool( const ToolsMgr* pToolsMgr, const std::string& sVal, const ToolData*& pTdata) const override ; bool VerifyWorkSide( int nVal) const ; bool VerifyStepType( int nVal) const ; diff --git a/Sawing.cpp b/Sawing.cpp index 212ede5..727a30e 100644 --- a/Sawing.cpp +++ b/Sawing.cpp @@ -16,7 +16,6 @@ #include "MachMgr.h" #include "DllMain.h" #include "Sawing.h" -#include "MachiningConst.h" #include "CamData.h" #include "/EgtDev/Include/EXeCmdLogOff.h" #include "/EgtDev/Include/EXeConst.h" @@ -249,28 +248,49 @@ bool Sawing::SetParam( int nType, double dVal) { switch ( nType) { - case MPA_TOOLSPEED : + case MPA_SPEED : if ( ! m_TParams.VerifySpeed( dVal)) return false ; - m_TParams.m_dSpeed = dVal ; + if ( abs( m_TParams.m_dSpeed - dVal) < EPS_MACH_ANG_PAR) + m_Params.m_dSpeed = 0 ; + else + m_Params.m_dSpeed = dVal ; return true ; - case MPA_TOOLFEED : - m_TParams.m_dFeed = dVal ; + case MPA_FEED : + if ( abs( m_TParams.m_dFeed - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dFeed = 0 ; + else + m_Params.m_dFeed = dVal ; return true ; - case MPA_TOOLSTARTFEED : - m_TParams.m_dStartFeed = dVal ; + case MPA_STARTFEED : + if ( abs( m_TParams.m_dStartFeed - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dStartFeed = 0 ; + else + m_Params.m_dStartFeed = dVal ; return true ; - case MPA_TOOLENDFEED : - m_TParams.m_dEndFeed = dVal ; + case MPA_ENDFEED : + if ( abs( m_TParams.m_dEndFeed - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dEndFeed = 0 ; + else + m_Params.m_dEndFeed = dVal ; return true ; - case MPA_TOOLTIPFEED : - m_TParams.m_dTipFeed = dVal ; + case MPA_TIPFEED : + if ( abs( m_TParams.m_dTipFeed - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dTipFeed = 0 ; + else + m_Params.m_dTipFeed = dVal ; return true ; - case MPA_TOOLOFFSR : - m_TParams.m_dOffsR = dVal ; + case MPA_OFFSR : + if ( abs( m_TParams.m_dOffsR - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dOffsR = UNKNOWN_PAR ; + else + m_Params.m_dOffsR = dVal ; return true ; - case MPA_TOOLOFFSL : - m_TParams.m_dOffsL = dVal ; + case MPA_OFFSL : + if ( abs( m_TParams.m_dOffsL - dVal) < EPS_MACH_LEN_PAR) + m_Params.m_dOffsL = UNKNOWN_PAR ; + else + m_Params.m_dOffsL = dVal ; return true ; case MPA_DEPTH : m_Params.m_sDepth = ToString( dVal) ; @@ -544,26 +564,26 @@ bool Sawing::GetParam( int nType, double& dVal) const { switch ( nType) { - case MPA_TOOLSPEED : - dVal = m_TParams.m_dSpeed ; + case MPA_SPEED : + dVal = GetSpeed() ; return true ; - case MPA_TOOLFEED : - dVal = m_TParams.m_dFeed ; + case MPA_FEED : + dVal = GetFeed() ; return true ; - case MPA_TOOLSTARTFEED : - dVal = m_TParams.m_dStartFeed ; + case MPA_STARTFEED : + dVal = GetStartFeed() ; return true ; - case MPA_TOOLENDFEED : - dVal = m_TParams.m_dEndFeed ; + case MPA_ENDFEED : + dVal = GetEndFeed() ; return true ; - case MPA_TOOLTIPFEED : - dVal = m_TParams.m_dTipFeed ; + case MPA_TIPFEED : + dVal = GetTipFeed() ; return true ; - case MPA_TOOLOFFSR : - dVal = m_TParams.m_dOffsR ; + case MPA_OFFSR : + dVal =GetOffsR() ; return true ; - case MPA_TOOLOFFSL : - dVal = m_TParams.m_dOffsL ; + case MPA_OFFSL : + dVal = GetOffsL() ; return true ; case MPA_STARTPOS : dVal = m_Params.m_dStartPos ; @@ -957,8 +977,8 @@ Sawing::ProcessPath( int nPathId, int nPvId, int nClId) } // se lama non centrata e richiesto, eseguo offset - if ( m_Params.m_nWorkSide != SAW_WS_CENTER && fabs( m_TParams.m_dOffsL) > EPS_SMALL) { - double dOffs = ( m_Params.m_nWorkSide == SAW_WS_RIGHT) ? m_TParams.m_dOffsL : - m_TParams.m_dOffsL ; + if ( m_Params.m_nWorkSide != SAW_WS_CENTER && fabs( GetOffsL()) > EPS_SMALL) { + double dOffs = ( m_Params.m_nWorkSide == SAW_WS_RIGHT) ? GetOffsL() : - GetOffsL() ; if ( ! pCompo->SimpleOffset( dOffs, ICurve::OFF_EXTEND)) return false ; } @@ -1325,12 +1345,12 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V return false ; // 2 -> movimento in affondo al punto iniziale SetFlag( 0) ; - SetFeed( m_TParams.m_dTipFeed) ; + SetFeed( GetTipFeed()) ; Point3d ptP2 = pLine->GetStart() ; if ( AddLinearMove( ptP2) == GDB_ID_NULL) return false ; // 3 -> movimento di lato al punto finale - SetFeed( m_TParams.m_dFeed) ; + SetFeed( GetFeed()) ; Point3d ptP3 = pLine->GetEnd() ; if ( AddLinearMove( ptP3) == GDB_ID_NULL) return false ; @@ -1365,11 +1385,11 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V swap( ptP2, ptP3) ; // movimento in affondo SetFlag( 0) ; - SetFeed( m_TParams.m_dTipFeed) ; + SetFeed( GetTipFeed()) ; if ( AddLinearMove( ptP2) == GDB_ID_NULL) return false ; // movimento di lato - SetFeed( m_TParams.m_dFeed) ; + SetFeed( GetFeed()) ; if ( AddLinearMove( ptP3) == GDB_ID_NULL) return false ; } @@ -1394,24 +1414,24 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V double dDelta = ( ( i != 0) ? dExtraCut + i * dStep : 0) ; // movimento in affondo al punto iniziale SetFlag( 0) ; - SetFeed( m_TParams.m_dTipFeed) ; + SetFeed( GetTipFeed()) ; Point3d ptP2 = pLine->GetStart() + vtCorr * dDelta ; if ( AddLinearMove( ptP2) == GDB_ID_NULL) return false ; // movimento di lato al punto finale - SetFeed( m_TParams.m_dFeed) ; + SetFeed( GetFeed()) ; Point3d ptP3 = pLine->GetEnd() + vtCorr * dDelta ; if ( AddLinearMove( ptP3) == GDB_ID_NULL) return false ; // se non è ultimo passo if ( i != 0) { // movimento di risalita sopra il punto finale - SetFeed( m_TParams.m_dEndFeed) ; + SetFeed( GetEndFeed()) ; Point3d ptP4 = pLine->GetEnd() + vtCorr * ( dElev + dAppr) ; if ( AddLinearMove( ptP4) == GDB_ID_NULL) return false ; // movimento di ritorno spora il punto iniziale - SetFeed( m_TParams.m_dEndFeed) ; + SetFeed( GetEndFeed()) ; Point3d ptP5 = pLine->GetStart() + vtCorr * ( dElev + dAppr) ; if ( AddLinearMove( ptP5) == GDB_ID_NULL) return false ; @@ -1842,13 +1862,13 @@ Sawing::GenerateExtArcCl( const ICurveArc* pArc, const Vector3d& vtStaTool, cons return false ; // 2 -> movimento in affondo al punto iniziale SetFlag( 0) ; - SetFeed( m_TParams.m_dTipFeed) ; + SetFeed( GetTipFeed()) ; Point3d ptP2 ; pArc->GetStartPoint( ptP2) ; if ( AddLinearMove( ptP2) == GDB_ID_NULL) return false ; // 3 -> movimento di lato al punto finale - SetFeed( m_TParams.m_dFeed) ; + SetFeed( GetFeed()) ; Point3d ptCen = pArc->GetCenter() ; double dAngCen = pArc->GetAngCenter() ; Point3d ptP3 ; @@ -1913,11 +1933,11 @@ Sawing::GenerateExtArcCl( const ICurveArc* pArc, const Vector3d& vtStaTool, cons // movimento in affondo SetToolDir( ( ( i % 2) == 0) ? vtEndTool : vtStaTool) ; SetFlag( 0) ; - SetFeed( m_TParams.m_dTipFeed) ; + SetFeed( GetTipFeed()) ; if ( AddLinearMove( ptP2) == GDB_ID_NULL) return false ; // movimento di lato - SetFeed( m_TParams.m_dFeed) ; + SetFeed( GetFeed()) ; Point3d ptCen = pArc->GetCenter() ; double dAngCen = pArc->GetAngCenter() ; // se angolo al centro minore del limite, un solo arco @@ -1971,14 +1991,14 @@ Sawing::GenerateExtArcCl( const ICurveArc* pArc, const Vector3d& vtStaTool, cons // movimento in affondo al punto iniziale SetToolDir( vtStaTool) ; SetFlag( 0) ; - SetFeed( m_TParams.m_dTipFeed) ; + SetFeed( GetTipFeed()) ; Point3d ptP2 ; pArc->GetStartPoint( ptP2) ; ptP2 += vtCorr * dDelta ; if ( AddLinearMove( ptP2) == GDB_ID_NULL) return false ; // movimento di lato al punto finale - SetFeed( m_TParams.m_dFeed) ; + SetFeed( GetFeed()) ; Point3d ptCen = pArc->GetCenter() ; double dAngCen = pArc->GetAngCenter() ; Point3d ptP3 ; @@ -2007,7 +2027,7 @@ Sawing::GenerateExtArcCl( const ICurveArc* pArc, const Vector3d& vtStaTool, cons // se non è ultimo passo if ( i != 0) { // movimento di risalita sopra il punto finale - SetFeed( m_TParams.m_dEndFeed) ; + SetFeed( GetEndFeed()) ; Point3d ptP4 ; pArc->GetEndPoint( ptP4) ; ptP4 += vtCorr * ( dElev + dAppr) ; @@ -2015,7 +2035,7 @@ Sawing::GenerateExtArcCl( const ICurveArc* pArc, const Vector3d& vtStaTool, cons return false ; // movimento di ritorno sopra il punto iniziale SetToolDir( vtStaTool) ; - SetFeed( m_TParams.m_dEndFeed) ; + SetFeed( GetEndFeed()) ; Point3d ptP5 ; pArc->GetStartPoint( ptP5) ; ptP5 += vtCorr * ( dElev + dAppr) ; @@ -2470,13 +2490,13 @@ Sawing::GenerateIntArcCl( const ICurveArc* pArc, return false ; // 2 -> movimento in affondo al punto iniziale SetFlag( 0) ; - SetFeed( m_TParams.m_dTipFeed) ; + SetFeed( GetTipFeed()) ; Point3d ptP2 ; pArc->GetStartPoint( ptP2) ; if ( AddLinearMove( ptP2) == GDB_ID_NULL) return false ; // 3 -> movimento di lato al punto finale - SetFeed( m_TParams.m_dFeed) ; + SetFeed( GetFeed()) ; Point3d ptCen = pArc->GetCenter() ; double dAngCen = pArc->GetAngCenter() ; Point3d ptP3 ; @@ -2546,11 +2566,11 @@ Sawing::GenerateIntArcCl( const ICurveArc* pArc, SetToolDir( ( ( i % 2) == 0) ? vtEndTool : vtStaTool) ; SetCorrDir( ( ( i % 2) == 0) ? vtEndCorr : vtStaCorr) ; SetFlag( 0) ; - SetFeed( m_TParams.m_dTipFeed) ; + SetFeed( GetTipFeed()) ; if ( AddLinearMove( ptP2) == GDB_ID_NULL) return false ; // movimento di lato - SetFeed( m_TParams.m_dFeed) ; + SetFeed( GetFeed()) ; Point3d ptCen = pArc->GetCenter() ; double dAngCen = pArc->GetAngCenter() ; // se angolo al centro minore del limite, un solo arco @@ -2610,14 +2630,14 @@ Sawing::GenerateIntArcCl( const ICurveArc* pArc, SetToolDir( vtStaTool) ; SetCorrDir( vtStaCorr) ; SetFlag( 0) ; - SetFeed( m_TParams.m_dTipFeed) ; + SetFeed( GetTipFeed()) ; Point3d ptP2 ; pArc->GetStartPoint( ptP2) ; ptP2 += Z_AX * dDelta ; if ( AddLinearMove( ptP2) == GDB_ID_NULL) return false ; // movimento di lato al punto finale - SetFeed( m_TParams.m_dFeed) ; + SetFeed( GetFeed()) ; Point3d ptCen = pArc->GetCenter() ; double dAngCen = pArc->GetAngCenter() ; Point3d ptP3 ; @@ -2649,7 +2669,7 @@ Sawing::GenerateIntArcCl( const ICurveArc* pArc, // se non è ultimo passo if ( i != 0) { // movimento di risalita sopra il punto finale - SetFeed( m_TParams.m_dEndFeed) ; + SetFeed( GetEndFeed()) ; Point3d ptP4 ; pArc->GetEndPoint( ptP4) ; ptP4 += Z_AX * ( dElev + dAppr) ; @@ -2658,7 +2678,7 @@ Sawing::GenerateIntArcCl( const ICurveArc* pArc, // movimento di ritorno sopra il punto iniziale SetToolDir( vtStaTool) ; SetCorrDir( vtStaCorr) ; - SetFeed( m_TParams.m_dEndFeed) ; + SetFeed( GetEndFeed()) ; Point3d ptP5 ; pArc->GetStartPoint( ptP5) ; ptP5 += Z_AX * ( dElev + dAppr) ; @@ -2710,14 +2730,14 @@ Sawing::AddRetract( const Point3d& ptP, const Vector3d& vtCorr, double dSafeZ, d { if ( dSafeZ < m_Params.m_dStartPos + 10 * EPS_SMALL) { // 4 -> movimento di risalita sopra il punto finale - SetFeed( m_TParams.m_dEndFeed) ; + SetFeed( GetEndFeed()) ; Point3d ptP4 = ptP + vtCorr * ( dElev + dAppr) ; if ( AddLinearMove( ptP4) == GDB_ID_NULL) return false ; } else { // 4a -> movimento di risalita appena sopra il punto finale - SetFeed( m_TParams.m_dEndFeed) ; + SetFeed( GetEndFeed()) ; Point3d ptP4a = ptP + vtCorr * ( dElev + dAppr) ; if ( AddLinearMove( ptP4a) == GDB_ID_NULL) return false ; diff --git a/Sawing.h b/Sawing.h index 8a75b5f..625ae49 100644 --- a/Sawing.h +++ b/Sawing.h @@ -16,6 +16,7 @@ #include "Machining.h" #include "SawingData.h" #include "ToolData.h" +#include "MachiningConst.h" class ICurve ; class ICurveLine ; @@ -116,6 +117,21 @@ class Sawing : public Machining bool AddRetract( const Point3d& ptP, const Vector3d& vtCorr, double dSafeZ, double dElev, double dAppr) ; bool AreHeadWorkOnSameSide( void) const ; + private : + double GetSpeed() const + { return ( abs( m_Params.m_dSpeed) < EPS_MACH_ANG_PAR ? m_TParams.m_dSpeed : m_Params.m_dSpeed) ; } + double GetFeed() const + { return ( abs( m_Params.m_dFeed) < EPS_MACH_LEN_PAR ? m_TParams.m_dFeed : m_Params.m_dFeed) ; } + double GetStartFeed() const + { return ( abs( m_Params.m_dStartFeed) < EPS_MACH_LEN_PAR ? m_TParams.m_dStartFeed : m_Params.m_dStartFeed) ; } + double GetEndFeed() const + { return ( abs( m_Params.m_dEndFeed) < EPS_MACH_LEN_PAR ? m_TParams.m_dEndFeed : m_Params.m_dEndFeed) ; } + double GetTipFeed() const + { return ( abs( m_Params.m_dTipFeed) < EPS_MACH_LEN_PAR ? m_TParams.m_dTipFeed : m_Params.m_dTipFeed) ; } + double GetOffsL() const + { return ( abs( m_Params.m_dOffsL - UNKNOWN_PAR) < EPS_MACH_LEN_PAR ? m_TParams.m_dOffsL : m_Params.m_dOffsL) ; } + double GetOffsR() const + { return ( abs( m_Params.m_dOffsR - UNKNOWN_PAR) < EPS_MACH_LEN_PAR ? m_TParams.m_dOffsR : m_Params.m_dOffsR) ; } private : SELVECTOR m_vId ; // identificativi entità geometriche da lavorare diff --git a/SawingData.cpp b/SawingData.cpp index fa5014a..600d33b 100644 --- a/SawingData.cpp +++ b/SawingData.cpp @@ -29,6 +29,10 @@ enum nSawingKey { KEY_CRV, KEY_DH, KEY_EAL, + KEY_F, + KEY_FE, + KEY_FS, + KEY_FT, KEY_HS, KEY_INV, KEY_LETY, @@ -37,7 +41,10 @@ enum nSawingKey { KEY_NAME, KEY_NNS, KEY_NNU, + KEY_OL, + KEY_OR, KEY_PS, + KEY_S, KEY_SA, KEY_SAL, KEY_ST, @@ -55,6 +62,10 @@ static const std::array sSawingKey = { "CRV", "DH", "EAL", + "F", + "FE", + "FS", + "FT", "HS", "INV", "LETY", @@ -63,7 +74,10 @@ static const std::array sSawingKey = { "NAME", "NNS", "NNU", + "OL", + "OR", "PS", + "S", "SA", "SAL", "ST", @@ -110,6 +124,13 @@ SawingData::CopyFrom( const MachiningData* pMdata) m_sName = pSdata->m_sName ; m_ToolUuid = pSdata->m_ToolUuid ; m_sToolName = pSdata->m_sToolName ; + m_dSpeed = pSdata->m_dSpeed ; + m_dFeed = pSdata->m_dFeed ; + m_dEndFeed = pSdata->m_dEndFeed ; + m_dStartFeed = pSdata->m_dStartFeed ; + m_dTipFeed = pSdata->m_dTipFeed ; + m_dOffsL = pSdata->m_dOffsL ; + m_dOffsR = pSdata->m_dOffsR ; m_bInvert = pSdata->m_bInvert ; m_nWorkSide = pSdata->m_nWorkSide ; m_nHeadSide = pSdata->m_nHeadSide ; @@ -148,6 +169,13 @@ SawingData::SameAs(const MachiningData* pMdata) const m_sName == pSdata->m_sName && m_ToolUuid == pSdata->m_ToolUuid && m_sToolName == pSdata->m_sToolName && + abs( m_dSpeed - pSdata->m_dSpeed) < EPS_MACH_ANG_PAR && + abs( m_dFeed - pSdata->m_dFeed) < EPS_MACH_LEN_PAR && + abs( m_dEndFeed - pSdata->m_dEndFeed) < EPS_MACH_LEN_PAR && + abs( m_dStartFeed - pSdata->m_dStartFeed) < EPS_MACH_LEN_PAR && + abs( m_dTipFeed - pSdata->m_dTipFeed) < EPS_MACH_LEN_PAR && + abs( m_dOffsL - pSdata->m_dOffsL) < EPS_MACH_LEN_PAR && + abs( m_dOffsR - pSdata->m_dOffsR) < EPS_MACH_LEN_PAR && m_bInvert == pSdata->m_bInvert && m_nWorkSide == pSdata->m_nWorkSide && m_nHeadSide == pSdata->m_nHeadSide && @@ -219,6 +247,18 @@ SawingData::FromString( const string& sString, int& nKey) case KEY_EAL : bOk = ::FromString( sVal, m_dEndAddLen) ; break ; + case KEY_F : + bOk = ::FromString( sVal, m_dFeed) ; + break ; + case KEY_FE : + bOk = ::FromString( sVal, m_dEndFeed) ; + break ; + case KEY_FS : + bOk = ::FromString( sVal, m_dStartFeed) ; + break ; + case KEY_FT : + bOk = ::FromString( sVal, m_dTipFeed) ; + break ; case KEY_HS : bOk = ::FromString( sVal, m_nHeadSide) ; break ; @@ -244,9 +284,18 @@ SawingData::FromString( const string& sString, int& nKey) case KEY_NNU : m_sUserNotes = sVal ; break ; + case KEY_OL : + bOk = ::FromString( sVal, m_dOffsL) ; + break ; + case KEY_OR : + bOk = ::FromString( sVal, m_dOffsR) ; + break ; case KEY_PS : bOk = ::FromString( sVal, m_dStartPos) ; break ; + case KEY_S : + bOk = ::FromString( sVal, m_dSpeed) ; + break ; case KEY_SA : bOk = ::FromString( sVal, m_dSideAngle) ; break ; @@ -293,6 +342,10 @@ SawingData::ToString( int nInd) const case KEY_CRV : return ( sSawingKey[KEY_CRV] + "=" + ::ToString( m_nCurveUse)) ; case KEY_DH : return ( sSawingKey[KEY_DH] + "=" + m_sDepth) ; case KEY_EAL : return ( sSawingKey[KEY_EAL] + "=" + ::ToString( m_dEndAddLen)) ; + case KEY_F : return ( sSawingKey[KEY_F] + "=" + ::ToString( m_dFeed)) ; + case KEY_FE : return ( sSawingKey[KEY_FE] + "=" + ::ToString( m_dEndFeed)) ; + case KEY_FS : return ( sSawingKey[KEY_FS] + "=" + ::ToString( m_dStartFeed)) ; + case KEY_FT : return ( sSawingKey[KEY_FT] + "=" + ::ToString( m_dTipFeed)) ; case KEY_HS : return ( sSawingKey[KEY_HS] + "=" + ::ToString( m_nHeadSide)) ; case KEY_INV : return ( sSawingKey[KEY_INV] + "=" + ::ToString( m_bInvert)) ; case KEY_LETY : return ( sSawingKey[KEY_LETY] + "=" + ::ToString( m_nExtLinkType)) ; @@ -301,7 +354,10 @@ SawingData::ToString( int nInd) const case KEY_NAME : return ( sSawingKey[KEY_NAME] + "=" + m_sName) ; case KEY_NNS : return ( sSawingKey[KEY_NNS] + "=" + m_sSysNotes) ; case KEY_NNU : return ( sSawingKey[KEY_NNU] + "=" + m_sUserNotes) ; + case KEY_OL : return ( sSawingKey[KEY_OL] + "=" + ::ToString( m_dOffsL)) ; + case KEY_OR : return ( sSawingKey[KEY_OR] + "=" + ::ToString( m_dOffsR)) ; case KEY_PS : return ( sSawingKey[KEY_PS] + "=" + ::ToString( m_dStartPos)) ; + case KEY_S : return ( sSawingKey[KEY_S] + "=" + ::ToString( m_dSpeed)) ; case KEY_SA : return ( sSawingKey[KEY_SA] + "=" + ::ToString( m_dSideAngle)) ; case KEY_SAL : return ( sSawingKey[KEY_SAL] + "=" + ::ToString( m_dStartAddLen)) ; case KEY_ST : return ( sSawingKey[KEY_ST] + "=" + ::ToString( m_dStep)) ; @@ -320,7 +376,9 @@ SawingData::ToString( int nInd) const bool SawingData::IsOptional( int nKey) const { - return ( nKey == KEY_NNS || nKey == KEY_NNU || nKey == KEY_STEA || nKey == KEY_STIA) ; + return ( nKey == KEY_F || nKey == KEY_FE || nKey == KEY_FS || nKey == KEY_FT || + nKey == KEY_NNS || nKey == KEY_NNU || nKey == KEY_OL || nKey == KEY_OR || + nKey == KEY_S || nKey == KEY_STEA || nKey == KEY_STIA) ; } //---------------------------------------------------------------------------- @@ -397,6 +455,16 @@ SawingData::VerifyTool( const ToolsMgr* pToolsMgr, const std::string& sVal, cons return true ; } +//---------------------------------------------------------------------------- +bool +SawingData::GetTool( const ToolsMgr* pToolsMgr, const ToolData*& pTdata) const +{ + if ( pToolsMgr == nullptr) + return false ; + pTdata = pToolsMgr->GetTool( m_ToolUuid) ; + return ( pTdata != nullptr) ; +} + //---------------------------------------------------------------------------- bool SawingData::SetParam( int nType, bool bVal) @@ -458,6 +526,27 @@ bool SawingData::SetParam( int nType, double dVal) { switch ( nType) { + case MPA_SPEED : + m_dSpeed = dVal ; + return true ; + case MPA_FEED : + m_dFeed = dVal ; + return true ; + case MPA_STARTFEED : + m_dStartFeed = dVal ; + return true ; + case MPA_ENDFEED : + m_dEndFeed = dVal ; + return true ; + case MPA_TIPFEED : + m_dTipFeed = dVal ; + return true ; + case MPA_OFFSL : + m_dOffsL = dVal ; + return true ; + case MPA_OFFSR : + m_dOffsR = dVal ; + return true ; case MPA_DEPTH : m_sDepth = ::ToString( dVal) ; return true ; @@ -519,6 +608,15 @@ SawingData::SetParam( int nType, const string& sVal) return false ; } +//---------------------------------------------------------------------------- +bool +SawingData::ResetTool( void) +{ + m_sToolName.clear() ; + m_ToolUuid.Clear() ; + return true ; +} + //---------------------------------------------------------------------------- bool SawingData::GetParam( int nType, bool& bVal) const @@ -569,6 +667,27 @@ bool SawingData::GetParam( int nType, double& dVal) const { switch ( nType) { + case MPA_SPEED : + dVal = m_dSpeed ; + return true ; + case MPA_FEED : + dVal = m_dFeed ; + return true ; + case MPA_STARTFEED : + dVal = m_dStartFeed ; + return true ; + case MPA_ENDFEED : + dVal = m_dEndFeed ; + return true ; + case MPA_TIPFEED : + dVal = m_dTipFeed ; + return true ; + case MPA_OFFSL : + dVal = m_dOffsL ; + return true ; + case MPA_OFFSR : + dVal = m_dOffsR ; + return true ; case MPA_STARTPOS : dVal = m_dStartPos ; return true ; diff --git a/SawingData.h b/SawingData.h index 7771031..aacd561 100644 --- a/SawingData.h +++ b/SawingData.h @@ -20,6 +20,13 @@ struct SawingData : public MachiningData { EgtUUID m_ToolUuid ; // identificativo universale dell'utensile std::string m_sToolName ; // nome dell'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 int m_nWorkSide ; // lato di lavoro (destra, sinistra, centro) int m_nHeadSide ; // lato di posizionamento del mandrino ( destra o sinistra) @@ -41,7 +48,9 @@ struct SawingData : public MachiningData std::string m_sUserNotes ; // note dell'utente SawingData( void) - : m_bInvert( false), m_nWorkSide( 0), m_nHeadSide(0), m_dStartPos( 0), m_dStep( 0), + : m_ToolUuid(), 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_nWorkSide( 0), m_nHeadSide(0), m_dStartPos( 0), m_dStep( 0), m_dStepExtArc( 0), m_dStepIntArc( 0), m_nStepType( 0), m_dSideAngle( 0), m_dStartAddLen(0), m_dEndAddLen(0), m_nLeadInType( 0), m_nExtLinkType( 0), m_nLeadOutType( 0), m_nCurveUse( 0), m_dApprox( 0) {} SawingData* Clone( void) const override ; @@ -58,10 +67,12 @@ struct SawingData : public MachiningData bool SetParam( int nType, int nVal) override ; bool SetParam( int nType, double dVal) override ; bool SetParam( int nType, const std::string& sVal) override ; + bool ResetTool( void) override ; bool GetParam( int nType, bool& bVal) const override ; bool GetParam( int nType, int& nVal) const override ; bool GetParam( int nType, double& dVal) const override ; bool GetParam( int nType, std::string& sVal) const override ; + bool GetTool( const ToolsMgr* pToolsMgr, const ToolData*& pTdata) const override ; bool VerifyTool( const ToolsMgr* pToolsMgr, const std::string& sVal, const ToolData*& pTdata) const override ; bool VerifyWorkSide( int nVal) const ; bool VerifyHeadSide( int nVal) const ; diff --git a/Simulator.cpp b/Simulator.cpp index e11db7e..f745c78 100644 --- a/Simulator.cpp +++ b/Simulator.cpp @@ -262,7 +262,7 @@ Simulator::GetToolInfo( string& sName, double& dSpeed) sName = m_sTool ; // Recupero speed Machining* pMch = GetMachining( m_pGeomDB->GetUserObj( m_nOpId)) ; - return ( pMch != nullptr && pMch->GetParam( MPA_TOOLSPEED, dSpeed)) ; + return ( pMch != nullptr && pMch->GetParam( MPA_SPEED, dSpeed)) ; } //---------------------------------------------------------------------------- diff --git a/ToolData.cpp b/ToolData.cpp index f0f3c25..70a6fcf 100644 --- a/ToolData.cpp +++ b/ToolData.cpp @@ -254,7 +254,7 @@ ToolData::ToString( int nInd) const bool ToolData::VerifySpeed( double dVal) const { - return ( dVal < m_dMaxSpeed + EPS_SMALL) ; + return ( abs( dVal) < m_dMaxSpeed + EPS_SMALL) ; } //----------------------------------------------------------------------------