diff --git a/EExImport3dm.h b/EExImport3dm.h new file mode 100644 index 0000000..5465f8a --- /dev/null +++ b/EExImport3dm.h @@ -0,0 +1,39 @@ +//---------------------------------------------------------------------------- +// EgalTech 2023 +//---------------------------------------------------------------------------- +// File : EExImport3dm.h Data : 26.06.23 Versione : 2.5f1 +// Contenuto : Dichiarazione della interfaccia IImport3dm. +// +// +// +// Modifiche : 26.06.23 DB Creazione modulo. +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EGkGeomDB.h" +#include + +//----------------------- Macro per import/export ---------------------------- +#undef EEK_EXPORT +#if defined( I_AM_EEX) // da definirsi solo nella DLL +#define EEX_EXPORT __declspec( dllexport) +#else +#define EEX_EXPORT __declspec( dllimport) +#endif + +//----------------------------------------------------------------------------- +class __declspec( novtable) IImport3dm +{ +public : + virtual ~IImport3dm( void) {} + virtual bool Import( const std::string& sFile, IGeomDB* pGDB, int nIdGroup, double dScaleFactor = 1, + double dTextHeight = 2.0, double dExtLine = 5.0, double dArrLen = 5.0, double dTextDist = 2.0, + bool bLenIsMM = true, int nDecDig = -2, std::string sFont = "ModernPropS.Nfe") = 0 ; +} ; + +//----------------------------------------------------------------------------- +extern "C" { + EEX_EXPORT IImport3dm* CreateImport3dm( void) ; +} diff --git a/EGkCurveAux.h b/EGkCurveAux.h index e12d361..76ed287 100644 --- a/EGkCurveAux.h +++ b/EGkCurveAux.h @@ -32,14 +32,18 @@ struct CNurbsData bool bRat ; // flag di curva razionale (pesi non tutti unitari) bool bPeriodic ; // flag per segnalare vettore dei nodi periodico bool bClosed ; // flag di curva chiusa + bool bClamped ; // flag di curva clamped bool bExtraKnotes ; // flag per segnalare presenza di nodi extra all'inizio e fine (totale 2) DBLVECTOR vU ; // vettore dei nodi PNTVECTOR vCP ; // vettore dei punti di controllo DBLVECTOR vW ; // vettore dei pesi - CNurbsData( void) : nDeg( 0), bRat( false), bPeriodic( false), bClosed( false), bExtraKnotes( false) {} + CNurbsData( void) : nDeg( 0), bRat( false), bPeriodic( false), bClosed( false), bClamped( false), bExtraKnotes(false) {} } ; +// 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 un arco in una nuova curva di Bezier semplice o composta EGK_EXPORT ICurve* ArcToBezierCurve( const ICurve* pArc) ; diff --git a/EGkStmFromTriangleSoup.h b/EGkStmFromTriangleSoup.h index 354e90a..f417910 100644 --- a/EGkStmFromTriangleSoup.h +++ b/EGkStmFromTriangleSoup.h @@ -35,13 +35,15 @@ class StmFromTriangleSoup EGK_EXPORT ~StmFromTriangleSoup( void) ; EGK_EXPORT bool Start( int nBuckets = GRID_STD_BUCKETS) ; EGK_EXPORT bool AddTriangle( const Triangle3d& Tria) ; - EGK_EXPORT bool AddTriangle( const Point3d& ptP0, const Point3d& ptP1, const Point3d& ptP2) ; + EGK_EXPORT bool AddTriangle( const Point3d& ptP0, const Point3d& ptP1, const Point3d& ptP2, + const double dU0 = -1, const double dV0 = -1, const double dU1 = -1, const double dV1 = -1, + const double dU2 = -1, const double dV2 = -1) ; EGK_EXPORT bool AddSurfTriMesh( const ISurfTriMesh& stmSource) ; EGK_EXPORT bool End( void) ; EGK_EXPORT ISurfTriMesh* GetSurf( void) ; private : - inline int AddVertex( const Point3d& ptP) ; + inline int AddVertex( const Point3d& ptP, const double dU = -1, const double dV = -1) ; private : ISurfTriMesh* m_pSTM ; diff --git a/EGkSurfAux.h b/EGkSurfAux.h new file mode 100644 index 0000000..15254a2 --- /dev/null +++ b/EGkSurfAux.h @@ -0,0 +1,61 @@ +//---------------------------------------------------------------------------- +// EgalTech 2023-2023 +//---------------------------------------------------------------------------- +// File : EGkSurfAux.h Data : 09.08.23 Versione : +// Contenuto : Dichiarazione funzioni ausiliarie per ISurf. +// +// +// +// Modifiche : 09.08.23 DB Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EGkCurveComposite.h" +#include "/EgtDev/Include/EGkSurf.h" +#include "/EgtDev/Include/EGkGeoCollection.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 + +//---------------------------------------------------------------------------- +//! Struttura dati per superficie Nurbs +struct SNurbsSurfData +{ + int nDegU ; // grado in U + int nDegV ; // grado in V + bool bRat ; // flag di superficie razionale (pesi non tutti unitari) + bool bPeriodicU ; // flag per segnalare vettore dei nodi periodico in U + bool bPeriodicV ; // flag per segnalare vettore dei nodi periodico in V + bool bClosedU ; // flag di superficie chiusa sul parametro U + bool bClosedV ; // flag di superficie chiusa sul parametro V + bool bClampedU ; // flag di superficie clamped sul parametro U + bool bClampedV ; // flag di superficie clamped sul parametro V + bool bExtraKnotes ; // flag per segnalare presenza di nodi extra all'inizio e fine (totale 2) + DBLVECTOR vU ; // vettore dei nodi in U + DBLVECTOR vV ; // vettore dei nodi in V + int nCPU ; // numero di punti di controllo in U + int nCPV ; // numero di punti di controllo in V + PNTVECTOR vCP ; // vettore dei punti di controllo + PNTMATRIX mCP ; // matrice dei punti di controllo + DBLMATRIX mW ; // matrice dei pesi + + SNurbsSurfData( void) : nDegU( 0), nDegV( 0), bRat( false), bPeriodicU( false), bPeriodicV( false), bClosedU( false), bClosedV( false), + bClampedU( false), bClampedV( false), bExtraKnotes(false) {} +} ; + +// N.B. : in caso la superficie 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 superficie Nurbs standard in una nuova superficie di Bezier semplice o composta +EGK_EXPORT bool NurbsSurfaceCanonicalize( SNurbsSurfData& snData) ; +EGK_EXPORT ISurf* NurbsToBezierSurface( const SNurbsSurfData& snData) ; diff --git a/EGkSurfBezier.h b/EGkSurfBezier.h index d53d306..6ebf797 100644 --- a/EGkSurfBezier.h +++ b/EGkSurfBezier.h @@ -37,6 +37,7 @@ class __declspec( novtable) ISurfBezier : public ISurf virtual bool SetControlPoint( int nIndU, int nIndV, const Point3d& ptCtrl, double dW) = 0 ; virtual bool SetControlPoint( int nInd, const Point3d& ptCtrl, double dW) = 0 ; virtual bool SetTrimRegion( const ISurfFlatRegion& sfrTrimReg) = 0 ; + virtual ISurfFlatRegion* GetTrimRegion( void) const = 0 ; virtual bool GetInfo( int& nDegU, int& nDegV, int& nSpanU, int& nSpanV, bool& bIsRat, bool& bTrimmed) const = 0 ; virtual const Point3d& GetControlPoint( int nIndU, int nIndV, bool* pbOk) const = 0 ; virtual const Point3d& GetControlPoint( int nInd, bool* pbOk) const = 0 ; @@ -57,6 +58,7 @@ class __declspec( novtable) ISurfBezier : public ISurf virtual bool GetControlCurveOnU( int nIndV, PolyLine& plCtrlU) const = 0 ; virtual bool GetControlCurveOnV( int nIndU, PolyLine& plCtrlV) const = 0 ; virtual const ISurfTriMesh* GetAuxSurf( void) const = 0 ; + virtual bool GetLeaves ( std::vector>& vLeaves) const = 0 ; } ; //----------------------------------------------------------------------------- diff --git a/EGkSurfTriMesh.h b/EGkSurfTriMesh.h index 422b767..5623db0 100644 --- a/EGkSurfTriMesh.h +++ b/EGkSurfTriMesh.h @@ -43,7 +43,7 @@ class __declspec( novtable) ISurfTriMesh : public ISurf virtual void SetLinearTolerance( double dLinTol) = 0 ; virtual void SetBoundaryAngle( double dBoundaryAngDeg) = 0 ; virtual void SetSmoothAngle( double dSmoothAngDeg) = 0 ; - virtual int AddVertex( const Point3d& ptVert) = 0 ; + virtual int AddVertex( const Point3d& ptVert, const double dU = -1, const double dV = -1) = 0 ; virtual bool MoveVertex( int nInd, const Point3d& ptNewVert) = 0 ; virtual int AddTriangle( const int nIdVert[3], int nTFlag = 0) = 0 ; virtual bool RemoveTriangle( int nId) = 0 ; @@ -68,8 +68,11 @@ class __declspec( novtable) ISurfTriMesh : public ISurf virtual double GetLinearTolerance( void) const = 0 ; virtual double GetSmoothAngle( void) const = 0 ; virtual bool GetVertex( int nId, Point3d& ptP) const = 0 ; + virtual bool GetVertexParam( int nId, double& dU, double& dV) const = 0 ; virtual int GetFirstVertex( Point3d& ptP) const = 0 ; + virtual int GetFirstVertexParam( int nId, double& dU, double& dV) const = 0 ; virtual int GetNextVertex( int nId, Point3d& ptP) const = 0 ; + virtual int GetNextVertexParam( int nId, double& dU, double& dV) const = 0 ; virtual bool GetTriangle( int nId, int nIdVert[3]) const = 0 ; virtual int GetFirstTriangle( int nIdVert[3]) const = 0 ; virtual int GetNextTriangle( int nId, int nIdVert[3]) const = 0 ; diff --git a/EXeExecutor.h b/EXeExecutor.h index 4f08f09..3854ee0 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -121,6 +121,7 @@ EXE_EXPORT bool ExeImportDxf( const std::string& sFilePath, double dScaleFactor) EXE_EXPORT bool ExeImportPnt( const std::string& sFilePath, int nFlag) ; EXE_EXPORT bool ExeImportStl( const std::string& sFilePath, double dScaleFactor) ; EXE_EXPORT bool ExeImport3MF( const std::string& sFilePath) ; +EXE_EXPORT bool ExeImport3dm( const std::string& sFilePath, double dScaleFactor) ; EXE_EXPORT bool ExeAdvancedImportIsEnabled( void) ; EXE_EXPORT bool ExeAdvancedImport( const std::string& sFilePath, double dToler = 0.1) ; EXE_EXPORT bool ExeExportDxf( int nId, const std::string& sFilePath, int nFlag = 1, int nFilter = 393) ; @@ -358,6 +359,7 @@ EXE_EXPORT int ExeCreateSurfTmBySurfBezier( int nParentId, int nSbezId) ; EXE_EXPORT int ExeCreateSurfTmByVolZmap( int nParentId, int nZmapId, int nPart) ; EXE_EXPORT int ExeCreateSurfBezier( int nParentId, int nDegU, int nDegV, int nSpanU, int nSpanV, const PNTVECTOR& vPnt, int nRefType) ; EXE_EXPORT int ExeCreateSurfBezierRational( int nParentId, int nDegU, int nDegV, int nSpanU, int nSpanV, const PNTUVECTOR& vPntW, int nRefType) ; +EXE_EXPORT int ExeCreateSurfBezierLeaves( int nParentId, int nSurfBzId, int nTextHeight = 50, bool bShowTrim = false) ; // GeomDB Create Volume EXE_EXPORT int ExeCreateVolZmap( int nParentId, const Point3d& ptIni, double dDimX, @@ -612,6 +614,7 @@ EXE_EXPORT bool ExeSurfTmCut( int nId, int nCutterId, bool bInVsOut, bool bSaveO EXE_EXPORT bool ExeSurfTmSubtractProjectedFacesOnFace( int nSurfId, int nFaceInd, int nDestGrpId, INTVECTOR vSurfsId, bool bOCFlag, bool& bExistProjection, int& nNewId, int& nNewFaceNbr) ; +EXE_EXPORT bool ExeSurfBzTrim( int nId, int nCutterId) ; // GeomDb Volume Modify EXE_EXPORT int ExeExplodeVolume( int nId, int* pnCount) ;