//---------------------------------------------------------------------------- // 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 || &frLoc == 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) : 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 CURVELOCALVECTOR ; // vettore di CurveLocal typedef std::list CURVELOCALLIST ; // lista di CurveLocal