diff --git a/EGkCurve.h b/EGkCurve.h index 446f348..7d20f16 100644 --- a/EGkCurve.h +++ b/EGkCurve.h @@ -19,8 +19,6 @@ #include "/EgtDev/Include/EGkPlane3d.h" #include "/EgtDev/Include/EgtPointerOwner.h" -class Voronoi ; - //---------------------------------------------------------------------------- class __declspec( novtable) ICurve : public IGeoObj { @@ -94,7 +92,6 @@ class __declspec( novtable) ICurve : public IGeoObj virtual bool TrimEndAtLen( double dLenTrim) = 0 ; virtual bool ExtendStartByLen( double dLenExt) = 0 ; virtual bool ExtendEndByLen( double dLenExt) = 0 ; - virtual Voronoi* GetVoronoiObject( void) const = 0 ; } ; //---------------------------------------------------------------------------- diff --git a/EGkCurveAux.h b/EGkCurveAux.h index e0fef54..05221eb 100644 --- a/EGkCurveAux.h +++ b/EGkCurveAux.h @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- // EgalTech 2014-2014 //---------------------------------------------------------------------------- -// File : EGkCurveAux.h Data : 23.05.14 Versione : 1.5e9 +// File : EGkCurveAux.h Data : 28.01.24 Versione : 2.6a2 // Contenuto : Dichiarazione funzioni ausiliarie per ICurve. // // @@ -86,6 +86,9 @@ EGK_EXPORT bool CalcCurveVoronoiDiagram( const ICurve& crvC, ICURVEPOVECTOR& vCr //---------------------------------------------------------------------------- //! Calcolo del Medial Axis della curva (sottoinsieme del diagramma di Voronoi), nei TempParam dei risultati la distanza +const int WMAT_BOTHSIDES = 0 ; +const int WMAT_LEFT = 1 ; +const int WMAT_RIGHT = 2 ; EGK_EXPORT bool CalcCurveMedialAxis( const ICurve& crvC, ICURVEPOVECTOR& vCrvs, int nSide) ; //---------------------------------------------------------------------------- diff --git a/EGkSurfFlatRegion.h b/EGkSurfFlatRegion.h index f9f6531..d975ded 100644 --- a/EGkSurfFlatRegion.h +++ b/EGkSurfFlatRegion.h @@ -17,7 +17,6 @@ #include "/EgtDev/Include/EGkIntersCurves.h" #include "/EgtDev/Include/EgkCurveComposite.h" #include "/EgtDev/Include/EgtPointerOwner.h" -#include "/EgtDev/Include/EGkVoronoi.h" class ISurfTriMesh ; @@ -50,9 +49,8 @@ class __declspec( novtable) ISurfFlatRegion : public ISurf virtual bool GetChunkCentroid( int nChunk, Point3d& ptCen) const ; virtual bool GetCurveClassification( const ICurve& Crv, double dLenMin, CRVCVECTOR& ccClass) const = 0 ; virtual int GetChunkSimpleClassification( int nChunk, const ISurfFlatRegion& Other, int nOthChunk) const ; // compare only outsides - virtual Voronoi* GetVoronoiObject( void) const = 0 ; - virtual bool CalcVoronoiDiagram( ICURVEPOVECTOR& vCrvs, int nBound = VORONOI_STD_BOUND) const = 0 ; - virtual bool CalcMedialAxis( ICURVEPOVECTOR& vCrvs, int nSide = Voronoi::WMAT_LEFT) const = 0 ; + virtual bool CalcVoronoiDiagram( ICURVEPOVECTOR& vCrvs, int nBound = 3) const = 0 ; + virtual bool CalcMedialAxis( ICURVEPOVECTOR& vCrvs, int nSide = 1) const = 0 ; } ; //----------------------------------------------------------------------------- @@ -86,3 +84,9 @@ const int REGC_IN2 = 2 ; //!< La seconda regione const int REGC_SAME = 3 ; //!< Le due regioni coincidono const int REGC_OUT = 4 ; //!< Le due regioni sono esterne const int REGC_INTERS = 5 ; //!< Le due regioni si intersecano + +//----------------------------------------------------------------------------- +// Costanti per zona calcolo medial axis della regione +const int WMAT_IN_OUT = 0 ; +const int WMAT_IN = 1 ; +const int WMAT_OUT = 2 ; diff --git a/EGkVoronoi.h b/EGkVoronoi.h deleted file mode 100644 index b32a29c..0000000 --- a/EGkVoronoi.h +++ /dev/null @@ -1,93 +0,0 @@ -//---------------------------------------------------------------------------- -// EgalTech 2015-2023 -//---------------------------------------------------------------------------- -// File : EGkVoronoi.h Data : 23.11.23 Versione : 2.5k5 -// Contenuto : Dichiarazione della classe Voronoi con libreria VRONI -// -// -// -// Modifiche : 23.11.23 SP Creazione modulo. - -// -//---------------------------------------------------------------------------- - -#pragma once - -#include "/EgtDev/Include/EGkFrame3d.h" -#include "/EgtDev/Include/EGkCurve.h" -#include "/EgtDev/Include/EGkCurveArc.h" -#include "/EgtDev/Include/EGkCurveBezier.h" -#include "/EgtDev/Include/EGkCurveComposite.h" -#include "/EgtDev/Include/EGkCurveLine.h" -#include "/EgtDev/Extern/vroni/Include/vroni_object.h" - - -//----------------------- Macro per import/export ---------------------------- -#undef EGK_EXPORT -#if defined( I_AM_EGK) // da definirsi solo nella DLL -#define EGK_EXPORT __declspec( dllexport) -#else -#define EGK_EXPORT __declspec( dllimport) -#endif - -static const int VORONOI_STD_BOUND = 3 ; -static const double VRONI_OFFS_TOL = 1e-14 ; - -//-------------------------- Forward Definitions ------------------------------- -class ISurfFlatRegion ; - -//---------------------------------------------------------------------------- -class Voronoi -{ - public : - // costanti per il lato del medial axis - 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( const ICurve* pCrv, bool bAllowAdd) ; - EGK_EXPORT Voronoi( const ISurfFlatRegion* pSfr, bool bAllowAdd) ; - EGK_EXPORT ~Voronoi( void) ; - - public : - EGK_EXPORT bool AddCurve( const ICurve* pCrv) ; - EGK_EXPORT bool AddSurfFlatRegion( const ISurfFlatRegion* pSfr) ; - 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) ; - EGK_EXPORT bool CalcOffset( ICURVEPOVECTOR& vOffs, double dOffs, int nType) ; - EGK_EXPORT bool CalcFatCurve( ICURVEPOVECTOR& vOffs, double dOffs, bool bSquareEnds, bool bSquareMids) ; - EGK_EXPORT bool CalcMedialAxis( ICURVEPOVECTOR& vCrvs, int nSide) ; - - private : - bool Clear( void) ; - 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) ; - int GetOffsetCurveSide( const ICurveComposite& pOffs, int nCrv) ; - 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 - CICURVEPVECTOR m_vpCrvs ; // curve associate al Voronoi ( espresse rispetto a m_Frame) - 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 -} ;