Compute Progress bar

+  double GetComputeProgress() const;
+  SMESH_Hypothesis * GetHypothesis(const int aHypID) const;
This commit is contained in:
eap 2013-07-03 16:10:31 +00:00
parent 1481fb61da
commit ffa2f0be82
2 changed files with 76 additions and 12 deletions

View File

@ -592,19 +592,9 @@ SMESH_Hypothesis::Hypothesis_Status
if ( !subMesh || !subMesh->GetId())
return SMESH_Hypothesis::HYP_BAD_SUBSHAPE;
StudyContextStruct *sc = _gen->GetStudyContext(_studyId);
if (sc->mapHypothesis.find(anHypId) == sc->mapHypothesis.end())
{
if(MYDEBUG) MESSAGE("Hypothesis ID does not give an hypothesis");
if(MYDEBUG) {
SCRUTE(_studyId);
SCRUTE(anHypId);
}
SMESH_Hypothesis *anHyp = GetHypothesis( anHypId );
if ( !anHyp )
throw SALOME_Exception(LOCALIZED("hypothesis does not exist"));
}
SMESH_Hypothesis *anHyp = sc->mapHypothesis[anHypId];
MESSAGE( "SMESH_Mesh::AddHypothesis " << anHyp->GetName() );
bool isGlobalHyp = IsMainShape( aSubShape );
@ -876,6 +866,22 @@ int SMESH_Mesh::GetHypotheses(const TopoDS_Shape & aSubShape,
return nbHyps;
}
//================================================================================
/*!
* \brief Return a hypothesis by its ID
*/
//================================================================================
SMESH_Hypothesis * SMESH_Mesh::GetHypothesis(const int anHypId) const
{
StudyContextStruct *sc = _gen->GetStudyContext(_studyId);
if (sc->mapHypothesis.find(anHypId) == sc->mapHypothesis.end())
return false;
SMESH_Hypothesis *anHyp = sc->mapHypothesis[anHypId];
return anHyp;
}
//=============================================================================
/*!
*
@ -1301,6 +1307,12 @@ void SMESH_Mesh::ExportMED(const char * file,
myWriter.Perform();
}
//================================================================================
/*!
* \brief Export the mesh to a SAUV file
*/
//================================================================================
void SMESH_Mesh::ExportSAUV(const char *file,
const char* theMeshName,
bool theAutoGroups)
@ -1445,6 +1457,54 @@ void SMESH_Mesh::ExportGMF(const char * file,
myWriter.Perform();
}
//================================================================================
/*!
* \brief Return a ratio of "compute cost" of computed sub-meshes to the whole
* "compute cost".
*/
//================================================================================
double SMESH_Mesh::GetComputeProgress() const
{
double totalCost = 1e-100, computedCost = 0;
const SMESH_subMesh* curSM = _gen->GetCurrentSubMesh();
// get cost of already treated sub-meshes
if ( SMESH_subMesh* mainSM = GetSubMeshContaining( 1 ))
{
SMESH_subMeshIteratorPtr smIt = mainSM->getDependsOnIterator(/*includeSelf=*/true);
while ( smIt->more() )
{
SMESH_subMesh* sm = smIt->next();
const int smCost = sm->GetComputeCost();
totalCost += smCost;
if ( sm != curSM &&
( !sm->IsEmpty() ||
sm->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE ))
{
computedCost += smCost;
}
}
}
// get progress of a current algo
if ( curSM )
if ( SMESH_Algo* algo = curSM->GetAlgo() )
{
double rate = algo->GetProgress();
if ( 0. < rate && rate < 1.001 )
{
//cout << " rate: " << rate << " cost " << algo->GetComputeCost() << endl;
computedCost += rate * algo->GetComputeCost();
}
else
{
computedCost += algo->GetProgressByTic() * algo->GetComputeCost();
}
}
//cout << "Total: " << totalCost << " progress: " << computedCost / totalCost << endl;
return computedCost / totalCost;
}
//================================================================================
/*!
* \brief Return number of nodes in the mesh

View File

@ -148,6 +148,8 @@ public:
const bool andAncestors,
std::list< TopoDS_Shape > * assignedTo=0) const;
SMESH_Hypothesis * GetHypothesis(const int aHypID) const;
const std::list<SMESHDS_Command*> & GetLog() throw(SALOME_Exception);
void ClearLog() throw(SALOME_Exception);
@ -253,6 +255,8 @@ public:
const char* theMeshName = NULL,
bool theAutoGroups = true) throw(SALOME_Exception);
double GetComputeProgress() const;
int NbNodes() const throw(SALOME_Exception);
int Nb0DElements() const throw(SALOME_Exception);
int NbBalls() const throw(SALOME_Exception);