Files
EgtGeomKernel/SurfFlatRegion.h
T
Dario Sassi f4b88af3e1 EgtGeomKernel 1.6h2 :
- aggiunte Regioni (SurfFlatRegion) e prime funzionalità relative
- corretti Intervals per Add
- corretta CalcPointParamPosiz per archi che in realtà sono circonferenze.
2015-08-07 10:45:40 +00:00

134 lines
6.5 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2015-2015
//----------------------------------------------------------------------------
// File : SurfFlatRegion.h Data : 05.08.15 Versione : 1.6h2
// Contenuto : Dichiarazione della classe Surface FlatRegion.
//
//
//
// Modifiche : 05.08.15 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
#pragma once
#include "ObjGraphicsMgr.h"
#include "DllMain.h"
#include "GeoObjRW.h"
#include "SurfTriMesh.h"
#include "/EgtDev/Include/EGkCurve.h"
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
#include <deque>
//----------------------------------------------------------------------------
class SurfFlatRegion : public ISurfFlatRegion, public IGeoObjRW
{
public : // IGeoObj
virtual ~SurfFlatRegion( void) ;
virtual SurfFlatRegion* Clone( void) const ;
virtual GeoObjType GetType( void) const ;
virtual bool IsValid( void) const
{ return ( m_nStatus == OK) ; }
virtual const std::string& GetTitle( void) const ;
virtual bool Dump( std::string& sOut, bool bMM = true, const char* szNewLine = "\n") const ;
virtual bool GetLocalBBox( BBox3d& b3Loc, int nFlag = BBF_STANDARD) const ;
virtual bool GetBBox( const Frame3d& frRef, BBox3d& b3Ref, int nFlag = BBF_STANDARD) const ;
virtual bool Translate( const Vector3d& vtMove) ;
virtual bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngDeg)
{ double dAngRad = dAngDeg * DEGTORAD ;
return Rotate( ptAx, vtAx, cos( dAngRad), sin( dAngRad)) ; }
virtual bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng) ;
virtual bool Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ) ;
virtual bool Mirror( const Point3d& ptOn, const Vector3d& vtNorm) ;
virtual bool Shear( const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff) ;
virtual bool ToGlob( const Frame3d& frRef) ;
virtual bool ToLoc( const Frame3d& frRef) ;
virtual bool LocToLoc( const Frame3d& frOri, const Frame3d& frDest) ;
virtual void SetObjGraphics( IObjGraphics* pOGr)
{ m_OGrMgr.SetObjGraphics( pOGr) ; }
virtual IObjGraphics* GetObjGraphics( void)
{ return m_OGrMgr.GetObjGraphics() ; }
virtual const IObjGraphics* GetObjGraphics( void) const
{ return m_OGrMgr.GetObjGraphics() ; }
virtual void SetTempProp( int nProp)
{ m_nTempProp = nProp ; }
virtual int GetTempProp( void)
{ return m_nTempProp ; }
public : // ISurf
virtual bool IsSimple( void) const
{ return true ; }
virtual bool IsClosed( void) const
{ return false ; }
virtual bool GetArea( double& dArea) const ;
virtual bool GetVolume( double& dVolume) const
{ dVolume = 0 ;
return ( m_nStatus == OK) ; }
virtual bool GetCentroid( Point3d& ptCen) const ;
virtual bool Invert( void) ;
public : // ISurfFlatRegion
virtual bool CopyFrom( const IGeoObj* pGObjSrc) ;
virtual bool Clear( void) ;
virtual bool SetExtLoop( const ICurve& cCrv) ;
virtual bool SetExtLoop( ICurve* pCrv) ;
virtual bool AddIntLoop( const ICurve& cCrv) ;
virtual bool AddIntLoop( ICurve* pCrv) ;
virtual ICurve* GetLoop( int nLoop) const ; // nLoop=0 esterno, successivi interni
virtual int GetIntLoopNumber( void) const
{ return int( m_vpIntLoop.size()) ; }
virtual const ISurfTriMesh* GetAuxSurf( void) const ;
virtual bool GetCurveClassification( const ICurve& Crv, CRVCVECTOR& ccClass) const ;
public : // IGeoObjRW
virtual int GetNgeId( void) const ;
virtual bool Save( NgeWriter& ngeOut) const ;
virtual bool Load( NgeReader& ngeIn) ;
public :
SurfFlatRegion( void) ;
SurfFlatRegion( const SurfFlatRegion& stSrc)
{ if ( ! CopyFrom( stSrc))
LOG_ERROR( GetEGkLogger(), "SurfFlatRegion : copy constructor error") }
SurfFlatRegion& operator =( const SurfFlatRegion& stSrc)
{ if ( ! CopyFrom( stSrc))
LOG_ERROR( GetEGkLogger(), "SurfFlatRegion : copy error")
return *this ; }
private :
bool CopyFrom( const SurfFlatRegion& clSrc) ;
virtual ICurve* GetMyLoop( int nLoop) const ; // nLoop=0 esterno, successivi interni
void ResetAuxSurf( void) const ;
bool ConvertArcsToBezierCurves( void) ;
private :
enum Status { ERR = 0, OK = 1, TO_VERIFY = 2} ;
private :
typedef std::deque<ICurve*> PCRV_DEQUE ;
typedef PCRV_DEQUE::iterator PCRD_ITER ;
typedef PCRV_DEQUE::const_iterator PCRD_CONST_ITER ;
private :
ObjGraphicsMgr m_OGrMgr ; // gestore grafica dell'oggetto
mutable SurfTriMesh* m_pSTM ; // superficie trimesh ausiliaria
Status m_nStatus ; // stato
Frame3d m_frF ; // riferimento intrinseco
ICurve* m_pExtLoop ; // curva che forma il loop esterno
PCRV_DEQUE m_vpIntLoop ; // deque delle curve che formano i loop interni
int m_nTempProp ; // proprietà temporanea
mutable PCRD_CONST_ITER m_Iter ; // iteratore sui loop interni
} ;
//-----------------------------------------------------------------------------
inline SurfFlatRegion* CreateBasicSurfFlatRegion( void)
{ return (static_cast<SurfFlatRegion*>( CreateGeoObj( SRF_FLATRGN))) ; }
inline SurfFlatRegion* CloneBasicSurfFlatRegion( const IGeoObj* pGObj)
{ if ( pGObj == nullptr || pGObj->GetType() != SRF_FLATRGN)
return nullptr ;
return (static_cast<SurfFlatRegion*>(pGObj->Clone())) ; }
inline const SurfFlatRegion* GetBasicSurfFlatRegion( const IGeoObj* pGObj)
{ return (dynamic_cast<const SurfFlatRegion*>( pGObj)) ; }
inline SurfFlatRegion* GetBasicSurfFlatRegion( IGeoObj* pGObj)
{ return (dynamic_cast<SurfFlatRegion*>( pGObj)) ; }