From de1bfee540da0f2897cd7b36ea5c236c2060ce93 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Fri, 24 Nov 2023 12:50:55 +0100 Subject: [PATCH] Include : - aggiornamento prototipi. --- EGkCurve.h | 3 --- EGkCurveAux.h | 13 +++++++++++++ EGkCurveComposite.h | 4 ++-- EGkOffsetCurve.h | 2 +- EGkSfrCreate.h | 2 +- EGkSurfFlatRegion.h | 4 ++-- EGkVoronoi.h | 33 +++++++++++++++++---------------- 7 files changed, 36 insertions(+), 25 deletions(-) diff --git a/EGkCurve.h b/EGkCurve.h index 93418d8..446f348 100644 --- a/EGkCurve.h +++ b/EGkCurve.h @@ -95,9 +95,6 @@ class __declspec( novtable) ICurve : public IGeoObj virtual bool ExtendStartByLen( double dLenExt) = 0 ; virtual bool ExtendEndByLen( double dLenExt) = 0 ; virtual Voronoi* GetVoronoiObject( void) const = 0 ; - virtual bool CalcVoronoiDiagram( std::vector>& vCrvs, int nBound = 3) const = 0 ; - virtual bool CalcMedialAxis( std::vector>& vCrvs, int nSide) const = 0 ; - virtual bool CalcFatCurve( std::vector>& vCrvs, double dRadius, bool bSquareEnds, bool bSquareMids) const = 0 ; } ; //---------------------------------------------------------------------------- diff --git a/EGkCurveAux.h b/EGkCurveAux.h index 76ed287..60572bf 100644 --- a/EGkCurveAux.h +++ b/EGkCurveAux.h @@ -78,3 +78,16 @@ EGK_EXPORT ICurve* ProjectCurveOnPlane( const ICurve& crCrv, const Plane3d& plPl //---------------------------------------------------------------------------- //! Uniforma la pendenza di una composita tra quota iniziale e finale assegnate EGK_EXPORT bool AdjustCurveSlope( ICurveComposite* pCrv, double dNini, double dNfin) ; + +//---------------------------------------------------------------------------- +//! Calcolo del diagramma di Voronoi della curva, nei TempParam dei risultati la distanza +//! Per nBound tenere valore di default. +EGK_EXPORT bool CalcCurveVoronoiDiagram( const ICurve& crvC, ICURVEPOVECTOR& vCrvs, int nBound = 3) ; + +//---------------------------------------------------------------------------- +//! Calcolo del Medial Axis della curva (sottoinsieme del diagramma di Voronoi), nei TempParam dei risultati la distanza +EGK_EXPORT bool CalcCurveMedialAxis( const ICurve& crvC, ICURVEPOVECTOR& vCrvs, int nSide) ; + +//---------------------------------------------------------------------------- +//! Calcola l'offset completo di una curva +EGK_EXPORT bool CalcCurveFatCurve( const ICurve& crvC, ICURVEPOVECTOR& vCrvs, double dRadius, bool bSquareEnds, bool bSquareMids) ; diff --git a/EGkCurveComposite.h b/EGkCurveComposite.h index a0c4f46..a8d55b3 100644 --- a/EGkCurveComposite.h +++ b/EGkCurveComposite.h @@ -68,8 +68,8 @@ class __declspec( novtable) ICurveComposite : public ICurve virtual bool IsATrapezoid( double dLinTol, Point3d& ptP, Vector3d& vtB1, Vector3d& vtL1, Vector3d& vtB2) const = 0 ; virtual bool SetCurveTempProp( int nCrv, int nProp, int nPropInd = 0) = 0 ; virtual bool GetCurveTempProp( int nCrv, int& nProp, int nPropInd = 0) const = 0 ; - virtual bool SetCurveTempParam( int nCrv, double dParam, int nParamInd = 0) ; - virtual bool GetCurveTempParam( int nCrv, double& dParam, int nParamInd = 0) const ; + virtual bool SetCurveTempParam( int nCrv, double dParam, int nParamInd = 0) = 0 ; + virtual bool GetCurveTempParam( int nCrv, double& dParam, int nParamInd = 0) const = 0 ; } ; //----------------------------------------------------------------------------- diff --git a/EGkOffsetCurve.h b/EGkOffsetCurve.h index 314301d..0b6ffc1 100644 --- a/EGkOffsetCurve.h +++ b/EGkOffsetCurve.h @@ -30,7 +30,7 @@ class OffsetCurve public : EGK_EXPORT bool Reset( void) ; - EGK_EXPORT bool Make( const ICurve* pCrv, double dDist, int nType, bool bUseVoronoi = false) ; + EGK_EXPORT bool Make( const ICurve* pCrv, double dDist, int nType) ; EGK_EXPORT int GetCurveCount( void) { return int( m_CrvLst.size()) ; } EGK_EXPORT ICurve* GetCurve( void) ; EGK_EXPORT ICurve* GetLongerCurve( void) ; diff --git a/EGkSfrCreate.h b/EGkSfrCreate.h index 40f4aab..c81c3c7 100644 --- a/EGkSfrCreate.h +++ b/EGkSfrCreate.h @@ -30,7 +30,7 @@ EGK_EXPORT ISurfFlatRegion* GetSurfFlatRegionRectangle( double dWidth, double dL EGK_EXPORT ISurfFlatRegion* GetSurfFlatRegionStadium( double dWidth, double dLen) ; EGK_EXPORT ISurfFlatRegion* GetSurfFlatRegionDisk( double dRadius) ; EGK_EXPORT ISurfFlatRegion* GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius, - bool bSquareEnds, bool bSquareMids, bool bUseVoronoi = false) ; + bool bSquareEnds, bool bSquareMids) ; // NB : la curva ingrassata non deve autointersecarsi EGK_EXPORT ISurfFlatRegion* GetSurfFlatRegionFromTriangle( const Triangle3d& Tria) ; EGK_EXPORT ISurfFlatRegion* GetSurfFlatRegionFromPolyLine( const PolyLine& ContourPolyLine) ; diff --git a/EGkSurfFlatRegion.h b/EGkSurfFlatRegion.h index 2774217..4de17f3 100644 --- a/EGkSurfFlatRegion.h +++ b/EGkSurfFlatRegion.h @@ -36,8 +36,8 @@ class __declspec( novtable) ISurfFlatRegion : public ISurf virtual bool Add( const ISurfFlatRegion& Other) = 0 ; virtual bool Subtract( const ISurfFlatRegion& Other) = 0 ; virtual bool Intersect( const ISurfFlatRegion& Other) = 0 ; - virtual bool Offset( double dDist, int nType, bool bUseVoronoi = false) = 0 ; - virtual ISurfFlatRegion* CreateOffsetSurf( double dDist, int nType, bool bUseVoronoi = false) const = 0 ; + virtual bool Offset( double dDist, int nType) = 0 ; + virtual ISurfFlatRegion* CreateOffsetSurf( double dDist, int nType) const = 0 ; virtual bool GetGrossArea( double& dArea) const = 0 ; virtual const Point3d& GetPlanePoint( void) const = 0 ; virtual const Vector3d& GetNormVersor( void) const = 0 ; diff --git a/EGkVoronoi.h b/EGkVoronoi.h index 02fe3b4..b32a29c 100644 --- a/EGkVoronoi.h +++ b/EGkVoronoi.h @@ -38,23 +38,24 @@ class ISurfFlatRegion ; //---------------------------------------------------------------------------- class Voronoi -{ +{ public : // costanti per il lato del medial axis - enum WMATSide { WMAT_LEFT = 0, - WMAT_RIGHT = 1, + enum WMATSide { WMAT_LEFT = 0, + WMAT_RIGHT = 1, WMAT_BOTHSIDES = 2} ; public : - EGK_EXPORT Voronoi( void) : m_vroni( nullptr), m_nBound( VORONOI_STD_BOUND), m_bVDComputed( false), m_bAllowAdd( true) {} ; + EGK_EXPORT Voronoi( void) + : m_vroni( nullptr), m_nBound( VORONOI_STD_BOUND), m_bVDComputed( false), m_bAllowAdd( true) {} ; EGK_EXPORT Voronoi( const ICurve* pCrv, bool bAllowAdd) ; EGK_EXPORT Voronoi( const ISurfFlatRegion* pSfr, bool bAllowAdd) ; EGK_EXPORT ~Voronoi( void) ; - - public : + + public : EGK_EXPORT bool AddCurve( const ICurve* pCrv) ; EGK_EXPORT bool AddSurfFlatRegion( const ISurfFlatRegion* pSfr) ; - EGK_EXPORT ICurve* GetCurve( int nId) ; - EGK_EXPORT int GetCurveCount( void) + EGK_EXPORT ICurve* GetCurve( int nId) const ; + EGK_EXPORT int GetCurveCount( void) const { return m_vpCrvs.size() ; } ; EGK_EXPORT bool CalcVoronoiDiagram( ICURVEPOVECTOR& vCrvs, int nBound = VORONOI_STD_BOUND) ; @@ -64,29 +65,29 @@ class Voronoi private : bool Clear( void) ; - bool IsValid( void) const + bool IsValid( void) const { return m_vroni != nullptr ; } ; bool AddCurveToVroni( const ICurve * pCrv) ; bool AddLineToVroni( const ICurveLine* pLine, int& nVroniCrv, int nLoopId, int nCrvId = 0, Point3d ptForcedEnd = P_INVALID) ; bool AddArcToVroni( const ICurveArc* pArc, int& nVroniCrv, int nLoopId, int nCrvId = 0, Point3d ptForcedEnd = P_INVALID) ; bool AddCompoToVroni( const ICurveComposite* pCompo, int& nCrv, int nLoopId) ; bool AddBezierToVroni( const ICurveBezier* pBezier, int& nVroniCrv, int nLoopId) ; - + bool CalcVoronoi( int nBound = VORONOI_STD_BOUND) ; bool CalcVroniOffset( ICRVCOMPOPLIST& vOffs, double dOffs, bool bRightOffs, bool bLeftOffs) ; bool UpdateVoronoi( double dOffs) ; bool VerifyCurvesValidityForOffset( void) ; - bool AdjustOpenOffsetCurve( ICurveComposite& pCompo, double dOffs) ; - bool AdjustOffsetStart( ICurveComposite& pCompo) ; + bool AdjustOpenOffsetCurve( ICurveComposite& pCompo, double dOffs) ; + bool AdjustOffsetStart( ICurveComposite& pCompo) ; int GetOffsetCurveSide( const ICurveComposite& pOffs, int nCrv) ; - ICurve* GetBisectorCurve( int i) ; + ICurve* GetBisectorCurve( int i) ; private : vroniObject* m_vroni ; // oggetto base della libreria vroni - Frame3d m_Frame ; // frame in cui è espresso l'oggetto vroni - int m_nBound ; // bound associato al diagramma di Voronoi corrente + Frame3d m_Frame ; // frame in cui è espresso l'oggetto vroni + int m_nBound ; // bound associato al diagramma di Voronoi corrente CICURVEPVECTOR m_vpCrvs ; // curve associate al Voronoi ( espresse rispetto a m_Frame) - BBox3d m_bBox ; // box degli oggetti associati al Voronoi + BBox3d m_bBox ; // box degli oggetti associati al Voronoi bool m_bVDComputed ; // indica se il diagramma di Voronoi è stato calcolato bool m_bAllowAdd ; // indica se possibile aggiungere altre curve/superifici dopo aver creato l'oggetto Voronoi } ;