f4b88af3e1
- aggiunte Regioni (SurfFlatRegion) e prime funzionalità relative - corretti Intervals per Add - corretta CalcPointParamPosiz per archi che in realtà sono circonferenze.
134 lines
6.5 KiB
C++
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)) ; }
|