diff --git a/EGkCurveAux.h b/EGkCurveAux.h index 8c85fd7..91b6506 100644 --- a/EGkCurveAux.h +++ b/EGkCurveAux.h @@ -48,7 +48,11 @@ struct CNurbsData //---------------------------------------------------------------------------- //! Trasforma una linea in una nuova curva di Bezier semplice -EGK_EXPORT ICurveBezier* LineToBezierCurve( const ICurveLine* pLine) ; +EGK_EXPORT ICurve* CurveToBezierCurve( const ICurve* pCrv, bool bDeg3OrDeg2 = true, bool bForceRat = true) ; + +//---------------------------------------------------------------------------- +//! Trasforma una linea in una nuova curva di Bezier semplice +EGK_EXPORT ICurveBezier* LineToBezierCurve( const ICurveLine* pLine, bool bDeg3OrDeg2 = true, bool bForceRat = true) ; //---------------------------------------------------------------------------- //! Trasforma un arco in una nuova curva di Bezier semplice o composta @@ -56,11 +60,11 @@ EGK_EXPORT ICurve* ArcToBezierCurve( const ICurve* pArc, bool bDeg3OrDeg2 = true //---------------------------------------------------------------------------- //! Trasforma una curva compo in una nuova curva di Bezier semplice o composta -EGK_EXPORT ICurve* CompositeToBezierCurve( const ICurveComposite* pCrvCompo) ; +EGK_EXPORT ICurve* CompositeToBezierCurve( const ICurveComposite* pCrvCompo, bool bDeg3OrDeg2 = true, bool bForceRat = true) ; //---------------------------------------------------------------------------- -//! Trasforma una curva bezier in una nuova curva di Bezier semplice o composta di grado 2 e razionale -EGK_EXPORT ICurve* BezierToBasicBezierCurve( const ICurveBezier* pCrvBezier) ; +//! 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) ; //---------------------------------------------------------------------------- //! Aumento il grado della curva di Bezier diff --git a/EGkCurveBezier.h b/EGkCurveBezier.h index 6cc1c09..9eb91ee 100644 --- a/EGkCurveBezier.h +++ b/EGkCurveBezier.h @@ -28,6 +28,7 @@ class __declspec( novtable) ICurveBezier : public ICurve virtual bool Init( int nDeg, bool bIsRational) = 0 ; virtual bool SetControlPoint( int nInd, const Point3d& ptCtrl) = 0 ; virtual bool SetControlPoint( int nInd, const Point3d& ptCtrl, double dW) = 0 ; + virtual bool SetControlWeight( int nInd, double dW) = 0 ; virtual bool FromArc( const ICurveArc& crArc) = 0 ; virtual bool FromLine( const ICurveLine& crLine) = 0 ; virtual int GetDegree( void) const = 0 ; @@ -37,6 +38,7 @@ class __declspec( novtable) ICurveBezier : public ICurve virtual double GetControlWeight( int nInd, bool* pbOk = NULL) const = 0 ; virtual bool GetControlPolygonLength( double& dLen) const = 0 ; virtual int GetSingularParam( double& dPar) const = 0 ; + virtual bool MakeRational( void) = 0 ; } ; //----------------------------------------------------------------------------- diff --git a/EGkSbzFromCurves.h b/EGkSbzFromCurves.h new file mode 100644 index 0000000..a688a21 --- /dev/null +++ b/EGkSbzFromCurves.h @@ -0,0 +1,50 @@ +//---------------------------------------------------------------------------- +// EgalTech 2024-2024 +//---------------------------------------------------------------------------- +// File : EGkSbzFromCurves.h Data : 07.05.24 Versione : 2.6d2 +// Contenuto : Prototipi funzioni di creazione TriMesh a partire da curve. +// +// +// +// Modifiche : 07.05.24 DB Creazione modulo. +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EGkCurve.h" +#include "/EgtDev/Include/EGkSurfFlatRegion.h" +#include "/EgtDev/Include/EGkSurfTriMesh.h" +#include "/EgtDev/Include/EGkSurfBezier.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 + +////---------------------------------------------------------------------------- +//enum RS_CAP { RSCAP_NONE = 0, RSCAP_FLAT = 1, RSCAP_ROUND = 2, RSCAP_BEVEL = 3} ; + +//---------------------------------------------------------------------------- +EGK_EXPORT ISurfBezier* GetSurfBezierByFlatContour( const ICurve* pCurve, double dLinTol = 10 * EPS_SMALL) ; +EGK_EXPORT ISurfBezier* GetSurfBezierByRegion( const CICURVEPVECTOR& vpCurve, double dLinTol = 10 * EPS_SMALL) ; +EGK_EXPORT ISurfBezier* GetSurfBezierByExtrusion( const ICurve* pCurve, const Vector3d& vtExtr, + bool bCapEnds, double dLinTol = 10 * EPS_SMALL) ; +//EGK_EXPORT ISurfBezier* GetSurfBezierByRegionExtrusion( const CICURVEPVECTOR& vpCurve, const Vector3d& vtExtr, +// double dLinTol = 10 * EPS_SMALL) ; +EGK_EXPORT ISurfBezier* GetSurfBezierByRevolve( const ICurve* pCurve, const Point3d& ptAx, + const Vector3d& vtAx, bool bCapEnds, double dLinTol = 10 * EPS_SMALL) ; +EGK_EXPORT ISurfBezier* GetSurfBezierByScrewing( const ICurve* pCurve, const Point3d& ptAx, const Vector3d& vtAx, + double dAngRotDeg, double dMove, bool bCapEnds, double dLinTol = 10 * EPS_SMALL) ; +//EGK_EXPORT ISurfBezier* GetSurfBezierRectSwept( double dDimH, double dDimV, double dBevelH, double dBevelV, +// const ICurve* pGuide, int nCapType, double dLinTol = 10 * EPS_SMALL) ; +//EGK_EXPORT ISurfBezier* GetSurfBezierSwept( const ICurve* pSect, const ICurve* pGuide, const Vector3d& vtAx, +// bool bCapEnds, double dLinTol = 10 * EPS_SMALL) ; +//EGK_EXPORT ISurfBezier* GetSurfBezierSwept( const ISurfFlatRegion* pSfrSect, const ICurve* pGuide, const Vector3d& vtAx, +// bool bCapEnds, double dLinTol = 10 * EPS_SMALL) ; +//EGK_EXPORT ISurfBezier* GetSurfBezierTransSwept( const ICurve* pSect, const ICurve* pGuide, bool bCapEnds, double dLinTol = 10 * EPS_SMALL) ; +EGK_EXPORT ISurfBezier* GetSurfBezierRuled( const Point3d& ptP, const ICurve* pCurve, double dLinTol = 10 * EPS_SMALL) ; +EGK_EXPORT ISurfBezier* GetSurfBezierRuled( const ICurve* pCurve1, const ICurve* pCurve2, int nType, double dLinTol = 10 * EPS_SMALL) ; diff --git a/EGkSbzStandard.h b/EGkSbzStandard.h index 1192156..824e8a6 100644 --- a/EGkSbzStandard.h +++ b/EGkSbzStandard.h @@ -24,4 +24,4 @@ #endif //---------------------------------------------------------------------------- -EGK_EXPORT ISurfBezier* CreateBezierSphere( const Point3d& ptCenter, double dR) ; \ No newline at end of file +EGK_EXPORT ISurfBezier* GetSurfBezierSphere( const Point3d& ptCenter, double dR) ; \ No newline at end of file diff --git a/EGkSfrCreate.h b/EGkSfrCreate.h index 0066574..6c2ae75 100644 --- a/EGkSfrCreate.h +++ b/EGkSfrCreate.h @@ -35,6 +35,8 @@ 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) ; + //---------------------------------------------------------------------------- class SurfFlatRegionByContours diff --git a/EGkSurfBezier.h b/EGkSurfBezier.h index dec7b3f..aa049dd 100644 --- a/EGkSurfBezier.h +++ b/EGkSurfBezier.h @@ -28,6 +28,11 @@ class __declspec( novtable) ISurfBezier : public ISurf public : enum Side { FROM_MINUS = -1, // da valori inferiori del parametro FROM_PLUS = 1} ; // da valori superiori del parametro +public : + enum RuledType { RLT_B_ISOPAR = 0, // con parametrizzazione simile tra le due curve + RLT_B_MINDIST = 1, // con distanza minima tra le due curve, usando start e end delle curve presenti + RLT_B_MINDIST_PLUS = 2, // con distanza minima tra le due curve, aggiungendo punti lungo le curve dove necessario + RLT_B_LENPAR = 3} ; // aggiungo punti alla curve in modo da matchare meglio le sottocurve, inoltre parametrizzo le curve in base alla lunghezza e non al numero di curve public : // IGeoObj ISurfBezier* Clone( void) const override = 0 ; public : @@ -73,6 +78,12 @@ class __declspec( novtable) ISurfBezier : public ISurf virtual bool IncreaseUV( Point3d& ptUV, Vector3d vtH , Point3d* ptUVCopy, bool bModifyOrig) const = 0 ; virtual bool GetLoops( ICRVCOMPOPOVECTOR& vCC, bool bLineOrBezier, int nEdge = -1) const = 0 ; virtual bool IsPlanar( void) const = 0 ; + virtual bool CreateByFlatContour( const PolyLine& PL) = 0 ; + virtual bool CreateByRegion( const POLYLINEVECTOR& vPL) = 0 ; + virtual bool CreateByExtrusion( const ICurve* pCrv, const Vector3d& vtExtr, bool bDeg3OrDeg2 = false) = 0 ; + virtual bool CreateByScrewing( const ICurve* pCurve, const Point3d& ptAx, const Vector3d& vtAx, double dAngRotDeg, double dMove) = 0 ; + virtual bool CreateByPointCurve( const Point3d& pt, const ICurve* pCurve) = 0 ; + virtual bool CreateByTwoCurves( const ICurve* pCurve1, const ICurve* pCurve2, int nType) = 0 ; } ; //----------------------------------------------------------------------------- diff --git a/EXeExecutor.h b/EXeExecutor.h index 9f52c60..e0d05d9 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -374,6 +374,17 @@ EXE_EXPORT int ExeCreateSurfBezierRational( int nParentId, int nDegU, int nDegV EXE_EXPORT int ExeCreateSurfBezierLeaves( int nParentId, int nSurfBzId, int nTextHeight = 50, bool bShowTrim = false, int* pnCount = nullptr) ; EXE_EXPORT int ExeCreateBezierSphere( int nParentId, const Point3d& ptCenter, double dR, int nRefType) ; EXE_EXPORT int ExeCreateSurfBezierTria2D( int nParentId, int nSurfBzId, int nTextHeight, bool bShowTrim, int* pnCount) ; +EXE_EXPORT int ExeCreateSurfBzByFlatContour( int nParentId, int nCrvId, double dLinTol) ; +EXE_EXPORT int ExeCreateSurfBzByRegion( int nParentId, const INTVECTOR& vCrvId, double dLinTol) ; +EXE_EXPORT int ExeCreateSurfBzByExtrusion( int nParentId, const INTVECTOR& vCrvIds, const Vector3d& vtExtr, + double dLinTol, int nRefType) ; +EXE_EXPORT int ExeCreateSurfBzByScrewing( int nParentId, int nCrvId, + const Point3d& ptAx, const Vector3d& vtAx, + double dAngRotDeg, double dMove, bool bCapEnds, double dLinTol, int nRefType) ; +EXE_EXPORT int ExeCreateSurfBzByRevolve( int nParentId, int nCrvId, + const Point3d& ptAx, const Vector3d& vtAx, + bool bCapEnds, double dLinTol, int nRefType) ; +EXE_EXPORT int ExeCreateSurfBzRuled( int nParentId, int nCrvId1, int nCrvId2, int nRuledType, double dLinTol) ; // GeomDB Create Volume EXE_EXPORT int ExeCreateVolZmap( int nParentId, const Point3d& ptIni, double dDimX, @@ -620,6 +631,8 @@ 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) ; // GeomDb Surf Modify EXE_EXPORT bool ExeInvertSurface( const INTVECTOR& vIds) ; @@ -786,6 +799,7 @@ EXE_EXPORT bool ExeSurfBezierGetInfo( int nSurfId, int& nDegU, int& nDegV, int& EXE_EXPORT int ExeSurfBezierGetControlCurveU( int nSurfId, int nIndV, int nDestGrpId) ; EXE_EXPORT int ExeSurfBezierGetControlCurveV( int nSurfId, int nIndU, int nDestGrpId) ; EXE_EXPORT int ExeExtractSurfBezierLoops( int nId, int nDestGrpId, int* pnCount) ; +EXE_EXPORT int ExeShowSurfBezierControlPoints( int nSrfId, int* pnCount) ; // GeomDb Volume Get EXE_EXPORT bool ExeVolZmapVolume( int nId, double& dVol) ;