//---------------------------------------------------------------------------- // EgalTech 2013-2013 //---------------------------------------------------------------------------- // File : GdbGroup.h Data : 28.11.13 Versione : 1.4a2 // Contenuto : Dichiarazione della classe GdbGroup. // // // // Modifiche : 28.11.13 DS Creazione modulo. // // //---------------------------------------------------------------------------- #pragma once #include "GeoFrame3d.h" #include "GdbObj.h" #include "/EgtDev/Include/EGkGeoObj.h" #include //---------------------------------------------------------------------------- class GdbGroup : public GdbObj { friend class GdbObj ; public : ~GdbGroup( void) override ; GdbGroup* Clone( int nId) const override ; GdbType GetGdbType( void) const override { return GDB_TY_GROUP ; } bool Save( int nBaseId, NgeWriter& ngeOut, INTUNORDSET* pSavedIds = nullptr) const override ; bool Load( int nNgeId, NgeReader& ngeIn, int nBaseGdbId, int& nParentId) override ; bool GetLocalBBox( BBox3d& b3Loc, int nFlag, int nLev = 0) const override ; bool GetBBox( const Frame3d& frRef, BBox3d& b3Ref, int nFlag, int nLev = 0) const override ; bool Translate( const Vector3d& vtMove) override { m_frF.Translate( vtMove) ; return true ; } bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngDeg) override { double dAngRad = dAngDeg * DEGTORAD ; return Rotate( ptAx, vtAx, cos( dAngRad), sin( dAngRad)) ; } bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng) override { return m_frF.Rotate( ptAx, vtAx, dCosAng, dSinAng) ; } bool Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ) override ; bool Mirror( const Point3d& ptOn, const Vector3d& vtNorm) override ; bool Shear( const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff) override ; bool ToGlob( const Frame3d& frRef) override { return m_frF.ToGlob( frRef) ; } bool ToLoc( const Frame3d& frRef) override { return m_frF.ToLoc( frRef) ; } bool LocToLoc( const Frame3d& frOri, const Frame3d& frDest) override { return m_frF.LocToLoc( frOri, frDest) ; } bool OnSetMaterial( void) override ; public : GdbGroup( void) ; bool SaveEmpty( int nBaseId, NgeWriter& ngeOut, INTUNORDSET* pSavedIds = nullptr) const ; bool SaveChildren( int nBaseId, NgeWriter& ngeOut, INTUNORDSET* pSavedIds = nullptr) const ; bool Clear( void) ; void ObjCountInc( void) { ++ m_nObjCount ; } void ObjCountDec( void) { -- m_nObjCount ; } int GetObjCount( void) const { return m_nObjCount ; } GdbObj* GetFirstObj( void) { return m_pFirstObj ; } const GdbObj* GetFirstObj( void) const { return m_pFirstObj ; } GdbObj* GetLastObj( void) { return m_pLastObj ; } const GdbObj* GetLastObj( void) const { return m_pLastObj ; } int GetMinId( void) const ; public : bool SetFrame( const Frame3d& frF) { if ( ! frF.IsValid()) return false ; m_frF = frF ; return true ; } Frame3d& GetFrame( void) { return m_frF ; } const Frame3d& GetFrame( void) const { return m_frF ; } bool GetGlobFrame( Frame3d& frGlob) const ; private : Frame3d m_frF ; int m_nObjCount ; GdbObj* m_pFirstObj ; GdbObj* m_pLastObj ; } ; //---------------------------------------------------------------------------- inline const GdbGroup* GetGdbGroup( const GdbObj* pGObj) { if ( pGObj == nullptr || pGObj->GetGdbType() != GDB_TY_GROUP) return nullptr ; return static_cast( pGObj) ; } inline GdbGroup* GetGdbGroup( GdbObj* pGObj) { if ( pGObj == nullptr || pGObj->GetGdbType() != GDB_TY_GROUP) return nullptr ; return static_cast( pGObj) ; }