Files
Include/EGkCurveLocal.h
Dario Sassi 84ae21db77 Include :
- aggiornamento prototipi.
2026-03-13 13:36:31 +01:00

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