Files
EgtGeomKernel/GdbIterator.cpp
T

221 lines
5.3 KiB
C++

//----------------------------------------------------------------------------
// 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() ;
}