diff --git a/EGkGeoObjSave.h b/EGkGeoObjSave.h index 3d9c0b1..7f2b170 100644 --- a/EGkGeoObjSave.h +++ b/EGkGeoObjSave.h @@ -39,5 +39,40 @@ SaveGeoObj( IGeoObj* pGObj, const std::string& sFile, int nFlag = GDB_SV_BIN) // rimuovo l'oggetto dal GeomDB bOk = ( pGeomDB->RemoveGeoObjAndErase( nId) != nullptr) && bOk ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +SaveGeoObj( std::vector vpGObj, const std::string& sFile, int nFlag = GDB_SV_BIN) +{ + for ( int i = 0 ; i < int( vpGObj.size()); ++i) { + // verifico validità oggetto + if ( vpGObj[i] == nullptr || ! vpGObj[i]->IsValid() ) + return false ; + } + // creo GeomDB temporaneo + PtrOwner pGeomDB( CreateGeomDB()) ; + if ( IsNull( pGeomDB)) + return false ; + INTVECTOR vIds ; + int nLayId = 0 ; + for ( int i = 0 ; i < int( vpGObj.size()); ++i) { + // inserisco l'oggetto nel GeomDB (sotto pezzo/layer) + if ( i == 0) { + int nPartId = pGeomDB->AddGroup( GDB_ID_NULL, GDB_ID_ROOT, Frame3d()) ; + nLayId = pGeomDB->AddGroup( GDB_ID_NULL, nPartId, Frame3d()) ; + } + int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nLayId, vpGObj[i]) ; + vIds.push_back( nId) ; + if ( nId == GDB_ID_NULL) + return false ; + } + // eseguo il salvataggio + bool bOk = pGeomDB->Save( vIds, sFile, nFlag) ; + // rimuovo l'oggetto dal GeomDB + for ( int i = 0 ; i < int( vIds.size()); ++i) + bOk = ( pGeomDB->RemoveGeoObjAndErase( vIds[i]) != nullptr ) && bOk ; + return bOk ; } \ No newline at end of file