EgtGeomKernel 1.4a3 : Migliorata gestione gruppi, aggiunti GdbIterator, GeoFrame3d e IdManager.
This commit is contained in:
+220
@@ -0,0 +1,220 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2013-2013
|
||||
//----------------------------------------------------------------------------
|
||||
// File : GdbIterator.cpp Data : 04.12.13 Versione : 1.4a3
|
||||
// Contenuto : Implementazione della classe GdbIterator.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 04.12.13 DS Creazione modulo.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//--------------------------- Include ----------------------------------------
|
||||
#include "stdafx.h"
|
||||
#include <new>
|
||||
#include "GdbIterator.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
IGdbIterator*
|
||||
CreateGdbIterator( void)
|
||||
{
|
||||
return static_cast<IGdbIterator*> ( new GdbIterator) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// GdbIterator
|
||||
//----------------------------------------------------------------------------
|
||||
GdbIterator::GdbIterator( void)
|
||||
{
|
||||
m_pGDB = nullptr ;
|
||||
m_pCurrNode = nullptr ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
GdbIterator::~GdbIterator( void)
|
||||
{
|
||||
// TODO : togliere link da GdbGeom per essere notificato della cancellazione di nodi
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbIterator::SetGDB( IGeomDB* pGDB)
|
||||
{
|
||||
m_pGDB = dynamic_cast<GeomDB*>( pGDB) ;
|
||||
|
||||
return ( m_pGDB != nullptr) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbIterator::GoTo( int nId)
|
||||
{
|
||||
if ( m_pGDB == nullptr)
|
||||
return false ;
|
||||
|
||||
m_pCurrNode = m_pGDB->GetGdbNode( nId) ;
|
||||
|
||||
return ( m_pCurrNode != nullptr) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbIterator::GoToFirstInGroup( int nIdGroup)
|
||||
{
|
||||
GdbGroup* pGdbGroup ;
|
||||
|
||||
|
||||
if ( m_pGDB == nullptr)
|
||||
return false ;
|
||||
|
||||
// recupero il gruppo
|
||||
pGdbGroup = m_pGDB->GetGdbGroup( nIdGroup) ;
|
||||
if ( pGdbGroup == nullptr) {
|
||||
m_pCurrNode = nullptr ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// recupero il nodo
|
||||
m_pCurrNode = pGdbGroup->GetFirstNode() ;
|
||||
|
||||
return ( m_pCurrNode != nullptr) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbIterator::GoToNext( void)
|
||||
{
|
||||
if ( m_pGDB == nullptr || m_pCurrNode == nullptr)
|
||||
return false ;
|
||||
|
||||
m_pCurrNode = m_pCurrNode->GetNext() ;
|
||||
|
||||
return ( m_pCurrNode != nullptr) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbIterator::GoToLastInGroup( int nIdGroup)
|
||||
{
|
||||
GdbGroup* pGdbGroup ;
|
||||
|
||||
|
||||
if ( m_pGDB == nullptr)
|
||||
return false ;
|
||||
|
||||
// recupero il gruppo
|
||||
pGdbGroup = m_pGDB->GetGdbGroup( nIdGroup) ;
|
||||
if ( pGdbGroup == nullptr) {
|
||||
m_pCurrNode = nullptr ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// recupero il nodo
|
||||
m_pCurrNode = pGdbGroup->GetLastNode() ;
|
||||
|
||||
return ( m_pCurrNode != nullptr) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbIterator::GoToPrev( void)
|
||||
{
|
||||
if ( m_pGDB == nullptr || m_pCurrNode == nullptr)
|
||||
return false ;
|
||||
|
||||
m_pCurrNode = m_pCurrNode->GetPrev() ;
|
||||
|
||||
return ( m_pCurrNode != nullptr) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
GdbType
|
||||
GdbIterator::GetGdbType( void) const
|
||||
{
|
||||
if ( m_pGDB == nullptr || m_pCurrNode == nullptr)
|
||||
return GDB_NONE ;
|
||||
|
||||
// se oggetto geometrico
|
||||
if ( GetGdbObj( m_pCurrNode) != nullptr)
|
||||
return GDB_GEO ;
|
||||
// se gruppo
|
||||
else if ( GetGdbGroup( m_pCurrNode) != nullptr)
|
||||
return GDB_GROUP ;
|
||||
// altro
|
||||
else
|
||||
return GDB_NONE ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
IGeoObj*
|
||||
GdbIterator::GetGeoObj( void)
|
||||
{
|
||||
const GdbObj* pGdbObj ;
|
||||
|
||||
|
||||
if ( m_pGDB == nullptr || m_pCurrNode == nullptr)
|
||||
return false ;
|
||||
|
||||
// recupero l'oggetto Gdb
|
||||
if ( ( pGdbObj = GetGdbObj( m_pCurrNode)) == nullptr)
|
||||
return nullptr ;
|
||||
|
||||
// restituisco il suo contenuto geometrico
|
||||
return pGdbObj->m_pGeoObj ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
Frame3d*
|
||||
GdbIterator::GetGroupFrame( void)
|
||||
{
|
||||
GdbGroup* pGdbGroup ;
|
||||
|
||||
|
||||
if ( m_pGDB == nullptr || m_pCurrNode == nullptr)
|
||||
return nullptr ;
|
||||
|
||||
if ( ( pGdbGroup = GetGdbGroup( m_pCurrNode)) == nullptr)
|
||||
return nullptr ;
|
||||
|
||||
return &( pGdbGroup->m_gfrFrame.m_frF) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbIterator::GetGroupGlobFrame( Frame3d& frGlob)
|
||||
{
|
||||
GdbGroup* pGdbGroup ;
|
||||
|
||||
|
||||
if ( m_pGDB == nullptr || m_pCurrNode == nullptr)
|
||||
return false ;
|
||||
|
||||
if ( ( pGdbGroup = GetGdbGroup( m_pCurrNode)) == nullptr)
|
||||
return false ;
|
||||
|
||||
return pGdbGroup->GetGlobFrame( frGlob) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
GdbIterator::GetId( void)
|
||||
{
|
||||
if ( m_pGDB == nullptr || m_pCurrNode == nullptr)
|
||||
return - 1 ;
|
||||
|
||||
return m_pCurrNode->m_nId ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
GdbIterator::GetParentId( void)
|
||||
{
|
||||
if ( m_pGDB == nullptr || m_pCurrNode == nullptr)
|
||||
return - 1 ;
|
||||
|
||||
return m_pCurrNode->GetParentId() ;
|
||||
}
|
||||
Reference in New Issue
Block a user