bool SMESH_HypoFilter::IsMoreLocalThanPredicate::IsOk(const SMESH_Hypothesis* aHyp,
const TopoDS_Shape& aShape) const
{
+ if ( aShape.IsSame( _shapeToMesh ))
+ return false; // aHyp is global
+
if ( SMESH_MesherHelper::IsSubShape( aShape, /*mainShape=*/_shape ))
return true;
//purpose :
//=======================================================================
-SMESH_HypoPredicate* SMESH_HypoFilter::IsMoreLocalThan(const TopoDS_Shape& theShape)
+SMESH_HypoPredicate* SMESH_HypoFilter::IsMoreLocalThan(const TopoDS_Shape& theShape,
+ const TopoDS_Shape& theShapeToMesh)
{
- return new IsMoreLocalThanPredicate( theShape );
+ return new IsMoreLocalThanPredicate( theShape, theShapeToMesh);
}
//=======================================================================
static SMESH_HypoPredicate* IsAssignedTo(const TopoDS_Shape& theShape);
static SMESH_HypoPredicate* Is(const SMESH_Hypothesis* theHypo);
static SMESH_HypoPredicate* IsGlobal(const TopoDS_Shape& theMainShape);
- static SMESH_HypoPredicate* IsMoreLocalThan(const TopoDS_Shape& theShape);
+ static SMESH_HypoPredicate* IsMoreLocalThan(const TopoDS_Shape& theShape,
+ const TopoDS_Shape& theShapeToMesh);
static SMESH_HypoPredicate* HasName(const std::string & theName);
static SMESH_HypoPredicate* HasDim(const int theDim);
static SMESH_HypoPredicate* HasType(const int theHypType);
};
struct IsMoreLocalThanPredicate : public SMESH_HypoPredicate {
- TopoDS_Shape _shape;
- IsMoreLocalThanPredicate( const TopoDS_Shape& shape ):_shape(shape){}
+ TopoDS_Shape _shape, _shapeToMesh;
+ IsMoreLocalThanPredicate( const TopoDS_Shape& shape,
+ const TopoDS_Shape& shapeToMesh )
+ :_shape(shape),_shapeToMesh(shapeToMesh){}
bool IsOk(const SMESH_Hypothesis* aHyp,
const TopoDS_Shape& aShape) const;
};