Files
DarioS d86f1cf47f EgtMachKernel 2.5a3 :
- pulizia codice.
2023-01-23 16:52:25 +01:00

324 lines
9.9 KiB
C++

//----------------------------------------------------------------------------
// 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 ;
// inizializzo lo scanner
Scanner TheScanner ;
if ( ! TheScanner.Init( sFileName, ";"))
return false ;
// eseguo la lettura dei campi di attrezzaggio
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) ;
}
}
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 ;
}