//---------------------------------------------------------------------------- // EgalTech 2013-2013 //---------------------------------------------------------------------------- // File : CurveLine.h Data : 16.04.13 Versione : 1.1d1 // Contenuto : Dichiarazione della classe Segmento di Linea. // // // // Modifiche : 16.04.13 DS Creazione modulo. // // //---------------------------------------------------------------------------- #pragma once #include "ObjGraphicsMgr.h" #include "CurveAux.h" #include "DllMain.h" #include "GeoObjRW.h" #include "/EgtDev/Include/EGkCurveLine.h" //---------------------------------------------------------------------------- class CurveLine : public ICurveLine, public IGeoObjRW { public : // IGeoObj virtual ~CurveLine( void) ; virtual CurveLine* 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, 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 : // ICurve virtual bool IsSimple( void) const { return true ; } virtual bool IsClosed( void) const { return ::IsClosed( *this) ; } virtual bool IsFlat( Plane3d& plPlane, double dToler) const ; virtual bool GetStartPoint( Point3d& ptStart) const ; virtual bool GetEndPoint( Point3d& ptEnd) const ; virtual bool GetMidPoint( Point3d& ptMid) const ; virtual bool GetCenterPoint( Point3d& ptCen) const { return GetMidPoint( ptCen) ; } virtual bool GetCentroid( Point3d& ptCen) const { return GetMidPoint( ptCen) ; } virtual bool GetStartDir( Vector3d& vtDir) const ; virtual bool GetEndDir( Vector3d& vtDir) const { return GetStartDir( vtDir) ; } virtual bool GetMidDir( Vector3d& vtDir) const { return GetStartDir( vtDir) ; } virtual bool GetExtrusion( Vector3d& vtExtr) const { vtExtr = m_VtExtr ; return ( m_nStatus == OK) ; } virtual bool GetThickness( double& dThick) const { dThick = m_dThick ; return ( m_nStatus == OK) ; } virtual bool GetDomain( double& dStart, double& dEnd) const { dStart = 0 ; dEnd = 1 ; return ( m_nStatus == OK) ; } virtual bool IsValidParam( double dPar, Side nSide) const { return ::IsValidParam( *this, dPar, nSide) ; } virtual bool IsStartParam( double dPar) const { return ::IsStartParam( *this, dPar) ; } virtual bool IsEndParam( double dPar) const { return ::IsEndParam( *this, dPar) ; } virtual bool GetLength( double& dLen) const ; virtual bool GetLengthAtParam( double dU, double& dLen) const ; virtual bool GetParamAtLength( double dLen, double& dU) const ; virtual bool GetPointD1D2( double dU, Side nS, Point3d& ptPos, Vector3d* pvtDer1 = nullptr, Vector3d* pvtDer2 = nullptr) const ; virtual bool GetPointTang( double dU, Side nS, Point3d& ptPos, Vector3d& vtTang) const { return ::GetPointTang( *this, dU, nS, ptPos, vtTang) ; } virtual bool GetPointDiffGeom( double dU, Side nS, CrvPointDiffGeom& oDiffG) const { oDiffG.nFlag = CrvPointDiffGeom::STD ; return ::GetPointDiffGeom( *this, dU, nS, oDiffG) ; } virtual bool IsPointOn( const Point3d& ptP, double dTol = EPS_SMALL) const ; virtual bool ApproxWithLines( double dLinTol, double dAngTolDeg, PolyLine& PL) const ; virtual bool ApproxWithArcs( double dLinTol, double dAngTolDeg, PolyArc& PA) const ; virtual ICurve* CopyParamRange( double dUStart, double dUEnd) const ; virtual bool Invert( void) ; virtual bool SimpleOffset( double dDist, int nType = OFF_FILLET) ; virtual bool ModifyStart( const Point3d& ptNewStart) ; virtual bool ModifyEnd( const Point3d& ptNewEnd) ; virtual bool SetExtrusion( const Vector3d& vtExtr) { m_VtExtr = vtExtr ; m_VtExtr.Normalize() ; m_OGrMgr.Reset() ; return true ; } virtual bool SetThickness( double dThick) { m_dThick = dThick ; m_OGrMgr.Reset() ; return true ; } virtual bool TrimStartAtParam( double dUTrim) ; virtual bool TrimEndAtParam( double dUTrim) ; virtual bool TrimStartEndAtParam( double dUStartTrim, double dUEndTrim) ; virtual bool TrimStartAtLen( double dLenTrim) ; virtual bool TrimEndAtLen( double dLenTrim) ; virtual bool ExtendStartByLen( double dLenExt) ; virtual bool ExtendEndByLen( double dLenExt) ; public : // ICurveLine virtual bool CopyFrom( const IGeoObj* pGObjSrc) ; virtual bool Set( const Point3d& ptStart, const Point3d& ptEnd) ; virtual bool SetPVL( const Point3d& ptStart, const Vector3d& vtDir, double dLen) ; virtual bool SetPDL( const Point3d& ptStart, double dDirAngDeg, double dLen) ; virtual const Point3d& GetStart( void) const { return m_PtStart ; } virtual const Point3d& GetEnd( void) const { return m_PtEnd ; } virtual bool CalcPointParamPosiz( const Point3d& ptP, bool bOnXY, double& dU, int& nPos) const ; public : // IGeoObjRW virtual int GetNgeId( void) const ; virtual bool Save( NgeWriter& ngeOut) const ; virtual bool Load( NgeReader& ngeIn) ; public : CurveLine( void) ; CurveLine( const CurveLine& clSrc) { if ( ! CopyFrom( clSrc)) LOG_ERROR( GetEGkLogger(), "CurveLine : copy constructor error") } CurveLine& operator =( const CurveLine& clSrc) { if ( ! CopyFrom( clSrc)) LOG_ERROR( GetEGkLogger(), "CurveLine : copy error") return *this ; } private : bool CopyFrom( const CurveLine& clSrc) ; bool Validate( void) ; private : enum Status { ERR = 0, OK = 1, TO_VERIFY = 2} ; private : ObjGraphicsMgr m_OGrMgr ; // gestore grafica dell'oggetto Status m_nStatus ; // stato Point3d m_PtStart ; // punto iniziale Point3d m_PtEnd ; // punto finale Vector3d m_VtExtr ; // vettore estrusione double m_dThick ; // spessore int m_nTempProp ; // proprietà temporanea } ; //----------------------------------------------------------------------------- inline CurveLine* CreateBasicCurveLine( void) { return (static_cast( CreateGeoObj( CRV_LINE))) ; } inline CurveLine* CloneBasicCurveLine( const IGeoObj* pGObj) { if ( pGObj == nullptr || pGObj->GetType() != CRV_LINE) return nullptr ; return (static_cast(pGObj->Clone())) ; } inline const CurveLine* GetBasicCurveLine( const IGeoObj* pGObj) { return (dynamic_cast(pGObj)) ; } inline CurveLine* GetBasicCurveLine( IGeoObj* pGObj) { return (dynamic_cast(pGObj)) ; }