From 36613c23be81c7bda85448eb554b6655358653cd Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Wed, 29 Mar 2017 18:19:50 +0000 Subject: [PATCH] Include : - aggiunto file per gestione automatica superfici in locale. --- EGkSurfLocal.h | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 EGkSurfLocal.h diff --git a/EGkSurfLocal.h b/EGkSurfLocal.h new file mode 100644 index 0000000..8cb6c9c --- /dev/null +++ b/EGkSurfLocal.h @@ -0,0 +1,92 @@ +//---------------------------------------------------------------------------- +// 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 nCrvId, const Frame3d& frLoc) + : m_pSrf( 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 superficie + m_pSrf = GetSurf( pGeomDB->GetGeoObj( nCrvId)) ; + if ( m_pSrf == 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_pSrf->Clone() ; + if ( m_pCopy == nullptr) { + m_pSrf = nullptr ; + return ; + } + m_pCopy->LocToLoc( frCrv, 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) _NOEXCEPT + : 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) ; // intenzionalmente senza implementazione + SurfLocal& operator =( SurfLocal&& other) ; // intenzionalmente senza implementazione + + 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