Salome HOME
Merge from BR_V5_DEV 16Feb09
[modules/smesh.git] / src / SMESHFiltersSelection / SMESH_NumberFilter.hxx
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 //  File   : SMESH_NumberFilter.hxx
23 //  Module : SMESH
24 //
25 #ifndef _SMESH_NumberFilter_HeaderFile
26 #define _SMESH_NumberFilter_HeaderFile
27
28 #include "SMESH_Type.h"
29
30 #include "SUIT_SelectionFilter.h"
31
32 #include <TopAbs_ShapeEnum.hxx>
33 #include <TColStd_MapOfInteger.hxx>
34
35 #include <SALOMEconfig.h>
36 #include CORBA_SERVER_HEADER(GEOM_Gen)
37
38 #include <string>
39
40 class SUIT_DataOwner;
41
42 /*!
43  *  Class       : SMESH_NumberFilter
44  *  Description : Filter for geom or smesh objects.
45  *                Filter geom objects by number of subshapes of the given type
46  *                Parameters of constructor:
47  *                * theSubShapeType - Type of subshape
48  *                * theNumber       - Number of subshapes. Object is selected if it contains
49  *                                    theNumber of theSubShapeType sub-shapes, or at least
50  *                                    one theSubShapeType, provided that theNumber==0
51  *                * theShapeType    - This map specifies types of object to be selected
52  *                * theMainObject   - Sub-shapes of this object is selected only
53  *                * theIsClosedOnly - Closed shapes is selected if this parameter is true
54  */
55 class SMESHFILTERSSELECTION_EXPORT SMESH_NumberFilter : public SUIT_SelectionFilter
56 {
57  public:
58   SMESH_NumberFilter (const char*            theKind,
59                       const TopAbs_ShapeEnum theSubShapeType,
60                       const int              theNumber,
61                       const TopAbs_ShapeEnum theShapeType = TopAbs_SHAPE,
62                       GEOM::GEOM_Object_ptr  theMainObj = GEOM::GEOM_Object::_nil(),
63                       const bool             theIsClosedOnly = false );
64
65   SMESH_NumberFilter (const char*                 theKind,
66                       const TopAbs_ShapeEnum      theSubShapeType,
67                       const int                   theNumber,
68                       const TColStd_MapOfInteger& theShapeTypes,
69                       GEOM::GEOM_Object_ptr       theMainObj = GEOM::GEOM_Object::_nil(),
70                       const bool                  theIsClosedOnly = false );
71
72   virtual ~SMESH_NumberFilter();
73
74   virtual bool isOk (const SUIT_DataOwner*) const;
75
76   void SetSubShapeType (const TopAbs_ShapeEnum);
77   void SetNumber       (const int);
78   void SetClosedOnly   (const bool);
79   void SetShapeType    (const TopAbs_ShapeEnum);
80   void SetShapeTypes   (const TColStd_MapOfInteger&);
81   void SetMainShape    (GEOM::GEOM_Object_ptr);
82
83  private:
84   GEOM::GEOM_Object_ptr getGeom (const SUIT_DataOwner*, const bool extractReference = true ) const;
85
86  private:
87   std::string           myKind;
88   TopAbs_ShapeEnum      mySubShapeType;
89   int                   myNumber;
90   bool                  myIsClosedOnly;
91   TColStd_MapOfInteger  myShapeTypes;
92   GEOM::GEOM_Object_var myMainObj;
93 };
94
95 #endif