//---------------------------------------------------------------------------- // 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 "GdbIterator.h" #include "Attribs.h" #include using namespace std ; //---------------------------------------------------------------------------- IGdbIterator* CreateGdbIterator( void) { return static_cast ( new GdbIterator) ; } //---------------------------------------------------------------------------- // GdbIterator //---------------------------------------------------------------------------- GdbIterator::GdbIterator( void) { m_pGDB = nullptr ; m_pCurrObj = 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) { m_pCurrObj = nullptr ; return false ; } m_pCurrObj = m_pGDB->GetGdbObj( nId) ; return ( m_pCurrObj != nullptr) ; } //---------------------------------------------------------------------------- bool GdbIterator::GoToFirstInGroup( int nIdGroup) { if ( m_pGDB == nullptr) { m_pCurrObj = nullptr ; return false ; } // recupero il gruppo GdbGroup* pGdbGroup = m_pGDB->GetGdbGroup( nIdGroup) ; if ( pGdbGroup == nullptr) { m_pCurrObj = nullptr ; return false ; } // recupero l'oggetto m_pCurrObj = pGdbGroup->GetFirstObj() ; return ( m_pCurrObj != nullptr) ; } //---------------------------------------------------------------------------- bool GdbIterator::GoToFirstInGroup( const IGdbIterator& iIter) { if ( m_pGDB == nullptr) { m_pCurrObj = nullptr ; return false ; } const GdbIterator* pIter = dynamic_cast (&iIter) ; if ( pIter == nullptr || pIter->m_pGDB != m_pGDB) { m_pCurrObj = nullptr ; return false ; } // recupero il gruppo GdbGroup* pGdbGroup = GetGdbGroup( pIter->m_pCurrObj) ; if ( pGdbGroup == nullptr) { m_pCurrObj = nullptr ; return false ; } // recupero l'oggetto m_pCurrObj = pGdbGroup->GetFirstObj() ; return ( m_pCurrObj != nullptr) ; } //---------------------------------------------------------------------------- bool GdbIterator::GoToNext( void) { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return false ; m_pCurrObj = m_pCurrObj->GetNext() ; return ( m_pCurrObj != nullptr) ; } //---------------------------------------------------------------------------- bool GdbIterator::GoToLastInGroup( int nIdGroup) { if ( m_pGDB == nullptr) { m_pCurrObj = nullptr ; return false ; } // recupero il gruppo GdbGroup* pGdbGroup = m_pGDB->GetGdbGroup( nIdGroup) ; if ( pGdbGroup == nullptr) { m_pCurrObj = nullptr ; return false ; } // recupero l'oggetto m_pCurrObj = pGdbGroup->GetLastObj() ; return ( m_pCurrObj != nullptr) ; } //---------------------------------------------------------------------------- bool GdbIterator::GoToLastInGroup( const IGdbIterator& iIter) { if ( m_pGDB == nullptr) { m_pCurrObj = nullptr ; return false ; } const GdbIterator* pIter = dynamic_cast (&iIter) ; if ( pIter == nullptr || pIter->m_pGDB != m_pGDB) { m_pCurrObj = nullptr ; return false ; } // recupero il gruppo GdbGroup* pGdbGroup = GetGdbGroup( pIter->m_pCurrObj) ; if ( pGdbGroup == nullptr) { m_pCurrObj = nullptr ; return false ; } // recupero l'oggetto m_pCurrObj = pGdbGroup->GetLastObj() ; return ( m_pCurrObj != nullptr) ; } //---------------------------------------------------------------------------- bool GdbIterator::GoToPrev( void) { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return false ; m_pCurrObj = m_pCurrObj->GetPrev() ; return ( m_pCurrObj != nullptr) ; } //---------------------------------------------------------------------------- GdbType GdbIterator::GetGdbType( void) const { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return GDB_NONE ; // se oggetto geometrico if ( GetGdbGeo( m_pCurrObj) != nullptr) return GDB_GEO ; // se gruppo else if ( GetGdbGroup( m_pCurrObj) != nullptr) return GDB_GROUP ; // altro else return GDB_NONE ; } //---------------------------------------------------------------------------- IGeoObj* GdbIterator::GetGeoObj( void) { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return false ; // recupero l'oggetto Gdb const GdbGeo* pGdbGeo ; if ( ( pGdbGeo = GetGdbGeo( m_pCurrObj)) == nullptr) return nullptr ; // restituisco il suo contenuto geometrico return pGdbGeo->m_pGeoObj ; } //---------------------------------------------------------------------------- IGeoFrame3d* GdbIterator::GetGeoFrame( void) { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return nullptr ; GdbGroup* pGdbGroup ; if ( ( pGdbGroup = GetGdbGroup( m_pCurrObj)) == nullptr) return nullptr ; return &( pGdbGroup->m_gfrFrame) ; } //---------------------------------------------------------------------------- bool GdbIterator::GetGroupFrame( Frame3d& frGlob) const { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return false ; GdbGroup* pGdbGroup ; if ( ( pGdbGroup = GetGdbGroup( m_pCurrObj)) == nullptr) return false ; // copio il riferimento frGlob = pGdbGroup->m_gfrFrame.m_frF ; return true ; } //---------------------------------------------------------------------------- bool GdbIterator::GetGroupGlobFrame( Frame3d& frGlob) const { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return false ; GdbGroup* pGdbGroup ; if ( ( pGdbGroup = GetGdbGroup( m_pCurrObj)) == nullptr) return false ; return pGdbGroup->GetGlobFrame( frGlob) ; } //---------------------------------------------------------------------------- int GdbIterator::GetId( void) const { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return GDB_ID_NULL ; return m_pCurrObj->m_nId ; } //---------------------------------------------------------------------------- int GdbIterator::GetParentId( void) const { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return GDB_ID_NULL ; return m_pCurrObj->GetParentId() ; } //---------------------------------------------------------------------------- // Attributes //---------------------------------------------------------------------------- bool GdbIterator::SetColor( Color cCol) { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return false ; // assegno il colore return m_pCurrObj->SetColor( cCol) ; } //---------------------------------------------------------------------------- bool GdbIterator::GetColor( Color& cCol) const { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return false ; // recupero il colore return m_pCurrObj->GetColor( cCol) ; } //---------------------------------------------------------------------------- bool GdbIterator::SetName( const string& sName) { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return false ; // assegno il nome return m_pCurrObj->SetName( sName) ; } //---------------------------------------------------------------------------- bool GdbIterator::GetName( string& sName) const { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return false ; // recupero il nome return m_pCurrObj->GetName( sName) ; } //---------------------------------------------------------------------------- bool GdbIterator::RemoveName( void) { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return false ; // rimuovo il nome return m_pCurrObj->RemoveName() ; } //---------------------------------------------------------------------------- bool GdbIterator::SetInfo( const string& sKey, const string& sInfo) { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return false ; // assegno l'Info return m_pCurrObj->SetInfo( sKey, sInfo) ; } //---------------------------------------------------------------------------- bool GdbIterator::GetInfo( const string& sKey, string& sInfo) const { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return false ; // recupero l'Info return m_pCurrObj->GetInfo( sKey, sInfo) ; } //---------------------------------------------------------------------------- bool GdbIterator::RemoveInfo( const string& sKey) { if ( m_pGDB == nullptr || m_pCurrObj == nullptr) return false ; // rimuovo l'Info return m_pCurrObj->RemoveInfo( sKey) ; }