Files
Include/EGkSurfLocal.h
T
Dario Sassi ac2da7f310 Include :
- aggiunta costante KEY_ERR_NETKEY_NOTFOUND = 9
- aggiornamento prototipi.
2024-04-09 14:52:08 +02:00

112 lines
3.9 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2017-2024
//----------------------------------------------------------------------------
// File : EGkSurfLocal.h Data : 08.04.24 Versione : 2.6d2
// Contenuto : Classe gestione superfici nel locale desiderato.
//
//
//
// Modifiche : 29.03.17 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
#pragma once
#include "/EgtDev/Include/EGkSurf.h"
#include "/EgtDEv/Include/EGkGeomDB.h"
//-----------------------------------------------------------------------------
class SurfLocal
{
public :
SurfLocal( IGeomDB* pGeomDB, int nSrfId, const Frame3d& frLoc)
: m_pSrf( nullptr), m_pCopy( nullptr)
{ // verifica dei parametri
if ( pGeomDB == nullptr || &frLoc == nullptr)
return ;
// recupero riferimento della superficie
Frame3d frSrf ;
if ( ! pGeomDB->GetGlobFrame( nSrfId, frSrf))
return ;
// recupero la superficie
m_pSrf = GetSurf( pGeomDB->GetGeoObj( nSrfId)) ;
if ( m_pSrf == nullptr)
return ;
// se i riferimenti coincidono non devo fare altro
if ( AreSameFrame( frSrf, frLoc))
return ;
// copio la superficie e la porto in locale
m_pCopy = m_pSrf->Clone() ;
if ( m_pCopy == nullptr) {
m_pSrf = nullptr ;
return ;
}
m_pCopy->LocToLoc( frSrf, frLoc) ;
m_pSrf = m_pCopy ;
}
SurfLocal( const ISurf* pSurf, const Frame3d& frSrf, const Frame3d& frLoc)
: m_pSrf( nullptr), m_pCopy( nullptr)
{ // verifica dei parametri
if ( pSurf == nullptr || &frSrf == nullptr || &frLoc == nullptr)
return ;
// assegno la superficie originale
m_pSrf = pSurf ;
// se i riferimenti coincidono non devo fare altro
if ( AreSameFrame( frSrf, frLoc))
return ;
// copio la superficie e la porto in locale
m_pCopy = m_pSrf->Clone() ;
if ( m_pCopy == nullptr) {
m_pSrf = nullptr ;
return ;
}
m_pCopy->LocToLoc( frSrf, frLoc) ;
m_pSrf = m_pCopy ;
}
SurfLocal( const SurfLocal& Other)
: m_pSrf( nullptr), m_pCopy( nullptr)
{ // se non devo clonare
if ( Other.m_pCopy == nullptr) {
m_pSrf = Other.m_pSrf ;
return ;
}
m_pCopy = Other.m_pCopy->Clone() ;
if ( m_pCopy == nullptr)
return ;
m_pSrf = m_pCopy ;
}
SurfLocal( SurfLocal&& Other)
: m_pSrf( Other.m_pSrf), m_pCopy( Other.m_pCopy)
{ // annullo gli originali
Other.m_pSrf = nullptr ;
Other.m_pCopy = nullptr ;
}
~SurfLocal( void)
{ // se necessario libero la memoria
if ( m_pCopy != nullptr)
delete m_pCopy ;
m_pCopy = nullptr ;
m_pSrf = nullptr ;
}
const ISurf* Get( void) const
{ return m_pSrf ; }
const ISurf* operator->() const
{ return m_pSrf ; }
operator const ISurf*() const
{ return m_pSrf ; }
private :
SurfLocal& operator =( const SurfLocal& other) = delete ;
SurfLocal& operator =( SurfLocal&& other) = delete ;
private :
const ISurf* m_pSrf ;
ISurf* m_pCopy ;
} ;
//----------------------------------------------------------------------------
// Raccolte di SurfLocal
typedef std::vector<SurfLocal> SURFLOCALVECTOR ; // vettore di SurfLocal
typedef std::list<SurfLocal> SURFLOCALLIST ; // lista di SurfLocal