Files
Include/EGkSurfLocal.h
DarioS ab8ec30e29 Include :
- sistemato minuscole/maiuscole.
2022-02-26 17:46:21 +01:00

93 lines
3.1 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2017-2017
//----------------------------------------------------------------------------
// File : EGkSurfLocal.h Data : 29.03.17 Versione : 1.8c3
// 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 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