84ae21db77
- aggiornamento prototipi.
112 lines
3.9 KiB
C++
112 lines
3.9 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2015-2015
|
|
//----------------------------------------------------------------------------
|
|
// File : EGkCurveLocal.h Data : 01.02.15 Versione : 1.6b1
|
|
// Contenuto : Classe gestione curve nel locale desiderato.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 01.02.15 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "/EgtDev/Include/EGkCurve.h"
|
|
#include "/EgtDEv/Include/EGkGeomDB.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
class CurveLocal
|
|
{
|
|
public :
|
|
CurveLocal( IGeomDB* pGeomDB, int nCrvId, const Frame3d& frLoc)
|
|
: m_pCrv( nullptr), m_pCopy( nullptr)
|
|
{ // verifica dei parametri
|
|
if ( pGeomDB == nullptr)
|
|
return ;
|
|
// recupero riferimento della curva
|
|
Frame3d frCrv ;
|
|
if ( ! pGeomDB->GetGlobFrame( nCrvId, frCrv))
|
|
return ;
|
|
// recupero la curva
|
|
m_pCrv = GetCurve( pGeomDB->GetGeoObj( nCrvId)) ;
|
|
if ( m_pCrv == nullptr)
|
|
return ;
|
|
// se i riferimenti coincidono non devo fare altro
|
|
if ( AreSameFrame( frCrv, frLoc))
|
|
return ;
|
|
// copio la curva e la porto in locale
|
|
m_pCopy = m_pCrv->Clone() ;
|
|
if ( m_pCopy == nullptr) {
|
|
m_pCrv = nullptr ;
|
|
return ;
|
|
}
|
|
m_pCopy->LocToLoc( frCrv, frLoc) ;
|
|
m_pCrv = m_pCopy ;
|
|
}
|
|
CurveLocal( const ICurve* pCurve, const Frame3d& frCrv, const Frame3d& frLoc)
|
|
: m_pCrv( nullptr), m_pCopy( nullptr)
|
|
{ // verifica dei parametri
|
|
if ( pCurve == nullptr || &frLoc == nullptr)
|
|
return ;
|
|
// assegno la curva originale
|
|
m_pCrv = pCurve ;
|
|
// se i riferimenti coincidono non devo fare altro
|
|
if ( AreSameFrame( frCrv, frLoc))
|
|
return ;
|
|
// copio la curva e la porto in locale
|
|
m_pCopy = m_pCrv->Clone() ;
|
|
if ( m_pCopy == nullptr) {
|
|
m_pCrv = nullptr ;
|
|
return ;
|
|
}
|
|
m_pCopy->LocToLoc( frCrv, frLoc) ;
|
|
m_pCrv = m_pCopy ;
|
|
}
|
|
CurveLocal( const CurveLocal& Other)
|
|
: m_pCrv( nullptr), m_pCopy( nullptr)
|
|
{ // se non devo clonare
|
|
if ( Other.m_pCopy == nullptr) {
|
|
m_pCrv = Other.m_pCrv ;
|
|
return ;
|
|
}
|
|
m_pCopy = Other.m_pCopy->Clone() ;
|
|
if ( m_pCopy == nullptr)
|
|
return ;
|
|
m_pCrv = m_pCopy ;
|
|
}
|
|
CurveLocal( CurveLocal&& Other) noexcept
|
|
: m_pCrv( Other.m_pCrv), m_pCopy( Other.m_pCopy)
|
|
{ // annullo gli originali
|
|
Other.m_pCrv = nullptr ;
|
|
Other.m_pCopy = nullptr ;
|
|
}
|
|
~CurveLocal( void)
|
|
{ // se necessario libero la memoria
|
|
if ( m_pCopy != nullptr)
|
|
delete m_pCopy ;
|
|
m_pCopy = nullptr ;
|
|
m_pCrv = nullptr ;
|
|
}
|
|
const ICurve* Get( void) const
|
|
{ return m_pCrv ; }
|
|
const ICurve* operator->() const
|
|
{ return m_pCrv ; }
|
|
operator const ICurve*() const
|
|
{ return m_pCrv ; }
|
|
|
|
private :
|
|
CurveLocal& operator =( const CurveLocal& other) = delete ;
|
|
CurveLocal& operator =( CurveLocal&& other) = delete ;
|
|
|
|
private :
|
|
const ICurve* m_pCrv ;
|
|
ICurve* m_pCopy ;
|
|
} ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Raccolte di CurveLocal
|
|
typedef std::vector<CurveLocal> CURVELOCALVECTOR ; // vettore di CurveLocal
|
|
typedef std::list<CurveLocal> CURVELOCALLIST ; // lista di CurveLocal
|