Salome HOME
0021406: EDF 1975 NETGENPLUGIN: Submesh hypothesis not taken into account
authoreap <eap@opencascade.com>
Tue, 1 Nov 2011 12:16:50 +0000 (12:16 +0000)
committereap <eap@opencascade.com>
Tue, 1 Nov 2011 12:16:50 +0000 (12:16 +0000)
     Pass theShapeToMesh to IsMoreLocalThanPredicate

src/SMESH/SMESH_HypoFilter.cxx
src/SMESH/SMESH_HypoFilter.hxx

index 1bfef12493895cd40f8bf7d906d6e4ed8c2c1350..ce30933792ce6ecb681753a433cd503333865e47 100644 (file)
@@ -129,6 +129,9 @@ bool SMESH_HypoFilter::IsAssignedToPredicate::IsOk(const SMESH_Hypothesis* aHyp,
 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;
 
@@ -293,9 +296,10 @@ SMESH_HypoPredicate* SMESH_HypoFilter::IsApplicableTo(const TopoDS_Shape& theSha
 //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);
 }
 
 //=======================================================================
index 31327f1ec105b25af6b11ee765bfc9023f761ace..79825295b63ecf13c6091f03bfeff6daa76ea09f 100644 (file)
@@ -72,7 +72,8 @@ class SMESH_EXPORT SMESH_HypoFilter: public SMESH_HypoPredicate
   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);
@@ -169,8 +170,10 @@ class SMESH_EXPORT SMESH_HypoFilter: public SMESH_HypoPredicate
   };
         
   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;
   };