Salome HOME
Merge from V6_5_BR 05/06/2012
[modules/smesh.git] / src / SMESH / SMESH_HypoFilter.hxx
index 79825295b63ecf13c6091f03bfeff6daa76ea09f..b4ace7d2a2434ed538024baf67ac90d6ab67b083 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2011  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include <list>
 #include <string>
 #include <TopoDS_Shape.hxx>
+#include <TopTools_MapOfShape.hxx>
 
 class SMESH_HypoFilter;
 class SMESH_Hypothesis;
+class SMESH_Mesh;
 
 class SMESH_EXPORT SMESH_HypoPredicate {
  public:
@@ -73,7 +75,7 @@ class SMESH_EXPORT SMESH_HypoFilter: public SMESH_HypoPredicate
   static SMESH_HypoPredicate* Is(const SMESH_Hypothesis* theHypo);
   static SMESH_HypoPredicate* IsGlobal(const TopoDS_Shape& theMainShape);
   static SMESH_HypoPredicate* IsMoreLocalThan(const TopoDS_Shape& theShape,
-                                              const TopoDS_Shape& theShapeToMesh);
+                                              const SMESH_Mesh&   theMesh);
   static SMESH_HypoPredicate* HasName(const std::string & theName);
   static SMESH_HypoPredicate* HasDim(const int theDim);
   static SMESH_HypoPredicate* HasType(const int theHypType);
@@ -170,12 +172,15 @@ class SMESH_EXPORT SMESH_HypoFilter: public SMESH_HypoPredicate
   };
         
   struct IsMoreLocalThanPredicate : public SMESH_HypoPredicate {
-    TopoDS_Shape _shape, _shapeToMesh;
+    TopoDS_Shape        _shape;
+    const SMESH_Mesh&   _mesh;
+    TopTools_MapOfShape _preferableShapes;
     IsMoreLocalThanPredicate( const TopoDS_Shape& shape,
-                              const TopoDS_Shape& shapeToMesh )
-      :_shape(shape),_shapeToMesh(shapeToMesh){}
+                              const SMESH_Mesh&   mesh )
+      :_shape(shape),_mesh(mesh) { findPreferable(); }
     bool IsOk(const SMESH_Hypothesis* aHyp,
               const TopoDS_Shape&     aShape) const;
+    void findPreferable();
   };
         
   struct IsAuxiliaryPredicate : public SMESH_HypoPredicate {