Salome HOME
Copyrights update 2015.
[plugins/netgenplugin.git] / src / NETGENPlugin / NETGENPlugin_Mesher.hxx
index b87e377f5aaaf25a590171ba2e6cb4e505ba61a1..d7cb39e1017505dd6274a051ee9118b9d650ec8a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015  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
@@ -6,7 +6,7 @@
 // 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
@@ -44,9 +44,10 @@ namespace nglib {
 #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_IndexedMapOfShape;
 class NETGENPlugin_Hypothesis;
@@ -91,6 +92,8 @@ struct NETGENPLUGIN_EXPORT NETGENPlugin_NetgenLibWrapper
   std::string getOutputFileName();
   void        removeOutputFile();
   std::string _outputFileName;
+
+  std::streambuf* _coutBuffer;   // to re-/store cout.rdbuf()
 };
 
 //=============================================================================
@@ -117,7 +120,9 @@ class NETGENPLUGIN_EXPORT NETGENPlugin_Mesher
 
   bool Evaluate(MapShapeNbElems& aResMap);
 
-  double GetProgress(const SMESH_Algo* holder, const int * algoProgressTic ) const;
+  double GetProgress(const SMESH_Algo* holder,
+                     const int *       algoProgressTic,
+                     const double *    algoProgress) const;
 
   static void PrepareOCCgeometry(netgen::OCCGeometry&          occgeom,
                                  const TopoDS_Shape&           shape,
@@ -128,19 +133,24 @@ class NETGENPLUGIN_EXPORT NETGENPlugin_Mesher
   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,
+                                const 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,
@@ -162,7 +172,8 @@ class NETGENPLUGIN_EXPORT NETGENPlugin_Mesher
                       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();
 
@@ -184,7 +195,11 @@ class NETGENPLUGIN_EXPORT NETGENPlugin_Mesher
   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;