2a2c0065ed
- aggiunta prima gestione attributi.
254 lines
6.4 KiB
C++
254 lines
6.4 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 "GdbIterator.h"
|
|
#include "Attribs.h"
|
|
#include <new>
|
|
|
|
using namespace std ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
IGdbIterator*
|
|
CreateGdbIterator( void)
|
|
{
|
|
return static_cast<IGdbIterator*> ( 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<GeomDB*>( pGDB) ;
|
|
|
|
return ( m_pGDB != nullptr) ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
GdbIterator::GoTo( int nId)
|
|
{
|
|
if ( m_pGDB == nullptr)
|
|
return false ;
|
|
|
|
m_pCurrObj = m_pGDB->GetGdbObj( nId) ;
|
|
|
|
return ( m_pCurrObj != 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_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)
|
|
return false ;
|
|
|
|
// recupero il gruppo
|
|
GdbGroup* pGdbGroup ;
|
|
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::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) ;
|
|
}
|