-// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
#include <vector>
#include <set>
-class SMESH_Mesh;
-class SMESH_Comment;
class SMESHDS_Mesh;
+class SMESH_Comment;
+class SMESH_Mesh;
+class SMESH_MesherHelper;
class TopoDS_Shape;
-class TopTools_DataMapOfShapeShape;
class TopTools_IndexedMapOfShape;
class NETGENPlugin_Hypothesis;
class NETGENPlugin_SimpleHypothesis_2D;
void restoreLocalH ( netgen::Mesh* ngMesh);
};
+//================================================================================
+/*!
+ * \brief It correctly initializes netgen library at constructor and
+ * correctly finishes using netgen library at destructor
+ */
+//================================================================================
+
+struct NETGENPLUGIN_EXPORT NETGENPlugin_NetgenLibWrapper
+{
+ bool _isComputeOk;
+ nglib::Ng_Mesh * _ngMesh;
+
+ NETGENPlugin_NetgenLibWrapper();
+ ~NETGENPlugin_NetgenLibWrapper();
+ void setMesh( nglib::Ng_Mesh* mesh );
+
+ private:
+ std::string getOutputFileName();
+ void removeOutputFile();
+ std::string _outputFileName;
+
+ std::streambuf* _coutBuffer; // to re-/store cout.rdbuf()
+};
+
//=============================================================================
/*!
* \brief This class calls the NETGEN mesher of OCC geometry
NETGENPlugin_Mesher (SMESH_Mesh* mesh, const TopoDS_Shape& aShape,
const bool isVolume);
+ ~NETGENPlugin_Mesher();
+ void SetSelfPointer( NETGENPlugin_Mesher ** ptr );
void SetParameters(const NETGENPlugin_Hypothesis* hyp);
void SetParameters(const NETGENPlugin_SimpleHypothesis_2D* hyp);
bool Evaluate(MapShapeNbElems& aResMap);
+ double GetProgress(const SMESH_Algo* holder,
+ const int * algoProgressTic,
+ const double * algoProgress) const;
+
static void PrepareOCCgeometry(netgen::OCCGeometry& occgeom,
const TopoDS_Shape& shape,
SMESH_Mesh& mesh,
static double GetDefaultMinSize(const TopoDS_Shape& shape,
const double maxSize);
- static void RestrictLocalSize(netgen::Mesh& ngMesh, const gp_XYZ& p, const double size);
+ static void RestrictLocalSize(netgen::Mesh& ngMesh,
+ const gp_XYZ& p,
+ double size,
+ const bool overrideMinH=true);
static int FillSMesh(const netgen::OCCGeometry& occgeom,
netgen::Mesh& ngMesh,
const NETGENPlugin_ngMeshInfo& initState,
SMESH_Mesh& sMesh,
std::vector<const SMDS_MeshNode*>& nodeVec,
- SMESH_Comment& comment);
+ SMESH_Comment& comment,
+ SMESH_MesherHelper* quadHelper=0);
bool FillNgMesh(netgen::OCCGeometry& occgeom,
netgen::Mesh& ngMesh,
std::vector<const SMDS_MeshNode*>& nodeVec,
const std::list< SMESH_subMesh* > & meshedSM,
+ SMESH_MesherHelper* quadHelper=0,
SMESH_ProxyMesh::Ptr proxyMesh=SMESH_ProxyMesh::Ptr());
static void FixIntFaces(const netgen::OCCGeometry& occgeom,
netgen::Mesh& ngMesh,
NETGENPlugin_Internals& internalShapes);
+ static bool FixFaceMesh(const netgen::OCCGeometry& occgeom,
+ netgen::Mesh& ngMesh,
+ const int faceID);
+
static void AddIntVerticesInFaces(const netgen::OCCGeometry& occgeom,
netgen::Mesh& ngMesh,
std::vector<const SMDS_MeshNode*>& nodeVec,
netgen::OCCGeometry& geom,
const TSideVector& wires,
SMESH_MesherHelper& helper,
- std::vector< const SMDS_MeshNode* > & nodeVec);
+ std::vector< const SMDS_MeshNode* > & nodeVec,
+ const bool overrideMinH=true);
void SetDefaultParameters();
const std::string& pyFile); // debug
private:
+
SMESH_Mesh* _mesh;
const TopoDS_Shape& _shape;
bool _isVolume;
bool _optimize;
int _fineness;
bool _isViscousLayers2D;
+ netgen::Mesh* _ngMesh;
+ netgen::OCCGeometry* _occgeom;
+
+ int _curShapeIndex;
+ volatile int _progressTic;
+ volatile double _ticTime; // normalized [0,1] compute time per a SMESH_Algo::_progressTic
+ volatile double _totalTime;
const NETGENPlugin_SimpleHypothesis_2D * _simpleHyp;
+
+ // a pointer to NETGENPlugin_Mesher* field of the holder, that will be
+ // nullified at destruction of this
+ NETGENPlugin_Mesher ** _ptrToMe;
};
//=============================================================================
};
-//================================================================================
-/*!
- * \brief It correctly initializes netgen library at constructor and
- * correctly finishes using netgen library at destructor
- */
-//================================================================================
-
-struct NETGENPLUGIN_EXPORT NETGENPlugin_NetgenLibWrapper
-{
- nglib::Ng_Mesh * _ngMesh;
- NETGENPlugin_NetgenLibWrapper();
- ~NETGENPlugin_NetgenLibWrapper();
- void setMesh( nglib::Ng_Mesh* mesh );
-};
-
#endif