diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc
index ae6fb4a..e4b57e8 100644
Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ
diff --git a/EgtMachKernel.vcxproj b/EgtMachKernel.vcxproj
index e2cd8da..c9174a6 100644
--- a/EgtMachKernel.vcxproj
+++ b/EgtMachKernel.vcxproj
@@ -256,6 +256,7 @@ copy $(TargetPath) \EgtProg\Dll64
+
Create
@@ -307,6 +308,7 @@ copy $(TargetPath) \EgtProg\Dll64
+
diff --git a/EgtMachKernel.vcxproj.filters b/EgtMachKernel.vcxproj.filters
index e5e6ac2..8024174 100644
--- a/EgtMachKernel.vcxproj.filters
+++ b/EgtMachKernel.vcxproj.filters
@@ -186,6 +186,9 @@
Source Files\Operations
+
+ Source Files\Tools
+
@@ -320,6 +323,9 @@
Header Files
+
+ Header Files
+
diff --git a/Generator.cpp b/Generator.cpp
index 824976b..1688b7c 100644
--- a/Generator.cpp
+++ b/Generator.cpp
@@ -82,6 +82,10 @@ Generator::Run( const string& sCncFile, const std::string& sInfo)
m_pMchMgr->GetCurrMachGroup() == GDB_ID_NULL)
return false ;
+ // recupero eventuale attrezzaggio della macchinata
+ m_stuMgr.Init( m_pMchMgr) ;
+ m_stuMgr.Load() ;
+
// evento inizio esecuzione
bool bOk = true ;
if ( ! OnStart()) {
@@ -90,7 +94,7 @@ Generator::Run( const string& sCncFile, const std::string& sInfo)
}
// apertura file di output ed evento inizio programma
- if ( bOk && ! OnProgramStart( m_pMachine->GetMachineName(), sCncFile, sInfo)) {
+ if ( bOk && ! OnProgramStart( m_pMachine->GetMachineName(), sCncFile, sInfo, m_stuMgr.Exists())) {
bOk = false ;
LOG_INFO( GetEMkLogger(), "OnProgramStart error") ;
}
@@ -167,7 +171,7 @@ Generator::ProcessDisposition( int nOpId, int nOpInd)
// Se disposizione con movimenti macchina
if ( ! pDisp->IsEmpty()) {
// Recupero l'utensile della disposizione corrente
- string sTool ; string sHead ; int nExit ; string sTcPos ;
+ string sTool ; string sHead ; int nExit ; string sTcPos ;
if ( ! pDisp->GetToolData( sTool, sHead, nExit, sTcPos))
return false ;
// Se utensile cambierà
@@ -270,15 +274,17 @@ Generator::ProcessMachining( int nOpId, int nOpInd)
// Se utensile cambierà
if ( ! m_sTool.empty() && m_sTool != sTool) {
- // recupero la testa del prossimo utensile
- string sNextHead ; int nNextExit ; string sNextTcPos ;
- if ( m_pMchMgr->TdbSetCurrTool( sTool)) {
- m_pMchMgr->TdbGetCurrToolParam( TPA_HEAD, sNextHead) ;
- m_pMchMgr->TdbGetCurrToolParam( TPA_EXIT, nNextExit) ;
- m_pMchMgr->TdbGetCurrToolParam( TPA_TCPOS, sNextTcPos) ;
+ // recupero la testa del prossimo utensile (prima dall'attrezzaggio, poi dal DB utensili)
+ string sNextTcPos ; string sNextHead ; int nNextExit ;
+ if ( ! m_stuMgr.GetToolData( sTool, sNextTcPos, sNextHead, nNextExit)) {
+ if ( m_pMchMgr->TdbSetCurrTool( sTool)) {
+ m_pMchMgr->TdbGetCurrToolParam( TPA_TCPOS, sNextTcPos) ;
+ m_pMchMgr->TdbGetCurrToolParam( TPA_HEAD, sNextHead) ;
+ m_pMchMgr->TdbGetCurrToolParam( TPA_EXIT, nNextExit) ;
+ }
+ // ripristino l'utensile corrente
+ m_pMchMgr->TdbSetCurrTool( m_sTool) ;
}
- // ripristino l'utensile corrente
- m_pMchMgr->TdbSetCurrTool( m_sTool) ;
// emetto deselezione vecchio utensile
if ( ! OnToolDeselect( sNextHead, nNextExit, sNextTcPos))
return false ;
@@ -288,9 +294,12 @@ Generator::ProcessMachining( int nOpId, int nOpInd)
return false ;
// Se utensile cambiato, emetto selezione nuovo utensile
if ( m_sTool != m_sPrevTool) {
- string sHead ; m_pMchMgr->TdbGetCurrToolParam( TPA_HEAD, sHead) ;
- int nExit ; m_pMchMgr->TdbGetCurrToolParam( TPA_EXIT, nExit) ;
- string sTcPos ; m_pMchMgr->TdbGetCurrToolParam( TPA_TCPOS, sTcPos) ;
+ string sTcPos ; string sHead ; int nExit ;
+ if ( ! m_stuMgr.GetToolData( m_sTool, sTcPos, sHead, nExit)) {
+ m_pMchMgr->TdbGetCurrToolParam( TPA_HEAD, sHead) ;
+ m_pMchMgr->TdbGetCurrToolParam( TPA_EXIT, nExit) ;
+ m_pMchMgr->TdbGetCurrToolParam( TPA_TCPOS, sTcPos) ;
+ }
if ( ! OnToolSelect( sTool, sHead, nExit, sTcPos))
return false ;
}
@@ -434,9 +443,12 @@ Generator::UpdateTool( const string& sTool)
// lo imposto come corrente
if ( ! m_pMchMgr->TdbSetCurrTool( sTool))
return false ;
- // lo carico in macchina
- string sHead ; m_pMchMgr->TdbGetCurrToolParam( TPA_HEAD, sHead) ;
- int nExit ; m_pMchMgr->TdbGetCurrToolParam( TPA_EXIT, nExit) ;
+ // lo carico in macchina (se esiste attrezzaggio prendo i dati da questo)
+ string sTcPos ; string sHead ; int nExit ;
+ if ( ! m_stuMgr.GetToolData( m_sTool, sTcPos, sHead, nExit)) {
+ m_pMchMgr->TdbGetCurrToolParam( TPA_HEAD, sHead) ;
+ m_pMchMgr->TdbGetCurrToolParam( TPA_EXIT, nExit) ;
+ }
if ( ! m_pMchMgr->SetCalcTool( sTool, sHead, nExit))
return false ;
m_sTool = sTool ;
@@ -506,7 +518,7 @@ Generator::OnEnd( void)
//----------------------------------------------------------------------------
bool
-Generator::OnProgramStart( const string& sMachName, const string& sCncFile, const string& sInfo)
+Generator::OnProgramStart( const string& sMachName, const string& sCncFile, const string& sInfo, bool bSetup)
{
// apro il file di output
bool bOk = m_pMachine->WriterOpen( sCncFile) ;
@@ -519,6 +531,8 @@ Generator::OnProgramStart( const string& sMachName, const string& sCncFile, cons
// assegno info
string sTxt = sInfo + " " + CurrDateTime() ;
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_INFO, sTxt) ;
+ // assegno flag di presenza setup
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SETUP, bSetup) ;
// chiamo la funzione di inizio programma
bOk = bOk && m_pMachine->LuaCallFunction( ON_PROGRAM_START) ;
return bOk ;
@@ -582,44 +596,87 @@ Generator::ProcessToolData( void)
// passo alla operazione successiva
nOpId = m_pMchMgr->GetNextActiveOperation( nOpId) ;
}
- // ordino l'elenco degli utensili
- std::sort( vTdata.begin(), vTdata.end(), []( const MyToolData& a, const MyToolData& b)
- { if ( a.sHead == b.sHead)
- return a.nExit < b.nExit ;
- else
- return a.sHead < b.sHead ; }) ;
- // emetto l'elenco degli utensili
+
bool bOk = true ;
- string sPrevHead ; int nPrevExit = 0 ; string sPrevTcPos ; string sPrevTool ;
- for ( size_t i = 0 ; i < vTdata.size() ; ++ i) {
- // se posizione diversa (testa o uscita o toolchanger)
- if ( vTdata[i].sHead != sPrevHead || vTdata[i].nExit != nPrevExit ||
- vTdata[i].sTcPos != sPrevTcPos) {
- bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TOOL, vTdata[i].sName) ;
- bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_HEAD, vTdata[i].sHead) ;
- bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_EXIT, vTdata[i].nExit) ;
- bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TCPOS, vTdata[i].sTcPos) ;
- bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TCOMP, vTdata[i].nComp) ;
- bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TDIAM, vTdata[i].dDiam) ;
- bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TLEN, vTdata[i].dLen) ;
- bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SMAX, vTdata[i].dMaxSpeed) ;
- // se esiste, chiamo la funzione di emissione dati utensile
- if ( m_pMachine->LuaExistsFunction( ON_TOOL_DATA))
- bOk = bOk && m_pMachine->LuaCallFunction( ON_TOOL_DATA) ;
- // salvo dati correnti come precedenti
- sPrevHead = vTdata[i].sHead ;
- nPrevExit = vTdata[i].nExit ;
- sPrevTool = vTdata[i].sName ;
- sPrevTcPos = vTdata[i].sTcPos ;
- }
- // altrimenti
- else {
- if ( vTdata[i].sName != sPrevTool) {
- string sErr = "Error : two tools in same position : " + sPrevTool + "<->" + vTdata[i].sName ;
+
+ // se definito attrezzaggio
+ if ( m_stuMgr.Exists()) {
+ // verifico che tutti gli utensili siano attrezzati
+ for ( size_t i = 0 ; i < vTdata.size() ; ++ i) {
+ if ( ! m_stuMgr.FindTool( vTdata[i].sName)) {
+ string sErr = "Error : " + vTdata[i].sName + " missing in setup " ;
LOG_INFO( GetEMkLogger(), sErr.c_str())
bOk = false ;
}
}
+ // emetto l'elenco di tutti gli utensili attrezzati
+ string sTcPos ; string sHead ; int nExit ; string sTool ;
+ for ( int i = 1 ; m_stuMgr.GetPosData( i, sTcPos, sHead , nExit, sTool); ++ i) {
+ // se nella posizione non c'è utensile, vado oltre
+ if ( sTool.empty())
+ continue ;
+ // emetto i dati
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TOOL, sTool) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_HEAD, sHead) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_EXIT, nExit) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TCPOS, sTcPos) ;
+ if ( m_pMchMgr->TdbSetCurrTool( sTool)) {
+ int nComp ; double dDiam ; double dLen ; double dMaxSpeed ;
+ m_pMchMgr->TdbGetCurrToolParam( TPA_CORR, nComp) ;
+ m_pMchMgr->TdbGetCurrToolParam( TPA_DIAM, dDiam) ;
+ m_pMchMgr->TdbGetCurrToolParam( TPA_LEN, dLen) ;
+ m_pMchMgr->TdbGetCurrToolParam( TPA_MAXSPEED, dMaxSpeed) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TCOMP, nComp) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TDIAM, dDiam) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TLEN, dLen) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SMAX, dMaxSpeed) ;
+ }
+ // se esiste, chiamo la funzione di emissione dati utensile
+ if ( m_pMachine->LuaExistsFunction( ON_TOOL_DATA))
+ bOk = bOk && m_pMachine->LuaCallFunction( ON_TOOL_DATA) ;
+ }
+ }
+
+ // altrimenti emetto direttamente gli utensili
+ else {
+ // ordino l'elenco degli utensili
+ std::sort( vTdata.begin(), vTdata.end(), []( const MyToolData& a, const MyToolData& b)
+ { if ( a.sHead == b.sHead)
+ return a.nExit < b.nExit ;
+ else
+ return a.sHead < b.sHead ; }) ;
+ // emetto l'elenco degli utensili
+ string sPrevHead ; int nPrevExit = 0 ; string sPrevTcPos ; string sPrevTool ;
+ for ( size_t i = 0 ; i < vTdata.size() ; ++ i) {
+ // se posizione diversa (testa o uscita o toolchanger)
+ if ( vTdata[i].sHead != sPrevHead || vTdata[i].nExit != nPrevExit ||
+ vTdata[i].sTcPos != sPrevTcPos) {
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TOOL, vTdata[i].sName) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_HEAD, vTdata[i].sHead) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_EXIT, vTdata[i].nExit) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TCPOS, vTdata[i].sTcPos) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TCOMP, vTdata[i].nComp) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TDIAM, vTdata[i].dDiam) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TLEN, vTdata[i].dLen) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SMAX, vTdata[i].dMaxSpeed) ;
+ // se esiste, chiamo la funzione di emissione dati utensile
+ if ( m_pMachine->LuaExistsFunction( ON_TOOL_DATA))
+ bOk = bOk && m_pMachine->LuaCallFunction( ON_TOOL_DATA) ;
+ // salvo dati correnti come precedenti
+ sPrevHead = vTdata[i].sHead ;
+ nPrevExit = vTdata[i].nExit ;
+ sPrevTool = vTdata[i].sName ;
+ sPrevTcPos = vTdata[i].sTcPos ;
+ }
+ // altrimenti
+ else {
+ if ( vTdata[i].sName != sPrevTool) {
+ string sErr = "Error : two tools in same position : " + sPrevTool + "<->" + vTdata[i].sName ;
+ LOG_INFO( GetEMkLogger(), sErr.c_str())
+ bOk = false ;
+ }
+ }
+ }
}
return bOk ;
diff --git a/Generator.h b/Generator.h
index b83964a..b1258b4 100644
--- a/Generator.h
+++ b/Generator.h
@@ -14,6 +14,7 @@
#pragma once
#include "CamData.h"
+#include "SetupMgr.h"
class MachMgr ;
class IGeomDB ;
@@ -38,7 +39,7 @@ class Generator
bool UpdateAxes( void) ;
bool OnStart( void) ;
bool OnEnd( void) ;
- bool OnProgramStart( const std::string& sMachName, const std::string& sCncFile, const std::string& sInfo) ;
+ bool OnProgramStart( const std::string& sMachName, const std::string& sCncFile, const std::string& sInfo, bool bSetup) ;
bool OnProgramEnd( void) ;
bool ProcessToolData( void) ;
bool OnToolSelect( const std::string& sTool, const std::string& sHead, int nExit, const std::string& sTcPos) ;
@@ -66,6 +67,7 @@ class Generator
MachMgr* m_pMchMgr ; // puntatore al gestore di tutte le lavorazioni
IGeomDB* m_pGeomDB ; // puntatore al DB geometrico
Machine* m_pMachine ; // puntatore alla macchina
+ SetupMgr m_stuMgr ; // gestore dell'attrezzaggio
std::string m_sPrevTool ; // nome dell'utensile precedente
std::string m_sTool ; // nome dell'utensile corrente
STRVECTOR m_AxesName ; // nomi degli assi macchina attivi
diff --git a/OutputConst.h b/OutputConst.h
index 37e4d6d..f5ce097 100644
--- a/OutputConst.h
+++ b/OutputConst.h
@@ -33,6 +33,7 @@ static const std::string GVAR_ST = ".St" ; // (string) token per
static const std::string GVAR_MACHNAME = ".MACHNAME" ; // (string) nome macchina
static const std::string GVAR_FILE = ".FILE" ; // (string) path file di output
static const std::string GVAR_INFO = ".INFO" ; // (string) informazioni iniziali
+static const std::string GVAR_SETUP = ".SETUP" ; // (bool) flag definizione setup
static const std::string GVAR_DISPID = ".DISPID" ; // (int) identificativo disposizione
static const std::string GVAR_DISPIND = ".DISPIND" ; // (int) indice disposizione
static const std::string GVAR_PHASE = ".PHASE" ; // (int) indice fase
diff --git a/SetupMgr.cpp b/SetupMgr.cpp
new file mode 100644
index 0000000..ce11439
--- /dev/null
+++ b/SetupMgr.cpp
@@ -0,0 +1,154 @@
+//----------------------------------------------------------------------------
+// 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"
+
+using namespace std ;
+
+//----------------------------------------------------------------------------
+SetupMgr::SetupMgr( void)
+{
+}
+
+//----------------------------------------------------------------------------
+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::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 ;
+ 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)
+{
+ for ( size_t i = 0 ; i < m_vStuData.size() ; ++ i) {
+ if ( EqualNoCase( sName, m_vStuData[i].m_sName))
+ return true ;
+ }
+ return false ;
+}
+
+//----------------------------------------------------------------------------
+bool
+SetupMgr::GetPosData( int nPos, string& sTcPos, string& sHead, int& nExit, string& sName)
+{
+ // verifico che la posizione sia valida
+ if ( nPos < 1 || nPos > int( m_vStuData.size()))
+ return false ;
+ // assegno i dati
+ sTcPos = m_vStuData[nPos - 1].m_sTcPos ;
+ if ( m_vStuData[nPos - 1].m_nExit > 0) {
+ sHead = m_vStuData[nPos - 1].m_sHead ;
+ nExit = m_vStuData[nPos - 1].m_nExit ;
+ sName = m_vStuData[nPos - 1].m_sName ;
+ }
+ else {
+ sHead = "" ;
+ nExit = 0 ;
+ sName = "" ;
+ }
+ return true ;
+}
+
+//----------------------------------------------------------------------------
+bool
+SetupMgr::GetToolData( const string& sName, string& sTcPos, string& sHead, int& nExit, int* pnPos)
+{
+ // cerco l'utensile
+ int nI = - 1 ;
+ for ( size_t i = 0 ; i < m_vStuData.size() ; ++ i) {
+ if ( 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 ;
+}
diff --git a/SetupMgr.h b/SetupMgr.h
new file mode 100644
index 0000000..26c0c78
--- /dev/null
+++ b/SetupMgr.h
@@ -0,0 +1,58 @@
+//----------------------------------------------------------------------------
+// EgalTech 2017-2017
+//----------------------------------------------------------------------------
+// File : SetupMgr.h Data : 18.01.17 Versione : 1.6x8
+// Contenuto : Dichiarazione della classe ToolsMgr.
+//
+//
+//
+// Modifiche : 18.01.17 DS Creazione modulo.
+//
+//
+//----------------------------------------------------------------------------
+
+#pragma once
+
+#include
+#include
+
+class MachMgr ;
+class IGeomDB ;
+class Machine ;
+
+//----------------------------------------------------------------------------
+struct SetupData
+{
+ std::string m_sTcPos ; // posizione in macchina
+ std::string m_sHead ; // testa macchina
+ int m_nExit ; // uscita sulla testa
+ std::string m_sName ; // nome dell'utensile attrezzato
+
+ SetupData( void) : m_nExit( 0) {}
+ SetupData( const std::string& sTcPos, const std::string& sHead, int nExit, const std::string& sName)
+ { m_sTcPos = sTcPos ; m_sHead = sHead ; m_nExit = nExit ; m_sName = sName ;}
+} ;
+
+//----------------------------------------------------------------------------
+class SetupMgr
+{
+ public :
+ SetupMgr( void) ;
+ bool Init( MachMgr* pMchMgr) ;
+ bool Load( void) ;
+ bool Save( void) const ;
+ bool Exists( void)
+ { return ! m_vStuData.empty() ; }
+ bool FindTool( const std::string& sName) ;
+ bool GetPosData( int nPos, std::string& sTcPos, std::string& sHead, int& nExit, std::string& sName) ;
+ bool GetToolData( const std::string& sName, std::string& sTcPos, std::string& sHead, int& nExit, int* pnPos = nullptr) ;
+
+ private :
+ typedef std::vector< SetupData> STUDVECTOR ;
+
+ private :
+ MachMgr* m_pMchMgr ; // puntatore al gestore di tutte le lavorazioni
+ IGeomDB* m_pGeomDB ; // puntatore al DB geometrico
+ Machine* m_pMachine ; // puntatore alla macchina
+ STUDVECTOR m_vStuData ; // vettore dati di attrezzaggio
+} ;
\ No newline at end of file