SALOME - SMESH
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
SMESH_HypoFilter.hxx
Go to the documentation of this file.
1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 // SMESH SMESH : implementaion of SMESH idl descriptions
23 // File : SMESH_HypoFilter.hxx
24 // Module : SMESH
25 // $Header: /home/server/cvs/SMESH/SMESH_SRC/src/SMESH/SMESH_HypoFilter.hxx,v 1.6.2.2 2008/11/27 12:25:15 abd Exp $
26 //
27 #ifndef SMESH_HypoFilter_HeaderFile
28 #define SMESH_HypoFilter_HeaderFile
29 
30 #include "SMESH_SMESH.hxx"
31 
32 // ===========================
33 // Filter of SMESH_Hypothesis
34 // ===========================
35 
36 #include <list>
37 #include <string>
38 #include <TopoDS_Shape.hxx>
39 
40 class SMESH_HypoFilter;
41 class SMESH_Hypothesis;
42 
44  public:
45  virtual bool IsOk(const SMESH_Hypothesis* aHyp,
46  const TopoDS_Shape& aShape) const = 0;
47  // check aHyp or/and aShape it is assigned to
48  virtual ~SMESH_HypoPredicate() {}
49  private:
51  friend class SMESH_HypoFilter;
52 };
53 
55 {
56  public:
57  // Create and add predicates.
58  // Added predicates will be destroyed by filter when it dies
60  SMESH_HypoFilter( SMESH_HypoPredicate* aPredicate, bool notNagate = true );
61  // notNagate==false means !aPredicate->IsOk()
62  SMESH_HypoFilter & Init ( SMESH_HypoPredicate* aPredicate, bool notNagate = true );
63  SMESH_HypoFilter & And ( SMESH_HypoPredicate* aPredicate );
64  SMESH_HypoFilter & AndNot( SMESH_HypoPredicate* aPredicate );
65  SMESH_HypoFilter & Or ( SMESH_HypoPredicate* aPredicate );
66  SMESH_HypoFilter & OrNot ( SMESH_HypoPredicate* aPredicate );
67 
68  // Create predicates
69  static SMESH_HypoPredicate* IsAlgo();
70  static SMESH_HypoPredicate* IsAuxiliary();
71  static SMESH_HypoPredicate* IsApplicableTo(const TopoDS_Shape& theShape);
72  static SMESH_HypoPredicate* IsAssignedTo(const TopoDS_Shape& theShape);
73  static SMESH_HypoPredicate* Is(const SMESH_Hypothesis* theHypo);
74  static SMESH_HypoPredicate* IsGlobal(const TopoDS_Shape& theMainShape);
75  static SMESH_HypoPredicate* IsMoreLocalThan(const TopoDS_Shape& theShape);
76  static SMESH_HypoPredicate* HasName(const std::string & theName);
77  static SMESH_HypoPredicate* HasDim(const int theDim);
78  static SMESH_HypoPredicate* HasType(const int theHypType);
79 
83  bool IsOk (const SMESH_Hypothesis* aHyp,
84  const TopoDS_Shape& aShape) const;
88  bool IsAny() const { return myPredicates.empty(); }
89 
91 
92 
93  protected:
94  // fields
95 
96  std::list<SMESH_HypoPredicate*> myPredicates;
97 
98  // private methods
99  public:
100  enum Logical { AND, AND_NOT, OR, OR_NOT };
101  enum Comparison { EQUAL, NOT_EQUAL, MORE, LESS };
102  protected:
104 
105  void add( Logical bool_op, SMESH_HypoPredicate* pred )
106  {
107  if ( pred ) {
108  pred->_logical_op = bool_op;
109  myPredicates.push_back( pred );
110  }
111  }
112 
113  // predicates implementation
114 
115  template <typename TValue>
118  TValue _val;
119  virtual TValue Value(const SMESH_Hypothesis* aHyp) const = 0;
120  virtual bool IsOk(const SMESH_Hypothesis* aHyp, const TopoDS_Shape& ) const
121  {
122  if ( _comp == EQUAL ) return _val == Value( aHyp );
123  else if ( _comp == NOT_EQUAL ) return _val != Value( aHyp );
124  else if ( _comp == MORE ) return _val < Value( aHyp );
125  else return _val > Value( aHyp );
126  }
127  };
128 
130  std::string _name;
131  NamePredicate( std::string name ): _name(name){}
132  bool IsOk(const SMESH_Hypothesis* aHyp,
133  const TopoDS_Shape& aShape) const;
134  };
135 
136  struct TypePredicate : public templPredicate< int > {
137  TypePredicate( Comparison comp, int hypType )
138  { _comp = comp; _val = hypType; }
139  int Value( const SMESH_Hypothesis* aHyp ) const;
140  };
141 
142  struct DimPredicate : public templPredicate< int > {
143  DimPredicate( Comparison comp, int dim )
144  { _comp = comp; _val = dim; }
145  int Value( const SMESH_Hypothesis* aHyp ) const;
146  };
147 
150  ApplicablePredicate( const TopoDS_Shape& theShape );
151  bool IsOk(const SMESH_Hypothesis* aHyp,
152  const TopoDS_Shape& aShape) const;
153  };
154 
157  InstancePredicate( const SMESH_Hypothesis* hypo ):_hypo(hypo){}
158  bool IsOk(const SMESH_Hypothesis* aHyp,
159  const TopoDS_Shape& aShape) const;
160  };
161 
164  IsAssignedToPredicate( const TopoDS_Shape& mainShape ):_mainShape(mainShape){}
165  bool IsOk(const SMESH_Hypothesis* aHyp,
166  const TopoDS_Shape& aShape) const;
167  };
168 
170  TopAbs_ShapeEnum _shapeType;
171  IsMoreLocalThanPredicate( const TopoDS_Shape& shape ):_shapeType(shape.ShapeType()){}
172  bool IsOk(const SMESH_Hypothesis* aHyp,
173  const TopoDS_Shape& aShape) const;
174  };
175 
177  bool IsOk(const SMESH_Hypothesis* aHyp,
178  const TopoDS_Shape& aShape) const;
179  };
180 
181 };
182 
183 
184 #endif
IsMoreLocalThanPredicate(const TopoDS_Shape &shape)
virtual bool IsOk(const SMESH_Hypothesis *aHyp, const TopoDS_Shape &) const
bool IsAny() const
return true if contains no predicates
std::list< SMESH_HypoPredicate * > myPredicates
InstancePredicate(const SMESH_Hypothesis *hypo)
TypePredicate(Comparison comp, int hypType)
SMESH_HypoFilter(const SMESH_HypoFilter &other)
DimPredicate(Comparison comp, int dim)
IsAssignedToPredicate(const TopoDS_Shape &mainShape)
void add(Logical bool_op, SMESH_HypoPredicate *pred)
friend class SMESH_HypoFilter
virtual bool IsOk(const SMESH_Hypothesis *aHyp, const TopoDS_Shape &aShape) const =0
#define SMESH_EXPORT