EgtGeomKernel 1.6d8 :
- possibilità di salvare solo un gruppo o una entità del progetto.
This commit is contained in:
Binary file not shown.
+1
-1
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
@@ -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 ;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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 ;
|
||||
}
|
||||
|
||||
@@ -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
@@ -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à
|
||||
|
||||
@@ -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) ;
|
||||
|
||||
Reference in New Issue
Block a user