//---------------------------------------------------------------------------- // 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 #include "GdbIterator.h" using namespace std ; //---------------------------------------------------------------------------- IGdbIterator* CreateGdbIterator( void) { return static_cast ( 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( 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() ; }