EgtMachKernel :
- aggiunto aggiornamento disegni utensili al salvataggio DB utensili - aggiunta funzione MachMgr::TdbCurrToolDraw - modifiche varie per supportare i punti precedenti.
This commit is contained in:
+354
-3
@@ -15,6 +15,9 @@
|
||||
#include "stdafx.h"
|
||||
#include "DllMain.h"
|
||||
#include "MachMgr.h"
|
||||
#include "/EgtDev/Include/EXeConst.h"
|
||||
#include "/EgtDev/Include/EGnFileUtils.h"
|
||||
#include "/EgtDev/Include/EgtIniFile.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
@@ -255,6 +258,46 @@ MachMgr::TdbGetCurrToolMaxDepth( double& dMaxDepth) const
|
||||
return pTsMgr->GetCurrToolMaxDepth( dMaxDepth) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
MachMgr::TdbCurrToolDraw( int nGenCtx, int nToolCtx) const
|
||||
{
|
||||
// recupero il gestore di utensili della macchina corrente
|
||||
ToolsMgr* pTsMgr = GetCurrToolsMgr() ;
|
||||
if ( pTsMgr == nullptr)
|
||||
return TD_INT_ERR ;
|
||||
// recupero il direttorio degli utensili
|
||||
string sToolDir ;
|
||||
TdbGetToolDir( sToolDir) ;
|
||||
// recupero i dati dell'utensile corrente
|
||||
const ToolData* pTdata = pTsMgr->GetCurrTool() ;
|
||||
if ( pTdata == nullptr)
|
||||
return TD_INT_ERR ;
|
||||
string sDraw ;
|
||||
pTdata->GetParam( TPA_DRAW, sDraw) ;
|
||||
if ( sDraw.empty()) {
|
||||
string sUuid ;
|
||||
pTdata->GetParam( TPA_UUID, sUuid) ;
|
||||
sDraw = sUuid + ".nge" ;
|
||||
}
|
||||
string sDrawPath = sToolDir + "\\" + sDraw ;
|
||||
int nErr = 0 ;
|
||||
// Se è disegno standard, lo ricreo
|
||||
if ( IsUUID( GetFileTitleEgt( sDraw))) {
|
||||
// Eseguo disegno
|
||||
nErr = UpdateStandardToolDraw( pTdata, nGenCtx, nToolCtx, false) ;
|
||||
}
|
||||
// altrimenti è disegno custom, lo modifico
|
||||
else {
|
||||
// Carico e aggiorno il disegno dell'utensile
|
||||
if ( ExeOpenFile( sDrawPath))
|
||||
nErr = UpdateCustomToolDraw( pTdata, nGenCtx, nToolCtx, false) ;
|
||||
else
|
||||
nErr = TD_INT_ERR ;
|
||||
}
|
||||
return nErr ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::TdbReload( void)
|
||||
@@ -274,7 +317,9 @@ MachMgr::TdbSave( void) const
|
||||
// recupero il gestore di utensili della macchina corrente
|
||||
ToolsMgr* pTsMgr = GetCurrToolsMgr() ;
|
||||
if ( pTsMgr == nullptr)
|
||||
return nullptr ;
|
||||
return false ;
|
||||
// verifico e aggiorno i disegni degli utensili
|
||||
UpdateAllToolDraws() ;
|
||||
// se non ci sono state modifiche, esco subito
|
||||
if ( ! pTsMgr->GetModified())
|
||||
return true ;
|
||||
@@ -305,11 +350,317 @@ MachMgr::TdbGetToolDir( string& sToolDir) const
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::TdbGetToolHolderDir( string& sToolDir) const
|
||||
MachMgr::TdbGetToolHolderDir( string& sToolHolderDir) const
|
||||
{
|
||||
string sMachineName ;
|
||||
if ( ! GetCurrMachineName( sMachineName))
|
||||
return false ;
|
||||
sToolDir = m_sMachinesDir + "\\" + sMachineName + "\\" + TOOLHOLDERS_DIR ;
|
||||
sToolHolderDir = m_sMachinesDir + "\\" + sMachineName + "\\" + TOOLHOLDERS_DIR ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::UpdateAllToolDraws( void) const
|
||||
{
|
||||
// recupero il gestore di utensili della macchina corrente
|
||||
ToolsMgr* pTsMgr = GetCurrToolsMgr() ;
|
||||
if ( pTsMgr == nullptr)
|
||||
return false ;
|
||||
// recupero il direttorio degli utensili
|
||||
string sToolDir ;
|
||||
TdbGetToolDir( sToolDir) ;
|
||||
// aggiorno il disegno degli utensili ( mancanti o modificati)
|
||||
UUIDVECTOR vUuidMod = pTsMgr->GetUtModified() ;
|
||||
string sName ; int nType ;
|
||||
bool bNext = pTsMgr->GetFirstTool( TF_ALL, sName, nType) ;
|
||||
while ( bNext) {
|
||||
// dati dell'utensile
|
||||
const ToolData* pTdata = pTsMgr->GetTool( sName) ;
|
||||
// verifico se modificato
|
||||
EgtUUID UuidTool = pTdata->m_Uuid ;
|
||||
auto iIter = find( vUuidMod.begin(), vUuidMod.end(), UuidTool) ;
|
||||
bool bModif = ( iIter != vUuidMod.end()) ;
|
||||
if ( bModif)
|
||||
vUuidMod.erase( iIter) ;
|
||||
// verifico se non esiste il disegno associato
|
||||
string sDraw ; pTdata->GetParam( TPA_DRAW, sDraw) ;
|
||||
bool bNoDraw = ( ! sDraw.empty() && ! ExistsFile( sToolDir + "\\" + sDraw)) ;
|
||||
// se modificato o senza disegno, ne lancio la creazione
|
||||
if ( bModif || bNoDraw)
|
||||
UpdateToolDraw( UuidTool) ;
|
||||
// passo al successivo
|
||||
bNext = pTsMgr->GetNextTool( TF_ALL, sName, nType) ;
|
||||
}
|
||||
// nel vettore sono rimasti solo gli utensili cancellati, ne elimino i disegni
|
||||
for ( const auto& UuidTool : vUuidMod) {
|
||||
string sDrawPath = sToolDir + "\\" + ToString( UuidTool) + ".nge" ;
|
||||
EraseFile( sDrawPath) ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::UpdateToolDraw( const EgtUUID& UuidTool) const
|
||||
{
|
||||
// recupero il gestore di utensili della macchina corrente
|
||||
ToolsMgr* pTsMgr = GetCurrToolsMgr() ;
|
||||
if ( pTsMgr == nullptr)
|
||||
return false ;
|
||||
// recupero il direttorio degli utensili
|
||||
string sToolDir ;
|
||||
TdbGetToolDir( sToolDir) ;
|
||||
// recupero l'utensile
|
||||
const ToolData* pTdata = pTsMgr->GetTool( UuidTool) ;
|
||||
// se non esiste, esco
|
||||
if ( pTdata == nullptr)
|
||||
return false ;
|
||||
// Recupero il nome del disegno dell'utensile
|
||||
string sDraw ;
|
||||
pTdata->GetParam( TPA_DRAW, sDraw) ;
|
||||
if ( sDraw.empty())
|
||||
return true ;
|
||||
// Determino la path del disegno
|
||||
string sDrawPath = sToolDir + "\\" + sDraw ;
|
||||
// Recupero contesto generale e creo contesto per il disegno utensile
|
||||
int nGenCtx = ExeGetCurrentContext() ;
|
||||
int nToolCtx = ExeInitContext() ;
|
||||
bool bOk = ( nToolCtx != 0) ;
|
||||
// Se è disegno standard, lo ricreo
|
||||
if ( IsUUID( GetFileTitleEgt( sDraw))) {
|
||||
// Eseguo disegno
|
||||
bOk = bOk && ( UpdateStandardToolDraw( pTdata, nGenCtx, nToolCtx, true) == 0) ;
|
||||
}
|
||||
// altrimenti è disegno custom, lo modifico
|
||||
else {
|
||||
// Carico e aggiorno il disegno dell'utensile
|
||||
bOk = bOk && ExeOpenFile( sDrawPath) ;
|
||||
bOk = bOk && ( UpdateCustomToolDraw( pTdata, nGenCtx, nToolCtx, true) == 0) ;
|
||||
}
|
||||
// Salvo il disegno
|
||||
ExeSetCurrentContext( nToolCtx) ;
|
||||
bOk = bOk && ExeSaveFile( sDrawPath, GDB_SV_CMPTXT) ;
|
||||
// Ripristino il contesto originale
|
||||
ExeSetCurrentContext( nGenCtx) ;
|
||||
ExeDeleteContext( nToolCtx) ;
|
||||
return bOk ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
MachMgr::UpdateStandardToolDraw( const ToolData* pTdata, int nGenCtx, int nToolCtx, bool bToSave) const
|
||||
{
|
||||
// Imposto contesto generale
|
||||
if ( ! ExeSetCurrentContext( nGenCtx))
|
||||
return TD_INT_ERR ;
|
||||
// Verifico esista macchina corrente
|
||||
Machine* pMch = GetCurrMachine() ;
|
||||
if ( pMch == nullptr)
|
||||
return TD_INT_ERR ;
|
||||
// Recupero file Ini della macchina
|
||||
string sMachIni = pMch->GetMachineDir() + "\\" + pMch->GetMachineName() + ".ini" ;
|
||||
// Recupero i dati dell'utensile
|
||||
int nType = TT_NONE ;
|
||||
pTdata->GetParam( TPA_TYPE, nType) ;
|
||||
string sHeadName ;
|
||||
pTdata->GetParam( TPA_HEAD, sHeadName) ;
|
||||
int nExit = 0 ;
|
||||
pTdata->GetParam( TPA_EXIT, nExit) ;
|
||||
double dLen = 0 ;
|
||||
pTdata->GetParam( TPA_LEN, dLen) ;
|
||||
double dTotLen = 0 ;
|
||||
pTdata->GetParam( TPA_TOTLEN, dTotLen) ;
|
||||
double dDiam = 0 ;
|
||||
pTdata->GetParam( TPA_DIAM, dDiam) ;
|
||||
double dTotDiam = 0 ;
|
||||
pTdata->GetParam( TPA_TOTDIAM, dTotDiam) ;
|
||||
double dMaxMat = 0 ;
|
||||
pTdata->GetParam( TPA_MAXMAT, dMaxMat) ;
|
||||
double dCornRad = 0 ;
|
||||
pTdata->GetParam( TPA_CORNRAD, dCornRad) ;
|
||||
double dSideAng = 0 ;
|
||||
pTdata->GetParam( TPA_SIDEANG, dSideAng) ;
|
||||
double dThick = 0 ;
|
||||
pTdata->GetParam( TPA_THICK, dThick) ;
|
||||
// Recupero la path dell'eventuale portautensile
|
||||
string sThPath = GetToolHolderPath( sHeadName, nExit, nType) ;
|
||||
// Carico generatore disegno utensile
|
||||
string sMaker = GetPrivateProfileStringUtf8( TOOLS_SEC.c_str(), GetToolMakerKeyFromType( nType).c_str(), "", sMachIni.c_str()) ;
|
||||
if ( sMaker.empty())
|
||||
return TD_INT_ERR ;
|
||||
// Imposto contesto per il disegno utensile
|
||||
if ( ! ExeSetCurrentContext( nToolCtx))
|
||||
return TD_INT_ERR ;
|
||||
// Acquisisco il programma lua di creazione disegno utensile
|
||||
if ( ! ExeLuaExecFile( m_sToolMakersDir + "\\" + sMaker))
|
||||
return TD_INT_ERR ;
|
||||
// Assegno i dati utensile a seconda del tipo
|
||||
bool bOk = true ;
|
||||
switch ( nType) {
|
||||
case TT_DRILL_STD :
|
||||
case TT_DRILL_LONG :
|
||||
case TT_CHISEL_STD :
|
||||
bOk = bOk && ExeLuaSetGlobStringVar( "TOOL.TOOLHOLDER", sThPath) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.TOTLEN", dTotLen) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.LEN", dLen) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.DIAM", dDiam) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.MAXMAT", dMaxMat) ;
|
||||
break ;
|
||||
case TT_SAW_STD :
|
||||
case TT_SAW_FLAT :
|
||||
bOk = bOk && ExeLuaSetGlobStringVar( "TOOL.TOOLHOLDER", sThPath) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.LEN", dLen) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.DIAM", dDiam) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.CORE", ( dLen >= dThick ? dThick - 1 : 2 * dLen - dThick)) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.THICK", dThick) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.MAXMAT", dMaxMat) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.CORNRAD", dCornRad) ;
|
||||
break ;
|
||||
case TT_MILL_STD :
|
||||
case TT_MILL_NOTIP :
|
||||
bOk = bOk && ExeLuaSetGlobStringVar( "TOOL.TOOLHOLDER", sThPath) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.TOTLEN", dTotLen) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.LEN", dLen) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.TOTDIAM", dTotDiam) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.DIAM", dDiam) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.MAXMAT", dMaxMat) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.HEIGHT", dThick) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.SIDEANG", dSideAng) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.CORNRAD", dCornRad) ;
|
||||
break ;
|
||||
case TT_MORTISE_STD :
|
||||
bOk = bOk && ExeLuaSetGlobStringVar( "TOOL.TOOLHOLDER", sThPath) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.LEN", dLen) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.DIAM", dDiam) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.MAXMAT", dMaxMat) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.THICK", dThick) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.CORNRAD", dCornRad) ;
|
||||
break ;
|
||||
default :
|
||||
return TD_INT_ERR ;
|
||||
}
|
||||
// Eseguo creazione utensile
|
||||
bOk = bOk && ExeLuaCallFunction( "CreateTool") ;
|
||||
// Recupero errore
|
||||
int nErr = TD_INT_ERR ;
|
||||
if ( ! ExeLuaGetGlobIntVar( "TOOL.ERR", &nErr) || nErr != 0)
|
||||
return nErr ;
|
||||
// Se per salvataggio
|
||||
if ( bOk && bToSave) {
|
||||
// Nascondo layer ausiliario
|
||||
int nAuxId = ExeGetFirstNameInGroup( ExeGetFirstGroupInGroup( GDB_ID_ROOT), "AUX") ;
|
||||
ExeSetStatus( { nAuxId}, GDB_ST_OFF) ;
|
||||
// Se lama devo ruotare -90 deg attorno a Z+
|
||||
if ( nType == TT_SAW_STD || nType == TT_SAW_FLAT) {
|
||||
int nPartId = ExeGetFirstGroupInGroup( GDB_ID_ROOT) ;
|
||||
ExeRotate( { nPartId}, ORIG, Z_AX, -90, RTY_GLOB) ;
|
||||
}
|
||||
}
|
||||
return ( bOk ? 0 : TD_INT_ERR) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
MachMgr::UpdateCustomToolDraw( const ToolData* pTdata, int nGenCtx, int nToolCtx, bool bToSave) const
|
||||
{
|
||||
// Imposto contesto generale
|
||||
if ( ! ExeSetCurrentContext( nGenCtx))
|
||||
return TD_INT_ERR ;
|
||||
// Recupero i dati dell'utensile
|
||||
int nType = TT_NONE ;
|
||||
pTdata->GetParam( TPA_TYPE, nType) ;
|
||||
double dLen = 0 ;
|
||||
pTdata->GetParam( TPA_LEN, dLen) ;
|
||||
double dDiam = 0 ;
|
||||
pTdata->GetParam( TPA_DIAM, dDiam) ;
|
||||
// Solo per frese
|
||||
if ( nType != TT_MILL_STD && nType != TT_MILL_NOTIP)
|
||||
return TD_INT_ERR ;
|
||||
// Imposto contesto per il disegno utensile
|
||||
if ( ! ExeSetCurrentContext( nToolCtx))
|
||||
return TD_INT_ERR ;
|
||||
// Acquisisco il programma lua di aggiornamento disegno utensile
|
||||
bool bOk = ExeLuaExecFile( m_sToolMakersDir + "\\" + "ToolAdjust.lua") ;
|
||||
// Assegno i dati utensile
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.LEN", dLen) ;
|
||||
bOk = bOk && ExeLuaSetGlobNumVar( "TOOL.DIAM", dDiam) ;
|
||||
// Eseguo aggiornamento utensile
|
||||
bOk = bOk && ExeLuaCallFunction( "AdjustCustomTool") ;
|
||||
// Recupero errore
|
||||
int nErr = TD_INT_ERR ;
|
||||
if ( ! ExeLuaGetGlobIntVar( "TOOL.ERR", &nErr) || nErr != 0)
|
||||
return nErr ;
|
||||
return ( bOk ? 0 : TD_INT_ERR) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
string
|
||||
MachMgr::GetToolMakerKeyFromType( int nType) const
|
||||
{
|
||||
switch ( nType) {
|
||||
case TT_DRILL_STD :
|
||||
case TT_DRILL_LONG :
|
||||
return DRILLMAKER_KEY ;
|
||||
case TT_SAW_STD :
|
||||
case TT_SAW_FLAT :
|
||||
return SAWBLADEMAKER_KEY ;
|
||||
case TT_MILL_STD :
|
||||
case TT_MILL_NOTIP :
|
||||
return MILLMAKER_KEY ;
|
||||
case TT_MORTISE_STD :
|
||||
return MORTISEMAKER_KEY ;
|
||||
case TT_CHISEL_STD :
|
||||
return CHISELMAKER_KEY ;
|
||||
case TT_COMPO :
|
||||
return "" ;
|
||||
}
|
||||
return "" ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
string
|
||||
MachMgr::GetToolHolderPath( const string& sHeadName, int nExit, int nType) const
|
||||
{
|
||||
// Verifiche su testa e uscita
|
||||
if ( sHeadName.empty() || nExit == 0)
|
||||
return "" ;
|
||||
// Verifico esista macchina corrente
|
||||
Machine* pMch = GetCurrMachine() ;
|
||||
if ( pMch == nullptr)
|
||||
return false ;
|
||||
// Recupero file Ini della macchina
|
||||
string sMachIni = pMch->GetMachineDir() + "\\" + pMch->GetMachineName() + ".ini" ;
|
||||
// Recupero nome portautensile
|
||||
string sToolHolder ;
|
||||
// Da sezione ToolHolder di Ini di macchina
|
||||
string sKey = sHeadName + "." + ToString( nExit) ;
|
||||
if ( nType == TT_SAW_STD) {
|
||||
string sKey2 = sKey + ":SAW_STD" ;
|
||||
sToolHolder = GetPrivateProfileStringUtf8( TOOLHOLDER_SEC.c_str(), sKey2.c_str(), "", sMachIni.c_str()) ;
|
||||
}
|
||||
else if(nType == TT_SAW_FLAT) {
|
||||
string sKey2 = sKey + ":SAW_FLAT" ;
|
||||
sToolHolder = GetPrivateProfileStringUtf8( TOOLHOLDER_SEC.c_str(), sKey2.c_str(), "", sMachIni.c_str()) ;
|
||||
}
|
||||
if ( sToolHolder.empty())
|
||||
sToolHolder = GetPrivateProfileStringUtf8( TOOLHOLDER_SEC.c_str(), sKey.c_str(), "", sMachIni.c_str()) ;
|
||||
// Se non trovato, provo da sezione Tools di Ini di macchina
|
||||
if ( sToolHolder.empty()) {
|
||||
if ( nType == TT_DRILL_STD || nType == TT_DRILL_LONG)
|
||||
sToolHolder = GetPrivateProfileStringUtf8( TOOLS_SEC.c_str(), DRILLHOLDER_KEY.c_str(), "", sMachIni.c_str()) ;
|
||||
else if ( nType == TT_SAW_STD || nType == TT_SAW_FLAT)
|
||||
sToolHolder = GetPrivateProfileStringUtf8( TOOLS_SEC.c_str(), SAWBLADEHOLDER_KEY.c_str(), "", sMachIni.c_str()) ;
|
||||
else if ( nType == TT_MILL_STD || nType == TT_MILL_NOTIP)
|
||||
sToolHolder = GetPrivateProfileStringUtf8( TOOLS_SEC.c_str(), MILLHOLDER_KEY.c_str(), "", sMachIni.c_str()) ;
|
||||
}
|
||||
// Se non trovato ancora, esco
|
||||
if ( sToolHolder.empty())
|
||||
return "" ;
|
||||
// Recupero il direttorio dei portautensili
|
||||
string sToolHolderDir ;
|
||||
if ( ! TdbGetToolHolderDir( sToolHolderDir))
|
||||
return "" ;
|
||||
// Restituisco la path
|
||||
return ( sToolHolderDir + "\\" + sToolHolder) ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user