//---------------------------------------------------------------------------- // EgalTech 2019-2019 //---------------------------------------------------------------------------- // File : ExtDimension.h Data : 27.12.19 Versione : 2.2a1 // Contenuto : Dichiarazione della classe Dimension (quota). // // // // Modifiche : 27.12.19 DS Creazione modulo. // // //---------------------------------------------------------------------------- #pragma once #include "ObjGraphicsMgr.h" #include "DllMain.h" #include "GeoObjRW.h" #include "/EgtDev/Include/EGkExtDimension.h" class FontManager ; //---------------------------------------------------------------------------- class ExtDimension : public IExtDimension, public IGeoObjRW { public : // IGeoObj ~ExtDimension( void) override ; ExtDimension* Clone( void) const override ; GeoObjType GetType( void) const override ; bool IsValid( void) const override { return ( m_nType != DT_NONE) ; } const std::string& GetTitle( void) const override ; bool Dump( std::string& sOut, bool bMM = true, const char* szNewLine = "\n") const override ; bool GetLocalBBox( BBox3d& b3Loc, int nFlag = BBF_STANDARD) const override ; bool GetBBox( const Frame3d& frRef, BBox3d& b3Ref, int nFlag = BBF_STANDARD) const override ; bool Translate( const Vector3d& vtMove) override ; 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 ; 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 ; bool ToLoc( const Frame3d& frRef) override ; bool LocToLoc( const Frame3d& frOri, const Frame3d& frDest) override ; void SetObjGraphics( IObjGraphics* pOGr) override { m_OGrMgr.SetObjGraphics( pOGr) ; } IObjGraphics* GetObjGraphics( void) override { return m_OGrMgr.GetObjGraphics() ; } const IObjGraphics* GetObjGraphics( void) const override { return m_OGrMgr.GetObjGraphics() ; } void SetTempProp( int nProp, int nPropInd = 0) override { if ( nPropInd >= 0 && nPropInd < 2) m_nTempProp[nPropInd] = nProp ; } int GetTempProp( int nPropInd = 0) const override { return (( nPropInd >= 0 && nPropInd < 2) ? m_nTempProp[nPropInd] : 0) ; } void SetTempParam( double dParam, int nParamInd = 0) override { if ( nParamInd >= 0 && nParamInd < 2) m_dTempParam[nParamInd] = dParam ; } double GetTempParam( int nParamInd = 0) const override { return (( nParamInd >= 0 && nParamInd < 2) ? m_dTempParam[nParamInd] : 0.0) ; } public : // IExtDimension bool CopyFrom( const IGeoObj* pGObjSrc) override ; bool SetStyle( double dExtLineLen, double dArrowLen, double dTextDist, bool bLenIsMM, int nDecDigit, const std::string& sFont, double dTextHeight) override ; bool SetLinear( const Point3d& ptP1, const Point3d& ptP2, const Point3d& ptPos, const Vector3d& vtN, const Vector3d& vtDir, const std::string& sText) override ; bool SetRadial( const Point3d& ptCen, const Point3d& ptPos, const Vector3d& vtN, const std::string& sText) override ; bool SetDiametral( const Point3d& ptCen, const Point3d& ptPos, const Vector3d& vtN, const std::string& sText) override ; bool SetAngular( const Point3d& ptV, const Point3d& ptP1, const Point3d& ptP2, const Point3d& ptPos, const Vector3d& vtN, const std::string& sText) override ; bool SetAngularEx( const Point3d& ptV1, const Point3d& ptP1, const Point3d& ptV2, const Point3d& ptP2, const Point3d& ptPos, const Vector3d& vtN, const std::string& sText) override ; const Vector3d& GetNormVersor( void) const override { return m_vtN ; } const Vector3d& GetDirVersor( void) const override { return m_vtDir ; } const Point3d& GetStart( void) const override { return m_ptP1 ; } const Point3d& GetOverStart( void) const override { return m_ptP3 ; } const Point3d& GetEnd( void) const override { return m_ptP2 ; } const Point3d& GetOverEnd( void) const override { return m_ptP4 ; } const Point3d& GetPosition( void) const override { return m_ptPos ; } const std::string& GetText( void) const override { return m_sText ; } double GetExtLineLen( void) const override { return m_dExtLineLen ; } double GetArrowLen( void) const override { return m_dArrowLen ; } double GetTextDist( void) const override { return m_dTextDist ; } bool GetLenIsMM( void) const override { return m_bLenIsMM ; } int GetDecDigit( void) const override { return m_nDecDigit ; } const std::string& GetFont( void) const override { return m_sFont ; } double GetTextHeight( void) const override { return m_dTextHeight ; } bool GetMidPoint( Point3d& ptMid) const override ; bool GetCenterPoint( Point3d& ptCen) const override ; const std::string& GetSubType( void) const override ; bool ApproxWithLines( double dLinTol, double dAngTolDeg, POLYLINELIST& lstPL) const override ; public : // IGeoObjRW int GetNgeId( void) const override ; bool Save( NgeWriter& ngeOut) const override ; bool PreSave( GdbGeo& Wrapper) const override { return true ; } bool PostSave( GdbGeo& Wrapper) const override { return true ; } bool Load( NgeReader& ngeIn) override ; bool PostLoad( GdbGeo& Wrapper) override { return true ; } public : ExtDimension( void) ; ExtDimension( const ExtDimension& gpSrc) { if ( ! CopyFrom( gpSrc)) LOG_ERROR( GetEGkLogger(), "ExtDimension : copy constructor error") } ExtDimension& operator =( const ExtDimension& gpSrc) { if ( ! CopyFrom( gpSrc)) LOG_ERROR( GetEGkLogger(), "ExtDimension : copy error") return *this ; } private : bool CopyFrom( const ExtDimension& gpSrc) ; bool Update( void) const ; double GetTextHalfDist( const Point3d& ptText, bool bUseRot = true) const ; bool GetArrowHead( const Point3d& ptTip, const Vector3d& vtDir, PolyLine& PL) const ; bool SetCurrFont( FontManager& fntMgr) const ; bool ApproxTextWithLines( double dLinTol, double dAngTolDeg, POLYLINELIST& lstPL) const ; bool GetTextMyBBox( BBox3d& b3Loc) const ; bool GetTextMyBBox( const Point3d& ptPos, BBox3d& b3Loc) const ; bool GetTextLocalBBox( BBox3d& b3Loc) const ; bool GetTextBBox( const Frame3d& frRef, BBox3d& b3Ref) const ; private : ObjGraphicsMgr m_OGrMgr ; // gestore grafica dell'oggetto int m_nType ; // tipo di quota Vector3d m_vtN ; // versore normale Vector3d m_vtDir ; // versore direzione Point3d m_ptP1 ; // primo punto Point3d m_ptP2 ; // secondo punto Point3d m_ptP3 ; // terzo punto Point3d m_ptP4 ; // quarto punto Point3d m_ptP5 ; // quinto punto Point3d m_ptP6 ; // sesto punto; nel caso delle quotature angolari � il centro Point3d m_ptPos ; // posizione ricevuta della quota std::string m_sText ; // testo della quota mutable bool m_bToCalc ; // flag dati effettivi da ricalcolare mutable std::string m_sCalcText ; // testo effettivo della quota mutable Point3d m_ptCalcPos ; // posizione effettiva della quota mutable bool m_bCalcArrowIn ; // flag posizione effettiva delle frecce mutable bool m_bCalcTextOn ; // flag posizione del testo sulla linea di misura mutable Point3d m_ptCalcP7 ; // settimo punto effettivo mutable Point3d m_ptCalcP8 ; // ottavo punto effettivo double m_dExtLineLen ; // lunghezza di estensione della linea double m_dArrowLen ; // lunghezza delle frecce double m_dTextDist ; // distanza della linea di quotatura dal testo bool m_bLenIsMM ; // flag per mm/pollici se lunghezza int m_nDecDigit ; // numero di cifre decimali std::string m_sFont ; // font del testo double m_dTextHeight ; // altezza del testo int m_nTempProp[2] ; // vettore propriet� temporanee double m_dTempParam[2] ; // vettore parametri temporanei } ; //----------------------------------------------------------------------------- inline ExtDimension* CreateBasicExtDimension( void) { return ( static_cast( CreateGeoObj( EXT_DIMENSION))) ; } inline ExtDimension* CloneBasicExtDimension( const IGeoObj* pGObj) { if ( pGObj == nullptr || pGObj->GetType() != EXT_DIMENSION) return nullptr ; return ( static_cast( pGObj->Clone())) ; } inline const ExtDimension* GetBasicExtDimension( const IGeoObj* pGObj) { if ( pGObj == nullptr || pGObj->GetType() != EXT_DIMENSION) return nullptr ; return ( static_cast( pGObj)) ; } inline ExtDimension* GetBasicExtDimension( IGeoObj* pGObj) { if ( pGObj == nullptr || pGObj->GetType() != EXT_DIMENSION) return nullptr ; return ( static_cast( pGObj)) ; }