From 32b9ee9f24578a09d9347887319fb1537bb72b75 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Thu, 22 Aug 2024 16:01:30 +0200 Subject: [PATCH 1/3] Include : - aggiunte e modificate funzioni per l'approssimazione delle curve di bezier. --- EGkCurveAux.h | 28 ++++++++++++++++++++++------ EGkCurveBezier.h | 2 ++ EXeExecutor.h | 8 +++++--- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/EGkCurveAux.h b/EGkCurveAux.h index 91b6506..fef0585 100644 --- a/EGkCurveAux.h +++ b/EGkCurveAux.h @@ -48,23 +48,35 @@ struct CNurbsData //---------------------------------------------------------------------------- //! Trasforma una linea in una nuova curva di Bezier semplice -EGK_EXPORT ICurve* CurveToBezierCurve( const ICurve* pCrv, bool bDeg3OrDeg2 = true, bool bForceRat = true) ; +EGK_EXPORT ICurve* CurveToBezierCurve( const ICurve* pCrv, int nDeg = 3, bool bMakeRatOrNot = true) ; //---------------------------------------------------------------------------- //! Trasforma una linea in una nuova curva di Bezier semplice -EGK_EXPORT ICurveBezier* LineToBezierCurve( const ICurveLine* pLine, bool bDeg3OrDeg2 = true, bool bForceRat = true) ; +EGK_EXPORT ICurveBezier* LineToBezierCurve( const ICurveLine* pLine, int nDeg = 3, bool bMakeRatOrNot = true) ; //---------------------------------------------------------------------------- //! Trasforma un arco in una nuova curva di Bezier semplice o composta -EGK_EXPORT ICurve* ArcToBezierCurve( const ICurve* pArc, bool bDeg3OrDeg2 = true) ; +EGK_EXPORT ICurve* ArcToBezierCurve( const ICurve* pArc, int nDeg = 3, bool bMakeRatOrNot = true) ; //---------------------------------------------------------------------------- //! Trasforma una curva compo in una nuova curva di Bezier semplice o composta -EGK_EXPORT ICurve* CompositeToBezierCurve( const ICurveComposite* pCrvCompo, bool bDeg3OrDeg2 = true, bool bForceRat = true) ; +EGK_EXPORT ICurve* CompositeToBezierCurve( const ICurveComposite* pCrvCompo, int nDeg = 3, bool bMakeRatOrNot = true) ; //---------------------------------------------------------------------------- -//! Trasforma una curva bezier in una nuova curva di Bezier semplice o composta di grado 3 e razionale -EGK_EXPORT ICurve* BezierToBasicBezierCurve( const ICurveBezier* pCrvBezier, bool bDeg3OrDeg2 = true, bool bForceRat = true) ; +//! Trasforma una curva bezier in una nuova curva di Bezier semplice o composta della razionalità e grado desiderato ( minimo 3) +EGK_EXPORT ICurve* EditBezierCurve( const ICurveBezier* pCrvBezier, int nDeg = 3, bool bMakeRatOrNot = true) ; + +//---------------------------------------------------------------------------- +//! Approssima una bezier con una serie di bezier cubiche +EGK_EXPORT ICurve* ApproxBezierWithCubics( const ICurveBezier* pCrvBezier, double dTol) ; + +//---------------------------------------------------------------------------- +//! Approssima una bezier con una serie di bezier cubiche +EGK_EXPORT ICurveBezier* ApproxArcCurveBezierWithSingleCubic( const ICurveBezier* pCrvBezier, const Point3d& ptCen) ; + +//---------------------------------------------------------------------------- +//! Campiona una serie di punti dalla curva e li interpola con una o più curve di bezier +EGK_EXPORT ICurve* ApproxCurveWithBezier( const ICurve*, double dTol) ; //---------------------------------------------------------------------------- //! Aumento il grado della curva di Bezier @@ -74,6 +86,10 @@ EGK_EXPORT ICurveBezier* BezierIncreaseDegree( const ICurveBezier* pCrvBezier) ; //! Riduco il grado della curva di Bezier EGK_EXPORT ICurveBezier* BezierDecreaseDegree( const ICurveBezier* pCrvBezier, double dTol) ; +//---------------------------------------------------------------------------- +//! Misura l'errore di approsimazione tra la curva originale e quella modificata +EGK_EXPORT bool CalcBezierApproxError( const ICurveBezier* pCrvOri, const ICurveBezier* pCrvNew, double& dErr, int nPoints = 20) ; + //---------------------------------------------------------------------------- //! Trasforma una curva in una nuova curva semplice o composta senza archi (solo linee o curve di Bezier) EGK_EXPORT ICurve* CurveToNoArcsCurve( const ICurve* pCrv) ; diff --git a/EGkCurveBezier.h b/EGkCurveBezier.h index 9eb91ee..de4bae2 100644 --- a/EGkCurveBezier.h +++ b/EGkCurveBezier.h @@ -39,6 +39,8 @@ class __declspec( novtable) ICurveBezier : public ICurve virtual bool GetControlPolygonLength( double& dLen) const = 0 ; virtual int GetSingularParam( double& dPar) const = 0 ; virtual bool MakeRational( void) = 0 ; + virtual bool MakeRationalStandardForm( void) = 0 ; + virtual bool MakeNonRational( double dTol, double& dErr) = 0 ; } ; //----------------------------------------------------------------------------- diff --git a/EXeExecutor.h b/EXeExecutor.h index 5112e5f..617b6d0 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -323,7 +323,7 @@ EXE_EXPORT int ExeCreatePolygonFromSide( int nParentId, int nNumSides, const Po const Point3d& ptFin, int nRefType) ; EXE_EXPORT int ExeCreateCirclesAlongCurve( int nParentId, int nCrvId, double dOffset, double dOverlap, double dStartAdd, double dEndAdd, double dDiam, int* pnCount) ; -EXE_EXPORT int ExeCreateCurveBezierForm( int nParentId, int nCrvId) ; +EXE_EXPORT int ExeCreateCurveBezierForm( int nParentId, int nCrvId, int nDeg) ; // GeomDB Create Surf EXE_EXPORT int ExeCreateSurfFlatRegion( int nParentId, const INTVECTOR& vCrvIds, int* pnCount) ; @@ -633,8 +633,10 @@ EXE_EXPORT bool ExeProjectCurveOnSurfBzExt( int nCurveId, int nSurfBzId, int nGu EXE_EXPORT int ExeCurveGetVoronoi( int nId, int nDestGrpId, int nBound, int* pnCount) ; EXE_EXPORT int ExeCurveGetMedialAxis( int nId, int nDestGrpId, int nSide, int* pnCount) ; EXE_EXPORT int ExeCurveGetFatCurve( int nId, int nDestGrpId, double dRad, bool bSquareEnds, bool bSquareMids, int* pnCount) ; -EXE_EXPORT bool ExeCurveBezierIncreaseDegree( int nCrvId) ; -EXE_EXPORT bool ExeCurveBezierDecreaseDegree( int nCrvId, double dTol = 100) ; +EXE_EXPORT bool ExeCurveBezierIncreaseDegree( int nCrvId) ; +EXE_EXPORT bool ExeCurveBezierDecreaseDegree( int nCrvId, double dTol = 100) ; +EXE_EXPORT bool ExeCurveBezierApproxToNonRat( int nCrvId, double dTol = 10 * EPS_SMALL) ; +EXE_EXPORT bool ExeCurveBezierApproxWithCubicBeziers( int nCrvId, double dTol = 10 * EPS_SMALL) ; // GeomDb Surf Modify EXE_EXPORT bool ExeInvertSurface( const INTVECTOR& vIds) ; From d87a1037e6f95633ba27b33ae9d6123a075865b7 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Mon, 26 Aug 2024 16:48:53 +0200 Subject: [PATCH 2/3] Include : - modifica di parametri per la gestione dell'errore per le bezier. --- EGkCurveAux.h | 2 +- EGkCurveBezier.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/EGkCurveAux.h b/EGkCurveAux.h index fef0585..2f21d6e 100644 --- a/EGkCurveAux.h +++ b/EGkCurveAux.h @@ -64,7 +64,7 @@ EGK_EXPORT ICurve* CompositeToBezierCurve( const ICurveComposite* pCrvCompo, int //---------------------------------------------------------------------------- //! Trasforma una curva bezier in una nuova curva di Bezier semplice o composta della razionalità e grado desiderato ( minimo 3) -EGK_EXPORT ICurve* EditBezierCurve( const ICurveBezier* pCrvBezier, int nDeg = 3, bool bMakeRatOrNot = true) ; +EGK_EXPORT ICurve* EditBezierCurve( const ICurveBezier* pCrvBezier, int nDeg = 3, bool bMakeRatOrNot = true, double dTol = 10 * EPS_SMALL) ; //---------------------------------------------------------------------------- //! Approssima una bezier con una serie di bezier cubiche diff --git a/EGkCurveBezier.h b/EGkCurveBezier.h index de4bae2..954bc0c 100644 --- a/EGkCurveBezier.h +++ b/EGkCurveBezier.h @@ -40,7 +40,7 @@ class __declspec( novtable) ICurveBezier : public ICurve virtual int GetSingularParam( double& dPar) const = 0 ; virtual bool MakeRational( void) = 0 ; virtual bool MakeRationalStandardForm( void) = 0 ; - virtual bool MakeNonRational( double dTol, double& dErr) = 0 ; + virtual bool MakeNonRational( double dTol) = 0 ; } ; //----------------------------------------------------------------------------- From 415493927eb9d7b9e87edc875d66405cd4fb5487 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Thu, 29 Aug 2024 08:52:51 +0200 Subject: [PATCH 3/3] Include : - integrazione del codice per calcolo di una region. --- EGkSfrCreate.h | 2 +- EGkSurfTriMesh.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/EGkSfrCreate.h b/EGkSfrCreate.h index 6c2ae75..fea6cd4 100644 --- a/EGkSfrCreate.h +++ b/EGkSfrCreate.h @@ -35,7 +35,7 @@ EGK_EXPORT ISurfFlatRegion* GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double EGK_EXPORT ISurfFlatRegion* GetSurfFlatRegionFromTriangle( const Triangle3d& Tria) ; EGK_EXPORT ISurfFlatRegion* GetSurfFlatRegionFromPolyLine( const PolyLine& ContourPolyLine) ; EGK_EXPORT ISurfFlatRegion* GetSurfFlatRegionFromPolyLineVector( const POLYLINEVECTOR& vContoursPolyLineVec) ; -EGK_EXPORT bool CalcRegionPolyLines( const CICURVEPVECTOR& vpCurve, double dLinTol, POLYLINEVECTOR& vPL, Vector3d& vtN) ; +EGK_EXPORT bool CalcRegionPolyLines( const POLYLINEVECTOR& vPL, POLYLINEVECTOR& vPLOrd, Vector3d& vtN, INTMATRIX& vnPLIndMat) ; //---------------------------------------------------------------------------- diff --git a/EGkSurfTriMesh.h b/EGkSurfTriMesh.h index e1491f8..8a9da18 100644 --- a/EGkSurfTriMesh.h +++ b/EGkSurfTriMesh.h @@ -50,7 +50,7 @@ class __declspec( novtable) ISurfTriMesh : public ISurf virtual bool RemoveTriangle( int nId) = 0 ; virtual bool AdjustTopology( void) = 0 ; virtual bool CreateByFlatContour( const PolyLine& PL) = 0 ; - virtual bool CreateByRegion( const POLYLINEVECTOR& vPL) = 0 ; + virtual bool CreateByRegion( const POLYLINEVECTOR& vPL, const INTMATRIX& vnPLIndMat) = 0 ; virtual bool CreateByExtrusion( const PolyLine& PL, const Vector3d& vtExtr) = 0 ; virtual bool CreateByPointCurve( const Point3d& ptP, const PolyLine& PL) = 0 ; virtual bool CreateByTwoCurves( const PolyLine& PL1, const PolyLine& PL2, int nRuledType) = 0 ;