bab45eb4f3
- 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).
137 lines
6.7 KiB
C++
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)) ; }
|