mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-04-02 04:04:29 +05:00
0019296: EDF 681 SMESH - Pre-evaluation of the number of elements before mesh
* Evaluate(): do not call algo->Evaluate() if needed submeshes failed to evaluate
This commit is contained in:
parent
cbc21f731e
commit
8d99b0dffe
@ -54,6 +54,8 @@
|
|||||||
#include <Standard_OutOfMemory.hxx>
|
#include <Standard_OutOfMemory.hxx>
|
||||||
#include <Standard_ErrorHandler.hxx>
|
#include <Standard_ErrorHandler.hxx>
|
||||||
|
|
||||||
|
#include <numeric>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
@ -1609,18 +1611,33 @@ bool SMESH_subMesh::Evaluate(MapShapeNbElems& aResMap)
|
|||||||
SMESH_Hypothesis::Hypothesis_Status hyp_status;
|
SMESH_Hypothesis::Hypothesis_Status hyp_status;
|
||||||
|
|
||||||
algo = gen->GetAlgo((*_father), _subShape);
|
algo = gen->GetAlgo((*_father), _subShape);
|
||||||
if(algo) {
|
if(algo && !aResMap.count(this) )
|
||||||
|
{
|
||||||
ret = algo->CheckHypothesis((*_father), _subShape, hyp_status);
|
ret = algo->CheckHypothesis((*_father), _subShape, hyp_status);
|
||||||
if (!ret) return false;
|
if (!ret) return false;
|
||||||
|
|
||||||
if ( !aResMap.count(this) )
|
if (_father->HasShapeToMesh() && algo->NeedDescretBoundary())
|
||||||
{
|
{
|
||||||
|
// check submeshes needed
|
||||||
|
bool subMeshEvaluated = true;
|
||||||
|
int dimToCheck = SMESH_Gen::GetShapeDim( _subShape ) - 1;
|
||||||
|
SMESH_subMeshIteratorPtr smIt = getDependsOnIterator(false,/*complexShapeFirst=*/true);
|
||||||
|
while ( smIt->more() && subMeshEvaluated )
|
||||||
|
{
|
||||||
|
SMESH_subMesh* sm = smIt->next();
|
||||||
|
int dim = SMESH_Gen::GetShapeDim( sm->GetSubShape() );
|
||||||
|
if (dim < dimToCheck) break; // the rest subMeshes are all of less dimension
|
||||||
|
const vector<int> & nbs = aResMap[ sm ];
|
||||||
|
subMeshEvaluated = (std::accumulate( nbs.begin(), nbs.end(), 0 ) > 0 );
|
||||||
|
}
|
||||||
|
if ( !subMeshEvaluated )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
_computeError = SMESH_ComputeError::New(COMPERR_OK,"",algo);
|
_computeError = SMESH_ComputeError::New(COMPERR_OK,"",algo);
|
||||||
ret = algo->Evaluate((*_father), _subShape, aResMap);
|
ret = algo->Evaluate((*_father), _subShape, aResMap);
|
||||||
|
|
||||||
aResMap.insert( make_pair( this,vector<int>(0)));
|
aResMap.insert( make_pair( this,vector<int>(0)));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user