//---------------------------------------------------------------------------- // EgalTech 2017-2017 //---------------------------------------------------------------------------- // File : SetupMgr.cpp Data : 18.01.17 Versione : 1.6x8 // Contenuto : Implementazione gestore attrezzaggio utensili. // // // // Modifiche : 18.01.17 DS Creazione modulo. // // //---------------------------------------------------------------------------- //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "SetupMgr.h" #include "DllMain.h" #include "MachMgr.h" #include "/EgtDEv/Include/EGnScanner.h" using namespace std ; //---------------------------------------------------------------------------- SetupMgr::SetupMgr( void) { m_pMchMgr = nullptr ; m_pGeomDB = nullptr ; m_pMachine = nullptr ; } //---------------------------------------------------------------------------- bool SetupMgr::Init( MachMgr* pMchMgr) { // verifico ambiente if ( pMchMgr == nullptr || pMchMgr->GetContextId() == 0 || pMchMgr->GetGeomDB() == nullptr || pMchMgr->GetCurrMachine() == nullptr) return false ; m_pMchMgr = pMchMgr ; m_pGeomDB = m_pMchMgr->GetGeomDB() ; m_pMachine = m_pMchMgr->GetCurrMachine() ; // reset m_vStuData.clear() ; return true ; } //---------------------------------------------------------------------------- bool SetupMgr::Reset( void) { m_vStuData.clear() ; m_pMchMgr = nullptr ; m_pGeomDB = nullptr ; m_pMachine = nullptr ; return true ; } //---------------------------------------------------------------------------- bool SetupMgr::Clear( void) { m_vStuData.clear() ; return true ; } //---------------------------------------------------------------------------- bool SetupMgr::Load( void) { // reset m_vStuData.clear() ; // verifico ci sia una macchinata corrente if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr || m_pMachine == nullptr || m_pMchMgr->GetCurrMachGroup() == GDB_ID_NULL) return false ; // recupero il gruppo di setup int nSetupId = m_pMchMgr->GetCurrSetupGroupId() ; // eseguo la lettura dei campi di attrezzaggio int nPos = 1 ; while ( true) { // leggo una nuova posizione di attrezzaggio string sVal ; if ( ! m_pGeomDB->GetInfo( nSetupId, "Pos" + ToString( nPos), sVal)) break ; // recupero i dati della posizione (Tn;Hm;1/Tuuid/Name,2/Tuuid/Name...) bool bAdded = false ; STRVECTOR vsTok1 ; Tokenize( sVal, ";", vsTok1) ; if ( vsTok1.empty()) break ; SetupData stuData ; stuData.m_sTcPos = vsTok1[0] ; if ( vsTok1.size() >= 3) { stuData.m_sHead = vsTok1[1] ; STRVECTOR vsTok2 ; Tokenize( vsTok1[2], ",", vsTok2) ; for ( size_t i = 0 ; i < vsTok2.size() ; ++ i) { STRVECTOR vsTok3 ; Tokenize( vsTok2[i], "/", vsTok3) ; if ( vsTok3.size() >= 2) { if ( FromString( vsTok3[0], stuData.m_nExit) && m_pMchMgr->TdbGetToolFromUUID( vsTok3[1], stuData.m_sName)) { bAdded = true ; stuData.m_sTuuid = vsTok3[1] ; m_vStuData.emplace_back( stuData) ; } } } } if ( ! bAdded) { stuData.m_nExit = 0 ; m_vStuData.emplace_back( stuData) ; } // passo alla successiva posizione ++ nPos ; } return true ; } //---------------------------------------------------------------------------- bool SetupMgr::Save( void) const { // verifico ci sia una macchinata corrente if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr || m_pMachine == nullptr || m_pMchMgr->GetCurrMachGroup() == GDB_ID_NULL) return false ; // recupero il gruppo di setup int nSetupId = m_pMchMgr->GetCurrSetupGroupId() ; // cancello eventuali campi di attrezzaggio già presenti int nPosiz = 1 ; while ( m_pGeomDB->ExistsInfo( nSetupId, "Pos" + ToString( nPosiz))) { m_pGeomDB->RemoveInfo( nSetupId, "Pos" + ToString( nPosiz)) ; ++ nPosiz ; } // eseguo la scrittura dei campi di attrezzaggio int nSize = int( m_vStuData.size()) ; int nI = 0 ; int nPos = 1 ; while ( nI < nSize) { // assegno i dati della posizione (Tn;Hm;1/Tuuid/Name,2/Tuuid/Name...) string sVal ; sVal = m_vStuData[nI].m_sTcPos ; if ( m_vStuData[nI].m_nExit > 0) sVal += ";" + m_vStuData[nI].m_sHead + ";" + ToString( m_vStuData[nI].m_nExit) + "/" + m_vStuData[nI].m_sTuuid + "/" + m_vStuData[nI].m_sName ; ++ nI ; // verifico se ci sono altri utensili nella medesima posizione while ( nI < nSize && m_vStuData[nI].m_sTcPos == m_vStuData[nI-1].m_sTcPos) { if ( m_vStuData[nI].m_nExit > 0) sVal += "," + ToString( m_vStuData[nI].m_nExit) + "/" + m_vStuData[nI].m_sTuuid + "/" + m_vStuData[nI].m_sName ; ++ nI ; } // scrivo una nuova posizione di attrezzaggio if ( ! m_pGeomDB->SetInfo( nSetupId, "Pos" + ToString( nPos), sVal)) return false ; // passo alla successiva posizione ++ nPos ; } return true ; } //---------------------------------------------------------------------------- bool SetupMgr::Import( const string& sFileName) { // reset m_vStuData.clear() ; // verifico ci sia una macchinata corrente if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr || m_pMachine == nullptr || m_pMchMgr->GetCurrMachGroup() == GDB_ID_NULL) return false ; // recupero il gruppo di setup int nSetupId = m_pMchMgr->GetCurrSetupGroupId() ; // inizializzo lo scanner Scanner TheScanner ; if ( ! TheScanner.Init( sFileName, ";")) return false ; // eseguo la lettura dei campi di attrezzaggio int nPos = 1 ; string sLine ; while ( TheScanner.GetLine( sLine)) { // salto dichiarazione sezione if ( sLine.front() == '[') continue ; // recupero i dati della posizione (Posxx=Tn;Hm;1/Tuuid/Name,2/Tuuid/Name...) size_t nInd = sLine.find( "=") ; if ( nInd != string::npos) sLine.erase( 0, nInd + 1) ; STRVECTOR vsTok1 ; Tokenize( sLine, ";", vsTok1) ; if ( vsTok1.empty()) break ; bool bAdded = false ; SetupData stuData ; stuData.m_sTcPos = vsTok1[0] ; if ( vsTok1.size() >= 3) { stuData.m_sHead = vsTok1[1] ; STRVECTOR vsTok2 ; Tokenize( vsTok1[2], ",", vsTok2) ; for ( size_t i = 0 ; i < vsTok2.size() ; ++ i) { STRVECTOR vsTok3 ; Tokenize( vsTok2[i], "/", vsTok3) ; if ( vsTok3.size() >= 2) { if ( FromString( vsTok3[0], stuData.m_nExit) && m_pMchMgr->TdbGetToolFromUUID( vsTok3[1], stuData.m_sName)) { bAdded = true ; stuData.m_sTuuid = vsTok3[1] ; m_vStuData.emplace_back( stuData) ; } } } } if ( ! bAdded) { stuData.m_nExit = 0 ; m_vStuData.emplace_back( stuData) ; } // passo alla successiva posizione ++ nPos ; } return true ; } //---------------------------------------------------------------------------- bool SetupMgr::FindTool( const string& sName) const { // verifico validità utensile if ( IsEmptyOrSpaces( sName)) return false ; // eseguo ricerca for ( size_t i = 0 ; i < m_vStuData.size() ; ++ i) { if ( m_vStuData[i].m_nExit > 0 && EqualNoCase( sName, m_vStuData[i].m_sName)) return true ; } return false ; } //---------------------------------------------------------------------------- bool SetupMgr::GetPosData( int nPos, string& sTcPos, string& sHead, int& nExit, string& sName) const { // verifico che la posizione sia valida int nI = nPos - 1 ; if ( nI < 0 || nI >= int( m_vStuData.size())) return false ; // assegno i dati sTcPos = m_vStuData[nI].m_sTcPos ; if ( m_vStuData[nI].m_nExit > 0) { sHead = m_vStuData[nI].m_sHead ; nExit = m_vStuData[nI].m_nExit ; sName = m_vStuData[nI].m_sName ; } else { sHead = "" ; nExit = 0 ; sName = "" ; } return true ; } //---------------------------------------------------------------------------- bool SetupMgr::GetToolData( const string& sName, string& sTcPos, string& sHead, int& nExit, int* pnPos) const { // verifico validità utensile if ( IsEmptyOrSpaces( sName)) return false ; // cerco l'utensile int nI = - 1 ; for ( size_t i = 0 ; i < m_vStuData.size() ; ++ i) { if ( m_vStuData[i].m_nExit > 0 && EqualNoCase( sName, m_vStuData[i].m_sName)) { nI = int( i) ; break ; } } if ( nI == -1) return false ; // assegno i dati sTcPos = m_vStuData[nI].m_sTcPos ; sHead = m_vStuData[nI].m_sHead ; nExit = m_vStuData[nI].m_nExit ; if ( pnPos != nullptr) *pnPos = nI + 1 ; return true ; } //---------------------------------------------------------------------------- bool SetupMgr::GetToolName( const string& sHead, int nExit, string& sName) const { // eseguo ricerca for ( size_t i = 0 ; i < m_vStuData.size() ; ++ i) { if ( EqualNoCase( sHead, m_vStuData[i].m_sHead) && m_vStuData[i].m_nExit == nExit) { sName = m_vStuData[i].m_sName ; return true ; } } sName.clear() ; return false ; } //---------------------------------------------------------------------------- bool SetupMgr::GetToolsInSetupPos( const string& sTcPos, STRVECTOR& vsTools) const { vsTools.clear() ; // eseguo ricerca for ( int i = 0 ; i < int( m_vStuData.size()) ; ++ i) { if ( EqualNoCase( sTcPos, m_vStuData[i].m_sTcPos)) { vsTools.emplace_back( m_vStuData[i].m_sName) ; } } return true ; }