diff --git a/CurveArc.cpp b/CurveArc.cpp index 3629384..1b0b5b9 100644 --- a/CurveArc.cpp +++ b/CurveArc.cpp @@ -2274,25 +2274,25 @@ CurveArc::CalcVoronoiObject() const } //---------------------------------------------------------------------------- -Voronoi* +Voronoi* CurveArc::GetVoronoiObject() const { if ( m_nStatus != OK) return nullptr ; - + // se non è stato calcolato, lo calcolo if ( m_pVoronoiObj == nullptr) CalcVoronoiObject() ; - - // restituisco Voronoi + + // restituisco Voronoi return m_pVoronoiObj ; } //---------------------------------------------------------------------------- void CurveArc::ResetVoronoiObject() const -{ - if ( m_pVoronoiObj != nullptr) - delete m_pVoronoiObj ; +{ + if ( m_pVoronoiObj != nullptr) + delete m_pVoronoiObj ; m_pVoronoiObj = nullptr ; -} \ No newline at end of file +} diff --git a/CurveArc.h b/CurveArc.h index 6e4fbcc..d11bb8c 100644 --- a/CurveArc.h +++ b/CurveArc.h @@ -130,12 +130,6 @@ class CurveArc : public ICurveArc, public IGeoObjRW bool ExtendStartByLen( double dLenExt) override ; bool ExtendEndByLen( double dLenExt) override ; Voronoi* GetVoronoiObject( void) const override ; - bool CalcVoronoiDiagram( ICURVEPOVECTOR& vCrvs, int nBound = VORONOI_STD_BOUND) const override - { return CalcCurveVoronoiDiagram( *this, vCrvs, nBound) ; } - bool CalcMedialAxis( ICURVEPOVECTOR& vCrvs, int nSide) const override - { return CalcCurveMedialAxis( *this, vCrvs, nSide) ; } - bool CalcFatCurve( ICURVEPOVECTOR& vCrvs, double dRadius, bool bSquareEnds, bool bSquareMids) const override - { return CalcCurveFatCurve( *this, vCrvs, dRadius, bSquareEnds, bSquareMids) ; } public : // ICurveArc bool CopyFrom( const IGeoObj* pGObjSrc) override ; diff --git a/CurveAux.h b/CurveAux.h index 109535a..18bab55 100644 --- a/CurveAux.h +++ b/CurveAux.h @@ -31,6 +31,3 @@ bool CurveGetArea( const ICurve& crvC, Plane3d& plPlane, double& dArea) ; bool CurveDump( const ICurve& crvC, std::string& sOut, bool bMM, const char* szNewLine) ; bool CopyExtrusion( const ICurve* pSouCrv, ICurve* pDestCrv) ; bool CopyThickness( const ICurve* pSouCrv, ICurve* pDestCrv) ; -bool CalcCurveVoronoiDiagram( const ICurve& crvC, ICURVEPOVECTOR& vCrvs, int nBound) ; -bool CalcCurveMedialAxis( const ICurve& crvC, ICURVEPOVECTOR& vCrvs, int nSide) ; -bool CalcCurveFatCurve( const ICurve& crvC, ICURVEPOVECTOR& vCrvs, double dRadius, bool bSquareEnds, bool bSquareMids) ; diff --git a/CurveBezier.cpp b/CurveBezier.cpp index b683665..5eabe92 100644 --- a/CurveBezier.cpp +++ b/CurveBezier.cpp @@ -2129,7 +2129,7 @@ CurveBezier::GetVoronoiObject() const if ( m_pVoronoiObj == nullptr) CalcVoronoiObject() ; - // restituisco Voronoi + // restituisco Voronoi return m_pVoronoiObj ; } @@ -2140,4 +2140,4 @@ CurveBezier::ResetVoronoiObject() const if ( m_pVoronoiObj != nullptr) delete m_pVoronoiObj ; m_pVoronoiObj = nullptr ; -} \ No newline at end of file +} diff --git a/CurveBezier.h b/CurveBezier.h index 15923d7..b303d9b 100644 --- a/CurveBezier.h +++ b/CurveBezier.h @@ -132,12 +132,6 @@ class CurveBezier : public ICurveBezier, public IGeoObjRW bool ExtendStartByLen( double dLenExt) override ; bool ExtendEndByLen( double dLenExt) override ; Voronoi* GetVoronoiObject( void) const override ; - bool CalcVoronoiDiagram( ICURVEPOVECTOR& vCrvs, int nBound = VORONOI_STD_BOUND) const override - { return CalcCurveVoronoiDiagram( *this, vCrvs, nBound) ; } - bool CalcMedialAxis( ICURVEPOVECTOR& vCrvs, int nSide) const override - { return CalcCurveMedialAxis( *this, vCrvs, nSide) ; } - bool CalcFatCurve( ICURVEPOVECTOR& vCrvs, double dRadius, bool bSquareEnds, bool bSquareMids) const override - { return CalcCurveFatCurve( *this, vCrvs, dRadius, bSquareEnds, bSquareMids) ; } public : // ICurveBezier bool CopyFrom( const IGeoObj* pGObjSrc) override ; diff --git a/CurveComposite.h b/CurveComposite.h index 263bab6..33848ac 100644 --- a/CurveComposite.h +++ b/CurveComposite.h @@ -127,12 +127,6 @@ class CurveComposite : public ICurveComposite, public IGeoObjRW bool ExtendStartByLen( double dLenExt) override ; bool ExtendEndByLen( double dLenExt) override ; Voronoi* GetVoronoiObject( void) const override ; - bool CalcVoronoiDiagram( ICURVEPOVECTOR& vCrvs, int nBound = VORONOI_STD_BOUND) const override - { return CalcCurveVoronoiDiagram( *this, vCrvs, nBound) ; } - bool CalcMedialAxis( ICURVEPOVECTOR& vCrvs, int nSide) const override - { return CalcCurveMedialAxis( *this, vCrvs, nSide) ; } - bool CalcFatCurve( ICURVEPOVECTOR& vCrvs, double dRadius, bool bSquareEnds, bool bSquareMids) const override - { return CalcCurveFatCurve( *this, vCrvs, dRadius, bSquareEnds, bSquareMids) ; } public : // ICurveComposite bool CopyFrom( const IGeoObj* pGObjSrc) override ; diff --git a/CurveLine.cpp b/CurveLine.cpp index 72fafd6..8050e48 100644 --- a/CurveLine.cpp +++ b/CurveLine.cpp @@ -1068,15 +1068,15 @@ CurveLine::GetVoronoiObject() const if ( m_pVoronoiObj == nullptr) CalcVoronoiObject() ; - // restituisco Voronoi + // restituisco Voronoi return m_pVoronoiObj ; } //---------------------------------------------------------------------------- void CurveLine::ResetVoronoiObject() const -{ +{ if ( m_pVoronoiObj != nullptr) - delete m_pVoronoiObj ; + delete m_pVoronoiObj ; m_pVoronoiObj = nullptr ; -} \ No newline at end of file +} diff --git a/CurveLine.h b/CurveLine.h index a11fd18..73e5860 100644 --- a/CurveLine.h +++ b/CurveLine.h @@ -131,12 +131,6 @@ class CurveLine : public ICurveLine, public IGeoObjRW bool ExtendStartByLen( double dLenExt) override ; bool ExtendEndByLen( double dLenExt) override ; Voronoi* GetVoronoiObject( void) const override ; - bool CalcVoronoiDiagram( ICURVEPOVECTOR& vCrvs, int nBound = VORONOI_STD_BOUND) const override - { return CalcCurveVoronoiDiagram( *this, vCrvs, nBound) ; } - bool CalcMedialAxis( ICURVEPOVECTOR& vCrvs, int nSide) const override - { return CalcCurveMedialAxis( *this, vCrvs, nSide) ; } - bool CalcFatCurve( ICURVEPOVECTOR& vCrvs, double dRadius, bool bSquareEnds, bool bSquareMids) const override - { return CalcCurveFatCurve( *this, vCrvs, dRadius, bSquareEnds, bSquareMids) ; } public : // ICurveLine bool CopyFrom( const IGeoObj* pGObjSrc) override ; diff --git a/EgtGeomKernel.vcxproj b/EgtGeomKernel.vcxproj index 2778ff7..1d7bc11 100644 --- a/EgtGeomKernel.vcxproj +++ b/EgtGeomKernel.vcxproj @@ -109,7 +109,7 @@ Use Level3 Disabled - WIN32;_WINDOWS;I_AM_EGK;_DEBUG;%(PreprocessorDefinitions) + WIN32;_WINDOWS;I_AM_EGK;NVRONI;_DEBUG;%(PreprocessorDefinitions) false CompileAsCpp false @@ -145,7 +145,7 @@ copy $(TargetPath) \EgtProg\DllD32 Use Level3 Disabled - WIN32;_WINDOWS;I_AM_EGK;_DEBUG;%(PreprocessorDefinitions) + WIN32;_WINDOWS;I_AM_EGK;NVRONI;_DEBUG;%(PreprocessorDefinitions) false CompileAsCpp false @@ -183,7 +183,7 @@ copy $(TargetPath) \EgtProg\DllD64 MaxSpeed true true - WIN32;_WINDOWS;I_AM_EGK;NDEBUG;%(PreprocessorDefinitions) + WIN32;_WINDOWS;I_AM_EGK;NVRONI;NDEBUG;%(PreprocessorDefinitions) false CompileAsCpp Speed @@ -232,7 +232,7 @@ copy $(TargetPath) \EgtProg\Dll32 MaxSpeed true true - WIN32;_WINDOWS;I_AM_EGK;NDEBUG;%(PreprocessorDefinitions) + WIN32;_WINDOWS;I_AM_EGK;NVRONI;NDEBUG;%(PreprocessorDefinitions) false CompileAsCpp Speed diff --git a/OffsetCurve.cpp b/OffsetCurve.cpp index 7c19400..f12841a 100644 --- a/OffsetCurve.cpp +++ b/OffsetCurve.cpp @@ -64,8 +64,14 @@ OffsetCurve::Reset( void) //---------------------------------------------------------------------------- bool -OffsetCurve::Make( const ICurve* pCrv, double dDist, int nType, bool bUseVoronoi) +OffsetCurve::Make( const ICurve* pCrv, double dDist, int nType) { + // imposto metodo di calcolo + bool bUseVoronoi = false ; + #ifdef _VRONI + bUseVoronoi = true ; + #endif // _VRONI + // pulisco tutto Reset() ; // verifico che la curva esista @@ -164,10 +170,6 @@ OffsetCurve::Make( const ICurve* pCrv, double dDist, int nType, bool bUseVoronoi // -------------------- OFFSET STANDARD --------------------------------- if ( ! bUseVoronoi) { - // verifico se il punto iniziale è stato modificato - Point3d ptNewStart ; ccCopy.GetStartPoint( ptNewStart) ; - bChangeStart = ( ! AreSamePointApprox( ptNewStart, ptStart)) ; - // verifico che la curva sia fatta solo da rette e archi che giacciono nel piano XY (VtExtr è ora Z+) if ( ! ccCopy.ArcsBezierCurvesToArcsPerpExtr( 10 * EPS_SMALL, ANG_TOL_STD_DEG)) return false ; @@ -188,6 +190,10 @@ OffsetCurve::Make( const ICurve* pCrv, double dDist, int nType, bool bUseVoronoi if ( ! ccCopy.MergeCurves( 10 * EPS_SMALL, ANG_TOL_STD_DEG, bClosed)) return false ; + // verifico se il punto iniziale è stato modificato + Point3d ptNewStart ; ccCopy.GetStartPoint( ptNewStart) ; + bChangeStart = ( ! AreSamePointApprox( ptNewStart, ptStart)) ; + // calcolo le lunghezze delle diverse entità DBLVECTOR vLens ; { diff --git a/SfrCreate.cpp b/SfrCreate.cpp index 58bac09..6cf7a71 100644 --- a/SfrCreate.cpp +++ b/SfrCreate.cpp @@ -114,9 +114,15 @@ GetSurfFlatRegionDisk( double dRadius) //------------------------------------------------------------------------------- ISurfFlatRegion* -GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius, bool bSquareEnds, bool bSquareMids, bool bUseVoronoi) +GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius, bool bSquareEnds, bool bSquareMids) { - // mi impossesso della curva + // imposto metodo di calcolo + bool bUseVoronoi = false ; + #ifdef _VRONI + bUseVoronoi = true ; + #endif // _VRONI + + // mi impossesso della curva PtrOwner pCurve( pCrv) ; if ( IsNull( pCurve)) return nullptr ; @@ -327,7 +333,7 @@ GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius, bool bSquareEnds, b else { // calcolo la fat curve con Voronoi ICURVEPOVECTOR vFatCurves ; - if ( ! pCurve->CalcFatCurve( vFatCurves, dRadius, bSquareEnds, bSquareMids)) + if ( CalcCurveFatCurve( *pCurve, vFatCurves, dRadius, bSquareEnds, bSquareMids)) return nullptr ; // costruisco la superficie a partire dalle curve diff --git a/StmFromCurves.cpp b/StmFromCurves.cpp index bedd2b6..1f47f22 100644 --- a/StmFromCurves.cpp +++ b/StmFromCurves.cpp @@ -458,7 +458,7 @@ GetSurfTriMeshBeveledRectSwept( double dDimH, double dDimV, double dBevelH, doub double vDist[NUM_OFFS] = { dDimH / 2 - dBevelH, -dDimH / 2 + dBevelH, dDimH / 2, -dDimH / 2} ; future vRes[NUM_OFFS] ; for ( int i = 0 ; i < NUM_OFFS ; ++ i) - vRes[i] = async( launch::async, &OffsetCurve::Make, &vOffsCrv[i], pGuide, vDist[i], ICurve::OFF_FILLET, false) ; + vRes[i] = async( launch::async, &OffsetCurve::Make, &vOffsCrv[i], pGuide, vDist[i], ICurve::OFF_FILLET) ; bool bOk = true ; int nFin = 0 ; while ( nFin < NUM_OFFS) { diff --git a/SurfFlatRegion.h b/SurfFlatRegion.h index b88f7cb..d69cbcb 100644 --- a/SurfFlatRegion.h +++ b/SurfFlatRegion.h @@ -85,8 +85,8 @@ class SurfFlatRegion : public ISurfFlatRegion, public IGeoObjRW bool Add( const ISurfFlatRegion& Other) override ; bool Subtract( const ISurfFlatRegion& Other) override ; bool Intersect( const ISurfFlatRegion& Other) override ; - bool Offset( double dDist, int nType, bool bUseVoronoi = false) override ; - ISurfFlatRegion* CreateOffsetSurf( double dDist, int nType, bool bUseVoronoi = false) const override ; + bool Offset( double dDist, int nType) override ; + SurfFlatRegion* CreateOffsetSurf( double dDist, int nType) const override ; bool GetGrossArea( double& dArea) const override ; const Point3d& GetPlanePoint( void) const override { return m_frF.Orig() ; } diff --git a/SurfFlatRegionOffset.cpp b/SurfFlatRegionOffset.cpp index 9cf40b2..9fcd53e 100644 --- a/SurfFlatRegionOffset.cpp +++ b/SurfFlatRegionOffset.cpp @@ -23,11 +23,17 @@ using namespace std ; //---------------------------------------------------------------------------- -ISurfFlatRegion* -SurfFlatRegion::CreateOffsetSurf( double dDist, int nType, bool bUseVoronoi) const +SurfFlatRegion* +SurfFlatRegion::CreateOffsetSurf( double dDist, int nType) const { // restituisce la superficie offsettata senza modificare la superficie corrente. In caso di errore restituisce nullptr + // imposto metodo di calcolo + bool bUseVoronoi = false ; + #ifdef _VRONI + bUseVoronoi = true ; + #endif // _VRONI + // recupero il numero dei chunk int nChunk = GetChunkCount() ; if ( nChunk == 0) @@ -195,7 +201,7 @@ SurfFlatRegion::CreateOffsetSurf( double dDist, int nType, bool bUseVoronoi) con //---------------------------------------------------------------------------- bool -SurfFlatRegion::Offset( double dDist, int nType, bool bUseVoronoi) +SurfFlatRegion::Offset( double dDist, int nType) { // recupero il numero dei chunk int nChunk = GetChunkCount() ; @@ -207,10 +213,7 @@ SurfFlatRegion::Offset( double dDist, int nType, bool bUseVoronoi) return this->Clone() ; // calcolo la superficie di offset - ISurfFlatRegion* pSfrOrig = CreateOffsetSurf( dDist, nType, bUseVoronoi) ; - if ( pSfrOrig == nullptr) - return false ; - PtrOwner pSfr( GetBasicSurfFlatRegion( pSfrOrig)) ; + PtrOwner pSfr( CreateOffsetSurf( dDist, nType)) ; if ( IsNull( pSfr)) return false ; diff --git a/Voronoi.cpp b/Voronoi.cpp index 7f6e93e..1e3f95b 100644 --- a/Voronoi.cpp +++ b/Voronoi.cpp @@ -330,7 +330,7 @@ Voronoi::AddBezierToVroni( const ICurveBezier* pBezier, int& nVroniCrv, int nLoo //---------------------------------------------------------------------------- ICurve* -Voronoi::GetCurve( int nId) +Voronoi::GetCurve( int nId) const { // verifico validità indice if ( nId < 0 || nId > ( int)m_vpCrvs.size() - 1)