diff --git a/EGkDistPointSurfFr.h b/EGkDistPointSurfFr.h new file mode 100644 index 0000000..cd294ca --- /dev/null +++ b/EGkDistPointSurfFr.h @@ -0,0 +1,72 @@ +//---------------------------------------------------------------------------- +// EgalTech 2024-2024 +//---------------------------------------------------------------------------- +// File : EGkDistPointSurfFr.h Data : 18.07.24 Versione : 2.6g5 +// Contenuto : Dichiarazione della classe distanza Punto da FlatRegion. +// +// +// +// Modifiche : 18.07.24 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EGkSurfFlatRegion.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 + +//---------------------------------------------------------------------------- +// Calcola la distanza tra punto e Flat Region. +// Risultati : +// - distanza +// - punto sulla superficie a minima distanza +// - indici del chunk e del loop e parametro del punto di frontiera a minima distanza +// - indicazione se il punto passato è sul bordo (PRS_ON), interno (PRS_IN) o esterno (PRS_OUT) alla regione. +// Note : +// - nel caso di più punti di frontiera vicini, ne viene calcolato solo uno +// - se il punto non giace nel piano della Regione +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- +enum PrSide { PRS_IN = -1, PRS_ON = 0, PRS_OUT = +1} ; +// Corrispondono a MDS_LEFT, MDS_ON e MDS_RIGHT per giacitura punto rispetto a curva. + +//---------------------------------------------------------------------------- +class DistPointSurfFr +{ + public : + EGK_EXPORT DistPointSurfFr( const Point3d& ptP, const ISurfFlatRegion& frSurf) ; + + public : + EGK_EXPORT bool GetDist( double& dDist) const ; + EGK_EXPORT bool GetDistOnRegionPlane( double& dDist) const ; + EGK_EXPORT bool GetPointAtMinDist( Point3d& ptMinDistPoint) const ; + EGK_EXPORT bool GetParamAtMinDist( int& nMinChunk, int& nMinLoop, double& dMinPar) const ; + EGK_EXPORT bool GetSideAtMinDist( int& nSide) const ; + + private : + void Calculate( const Point3d& ptP, const ISurfFlatRegion& frSurf) ; + + private : + double m_dDist ; + double m_dDistOnPlane ; + int m_nMinChunk ; + int m_nMinLoop ; + double m_dMinPar ; + Point3d m_ptMinDistPoint ; + int m_nSide ; +} ; + +//---------------------------------------------------------------------------- +// Verifica velocizzata +EGK_EXPORT bool IsPointInsideSurfFr( const Point3d& ptP, const ISurfFlatRegion* pSfr, double dMinDist, bool& bInside, int& nChunk) ; +inline bool IsPointInsideSurfFr( const Point3d& ptP, const ISurfFlatRegion* pSfr, double dMinDist, bool& bInside) + { int nChunk ; return IsPointInsideSurfFr( ptP, pSfr, dMinDist, bInside, nChunk) ;} diff --git a/EGkSurfFlatRegion.h b/EGkSurfFlatRegion.h index 276ce89..1d0c2ea 100644 --- a/EGkSurfFlatRegion.h +++ b/EGkSurfFlatRegion.h @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2015-2015 +// EgalTech 2015-2024 //---------------------------------------------------------------------------- -// File : EGkSurfFlatRegion.h Data : 05.08.15 Versione : 1.6h2 +// File : EGkSurfFlatRegion.h Data : 18.07.24 Versione : 2.6g5 // Contenuto : Dichiarazione della interfaccia ISurfFlatRegion. // // @@ -27,7 +27,7 @@ class __declspec( novtable) ISurfFlatRegion : public ISurf ISurfFlatRegion* Clone( void) const override = 0 ; public : virtual bool CopyFrom( const IGeoObj* pGObjSrc) = 0 ; - virtual bool Clear( void) ; + virtual bool Clear( void) = 0 ; virtual bool AddExtLoop( const ICurve& cCrv) = 0 ; virtual bool AddExtLoop( ICurve* pCrv) = 0 ; virtual bool AddIntLoop( const ICurve& cCrv) = 0 ; @@ -40,24 +40,29 @@ class __declspec( novtable) ISurfFlatRegion : public ISurf virtual bool GetGrossArea( double& dArea) const = 0 ; virtual const Point3d& GetPlanePoint( void) const = 0 ; virtual const Vector3d& GetNormVersor( void) const = 0 ; + virtual bool CalcVoronoiDiagram( ICURVEPOVECTOR& vCrvs, int nBound = 3) const = 0 ; + virtual void ResetVoronoiObject( void) const = 0 ; + virtual bool GetMaxOffset( double& dOffs) const = 0 ; + virtual bool CalcMedialAxis( ICURVEPOVECTOR& vCrvs, int nSide = 1) const = 0 ; + virtual const ISurfTriMesh* GetAuxSurf( void) const = 0 ; + virtual bool GetCurveClassification( const ICurve& Crv, double dLenMin, CRVCVECTOR& ccClass) const = 0 ; virtual int GetChunkCount( void) const = 0 ; + virtual ISurfFlatRegion* CloneChunk( int nChunk) const = 0 ; + virtual bool EraseChunk(int nChunk) = 0 ; + virtual bool GetChunkCentroid( int nChunk, Point3d& ptCen) const = 0 ; + virtual bool GetChunkArea( int nChunk, double& dArea) const = 0 ; + virtual bool GetChunkPerimeter( int nChunk, double& dLen) const = 0 ; + virtual int GetChunkSimpleClassification( int nChunk, const ISurfFlatRegion& Other, int nOthChunk) const ; // compare only outsides + virtual bool GetChunkMaxOffset( int nChunk, double& dOffs) const = 0 ; virtual int GetLoopCount( int nChunk) const = 0 ; virtual ICurve* GetLoop( int nChunk, int nLoop) const = 0 ; // nChunk 0-based, nLoop 0-based (1°esterno, successivi interni) virtual bool ApproxLoopWithLines( int nChunk, int nLoop, double dLinTol, double dAngTolDeg, int nType, PolyLine& PL) const = 0 ; - virtual const ISurfTriMesh* GetAuxSurf( void) const = 0 ; - virtual ISurfFlatRegion* CloneChunk( int nChunk) const = 0 ; - 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 bool CalcVoronoiDiagram( ICURVEPOVECTOR& vCrvs, int nBound = 3) const = 0 ; - virtual bool CalcMedialAxis( ICURVEPOVECTOR& vCrvs, int nSide = 1) const = 0 ; - virtual bool GetChunkMaxOffset( int nChunk, double& dOffs) const = 0 ; - virtual bool GetMaxOffset( double& dOffs) const = 0 ; - virtual void ResetVoronoiObject( void) const = 0 ; virtual bool SetCurveTempProp( int nChunk, int nLoop, int nCrv, int nProp, int nPropInd = 0) = 0 ; virtual bool GetCurveTempProp( int nChunk, int nLoop, int nCrv, int& nProp, int nPropInd = 0) const = 0 ; + virtual bool ResetAllCurveTempProps( void) = 0 ; virtual bool SetCurveTempParam( int nChunk, int nLoop, int nCrv, double dParam, int nParamInd = 0) = 0 ; virtual bool GetCurveTempParam( int nChunk, int nLoop, int nCrv, double& dParam, int nParamInd = 0) const = 0 ; + virtual bool ResetAllCurveTempParams( void) = 0 ; } ; //----------------------------------------------------------------------------- diff --git a/EXeExecutor.h b/EXeExecutor.h index 9a244ad..359cfb1 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -644,6 +644,7 @@ EXE_EXPORT bool ExeSurfFrSubtract( int nId1, int nId2) ; EXE_EXPORT bool ExeSurfFrIntersect( int nId1, int nId2) ; EXE_EXPORT bool ExeSurfFrOffset( int nId, double dDist, int nType) ; EXE_EXPORT bool ExeSurfFrOffsetAdv( int nId, double dDist, int nType, int& nNewId) ; +EXE_EXPORT bool ExeSurfFrEraseChunk( int nId, int nChunk) ; EXE_EXPORT bool ExeSurfFrMoveSimpleNoCollision( int nId1, int nId2, const Vector3d& vtDir, double& dLen, int nRefType) ; EXE_EXPORT bool ExeSurfFrRotateSimpleNoCollision( int nId1, int nId2, const Point3d& ptCen, double& dAngDeg, int nRefType) ; EXE_EXPORT bool ExeSurfTmMoveVertex( int nId, int nVert, const Point3d& ptNewVert, int nRefType, bool bUpdate) ;