EgtGeomKernel 1.6d8 :

- possibilità di salvare solo un gruppo o una entità del progetto.
This commit is contained in:
Dario Sassi
2015-04-30 20:41:23 +00:00
parent 21b34288bd
commit d446b03086
10 changed files with 112 additions and 51 deletions
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -5248,7 +5248,7 @@ GdbExecutor::ExecuteSave( const string& sCmd2, const STRVECTOR& vsParams)
nFlag = GDB_SV_BIN ;
}
// esecuzione salvataggio
return m_pGDB->Save( sFile, nFlag) ;
return m_pGDB->Save( GDB_ID_ROOT, sFile, nFlag) ;
}
//----------------------------------------------------------------------------
+1 -1
View File
@@ -74,7 +74,7 @@ GdbGeo::Clone( int nId) const
//----------------------------------------------------------------------------
GeoObjType
GdbGeo::GetType( void) const
GdbGeo::GetGeoType( void) const
{
// non esiste l'oggetto geometrico
if ( m_pGeoObj == nullptr)
+3 -1
View File
@@ -25,6 +25,8 @@ class GdbGeo : public GdbObj
public :
virtual ~GdbGeo( void) ;
virtual GdbGeo* Clone( int nId) const ;
virtual GdbType GetGdbType( void) const
{ return GDB_TY_GEO ; }
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( int nNgeId, NgeReader& ngeIn, int& nParentId) ;
virtual bool GetLocalBBox( BBox3d& b3Loc, int nFlag, int nLev = 0) const ;
@@ -44,7 +46,7 @@ class GdbGeo : public GdbObj
public :
GdbGeo( void) ;
GeoObjType GetType( void) const ;
GeoObjType GetGeoType( void) const ;
public :
IGeoObj* m_pGeoObj ;
+23 -4
View File
@@ -133,6 +133,13 @@ GdbGroup::Clone( int nId) const
//----------------------------------------------------------------------------
bool
GdbGroup::Save( NgeWriter& ngeOut) const
{
return ( SaveEmpty( ngeOut) && SaveChildren( ngeOut)) ;
}
//----------------------------------------------------------------------------
bool
GdbGroup::SaveEmpty( NgeWriter& ngeOut) const
{
// tipo entità e identificativi
if ( ! ngeOut.WriteKey( NGE_A_GRP))
@@ -156,14 +163,26 @@ GdbGroup::Save( NgeWriter& ngeOut) const
if ( ! ngeOut.WriteFrame( m_frF, ";", true))
return false ;
// salvataggio dei figli
return true ;
}
//----------------------------------------------------------------------------
bool
GdbGroup::SaveChildren( NgeWriter& ngeOut) const
{
// ciclo sui figli
const GdbObj* pGdbObj = GetFirstObj() ;
while ( pGdbObj != nullptr) {
if ( ! pGdbObj->Save( ngeOut))
return false ;
// recupero il livello dell'oggetto
int nLevel = GDB_LV_USER ;
pGdbObj->GetLevel( nLevel) ;
// se non temporaneo, lo salvo
if ( nLevel != GDB_LV_TEMP) {
if ( ! pGdbObj->Save( ngeOut))
return false ;
}
pGdbObj = pGdbObj->GetNext() ;
}
return true ;
}
+4
View File
@@ -26,6 +26,8 @@ class GdbGroup : public GdbObj
public :
virtual ~GdbGroup( void) ;
virtual GdbGroup* Clone( int nId) const ;
virtual GdbType GetGdbType( void) const
{ return GDB_TY_GROUP ; }
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( int nNgeId, NgeReader& ngeIn, int& nParentId) ;
virtual bool GetLocalBBox( BBox3d& b3Loc, int nFlag, int nLev = 0) const ;
@@ -50,6 +52,8 @@ class GdbGroup : public GdbObj
public :
GdbGroup( void) ;
bool SaveEmpty( NgeWriter& ngeOut) const ;
bool SaveChildren( NgeWriter& ngeOut) const ;
bool Clear( void) ;
void ObjCountInc( void)
{ ++ m_nObjCount ; }
+2 -11
View File
@@ -646,16 +646,7 @@ GdbIterator::GetGdbType( void) const
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr)
return GDB_TY_NONE ;
// se oggetto geometrico
if ( GetGdbGeo( m_pCurrObj) != nullptr)
return GDB_TY_GEO ;
// se gruppo
else if ( GetGdbGroup( m_pCurrObj) != nullptr)
return GDB_TY_GROUP ;
// altro
else
return GDB_TY_NONE ;
return m_pCurrObj->GetGdbType() ;
}
//----------------------------------------------------------------------------
@@ -665,7 +656,7 @@ GdbIterator::GetGeoType( void) const
if ( m_pGDB == nullptr || m_pCurrObj == nullptr)
return GEO_NONE ;
if ( GetGdbGeo( m_pCurrObj) != nullptr)
return GetGdbGeo( m_pCurrObj)->GetType() ;
return GetGdbGeo( m_pCurrObj)->GetGeoType() ;
else
return GEO_NONE ;
}
+3
View File
@@ -34,6 +34,7 @@ class GdbObj
public :
virtual ~GdbObj( void) ;
virtual GdbObj* Clone( int nId) const = 0 ;
virtual GdbType GetGdbType( void) const = 0 ;
virtual bool Save( NgeWriter& ngeOut) const = 0 ;
virtual bool Load( int nNgeId, NgeReader& ngeIn, int& nParentId) = 0 ;
virtual bool GetLocalBBox( BBox3d& b3Loc, int nFlag, int nLev = 0) const = 0 ;
@@ -115,6 +116,8 @@ class GdbObj
public :
void SetGeomDB( GeomDB* pGDB)
{ m_pGDB = pGDB ; }
GeomDB* GetGeomDB( void) const
{ return m_pGDB ; }
GdbObj* GetNext( void)
{ return m_pNext ; }
const GdbObj* GetNext( void) const
+73 -32
View File
@@ -27,6 +27,7 @@
#include "/EgtDev/Include/SELkKeyProc.h"
#include "/EgtDev/Include/EgtKeyCodes.h"
#include <new>
#include <stack>
using namespace std ;
@@ -258,7 +259,7 @@ GeomDB::LoadOneObj( NgeReader& ngeIn, int nGroupId, int nBaseGdbId, const INTVEC
//----------------------------------------------------------------------------
bool
GeomDB::Save( const string& sFileOut, int nFlag) const
GeomDB::Save( int nId, const string& sFileOut, int nFlag) const
{
// verifico la chiave e le opzioni
unsigned int nOpt1, nOpt2 ;
@@ -284,37 +285,86 @@ GeomDB::Save( const string& sFileOut, int nFlag) const
}
// intestazione
bool bOk = SaveHeader( ngeOut) ;
if ( ! SaveHeader( ngeOut))
return false ;
// materiali custom
if ( ! m_MatManager.Save( ngeOut))
bOk = false ;
return false ;
// ciclo di scrittura degli oggetti
const GdbObj* pGdbObj = m_GrpRadix.GetFirstObj() ;
while ( pGdbObj != nullptr) {
// recupero il livello dell'oggetto
int nLevel = GDB_LV_USER ;
pGdbObj->GetLevel( nLevel) ;
// se non temporaneo
if ( nLevel != GDB_LV_TEMP) {
// salvo l'oggetto
if ( ! pGdbObj->Save( ngeOut))
bOk = false ;
// recupero l'oggetto
const GdbObj* pGdbObj = GetGdbObj( nId) ;
// se oggetto geometrico
if ( pGdbObj != nullptr && pGdbObj->GetGdbType() == GDB_TY_GEO) {
// recupero l'oggetto geometrico
const GdbGeo* pGdbGeo = ::GetGdbGeo( pGdbObj) ;
// se non è temporaneo lo salvo insieme con la sua gerarchia
int nGrpLevel = pGdbGeo->GetCalcLevel( nGrpLevel) ;
if ( nGrpLevel != GDB_LV_TEMP) {
// recupero il padre
const GdbGroup* pGdbGroup = pGdbObj->GetParent() ;
// salvo il padre dopo la sua gerarchia e poi l'oggetto
if ( ! SaveGroupHierarchy( pGdbGroup, ngeOut) ||
! pGdbObj->Save( ngeOut))
return false ;
}
}
// se altrimenti gruppo
else if ( pGdbObj != nullptr && pGdbObj->GetGdbType() == GDB_TY_GROUP) {
// recupero il gruppo
const GdbGroup* pGdbGroup = ::GetGdbGroup( pGdbObj) ;
// se non è il gruppo radice
if ( pGdbGroup != &m_GrpRadix) {
// se non è temporaneo lo salvo insieme con la sua gerarchia
int nGrpLevel = pGdbGroup->GetCalcLevel( nGrpLevel) ;
if ( nGrpLevel != GDB_LV_TEMP) {
if ( ! SaveGroupHierarchy( pGdbGroup, ngeOut))
return false ;
}
// altrimenti dichiaro gruppo da saltare
else
pGdbGroup = nullptr ;
}
// ciclo di scrittura degli oggetti del gruppo
if ( pGdbGroup != nullptr) {
if ( ! pGdbGroup->SaveChildren(ngeOut))
return false ;
}
// passo al successivo
pGdbObj = pGdbObj->GetNext() ;
}
// terminazione
if ( ! SaveFooter( ngeOut))
bOk = false ;
return false ;
// chiusura file
if ( ! ngeOut.Close())
bOk = false ;
return ngeOut.Close() ;
}
return bOk ;
//----------------------------------------------------------------------------
bool
GeomDB::SaveGroupHierarchy( const GdbGroup* pGdbGroup, NgeWriter& ngeOut) const
{
// costruisco la gerarchia del gruppo
typedef stack<const GdbGroup*> PGGSTACK ;
PGGSTACK GrpStack ;
try {
while ( pGdbGroup != nullptr && pGdbGroup != &m_GrpRadix) {
GrpStack.push( pGdbGroup) ;
pGdbGroup = pGdbGroup->GetParent() ;
}
}
catch ( ...) {
return false ;
}
// salvo la gerarchia del gruppo
while ( ! GrpStack.empty()) {
if ( ! GrpStack.top()->SaveEmpty( ngeOut))
return false ;
GrpStack.pop() ;
}
return true ;
}
//----------------------------------------------------------------------------
@@ -764,16 +814,7 @@ GeomDB::GetGdbType( int nId) const
const GdbObj* pGdbObj = GetGdbObj( nId) ;
if ( pGdbObj == nullptr)
return GDB_TY_NONE ;
// se oggetto geometrico
if ( ::GetGdbGeo( pGdbObj) != nullptr)
return GDB_TY_GEO ;
// se gruppo
else if ( ::GetGdbGroup( pGdbObj) != nullptr)
return GDB_TY_GROUP ;
// altro
else
return GDB_TY_NONE ;
return pGdbObj->GetGdbType() ;
}
//----------------------------------------------------------------------------
@@ -786,7 +827,7 @@ GeomDB::GetGeoType( int nId) const
return GEO_NONE ;
// se oggetto geometrico
if ( ::GetGdbGeo( pGdbObj) != nullptr)
return ::GetGdbGeo( pGdbObj)->GetType() ;
return ::GetGdbGeo( pGdbObj)->GetGeoType() ;
else
return GEO_NONE ;
}
@@ -1585,7 +1626,7 @@ GeomDB::SelectGroupObjs( int nId, int nFilter, bool bOnlyIfVisible)
continue ;
// altrimenti richiesti solo oggetti geometrici di un particolare tipo
GdbGeo* pGObj = ::GetGdbGeo( pGdbObj) ;
if ( pGObj == nullptr || pGObj->GetType() != nFilter)
if ( pGObj == nullptr || pGObj->GetGeoType() != nFilter)
continue ;
}
// se richiesta verifica visibilità
+2 -1
View File
@@ -35,7 +35,7 @@ class GeomDB : public IGeomDB
virtual bool Init( void) ;
virtual bool Clear( void) ;
virtual bool Load( const std::string& sFileIn, int nGroupId = GDB_ID_ROOT) ;
virtual bool Save( const std::string& sFileOut, int nFlag = GDB_SV_BIN) const ;
virtual bool Save( int nId, const std::string& sFileOut, int nFlag = GDB_SV_BIN) const ;
virtual bool ExistsObj( int nId) const ;
virtual int AddGroup( int nId, int nParentId, const Frame3d& frFrame) ;
virtual int InsertGroup( int nId, int nRefId, int nSonBeforeAfter, const Frame3d& frFrame) ;
@@ -213,6 +213,7 @@ class GeomDB : public IGeomDB
bool EmptyGroup( GdbObj* pGdbObj) ;
bool LoadHeader( NgeReader& ngeIn, bool bSave) ;
bool LoadOneObj( NgeReader& ngeIn, int nGroupId, int nBaseGdbId, const INTVECTOR& vBaseMatId, bool& bEnd) ;
bool SaveGroupHierarchy( const GdbGroup* pGdbGroup, NgeWriter& ngeOut) const ;
bool SaveHeader( NgeWriter& ngeOut) const ;
bool SaveFooter( NgeWriter& ngeOut) const ;
bool SetStatus( GdbObj* pGdbObj, int nStat) ;