Files
Daniele Bariletti f03984a6e8 EgtExch3dm :
- ottimizzate le curve di trim delle superfici NURBS importate.
2024-02-05 15:16:49 +01:00

64 lines
3.3 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2023
//----------------------------------------------------------------------------
// File : Import3dm.h Data : 23.06.23 Versione : 2.5f1
// Contenuto : Dichiarazione della classe Import3dm.
//
//
//
// Modifiche : 23.06.23 DB Creazione modulo.
//
//
//----------------------------------------------------------------------------
#pragma once
#include "/EgtDev/Include/EE3Import3dm.h"
#include "/EgtDev/Include/EGkSurfTriMesh.h"
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
#include "/EgtDev/Include/EGkCurve.h"
#include "/EgtDev/Include/EGkGeoObj.h"
#include "/EgtDev/Include/EgtPointerOwner.h"
#include "/EgtDev/Extern/opennurbs/Include/opennurbs.h"
#include <utility>
#include <map>
//----------------------------------------------------------------------------
class Import3dm : public IImport3dm
{
public :
bool Import( const std::string& sFile, IGeomDB* pGDB, int nIdGroup,
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") override ;
private :
Point3d ConvertPoint( const ON_Point& onPoint)
{ return Point3d( onPoint.point.x, onPoint.point.y, onPoint.point.z) ; } ;
Point3d ConvertPoint( const ON_3dPoint& on3dPoint)
{ return Point3d( on3dPoint.x, on3dPoint.y, on3dPoint.z) ; } ;
Point3d ConvertPoint( const ON_4dPoint& on4dPoint)
{ return Point3d( on4dPoint.x, on4dPoint.y, on4dPoint.z) ; } ;
Point3d ConvertPoint( const ON_3fPoint& on3fPoint)
{ return Point3d( on3fPoint.x, on3fPoint.y, on3fPoint.z) ; } ;
Vector3d ConvertVector( const ON_3dVector& onVector)
{ return Vector3d( onVector.x, onVector.y, onVector.z) ; } ;
Vector3d ConvertVector( const ON_2dVector& onVector)
{ return Vector3d( onVector.x, onVector.y, 0) ; } ;
ICurve* ConvertCurve( const ON_Curve* onCurve) ;
ISurf* ConvertSurface( const ON_Surface* onSurf) ;
ISurfTriMesh* ConvertExtrusion( const ON_Extrusion* onExtrusion) ;
ISurfTriMesh* ConvertMesh( const ON_Mesh* onMesh) ;
std::vector<PtrOwner<IGeoObj>> ConvertAnnotation( const ON_Annotation* onAnnot, const ON_DimStyle* onDimStyle, double dTextHeight, double dExtLine, double dArrLen, double dTextDist,
bool bLenIsMM, int nDecDig, std::string sFont) ;
ISURFPOVECTOR ConvertBrep( const ON_Brep* onBrep, const bool bForceTriMesh) ;
ICurve* ConvertBrepLoop( const ON_BrepLoop* onBrepLoop) ;
ICurveComposite* ApproxTrim( ICurve* pCrv) ;
bool MakeUniform( ISurfFlatRegion** sfr, ON_NurbsSurface onNurbsSurface, double dScaleU, double dScaleV, bool& bRescaled, bool bRetry = false) ;
bool ConvertCurveParam( const ON_RevSurface* onRevSurf, ICurve** pCrv) ;
private :
IGeomDB* m_pGDB ;
int m_nIdGroup ;
std::map< int, std::tuple<const ON_Layer*, ON_UUID, int, bool>> m_mLayer ; // mappa dei layer con id nel GDB e l'uuid nel modello 3dm, un int per l'indice del layer nel model e un bool che indica la presenza di sottolayer
std::map< std::string, int> m_mError_count ;
} ;