221 lines
5.3 KiB
C++
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() ;
|
|
}
|