diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index ba67ab7..95f622f 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ diff --git a/MachMgr.h b/MachMgr.h index 582d4be..a3af5fb 100644 --- a/MachMgr.h +++ b/MachMgr.h @@ -51,14 +51,15 @@ struct AxisBlock { //---------------------------------------------------------------------------- struct MachineData { - std::string sName ; + std::string sName ; + std::string sDir ; Machine* pMachine ; ToolsMgr* pTsMgr ; MachiningsMgr* pMsMgr ; MachineData( void) : pMachine( nullptr), pTsMgr( nullptr), pMsMgr( nullptr) {} - MachineData( const std::string& sN, Machine* pM, ToolsMgr* pTM, MachiningsMgr* pMM) - { sName = sN ; pMachine = pM ; pTsMgr = pTM ; pMsMgr = pMM ; } + MachineData( const std::string& sN, const std::string& sD, Machine* pM, ToolsMgr* pTM, MachiningsMgr* pMM) + { sName = sN ; sDir = sD ; pMachine = pM ; pTsMgr = pTM ; pMsMgr = pMM ; } } ; //---------------------------------------------------------------------------- @@ -80,6 +81,7 @@ class MachMgr : public IMachMgr std::string GetWarningString( int nInd) const override { if ( nInd < 0 || nInd >= int( m_Warnings.size())) return "" ; return m_Warnings[ nInd].second ; } // Machines + bool GetMachines( STRVECTOR& vsMachineNames, STRVECTOR& vsMachineDirs) const override ; bool SetCurrMachine( const std::string& sMachineName) override ; bool GetCurrMachineName( std::string& sMachineName) const override ; bool GetCurrMachineDir( std::string& sMachineDir) const override ; @@ -506,7 +508,7 @@ class MachMgr : public IMachMgr private : int m_nContextId ; // indice contesto corrente (1-based) IGeomDB* m_pGeomDB ; // puntatore al DB geometrico del contesto corrente - std::string m_sMachinesDir ; // direttorio delle macchine + STRVECTOR m_vMachinesBaseDir ; // direttori di base delle macchine (ordine molto importante) std::string m_sToolMakersDir ; // direttorio dei generatori di disegni utensili standard std::string m_sLuaLibsDir ; // direttorio delle librerie lua std::string m_sLuaLastRequire ; // nome ultima libreria caricata diff --git a/MachMgrBasic.cpp b/MachMgrBasic.cpp index 4595292..02624f3 100644 --- a/MachMgrBasic.cpp +++ b/MachMgrBasic.cpp @@ -94,7 +94,19 @@ MachMgr::Init( const string& sMachinesDir, const string& sToolMakersDir, IGeomDB { m_nContextId = nContextId ; m_pGeomDB = pGeomDB ; - m_sMachinesDir = sMachinesDir ; + STRVECTOR vsDir ; + Tokenize( sMachinesDir, "|", vsDir) ; + for ( int i = 0 ; i < int( vsDir.size()) ; ++ i) { + string sDir = vsDir[i] ; + TrimRight( sDir, " \\") ; + if ( ExistsDirectory( vsDir[i]) && + find_if( m_vMachinesBaseDir.begin(), m_vMachinesBaseDir.end(), + [ sDir]( const string& sItem) + { return ( EqualNoCase( sDir, sItem)) ; }) == m_vMachinesBaseDir.end()) { + m_vMachinesBaseDir.emplace_back( sDir) ; + } + } + m_sToolMakersDir = sToolMakersDir ; m_sLuaLibsDir = sLuaLibsDir ; m_sLuaLastRequire = sLuaLastRequire ; @@ -103,7 +115,7 @@ MachMgr::Init( const string& sMachinesDir, const string& sToolMakersDir, IGeomDB m_nCurrMGrpId = GDB_ID_NULL ; m_nCurrMch = - 1 ; m_stuMgr.Reset() ; - return ( m_nContextId > 0 && m_pGeomDB != nullptr && ExistsDirectory( m_sMachinesDir)) ; + return ( m_nContextId > 0 && m_pGeomDB != nullptr && ! m_vMachinesBaseDir.empty()) ; } //---------------------------------------------------------------------------- diff --git a/MachMgrDBMachinings.cpp b/MachMgrDBMachinings.cpp index 9f8aacb..af04225 100644 --- a/MachMgrDBMachinings.cpp +++ b/MachMgrDBMachinings.cpp @@ -411,10 +411,10 @@ MachMgr::MdbSave( void) const bool MachMgr::MdbGetMachiningDir( string& sMchDir) const { - string sMachineName ; - if ( ! GetCurrMachineName( sMachineName)) + string sMachineDir, sMachineName ; + if ( ! GetCurrMachineDir( sMachineDir) || ! GetCurrMachineName( sMachineName)) return false ; - sMchDir = m_sMachinesDir + "\\" + sMachineName + "\\" + MACHININGS_DIR ; + sMchDir = sMachineDir + "\\" + MACHININGS_DIR ; return true ; } diff --git a/MachMgrDBTools.cpp b/MachMgrDBTools.cpp index 5e818b2..9d6006c 100644 --- a/MachMgrDBTools.cpp +++ b/MachMgrDBTools.cpp @@ -481,10 +481,10 @@ MachMgr::TdbSave( void) const bool MachMgr::TdbGetToolDir( string& sToolDir) const { - string sMachineName ; - if ( ! GetCurrMachineName( sMachineName)) + string sMachineDir, sMachineName ; + if ( ! GetCurrMachineDir( sMachineDir) || ! GetCurrMachineName( sMachineName)) return false ; - sToolDir = m_sMachinesDir + "\\" + sMachineName + "\\" + TOOLS_DIR ; + sToolDir = sMachineDir + "\\" + TOOLS_DIR ; return true ; } @@ -492,10 +492,10 @@ MachMgr::TdbGetToolDir( string& sToolDir) const bool MachMgr::TdbGetToolHolderDir( string& sToolHolderDir) const { - string sMachineName ; - if ( ! GetCurrMachineName( sMachineName)) + string sMachineDir, sMachineName ; + if ( ! GetCurrMachineDir( sMachineDir) || ! GetCurrMachineName( sMachineName)) return false ; - sToolHolderDir = m_sMachinesDir + "\\" + sMachineName + "\\" + TOOLHOLDERS_DIR ; + sToolHolderDir = sMachineDir + "\\" + TOOLHOLDERS_DIR ; return true ; } diff --git a/MachMgrMachines.cpp b/MachMgrMachines.cpp index bacd2c0..1b7879a 100644 --- a/MachMgrMachines.cpp +++ b/MachMgrMachines.cpp @@ -25,6 +25,34 @@ using namespace std ; +//---------------------------------------------------------------------------- +bool +MachMgr::GetMachines( STRVECTOR& vsMachineNames, STRVECTOR& vsMachineDirs) const +{ + // pulisco elenco delle macchine + vsMachineNames.clear() ; + // eseguo ricerca delle macchine nei direttori base + for ( int i = 0 ; i < int( m_vMachinesBaseDir.size()) ; ++ i) { + STRVECTOR vsDirNames ; + if ( FindAllDirectories( m_vMachinesBaseDir[i] + "\\*", vsDirNames)) { + for ( int j = 0 ; j < int( vsDirNames.size()) ; ++ j) { + // nome e direttorio della macchina + string sMachName = vsDirNames[j] ; + string sMachDir = m_vMachinesBaseDir[i] + "\\" + vsDirNames[j] ; + // verifico esista il file mlde ( o mde) della macchina + string sMachineMlde = sMachDir + "\\" + sMachName + ".Mlde" ; + string sMachineMde = sMachDir + "\\" + sMachName + ".Mde" ; + if ( ExistsFile( sMachineMlde) || ExistsFile( sMachineMde)) { + vsMachineNames.emplace_back( sMachName) ; + vsMachineDirs.emplace_back( sMachDir) ; + } + } + } + } + + return true ; +} + //---------------------------------------------------------------------------- bool MachMgr::LoadMachine( const string& sMachineName) @@ -35,14 +63,25 @@ MachMgr::LoadMachine( const string& sMachineName) // se macchina gią caricata, non devo fare alcunchč if ( GetMachine( sMachineName) != - 1) return true ; + // cerco il direttorio della macchina + string sMachDir ; + for ( int i = 0 ; i < int( m_vMachinesBaseDir.size()) ; ++ i) { + string sTemp = m_vMachinesBaseDir[i] + "\\" + sMachineName ; + if ( ExistsDirectory( sTemp)) { + sMachDir = sTemp ; + break ; + } + } + if ( IsEmptyOrSpaces( sMachDir)) + return false ; // verifico esista il file mlde ( o mde) della macchina - string sMachineMlde = m_sMachinesDir + "\\" + sMachineName + "\\" + sMachineName + ".Mlde" ; + string sMachineMlde = sMachDir + "\\" + sMachineName + ".Mlde" ; if ( ! ExistsFile( sMachineMlde)) sMachineMlde = ChangeFileExtension( sMachineMlde, ".Mde") ; if ( ! ExistsFile( sMachineMlde)) return false ; // salvo nel vettore - m_vMachines.emplace_back( sMachineName, nullptr, nullptr, nullptr) ; + m_vMachines.emplace_back( sMachineName, sMachDir, nullptr, nullptr, nullptr) ; return true ; } @@ -97,7 +136,7 @@ MachMgr::GetCurrMachineDir( string& sMachineDir) const if ( m_nCurrMch < 0 || m_nCurrMch >= int( m_vMachines.size())) return false ; // assegno il direttorio - sMachineDir = m_sMachinesDir + "\\" + m_vMachines[m_nCurrMch].sName ; + sMachineDir = m_vMachines[m_nCurrMch].sDir ; return true ; } @@ -126,7 +165,7 @@ MachMgr::GetCurrMachine( void) const return nullptr ; // creo e carico la macchina PtrOwner pMch( new( nothrow) Machine) ; - if ( IsNull( pMch) || ! pMch->Init( m_sMachinesDir, m_vMachines[m_nCurrMch].sName, const_cast(this))) + if ( IsNull( pMch) || ! pMch->Init( m_vMachines[m_nCurrMch].sName, m_vMachines[m_nCurrMch].sDir, const_cast(this))) return nullptr ; // nascondo la macchina if ( m_pGeomDB != nullptr) @@ -148,7 +187,7 @@ MachMgr::GetCurrToolsMgr( void) const // se DB utensili non esiste, provo a crearlo e caricarlo if ( m_vMachines[m_nCurrMch].pTsMgr == nullptr) { PtrOwner pTsMgr( new( nothrow) ToolsMgr) ; - string sToolsDir = m_sMachinesDir + "\\" + m_vMachines[m_nCurrMch].sName + "\\" + TOOLS_DIR ; + string sToolsDir = m_vMachines[m_nCurrMch].sDir + "\\" + TOOLS_DIR ; if ( IsNull( pTsMgr) || ! pTsMgr->Load( sToolsDir, TOOLS_FILE)) return nullptr ; // salvo nel vettore @@ -168,7 +207,7 @@ MachMgr::GetCurrMachiningsMgr( void) const // se DB lavorazioni non esiste, provo a crearlo e caricarlo if ( m_vMachines[m_nCurrMch].pMsMgr == nullptr) { PtrOwner pMsMgr( new( nothrow) MachiningsMgr) ; - string sMachsFile = m_sMachinesDir + "\\" + m_vMachines[m_nCurrMch].sName + "\\" + MACHININGS_DIR + "\\" + MACHININGS_FILE ; + string sMachsFile = m_vMachines[m_nCurrMch].sDir + "\\" + MACHININGS_DIR + "\\" + MACHININGS_FILE ; if ( IsNull( pMsMgr) || ! pMsMgr->Load( sMachsFile, GetCurrToolsMgr())) return nullptr ; // salvo nel vettore diff --git a/Machine.cpp b/Machine.cpp index 505ff42..6035b17 100644 --- a/Machine.cpp +++ b/Machine.cpp @@ -92,7 +92,7 @@ Machine::Clear( void) //---------------------------------------------------------------------------- bool -Machine::Init( const string& sMachinesDir, const string& sMachineName, MachMgr* pMchMgr) +Machine::Init( const string& sMachineName, const string& sMachineDir, MachMgr* pMchMgr) { // pulisco Clear() ; @@ -102,7 +102,7 @@ Machine::Init( const string& sMachinesDir, const string& sMachineName, MachMgr* m_pMchMgr = pMchMgr ; m_pGeomDB = m_pMchMgr->GetGeomDB() ; // verifico direttorio dati macchina - m_sMachineDir = sMachinesDir + "\\" + sMachineName ; + m_sMachineDir = sMachineDir ; if ( ! ExistsDirectory( m_sMachineDir)) return false ; // creo il gruppo per la macchina diff --git a/Machine.h b/Machine.h index e26ef43..8e0b822 100644 --- a/Machine.h +++ b/Machine.h @@ -34,7 +34,7 @@ class Machine public : Machine( void) ; ~Machine( void) ; - bool Init( const std::string& sMachinesDir, const std::string& sMachineName, MachMgr* pMchMgr) ; + bool Init( const std::string& sMachineName, const std::string& sMachineDir, MachMgr* pMchMgr) ; const std::string& GetMachineName( void) const { return m_sName ; } const std::string& GetMachineDir( void) const