diff --git a/EGkCurveAux.h b/EGkCurveAux.h index 91b6506..2f21d6e 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, double dTol = 10 * EPS_SMALL) ; + +//---------------------------------------------------------------------------- +//! 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..954bc0c 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) = 0 ; } ; //----------------------------------------------------------------------------- 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 ; diff --git a/EXeExecutor.h b/EXeExecutor.h index 207189c..2b806a3 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) ;