From c8b31a1eb3c4fd77039e2a6a1c4d26b8e463b9fb Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Sat, 23 Nov 2013 21:43:18 +0000 Subject: [PATCH] Include : aggiunti EGkCurveBezier.h e EGkCurveComposite.h per interfaccia. --- EgkCurve.h | 10 +++++++ EgkCurveArc.h | 2 ++ EgkCurveBezier.h | 63 +++++++++++++++++++++++++++++++++++++++++++++ EgkCurveComposite.h | 55 +++++++++++++++++++++++++++++++++++++++ EgkCurveLine.h | 2 ++ 5 files changed, 132 insertions(+) create mode 100644 EgkCurveBezier.h create mode 100644 EgkCurveComposite.h diff --git a/EgkCurve.h b/EgkCurve.h index 27f7290..65b7b82 100644 --- a/EgkCurve.h +++ b/EgkCurve.h @@ -31,3 +31,13 @@ class _declspec( novtable) ICurve : public IGeoObj virtual bool GetPointTangNormCurv( double dU, Point3d& ptPos, Vector3d& vtT, Vector3d& vtN, double& dCurv) const = 0 ; virtual bool Reverse( void) = 0 ; } ; + +//---------------------------------------------------------------------------- +inline const ICurve* GetCurve( const IGeoObj* pGObj) + { if ( pGObj == nullptr || ( pGObj->GetType() & GEO_CURVE) == 0) + return nullptr ; + return (static_cast(pGObj)) ; } +inline ICurve* GetCurve( IGeoObj* pGObj) + { if ( pGObj == nullptr || ( pGObj->GetType() & GEO_CURVE) == 0) + return nullptr ; + return (static_cast(pGObj)) ; } diff --git a/EgkCurveArc.h b/EgkCurveArc.h index 1324c42..864411e 100644 --- a/EgkCurveArc.h +++ b/EgkCurveArc.h @@ -42,6 +42,8 @@ inline ICurveArc* CloneCurveArc( const IGeoObj* pGObj) inline bool CopyCurveArc( const ICurveArc* pCASou, ICurveArc* pCADest) { if ( pCASou == nullptr || pCADest == nullptr || ! pCASou->IsValid()) return false ; + if ( pCASou == pCADest) + return true ; return pCADest->Set( pCASou->GetCenter(), pCASou->GetNormVersor(), pCASou->GetRadius(), pCASou->GetStartVersor(), pCASou->GetAngCenter(), pCASou->GetDeltaN()) ; } inline const ICurveArc* GetCurveArc( const IGeoObj* pGObj) diff --git a/EgkCurveBezier.h b/EgkCurveBezier.h new file mode 100644 index 0000000..0fcbce7 --- /dev/null +++ b/EgkCurveBezier.h @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------------- +// EgalTech 2013-2013 +//---------------------------------------------------------------------------- +// File : EgkCurveBezier.h Data : 22.11.13 Versione : 1.3a1 +// Contenuto : Dichiarazione della interfaccia ICurveBezier. +// +// +// +// Modifiche : 22.11.13 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EGkCurve.h" + +//---------------------------------------------------------------------------- +class _declspec( novtable) ICurveBezier : public ICurve +{ + public : + virtual bool Init( int nDeg, bool bIsRational) = 0 ; + virtual bool SetControlPoint( int nInd, const Point3d& ptCtrl) = 0 ; + virtual bool SetControlPoint( int nInd, const Point3d& ptCtrl, double dW) = 0 ; + virtual int GetDegree( void) const = 0 ; + virtual bool IsRational( void) const = 0 ; + virtual const Point3d& GetControlPoint( int nInd, bool* pbOk = NULL) const = 0 ; + virtual double GetControlWeight( int nInd, bool* pbOk = NULL) const = 0 ; +} ; + +//----------------------------------------------------------------------------- +inline ICurveBezier* CreateCurveBezier( void) + { return (static_cast( CreateGeoObj( KEY_CRV_BEZ))) ; } +inline ICurveBezier* CloneCurveBezier( const IGeoObj* pGObj) + { if ( pGObj == nullptr || pGObj->GetType() != CRV_BEZ) + return nullptr ; + return (static_cast(pGObj->Clone())) ; } +inline bool CopyCurveBezier( const ICurveBezier* pCBSou, ICurveBezier* pCBDest) + { if ( pCBSou == nullptr || pCBDest == nullptr || ! pCBSou->IsValid()) + return false ; + if ( pCBSou == pCBDest) + return true ; + int nDeg = pCBSou->GetDegree() ; + bool bRat = pCBSou->IsRational() ; + if ( ! pCBDest->Init( nDeg, bRat)) + return false ; + if ( bRat) { + for ( int i = 0 ; i <= nDeg ; i ++) + pCBDest->SetControlPoint( i, pCBSou->GetControlPoint( i), pCBSou->GetControlWeight( i)) ; + } + else { + for ( int i = 0 ; i <= nDeg ; i ++) + pCBDest->SetControlPoint( i, pCBSou->GetControlPoint( i)) ; + } + return true ; } +inline const ICurveBezier* GetCurveBezier( const IGeoObj* pGObj) + { if ( pGObj == nullptr || pGObj->GetType() != CRV_BEZ) + return nullptr ; + return (static_cast(pGObj)) ; } +inline ICurveBezier* GetCurveBezier( IGeoObj* pGObj) + { if ( pGObj == nullptr || pGObj->GetType() != CRV_BEZ) + return nullptr ; + return (static_cast(pGObj)) ; } diff --git a/EgkCurveComposite.h b/EgkCurveComposite.h new file mode 100644 index 0000000..77ed028 --- /dev/null +++ b/EgkCurveComposite.h @@ -0,0 +1,55 @@ +//---------------------------------------------------------------------------- +// EgalTech 2013-2013 +//---------------------------------------------------------------------------- +// File : EgkCurveComposite.h Data : 22.11.13 Versione : 1.3a1 +// Contenuto : Dichiarazione della interfaccia ICurveComposite. +// +// +// +// Modifiche : 22.11.13 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EGkCurve.h" + +//---------------------------------------------------------------------------- +class _declspec( novtable) ICurveComposite : public ICurve +{ + public : + virtual bool Clear( void) = 0 ; + virtual bool AddCurve( const ICurve& cCrv) = 0 ; + virtual int GetCurveNumber( void) const = 0 ; + virtual const ICurve* GetFirstCurve( void) const = 0 ; + virtual const ICurve* GetNextCurve( void) const = 0 ; +} ; + +//----------------------------------------------------------------------------- +inline ICurveComposite* CreateCurveComposite( void) + { return (static_cast( CreateGeoObj( KEY_CRV_COMPO))) ; } +inline ICurveComposite* CloneCurveComposite( const IGeoObj* pGObj) + { if ( pGObj == nullptr || pGObj->GetType() != CRV_COMPO) + return nullptr ; + return (static_cast(pGObj->Clone())) ; } +inline bool CopyCurveComposite( const ICurveComposite* pCCSou, ICurveComposite* pCCDest) + { if ( pCCSou == nullptr || pCCDest == nullptr || ! pCCSou->IsValid()) + return false ; + if ( pCCSou == pCCDest) + return true ; + pCCDest->Clear() ; + const ICurve* pCrv = pCCSou->GetFirstCurve() ; + while ( pCrv != nullptr) { + pCCDest->AddCurve( *pCrv) ; + pCrv = pCCSou->GetNextCurve() ; + } + return true ; } +inline const ICurveComposite* GetCurveComposite( const IGeoObj* pGObj) + { if ( pGObj == nullptr || pGObj->GetType() != CRV_COMPO) + return nullptr ; + return (static_cast(pGObj)) ; } +inline ICurveComposite* GetCurveComposite( IGeoObj* pGObj) + { if ( pGObj == nullptr || pGObj->GetType() != CRV_COMPO) + return nullptr ; + return (static_cast(pGObj)) ; } diff --git a/EgkCurveLine.h b/EgkCurveLine.h index 3342771..e4ff346 100644 --- a/EgkCurveLine.h +++ b/EgkCurveLine.h @@ -34,6 +34,8 @@ inline ICurveLine* CloneCurveLine( const IGeoObj* pGObj) inline bool CopyCurveLine( const ICurveLine* pCLSou, ICurveLine* pCLDest) { if ( pCLSou == nullptr || pCLDest == nullptr || ! pCLSou->IsValid()) return false ; + if ( pCLSou == pCLDest) + return true ; return pCLDest->Set( pCLSou->GetStart(), pCLSou->GetEnd()) ; } inline const ICurveLine* GetCurveLine( const IGeoObj* pGObj) { if ( pGObj == nullptr || pGObj->GetType() != CRV_LINE)