//---------------------------------------------------------------------------- // EgalTech 2015-2015 //---------------------------------------------------------------------------- // File : SawingData.cpp Data : 05.06.15 Versione : 1.6f1 // Contenuto : Implementazione struttura dati lavorazione di taglio di lama. // // // // Modifiche : 05.06.15 DS Creazione modulo. // // //---------------------------------------------------------------------------- //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "SawingData.h" #include "MachiningDataFactory.h" #include "/EgtDev/Include/EMkMachiningConst.h" #include "/EgtDev/Include/EGkGeoConst.h" #include "/EgtDev/Include/EGnStringUtils.h" #include #include using namespace std ; //---------------------------------------------------------------------------- enum nSawingKey { KEY_APPR = 0, KEY_CRV, KEY_DH, KEY_HS, KEY_INV, KEY_LETY, KEY_LITY, KEY_LOTY, KEY_NAME, KEY_SA, KEY_TAF, KEY_TNAME, KEY_TUUID, KEY_UUID, KEY_WS, KEY_ZZZ} ; // rappresenta il numero di elementi static const std::array sSawingKey = { "APPR", "CRV", "DH", "HS", "INV", "LETY", "LITY", "LOTY", "NAME", "SA", "TAF", "TN", "TU", "UUID", "WS"} ; //---------------------------------------------------------------------------- MCHDATA_REGISTER( "SAWING", SawingData) ; //---------------------------------------------------------------------------- int SawingData::GetSize( void) const { // in debug verifico validità ultimo campo assert( sSawingKey[KEY_WS] == "WS") ; return KEY_ZZZ ; } //---------------------------------------------------------------------------- string SawingData::GetTitle( void) const { return MCHDATA_GETNAME( SawingData) ; } //---------------------------------------------------------------------------- int FindSawingKey( const string& sKey) { auto TheRange = equal_range( sSawingKey.cbegin(), sSawingKey.cend(), sKey) ; if ( TheRange.first == TheRange.second) return - 1 ; return int( TheRange.first - sSawingKey.cbegin()) ; } //---------------------------------------------------------------------------- bool SawingData::FromString( const string& sString, int& nKey) { // separo chiave da valore string sKey, sVal ; SplitFirst( sString, "=", sKey, sVal) ; // riconosco la chiave nKey = FindSawingKey( ToUpper( sKey)) ; bool bOk = ( nKey >= 0) ; switch ( nKey) { case KEY_APPR : bOk = ::FromString( sVal, m_dApprox) ; break ; case KEY_CRV : bOk = ::FromString( sVal, m_nCurveUse) ; break ; case KEY_DH : m_sDepth = sVal ; bOk = ! m_sDepth.empty() ; break ; case KEY_HS : bOk = ::FromString( sVal, m_nHeadSide) ; break ; case KEY_INV : bOk = ::FromString( sVal, m_bInvert) ; break ; case KEY_LETY : bOk = ::FromString( sVal, m_nExtLinkType) ; break ; case KEY_LITY : bOk = ::FromString( sVal, m_nLeadInType) ; break ; case KEY_LOTY : bOk = ::FromString( sVal, m_nLeadOutType) ; break ; case KEY_NAME : m_sName = sVal ; bOk = ! m_sName.empty() ; break ; case KEY_SA : bOk = ::FromString( sVal, m_dSideAngle) ; break ; case KEY_TAF : bOk = ::FromString( sVal, m_bToAndFrom) ; break ; case KEY_TNAME : m_sToolName = sVal ; bOk = ! m_sToolName.empty() ; break ; case KEY_TUUID : bOk = ::FromString( sVal, m_ToolUuid) ; break ; case KEY_UUID : bOk = ::FromString( sVal, m_Uuid) ; break ; case KEY_WS : bOk = ::FromString( sVal, m_nWorkSide) ; break ; default : bOk = false ; break ; } return bOk ; } //---------------------------------------------------------------------------- string SawingData::ToString( int nInd) const { switch ( nInd) { case KEY_APPR : return ( sSawingKey[KEY_APPR] + "=" + ::ToString( m_dApprox)) ; case KEY_CRV : return ( sSawingKey[KEY_CRV] + "=" + ::ToString( m_nCurveUse)) ; case KEY_DH : return ( sSawingKey[KEY_DH] + "=" + m_sDepth) ; 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)) ; case KEY_LITY : return ( sSawingKey[KEY_LITY] + "=" + ::ToString( m_nLeadInType)) ; case KEY_LOTY : return ( sSawingKey[KEY_LOTY] + "=" + ::ToString( m_nLeadOutType)) ; case KEY_NAME : return ( sSawingKey[KEY_NAME] + "=" + m_sName) ; case KEY_SA : return ( sSawingKey[KEY_SA] + "=" + ::ToString( m_dSideAngle)) ; case KEY_TAF : return ( sSawingKey[KEY_TAF] + "=" + ::ToString( m_bToAndFrom)) ; case KEY_TNAME : return ( sSawingKey[KEY_TNAME] + "=" + m_sToolName) ; case KEY_TUUID : return ( sSawingKey[KEY_TUUID] + "=" + ::ToString( m_ToolUuid)) ; case KEY_UUID : return ( sSawingKey[KEY_UUID] + "=" + ::ToString( m_Uuid)) ; case KEY_WS : return ( sSawingKey[KEY_WS] + "=" + ::ToString( m_nWorkSide)) ; default : return "" ; } } //---------------------------------------------------------------------------- bool SawingData::VerifyWorkSide( int nVal) const { return ( nVal == SAW_WS_CENTER || nVal == SAW_WS_LEFT || nVal == SAW_WS_RIGHT) ; } //---------------------------------------------------------------------------- bool SawingData::VerifyHeadSide( int nVal) const { return ( nVal == SAW_HS_LEFT || nVal == SAW_HS_RIGHT) ; } //---------------------------------------------------------------------------- bool SawingData::VerifyLeadInType( int nVal) const { return ( nVal == SAW_LI_STRICT || nVal == SAW_LI_CENT || nVal == SAW_LI_OUT || nVal == SAW_LI_EXT_CENT || nVal == SAW_LI_EXT_OUT) ; } //---------------------------------------------------------------------------- bool SawingData::VerifyExtLinkType( int nVal) const { return ( nVal == SAW_EL_CENT || nVal == SAW_EL_EXT_PREV || nVal == SAW_EL_EXT_NEXT || nVal == SAW_EL_EXT_BOTH) ; } //---------------------------------------------------------------------------- bool SawingData::VerifyLeadOutType( int nVal) const { return ( nVal == SAW_LO_STRICT || nVal == SAW_LO_CENT || nVal == SAW_LO_EXT) ; } //---------------------------------------------------------------------------- bool SawingData::VerifyCurveUse( int nVal) const { return ( nVal == SAW_CRV_SKIP || nVal == SAW_CRV_APPROX || nVal == SAW_CRV_CONVEX) ; } //---------------------------------------------------------------------------- bool SawingData::VerifySideAngle( double dVal) const { return ( ( dVal > - EPS_SMALL && dVal < 60 + EPS_SMALL) || fabs( dVal - 99) < EPS_SMALL) ; } //---------------------------------------------------------------------------- bool SawingData::VerifyTool( MachMgr* pMachMgr, const std::string& sVal, const ToolData*& pTdata) const { if ( pMachMgr == nullptr) return false ; ToolsMgr* pTMgr = pMachMgr->GetCurrToolsMgr() ; if ( pTMgr == nullptr) return false ; pTdata = pTMgr->GetTool( sVal) ; if ( pTdata == nullptr) return false ; if ( ( pTdata->m_nType & TF_SAWBLADE) == 0) return false ; return true ; }