//---------------------------------------------------------------------------- // 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 SURFLOCALVECTOR ; // vettore di SurfLocal typedef std::list SURFLOCALLIST ; // lista di SurfLocal