ac2da7f310
- aggiunta costante KEY_ERR_NETKEY_NOTFOUND = 9 - aggiornamento prototipi.
112 lines
3.9 KiB
C++
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
|