#16914 EDF 19401 - Wrong quadratic mesh (bis)

Bug: SetEventListener() not called when a sub-algo assigned
This commit is contained in:
eap 2019-05-07 13:30:06 +03:00
parent ecea056f61
commit eacfc191eb
4 changed files with 27 additions and 13 deletions

View File

@ -17,7 +17,7 @@ hypothesis.
:align: center :align: center
.. centered:: .. centered::
A mesh of a river model to the left and of a ring-face to the right A mesh of a river model (to the left) and of a ring-face (to the right)
The algorithm provides proper shape of quadrangles by constructing Medial The algorithm provides proper shape of quadrangles by constructing Medial
Axis between sinuous borders of the face and using it to Axis between sinuous borders of the face and using it to

View File

@ -878,8 +878,11 @@ SMESH_Hypothesis::Hypothesis_Status
const SMESH_Hypothesis * prevAlgo = _father->GetHypothesis( this, f, true ); const SMESH_Hypothesis * prevAlgo = _father->GetHypothesis( this, f, true );
if (prevAlgo && if (prevAlgo &&
string( algo->GetName()) != prevAlgo->GetName()) string( algo->GetName()) != prevAlgo->GetName())
{
oldAlgoState = NO_ALGO; // force setting event listener (#16648)
modifiedHyp = true; modifiedHyp = true;
} }
}
else else
setAlgoState(MISSING_HYP); setAlgoState(MISSING_HYP);
break; break;

View File

@ -758,13 +758,25 @@ protected:
void StdMeshers_RadialQuadrangle_1D2D::SubmeshRestored(SMESH_subMesh* faceSubMesh) void StdMeshers_RadialQuadrangle_1D2D::SubmeshRestored(SMESH_subMesh* faceSubMesh)
{ {
if ( !faceSubMesh->IsEmpty() ) if ( !faceSubMesh->IsEmpty() )
SetEventListener( faceSubMesh );
}
//=======================================================================
/*!
* \brief Sets event listener to a submesh
* \param subMesh - submesh where algo is set
*
* This method is called when a submesh gets HYP_OK algo_state.
*/
//=======================================================================
void StdMeshers_RadialQuadrangle_1D2D::SetEventListener(SMESH_subMesh* faceSubMesh)
{ {
for ( TopExp_Explorer e( faceSubMesh->GetSubShape(), TopAbs_EDGE ); e.More(); e.Next() ) for ( TopExp_Explorer e( faceSubMesh->GetSubShape(), TopAbs_EDGE ); e.More(); e.Next() )
{ {
TEdgeMarker::markEdge( TopoDS::Edge( e.Current() ), faceSubMesh ); TEdgeMarker::markEdge( TopoDS::Edge( e.Current() ), faceSubMesh );
} }
} }
}
//======================================================================= //=======================================================================
//function : Compute //function : Compute

View File

@ -50,14 +50,13 @@ public:
virtual bool Evaluate(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape, virtual bool Evaluate(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape,
MapShapeNbElems& aResMap); MapShapeNbElems& aResMap);
/*!
* \brief Allow algo to do something after persistent restoration // Allow algo to do something after persistent restoration
* \param subMesh - restored submesh
*
* This method is called only if a submesh has HYP_OK algo_state.
*/
virtual void SubmeshRestored(SMESH_subMesh* subMesh); virtual void SubmeshRestored(SMESH_subMesh* subMesh);
// Sets event listener to a submesh
virtual void SetEventListener(SMESH_subMesh* subMesh);
virtual bool IsApplicableToShape(const TopoDS_Shape & shape, bool toCheckAll) const virtual bool IsApplicableToShape(const TopoDS_Shape & shape, bool toCheckAll) const
{ {
return IsApplicable( shape, toCheckAll ); return IsApplicable( shape, toCheckAll );