EgtExecutor :

- funzione exe/lua SaveObjToFile ora accetta un vettore di indici
- eliminata la forma semplicificata della funzione ExeSaveMachGroupToFile.
This commit is contained in:
Dario Sassi
2025-10-29 19:31:23 +01:00
parent 8901525ac8
commit 8b23085328
2 changed files with 34 additions and 25 deletions
+30 -21
View File
@@ -479,9 +479,15 @@ ExeSaveFile( const string& sFilePath, int nFlag)
static bool
IsMachGroupOrWithin( int nId, const IGeomDB* pGeomDB, const IMachMgr* pMachMgr, int& nMachGroupId)
{
// default non definito
nMachGroupId = GDB_ID_NULL ;
// verifico validità puntatori
if ( pGeomDB == nullptr || pMachMgr == nullptr)
return false ;
// eseguo ricerca
int nParentId = pGeomDB->GetParentId( nId) ;
int nPrevParId = nId ;
while ( pMachMgr != nullptr && nParentId != GDB_ID_NULL && nParentId != GDB_ID_ROOT) {
while ( nParentId != GDB_ID_NULL && nParentId != GDB_ID_ROOT) {
if ( pMachMgr->IsMachBase( nParentId)) {
nMachGroupId = nPrevParId ;
return true ;
@@ -489,32 +495,42 @@ IsMachGroupOrWithin( int nId, const IGeomDB* pGeomDB, const IMachMgr* pMachMgr,
nPrevParId = nParentId ;
nParentId = pGeomDB->GetParentId( nParentId) ;
}
nMachGroupId = GDB_ID_NULL ;
return false ;
}
//-----------------------------------------------------------------------------
bool
ExeSaveObjToFile( int nId, const string& sFilePath, int nFlag)
ExeSaveObjToFile( const INTVECTOR& vId, const string& sFilePath, int nFlag)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, false)
IMachMgr* pMachMgr = GetCurrMachMgr() ;
// se l'oggetto è la base dei gruppi di lavoro, chiamo la funzione di salvataggio di tutto
if ( pMachMgr != nullptr && pMachMgr->IsMachBase( nId))
return ExeSaveFile( sFilePath, nFlag) ;
// se l'oggetto è un gruppo di lavoro o una sua parte, chiamo la appropriata funzione di salvataggio
int nMachGroupId ;
if ( IsMachGroupOrWithin( nId, pGeomDB, pMachMgr, nMachGroupId))
return ExeSaveMachGroupToFile( nMachGroupId, sFilePath, nFlag) ;
// se uno degli oggetti è la base dei gruppi di lavoro, chiamo la funzione di salvataggio di tutto
for ( int nId : vId) {
if ( pMachMgr != nullptr && pMachMgr->IsMachBase( nId))
return ExeSaveFile( sFilePath, nFlag) ;
}
// se uno degli oggetti è un gruppo di lavoro o una sua parte, chiamo la appropriata funzione di salvataggio
for ( int nId : vId) {
int nMachGroupId ;
if ( IsMachGroupOrWithin( nId, pGeomDB, pMachMgr, nMachGroupId)) {
INTVECTOR vOthId ;
vOthId.reserve( vId.size()) ;
for ( int nSouId : vId) {
if ( nSouId != nId)
vOthId.push_back( nSouId) ;
}
return ExeSaveMachGroupToFile( nMachGroupId, vOthId, sFilePath, nFlag) ;
}
}
// se ero in CAM, non esco <---
// copio l'oggetto nel file
bool bOk = pGeomDB->Save( nId, sFilePath, nFlag) ;
bool bOk = pGeomDB->Save( vId, sFilePath, nFlag) ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
string sLua = "EgtSaveObjToFile(" + ToString( nId) + ",'" +
StringToLuaString( sFilePath) + "'," +
NgeTypeToString( nFlag) + ")" +
string sLua = "EgtSaveObjToFile({" + ToString( vId) + "},'" +
StringToLuaString( sFilePath) + "'," +
NgeTypeToString( nFlag) + ")" +
" -- Ok=" + ToString( bOk) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
}
@@ -522,13 +538,6 @@ ExeSaveObjToFile( int nId, const string& sFilePath, int nFlag)
return bOk ;
}
//-----------------------------------------------------------------------------
bool
ExeSaveMachGroupToFile( int nMGroupId, const string& sFilePath, int nFlag)
{
return ExeSaveMachGroupToFile( nMGroupId, {}, sFilePath, nFlag) ;
}
//-----------------------------------------------------------------------------
bool
ExeSaveMachGroupToFile( int nMGroupId, const INTVECTOR& vPlusId, const string& sFilePath, int nFlag)
+4 -4
View File
@@ -312,16 +312,16 @@ LuaSaveFile( lua_State* L)
static int
LuaSaveObjToFile( lua_State* L)
{
// 2 o 3 parametri : nId, path del file [, flag]
int nId ;
LuaCheckParam( L, 1, nId)
// 2 o 3 parametri : vId, path del file [, flag]
INTVECTOR vId ;
LuaCheckParam( L, 1, vId)
string sFilePath ;
LuaCheckParam( L, 2, sFilePath)
int nFlag = GDB_SV_CMPTXT ;
LuaGetParam( L, 3, nFlag) ;
LuaClearStack( L) ;
// copio il gruppo nel file
bool bOk = ExeSaveObjToFile( nId, sFilePath, nFlag) ;
bool bOk = ExeSaveObjToFile( vId, sFilePath, nFlag) ;
// restituisco il risultato
LuaSetParam( L, bOk) ;
return 1 ;