Progress bar

This commit is contained in:
eap 2013-09-03 15:43:58 +00:00
parent 5a195df013
commit d3f5a4cc76
4 changed files with 27 additions and 19 deletions

View File

@ -128,7 +128,7 @@ bool NETGENPlugin_NETGEN_2D_ONLY::CheckHypothesis (SMESH_Mesh& aMesh,
_hypMaxElementArea = 0; _hypMaxElementArea = 0;
_hypLengthFromEdges = 0; _hypLengthFromEdges = 0;
_hypQuadranglePreference = 0; _hypQuadranglePreference = 0;
_isSurfaceMeshing = true; _progressByTic = -1;
const list<const SMESHDS_Hypothesis*>& hyps = GetUsedHypothesis(aMesh, aShape, false); const list<const SMESHDS_Hypothesis*>& hyps = GetUsedHypothesis(aMesh, aShape, false);
@ -386,25 +386,25 @@ void NETGENPlugin_NETGEN_2D_ONLY::CancelCompute()
double NETGENPlugin_NETGEN_2D_ONLY::GetProgress() const double NETGENPlugin_NETGEN_2D_ONLY::GetProgress() const
{ {
const char* task1 = "Surface meshing"; const char* task1 = "Surface meshing";
const char* task2 = "Optimizing surface"; //const char* task2 = "Optimizing surface";
double res = 0; double& progress = const_cast<NETGENPlugin_NETGEN_2D_ONLY*>( this )->_progress;
if ( _isSurfaceMeshing && if ( _progressByTic < 0. &&
strncmp( netgen::multithread.task, task1, 3 ) == 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) else //if ( strncmp( netgen::multithread.task, task2, 3 ) == 0)
{ {
if ( _isSurfaceMeshing ) if ( _progressByTic < 0 )
{ {
NETGENPlugin_NETGEN_2D_ONLY* me = (NETGENPlugin_NETGEN_2D_ONLY*) this; NETGENPlugin_NETGEN_2D_ONLY* me = (NETGENPlugin_NETGEN_2D_ONLY*) this;
me->_isSurfaceMeshing = false; me->_progressByTic = 0.25 / _progressTic;
me->_progressTic = 0; // to re-start GetProgressByTic() from 0.
} }
res = 0.3 + 0.7 * SMESH_Algo::GetProgressByTic(); // [0.3, 1.] const_cast<NETGENPlugin_NETGEN_2D_ONLY*>( this )->_progressTic++;
progress = Max( progress, _progressByTic * _progressTic );
} }
//cout << netgen::multithread.task << " " <<res << endl; //cout << netgen::multithread.task << " " << _progressTic << endl;
return res; return Min( progress, 0.99 );
} }
//============================================================================= //=============================================================================

View File

@ -65,7 +65,7 @@ protected:
const SMESHDS_Hypothesis* _hypQuadranglePreference; const SMESHDS_Hypothesis* _hypQuadranglePreference;
const NETGENPlugin_Hypothesis_2D* _hypParameters; const NETGENPlugin_Hypothesis_2D* _hypParameters;
bool _isSurfaceMeshing; double _progressByTic;
}; };
#endif #endif

View File

@ -143,7 +143,7 @@ bool NETGENPlugin_NETGEN_3D::CheckHypothesis (SMESH_Mesh& aMesh,
// for correct work of GetProgress(): // for correct work of GetProgress():
netgen::multithread.percent = 0.; netgen::multithread.percent = 0.;
netgen::multithread.task = "Volume meshing"; netgen::multithread.task = "Volume meshing";
_optimizationStarted = false; _progressByTic = -1.;
list<const SMESHDS_Hypothesis*>::const_iterator itl; list<const SMESHDS_Hypothesis*>::const_iterator itl;
const SMESHDS_Hypothesis* theHyp; const SMESHDS_Hypothesis* theHyp;
@ -191,6 +191,7 @@ bool NETGENPlugin_NETGEN_3D::Compute(SMESH_Mesh& aMesh,
const TopoDS_Shape& aShape) const TopoDS_Shape& aShape)
{ {
netgen::multithread.terminate = 0; netgen::multithread.terminate = 0;
_progressByTic = -1.;
SMESHDS_Mesh* meshDS = aMesh.GetMeshDS(); SMESHDS_Mesh* meshDS = aMesh.GetMeshDS();
@ -493,6 +494,7 @@ bool NETGENPlugin_NETGEN_3D::Compute(SMESH_Mesh& aMesh,
const int invalid_ID = -1; const int invalid_ID = -1;
netgen::multithread.terminate = 0; netgen::multithread.terminate = 0;
_progressByTic = -1.;
SMESH_MesherHelper::MType MeshType = aHelper->IsQuadraticMesh(); SMESH_MesherHelper::MType MeshType = aHelper->IsQuadraticMesh();
if ( MeshType == SMESH_MesherHelper::COMP ) if ( MeshType == SMESH_MesherHelper::COMP )
@ -591,18 +593,24 @@ double NETGENPlugin_NETGEN_3D::GetProgress() const
double res; double res;
const char* volMeshing = "Volume meshing"; const char* volMeshing = "Volume meshing";
const char* dlnMeshing = "Delaunay meshing"; const char* dlnMeshing = "Delaunay meshing";
if ( !_optimizationStarted && const double meshingRatio = 0.15;
const_cast<NETGENPlugin_NETGEN_3D*>( this )->_progressTic++;
if ( _progressByTic < 0. &&
( strncmp( netgen::multithread.task, dlnMeshing, 3 ) == 0 || ( strncmp( netgen::multithread.task, dlnMeshing, 3 ) == 0 ||
strncmp( netgen::multithread.task, volMeshing, 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 else // different otimizations
{ {
((NETGENPlugin_NETGEN_3D*)this)->_optimizationStarted = true; if ( _progressByTic < 0. )
res = 0.5 + 0.5 * SMESH_Algo::GetProgressByTic(); // [0.5, 1.] ((NETGENPlugin_NETGEN_3D*)this)->_progressByTic = meshingRatio / _progressTic;
res = _progressByTic * _progressTic;
//cout << netgen::multithread.task << " " << _progressTic << " " << res << endl;
} }
return res; return Min ( res, 0.98 );
} }
//============================================================================= //=============================================================================

View File

@ -77,7 +77,7 @@ class NETGENPLUGIN_EXPORT NETGENPlugin_NETGEN_3D: public SMESH_3D_Algo
const NETGENPlugin_Hypothesis * _hypParameters; const NETGENPlugin_Hypothesis * _hypParameters;
const StdMeshers_MaxElementVolume* _hypMaxElementVolume; const StdMeshers_MaxElementVolume* _hypMaxElementVolume;
const StdMeshers_ViscousLayers* _viscousLayersHyp; const StdMeshers_ViscousLayers* _viscousLayersHyp;
bool _optimizationStarted; double _progressByTic;
}; };
#endif #endif