From d3f5a4cc768a857d3a8a56293f014ff423a42bb1 Mon Sep 17 00:00:00 2001 From: eap Date: Tue, 3 Sep 2013 15:43:58 +0000 Subject: [PATCH] Progress bar --- .../NETGENPlugin_NETGEN_2D_ONLY.cxx | 22 +++++++++---------- .../NETGENPlugin_NETGEN_2D_ONLY.hxx | 2 +- src/NETGENPlugin/NETGENPlugin_NETGEN_3D.cxx | 20 ++++++++++++----- src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx | 2 +- 4 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cxx index c916084..8f3f529 100644 --- a/src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cxx +++ b/src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cxx @@ -128,7 +128,7 @@ bool NETGENPlugin_NETGEN_2D_ONLY::CheckHypothesis (SMESH_Mesh& aMesh, _hypMaxElementArea = 0; _hypLengthFromEdges = 0; _hypQuadranglePreference = 0; - _isSurfaceMeshing = true; + _progressByTic = -1; const list& hyps = GetUsedHypothesis(aMesh, aShape, false); @@ -386,25 +386,25 @@ void NETGENPlugin_NETGEN_2D_ONLY::CancelCompute() double NETGENPlugin_NETGEN_2D_ONLY::GetProgress() const { const char* task1 = "Surface meshing"; - const char* task2 = "Optimizing surface"; - double res = 0; - if ( _isSurfaceMeshing && + //const char* task2 = "Optimizing surface"; + double& progress = const_cast( this )->_progress; + if ( _progressByTic < 0. && strncmp( netgen::multithread.task, task1, 3 ) == 0 ) { - res = 0.3 * SMESH_Algo::GetProgressByTic(); // [0, 0.3] + progress = Min( 0.25, SMESH_Algo::GetProgressByTic() ); // [0, 0.25] } else //if ( strncmp( netgen::multithread.task, task2, 3 ) == 0) { - if ( _isSurfaceMeshing ) + if ( _progressByTic < 0 ) { NETGENPlugin_NETGEN_2D_ONLY* me = (NETGENPlugin_NETGEN_2D_ONLY*) this; - me->_isSurfaceMeshing = false; - me->_progressTic = 0; // to re-start GetProgressByTic() from 0. + me->_progressByTic = 0.25 / _progressTic; } - res = 0.3 + 0.7 * SMESH_Algo::GetProgressByTic(); // [0.3, 1.] + const_cast( this )->_progressTic++; + progress = Max( progress, _progressByTic * _progressTic ); } - //cout << netgen::multithread.task << " " <::const_iterator itl; const SMESHDS_Hypothesis* theHyp; @@ -191,6 +191,7 @@ bool NETGENPlugin_NETGEN_3D::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape) { netgen::multithread.terminate = 0; + _progressByTic = -1.; SMESHDS_Mesh* meshDS = aMesh.GetMeshDS(); @@ -493,6 +494,7 @@ bool NETGENPlugin_NETGEN_3D::Compute(SMESH_Mesh& aMesh, const int invalid_ID = -1; netgen::multithread.terminate = 0; + _progressByTic = -1.; SMESH_MesherHelper::MType MeshType = aHelper->IsQuadraticMesh(); if ( MeshType == SMESH_MesherHelper::COMP ) @@ -591,18 +593,24 @@ double NETGENPlugin_NETGEN_3D::GetProgress() const double res; const char* volMeshing = "Volume meshing"; const char* dlnMeshing = "Delaunay meshing"; - if ( !_optimizationStarted && + const double meshingRatio = 0.15; + const_cast( this )->_progressTic++; + + if ( _progressByTic < 0. && ( strncmp( netgen::multithread.task, dlnMeshing, 3 ) == 0 || strncmp( netgen::multithread.task, volMeshing, 3 ) == 0 )) { - res = 0.001 + 0.5 * netgen::multithread.percent / 100.; // [0., 0.5] + res = 0.001 + meshingRatio * netgen::multithread.percent / 100.; + //cout << netgen::multithread.task << " " <<_progressTic << "-" << netgen::multithread.percent << endl; } else // different otimizations { - ((NETGENPlugin_NETGEN_3D*)this)->_optimizationStarted = true; - res = 0.5 + 0.5 * SMESH_Algo::GetProgressByTic(); // [0.5, 1.] + if ( _progressByTic < 0. ) + ((NETGENPlugin_NETGEN_3D*)this)->_progressByTic = meshingRatio / _progressTic; + res = _progressByTic * _progressTic; + //cout << netgen::multithread.task << " " << _progressTic << " " << res << endl; } - return res; + return Min ( res, 0.98 ); } //============================================================================= diff --git a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx b/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx index 239fb37..df30d4f 100644 --- a/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx +++ b/src/NETGENPlugin/NETGENPlugin_NETGEN_3D.hxx @@ -77,7 +77,7 @@ class NETGENPLUGIN_EXPORT NETGENPlugin_NETGEN_3D: public SMESH_3D_Algo const NETGENPlugin_Hypothesis * _hypParameters; const StdMeshers_MaxElementVolume* _hypMaxElementVolume; const StdMeshers_ViscousLayers* _viscousLayersHyp; - bool _optimizationStarted; + double _progressByTic; }; #endif -- 2.39.2