Files
EgtGeomKernel/SurfFlatRegion.h
T
Dario Sassi bab45eb4f3 EgtGeomKernel 1.6h3 :
- migliorata approssimazione curve per riconoscimento di tratti rettilinei
- aggiunta CopyMaterial a GeomDB
- correzioni a IntersCurveCurve per le curve approssimate
- aggiunte a Intervals Union, Intersection e Difference
- correzioni a SelfIntersCurve per curve approssimate
- aggiunte funzioni di creazione Regioni (Rectangle, Stadium, Disk e da zuppa di curve)
- migliorie varie a Regioni e introduzione dei componenti connessi (chunk).
2015-08-18 07:30:08 +00:00

137 lines
6.7 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 AddExtLoop( const ICurve& cCrv) ;
virtual bool AddExtLoop( ICurve* pCrv) ;
virtual bool AddIntLoop( const ICurve& cCrv) ;
virtual bool AddIntLoop( ICurve* pCrv) ;
virtual const Vector3d& GetNormVersor( void) const
{ return m_frF.VersZ() ; }
virtual int GetChunkCount( void) const ;
virtual int GetLoopCount( int nChunk) const ;
virtual ICurve* GetLoop( int nChunk, int nLoop) const ; // nChunk 0-based, nLoop 0-based (1°esterno, successivi interni)
virtual const ISurfTriMesh* GetAuxSurf( void) const ;
virtual SurfFlatRegion* CloneChunk( int nChunk) 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) ;
int GetIndFromChunkLoop( int nChunk, int nLoop) const ;
bool GetChunkLoopFromInd( int nInd, int& nChunk, int& nLoop) const ;
ICurve* GetMyLoop( int nInd) const ; // indice nel vettore di tutti i loop
ICurve* GetMyLoop( int nChunk, int nLoop) const ; // nChunk 0-based, nLoop 0-based (1°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 ;
private :
ObjGraphicsMgr m_OGrMgr ; // gestore grafica dell'oggetto
mutable SurfTriMesh* m_pSTM ; // superficie trimesh ausiliaria
Status m_nStatus ; // stato
Frame3d m_frF ; // riferimento intrinseco
PCRV_DEQUE m_vpLoop ; // deque delle curve che formano i loop
INTVECTOR m_vExtInd ; // indice dei loop esterni nel precedente vettore
int m_nTempProp ; // proprietà temporanea
} ;
//-----------------------------------------------------------------------------
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)) ; }