From 079e9e027a5ad38759217c560629cf23c74c4baf Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Tue, 7 May 2024 14:51:49 +0200 Subject: [PATCH 01/14] Include : - aggiunte le funzioni per proiettare curve su una superficie di Bezier. --- EGkProjectCurveSurfBez.h | 37 +++++++++++++++++++++++++++++++++++++ EXeExecutor.h | 4 ++++ 2 files changed, 41 insertions(+) create mode 100644 EGkProjectCurveSurfBez.h diff --git a/EGkProjectCurveSurfBez.h b/EGkProjectCurveSurfBez.h new file mode 100644 index 0000000..67556fd --- /dev/null +++ b/EGkProjectCurveSurfBez.h @@ -0,0 +1,37 @@ +//---------------------------------------------------------------------------- +// EgalTech 2024-2024 +//---------------------------------------------------------------------------- +// File : EGkProjectCurveSurfTm.h Data : 07.05.24 Versione : 2.6e3 +// Contenuto : Dichiarazione funzioni proiezione curve su superficie Bezier. +// +// +// +// Modifiche : 07.05.24 DB Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EGkGeoPoint3d.h" +#include "/EgtDev/Include/EGkCurve.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 + +//---------------------------------------------------------------------------- +// Proiezione di una curva su una superficie TriMesh lungo la direzione data. +EGK_EXPORT bool ProjectCurveOnSurfBez( const ICurve& crCrv, const ISurfBezier& surfBez, const Vector3d& vtDir, + double dLinTol, double dMaxSegmLen, PNT5AXVECTOR& vPt5ax) ; +EGK_EXPORT bool ProjectCurveOnSurfBez( const ICurve& crCrv, const ISurfBezier& surfBez, const IGeoPoint3d& gpRef, + double dLinTol, double dMaxSegmLen, PNT5AXVECTOR& vPt5ax) ; +EGK_EXPORT bool ProjectCurveOnSurfBez( const ICurve& crCrv, const ISurfBezier& surfBez, const ICurve& crRef, + double dLinTol, double dMaxSegmLen, PNT5AXVECTOR& vPt5ax) ; +EGK_EXPORT bool ProjectCurveOnSurfBez( const ICurve& crCrv, const ISurfBezier& surfBez, const ISurfTriMesh& tmRef, + double dLinTol, double dMaxSegmLen, PNT5AXVECTOR& vPt5ax) ; diff --git a/EXeExecutor.h b/EXeExecutor.h index 9c5e048..0861c2b 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -609,6 +609,10 @@ EXE_EXPORT bool ExeProjectCurveOnSurfTm( int nCurveId, int nSurfTmId, const Vect double dLinTol, double dMaxSegmLen, int nRefType) ; EXE_EXPORT bool ExeProjectCurveOnSurfTmExt( int nCurveId, int nSurfTmId, int nGuideId, int nDestGrpId, double dLinTol, double dMaxSegmLen, bool bDirFromGuide) ; +EXE_EXPORT bool ExeProjectCurveOnSurfBz( int nCurveId, int nSurfBzId, const Vector3d& vtDir, int nDestGrpId, + double dLinTol, double dMaxSegmLen, int nRefType) ; +EXE_EXPORT bool ExeProjectCurveOnSurfBzExt( int nCurveId, int nSurfBzId, int nGuideId, int nDestGrpId, + double dLinTol, double dMaxSegmLen, bool bDirFromGuide) ; 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) ; From ad87ee5da8ae5d426939a379e5f2f48ebe438780 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Tue, 7 May 2024 17:38:32 +0200 Subject: [PATCH 02/14] Include : - aggiunte le chiamate per le funzioni di creazioni di superfici Bezier da curve. --- EGkSbzFromCurves.h | 50 ++++++++++++++++++++++++++++++++++++++++++++++ EXeExecutor.h | 2 ++ 2 files changed, 52 insertions(+) create mode 100644 EGkSbzFromCurves.h diff --git a/EGkSbzFromCurves.h b/EGkSbzFromCurves.h new file mode 100644 index 0000000..e6b1f08 --- /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/EXeExecutor.h b/EXeExecutor.h index 0861c2b..4f55d73 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -374,6 +374,8 @@ 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 ExeCreateSurfBzByExtrusion( int nParentId, const INTVECTOR& vCrvIds, const Vector3d& vtExtr, + double dLinTol, int nRefType) ; // GeomDB Create Volume EXE_EXPORT int ExeCreateVolZmap( int nParentId, const Point3d& ptIni, double dDimX, From f1ce998815a5561cba1fea374ed2542dd0ccb890 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Wed, 8 May 2024 17:50:46 +0200 Subject: [PATCH 03/14] Include : - aggiunta funzione MakeRational per le curve di Bezier - aggiunta funzione di conversione da ICurve a curva di Bezier semplice o composta. --- EGkCurveAux.h | 4 ++++ EGkCurveBezier.h | 1 + 2 files changed, 5 insertions(+) diff --git a/EGkCurveAux.h b/EGkCurveAux.h index bd3e651..daffb58 100644 --- a/EGkCurveAux.h +++ b/EGkCurveAux.h @@ -46,6 +46,10 @@ struct CNurbsData // N.B. : in caso la curva sia razionale i punti di controllo sono in forma NON OMOGENEA [ x, y, z, w] ( dove la forma OMOGENEA è [ w*x, w*y, w*z, w]) // tutte le operazioni richiedono la forma OMOGENEA, finite le quali posso riportarmi alla forma NON OMOGENEA +//---------------------------------------------------------------------------- +//! Trasforma una linea in una nuova curva di Bezier semplice +EGK_EXPORT ICurve* CurveToBezierCurve( const ICurve* pCrv) ; + //---------------------------------------------------------------------------- //! Trasforma una linea in una nuova curva di Bezier semplice EGK_EXPORT ICurveBezier* LineToBezierCurve( const ICurveLine* pLine) ; diff --git a/EGkCurveBezier.h b/EGkCurveBezier.h index 6cc1c09..c94341c 100644 --- a/EGkCurveBezier.h +++ b/EGkCurveBezier.h @@ -37,6 +37,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 ; } ; //----------------------------------------------------------------------------- From 14fe1a913a40651f3c69b08ee3c4cac2693484ea Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Thu, 9 May 2024 15:11:59 +0200 Subject: [PATCH 04/14] Include : - aggiunte le funziondi di SurfBez da estrusione e da FlatContour. --- EGkSbzFromCurves.h | 38 +++++++++++++++++++------------------- EGkSurfBezier.h | 3 +++ EXeExecutor.h | 1 + 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/EGkSbzFromCurves.h b/EGkSbzFromCurves.h index e6b1f08..df2395e 100644 --- a/EGkSbzFromCurves.h +++ b/EGkSbzFromCurves.h @@ -25,26 +25,26 @@ #define EGK_EXPORT __declspec( dllimport) #endif -//---------------------------------------------------------------------------- -enum RS_CAP { RSCAP_NONE = 0, RSCAP_FLAT = 1, RSCAP_ROUND = 2, RSCAP_BEVEL = 3} ; +////---------------------------------------------------------------------------- +//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* 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) ; + 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/EGkSurfBezier.h b/EGkSurfBezier.h index dec7b3f..21487f9 100644 --- a/EGkSurfBezier.h +++ b/EGkSurfBezier.h @@ -73,6 +73,9 @@ 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 ; } ; //----------------------------------------------------------------------------- diff --git a/EXeExecutor.h b/EXeExecutor.h index 4f55d73..ea2f252 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -374,6 +374,7 @@ 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 ExeCreateSurfBzByExtrusion( int nParentId, const INTVECTOR& vCrvIds, const Vector3d& vtExtr, double dLinTol, int nRefType) ; From 9617f362308b85ca4e7cfdfd326a54f98da955c8 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Mon, 13 May 2024 10:28:20 +0200 Subject: [PATCH 05/14] =?UTF-8?q?Include=20:=20-=20gestione=20del=20grado?= =?UTF-8?q?=20e=20della=20razionalit=C3=A0=20delle=20curve=20convertite=20?= =?UTF-8?q?in=20Bezier.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EGkCurveAux.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/EGkCurveAux.h b/EGkCurveAux.h index daffb58..b23067b 100644 --- a/EGkCurveAux.h +++ b/EGkCurveAux.h @@ -48,11 +48,11 @@ struct CNurbsData //---------------------------------------------------------------------------- //! Trasforma una linea in una nuova curva di Bezier semplice -EGK_EXPORT ICurve* CurveToBezierCurve( const ICurve* pCrv) ; +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) ; +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 @@ -60,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 From 987a84181d3c1400e52ee3fa32cf4c561287c5cb Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Mon, 13 May 2024 10:29:48 +0200 Subject: [PATCH 06/14] Include : - spostata la funzione CalcRegionPolyLines. --- EGkSfrCreate.h | 2 ++ 1 file changed, 2 insertions(+) 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 From bdd2f34184f991075df692714d2139f097c8b537 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Mon, 13 May 2024 10:32:02 +0200 Subject: [PATCH 07/14] Include : - aggiunte le funzioni per Bezier da FlatContour, da Region, da Extrusion e da Screwing. --- EGkSbzFromCurves.h | 6 +++--- EXeExecutor.h | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/EGkSbzFromCurves.h b/EGkSbzFromCurves.h index df2395e..39562d4 100644 --- a/EGkSbzFromCurves.h +++ b/EGkSbzFromCurves.h @@ -30,15 +30,15 @@ //---------------------------------------------------------------------------- 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* 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* 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, diff --git a/EXeExecutor.h b/EXeExecutor.h index ea2f252..a5ee97d 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -375,8 +375,12 @@ EXE_EXPORT int ExeCreateSurfBezierLeaves( int nParentId, int nSurfBzId, int nTe 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) ; // GeomDB Create Volume EXE_EXPORT int ExeCreateVolZmap( int nParentId, const Point3d& ptIni, double dDimX, @@ -721,7 +725,7 @@ EXE_EXPORT bool ExeCurveCompoCenter( int nId, int nSimpCrv, int nRefId, Point3d& EXE_EXPORT bool ExeCurveCompoRadius( int nId, int nSimpCrv, double& dRad) ; EXE_EXPORT bool ExeCurveCompoAngCenter( int nId, int nSimpCrv, double& dAngCen) ; EXE_EXPORT bool ExeCurveCompoNormVersor( int nId, int nSimpCrv, int nRefId, Vector3d& vtNorm) ; -EXE_EXPORT bool ExeShowBezierCurveControlPoints( int nCrvId, int* pnCount) ; +EXE_EXPORT int ExeShowBezierCurveControlPoints( int nCrvId, int* pnCount) ; // GeomDb Surf Get EXE_EXPORT bool ExeSurfArea( int nId, double& dArea) ; @@ -775,6 +779,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 ExeShowBezierSurfaceControlPoints( int nSrfId, int* pnCount) ; // GeomDb Volume Get EXE_EXPORT bool ExeVolZmapVolume( int nId, double& dVol) ; From 82e86fcdeeac30a421fdcf2a3c1ed4f45fbbb678 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Tue, 21 May 2024 15:40:05 +0200 Subject: [PATCH 08/14] Include : - aggiunta la funzione di screwing con superfci di Bezier. --- EGkCurveBezier.h | 1 + EGkSurfBezier.h | 1 + EXeExecutor.h | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/EGkCurveBezier.h b/EGkCurveBezier.h index c94341c..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 ; diff --git a/EGkSurfBezier.h b/EGkSurfBezier.h index 21487f9..aecaeaf 100644 --- a/EGkSurfBezier.h +++ b/EGkSurfBezier.h @@ -76,6 +76,7 @@ class __declspec( novtable) ISurfBezier : public ISurf 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 ; } ; //----------------------------------------------------------------------------- diff --git a/EXeExecutor.h b/EXeExecutor.h index a5ee97d..f59595e 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -725,7 +725,7 @@ EXE_EXPORT bool ExeCurveCompoCenter( int nId, int nSimpCrv, int nRefId, Point3d& EXE_EXPORT bool ExeCurveCompoRadius( int nId, int nSimpCrv, double& dRad) ; EXE_EXPORT bool ExeCurveCompoAngCenter( int nId, int nSimpCrv, double& dAngCen) ; EXE_EXPORT bool ExeCurveCompoNormVersor( int nId, int nSimpCrv, int nRefId, Vector3d& vtNorm) ; -EXE_EXPORT int ExeShowBezierCurveControlPoints( int nCrvId, int* pnCount) ; +EXE_EXPORT int ExeShowCurveBezierControlPoints( int nCrvId, int* pnCount) ; // GeomDb Surf Get EXE_EXPORT bool ExeSurfArea( int nId, double& dArea) ; @@ -779,7 +779,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 ExeShowBezierSurfaceControlPoints( int nSrfId, int* pnCount) ; +EXE_EXPORT int ExeShowSurfBezierControlPoints( int nSrfId, int* pnCount) ; // GeomDb Volume Get EXE_EXPORT bool ExeVolZmapVolume( int nId, double& dVol) ; From a78f73f1f13678c58ad82851c6e5ff22e4ac514f Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Wed, 22 May 2024 10:38:41 +0200 Subject: [PATCH 09/14] Include : - aggiunta la funzione per creare una surf bezier da rivoluzione ( revolve) --- EGkSbzFromCurves.h | 4 ++-- EXeExecutor.h | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/EGkSbzFromCurves.h b/EGkSbzFromCurves.h index 39562d4..e3bb415 100644 --- a/EGkSbzFromCurves.h +++ b/EGkSbzFromCurves.h @@ -35,8 +35,8 @@ EGK_EXPORT ISurfBezier* GetSurfBezierByExtrusion( const ICurve* pCurve, const Ve 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* 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, diff --git a/EXeExecutor.h b/EXeExecutor.h index a0ea65f..fd3062b 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -381,6 +381,9 @@ EXE_EXPORT int ExeCreateSurfBzByExtrusion( int nParentId, const INTVECTOR& vCrv 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) ; // GeomDB Create Volume EXE_EXPORT int ExeCreateVolZmap( int nParentId, const Point3d& ptIni, double dDimX, @@ -625,6 +628,7 @@ 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) ; // GeomDb Surf Modify EXE_EXPORT bool ExeInvertSurface( const INTVECTOR& vIds) ; From 88a4a918356fb75c90a65843c1b6a92f5da2f4d1 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Wed, 22 May 2024 12:15:35 +0200 Subject: [PATCH 10/14] Include : - aggiunta la funzione per ridurre di grado una curva Bezier. --- EXeExecutor.h | 1 + 1 file changed, 1 insertion(+) diff --git a/EXeExecutor.h b/EXeExecutor.h index fd3062b..b5e0bae 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -629,6 +629,7 @@ EXE_EXPORT int ExeCurveGetVoronoi( int nId, int nDestGrpId, int nBound, int* pn 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) ; From fa91c10973c7137762c7eacc3084f9ac1f6aa6bb Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Fri, 24 May 2024 12:12:19 +0200 Subject: [PATCH 11/14] Include : - cambiato il nome ad una funzione. --- EGkSbzStandard.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From f72ee830ff4e28d985d326355fc13d0d0daf7cdd Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Tue, 28 May 2024 16:21:26 +0200 Subject: [PATCH 12/14] Include : - aggiunte le funzioni per creare una rigata ( ruled ) come superficie Bezier. - aggiunto l'enum per i tipi di rigata. --- EGkSbzFromCurves.h | 4 ++-- EGkSurfBezier.h | 7 +++++++ EXeExecutor.h | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/EGkSbzFromCurves.h b/EGkSbzFromCurves.h index e3bb415..a688a21 100644 --- a/EGkSbzFromCurves.h +++ b/EGkSbzFromCurves.h @@ -46,5 +46,5 @@ EGK_EXPORT ISurfBezier* GetSurfBezierByScrewing( const ICurve* pCurve, const Poi //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) ; +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/EGkSurfBezier.h b/EGkSurfBezier.h index aecaeaf..2b2089a 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_ISOPAR_SMOOTH = 2, // con parametrizzazione simile tra le due curve, tento di smussare un po' la curva nel mezzo ( forse questa modalità non serve se riesco a sistemare la triangolazione per le superfici bilineari) + RLT_B_MINDIST_PLUS = 2} ; // con distanza minima tra le due curve, aggiungendo punti lungo le curve dove necessario public : // IGeoObj ISurfBezier* Clone( void) const override = 0 ; public : @@ -77,6 +82,8 @@ class __declspec( novtable) ISurfBezier : public ISurf 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 3ac17a3..13d4dc7 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -384,6 +384,7 @@ EXE_EXPORT int ExeCreateSurfBzByScrewing( int nParentId, int nCrvId, 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, From b3f6bd148a1a84d12e5ec38bd2a0c84dbce0a14c Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Thu, 30 May 2024 16:51:58 +0200 Subject: [PATCH 13/14] Include : - corretto un enum. --- EGkSurfBezier.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EGkSurfBezier.h b/EGkSurfBezier.h index 2b2089a..30dd805 100644 --- a/EGkSurfBezier.h +++ b/EGkSurfBezier.h @@ -32,7 +32,7 @@ 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_ISOPAR_SMOOTH = 2, // con parametrizzazione simile tra le due curve, tento di smussare un po' la curva nel mezzo ( forse questa modalità non serve se riesco a sistemare la triangolazione per le superfici bilineari) - RLT_B_MINDIST_PLUS = 2} ; // con distanza minima tra le due curve, aggiungendo punti lungo le curve dove necessario + RLT_B_MINDIST_PLUS = 3} ; // con distanza minima tra le due curve, aggiungendo punti lungo le curve dove necessario public : // IGeoObj ISurfBezier* Clone( void) const override = 0 ; public : From fef9dd4ae534740c0801304471fbf7e07558a5b7 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Tue, 9 Jul 2024 15:53:36 +0200 Subject: [PATCH 14/14] =?UTF-8?q?Include=20:=20-=20aggiornamento=20modalit?= =?UTF-8?q?=C3=A0=20per=20le=20superfici=20rigate=20con=20le=20bezier.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EGkSurfBezier.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EGkSurfBezier.h b/EGkSurfBezier.h index 30dd805..aa049dd 100644 --- a/EGkSurfBezier.h +++ b/EGkSurfBezier.h @@ -31,8 +31,8 @@ class __declspec( novtable) ISurfBezier : public ISurf 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_ISOPAR_SMOOTH = 2, // con parametrizzazione simile tra le due curve, tento di smussare un po' la curva nel mezzo ( forse questa modalità non serve se riesco a sistemare la triangolazione per le superfici bilineari) - RLT_B_MINDIST_PLUS = 3} ; // con distanza minima tra le due curve, aggiungendo punti lungo le curve dove necessario + 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 :