- faceSM->ComputeStateEngine( SMESH_subMesh::COMPUTE );
- if ( !faceSM->IsEmpty() )
- meshedFaces.push_front( face ); // higher priority
- else
- faceSM->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
+ int nbFaces = faceSM->GetSubMeshDS()->NbElements();
+ if ( prevNbFaces < nbFaces )
+ {
+ if ( !meshedFaces.empty() ) meshedFaces.pop_back();
+ meshedFaces.push_back( face ); // lower priority
+ prevNbFaces = nbFaces;
+ }
+ }
+ else
+ {
+ bool allSubMeComputed = true;
+ SMESH_subMeshIteratorPtr smIt = faceSM->getDependsOnIterator(false,true);
+ while ( smIt->more() && allSubMeComputed )
+ allSubMeComputed = smIt->next()->IsMeshComputed();
+ if ( allSubMeComputed )
+ {
+ faceSM->ComputeStateEngine( SMESH_subMesh::COMPUTE );
+ if ( !faceSM->IsEmpty() ) {
+ meshedFaces.push_front( face ); // higher priority
+ break;
+ }
+ else {
+ faceSM->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
+ }
+ }