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 );
SMESH_Hypothesis *anHyp = sc->mapHypothesis[anHypId];
if(MYDEBUG) {
- int hypType = anHyp->GetType();
- SCRUTE(hypType);
+ SCRUTE(anHyp->GetType());
}
// shape
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;
+}
+
//=============================================================================
/*!
*
const char* theMeshName,
bool theAutoGroups,
int theVersion,
- const SMESHDS_Mesh* meshPart)
+ const SMESHDS_Mesh* meshPart,
+ bool theAutoDimension)
throw(SALOME_Exception)
{
Unexpect aCatch(SalomeException);
DriverMED_W_SMESHDS_Mesh myWriter;
- myWriter.SetFile ( file, MED::EVersion(theVersion) );
- myWriter.SetMesh ( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS );
+ myWriter.SetFile ( file, MED::EVersion(theVersion) );
+ myWriter.SetMesh ( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS );
+ myWriter.SetAutoDimension( theAutoDimension );
if ( !theMeshName )
- myWriter.SetMeshId ( _id );
+ myWriter.SetMeshId ( _id );
else {
- myWriter.SetMeshId ( -1 );
- myWriter.SetMeshName( theMeshName );
+ myWriter.SetMeshId ( -1 );
+ myWriter.SetMeshName ( theMeshName );
}
if ( theAutoGroups ) {
myWriter.Perform();
}
+//================================================================================
+/*!
+ * \brief Export the mesh to a SAUV file
+ */
+//================================================================================
+
void SMESH_Mesh::ExportSAUV(const char *file,
const char* theMeshName,
bool theAutoGroups)
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();
+ if ( sm->GetComputeState() != SMESH_subMesh::NOT_READY )
+ {
+ 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 if ( curSM->IsEmpty() )
+ {
+ computedCost += algo->GetProgressByTic() * algo->GetComputeCost();
+ }
+ else
+ {
+ computedCost += 0.99 * algo->GetComputeCost();
+ }
+ }
+ //cout << "Total: " << totalCost << " progress: " << computedCost / totalCost << endl;
+ return computedCost / totalCost;
+}
+
//================================================================================
/*!
* \brief Return number of nodes in the mesh