Salome HOME
Erroneous cases in SALOME mode: Sketch, start sub-feature operation[some control...
[modules/shaper.git] / src / GeomAPI / GeomAPI_ShapeExplorer.h
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 // File:        GeomAPI_ShapeExplorer.h
4 // Created:     5 June 2015
5 // Author:      Dmitry Bobylev
6
7 #ifndef GeomAPI_ShapeExplorer_H_
8 #define GeomAPI_ShapeExplorer_H_
9
10 #include <GeomAPI.h>
11 #include <GeomAPI_Shape.h>
12
13 /** \class GeomAPI_ShapeExplorer
14  *  \ingroup DataModel
15  *  \brief This class is used to explore subshapes on shape.
16  */
17 class GeomAPI_ShapeExplorer : public GeomAPI_Interface
18 {
19 public:
20   /// Default constructor. Creates an empty explorer, becomes usefull after Init.
21   GEOMAPI_EXPORT
22   GeomAPI_ShapeExplorer();
23
24   /** \brief Constructs an explorer to search on theShape, for shapes of type toFind,
25    *  that are not part of a shape toAvoid. If the shape toAvoid is equal to GeomAPI_SHape::SHAPE,
26    *  or if it is the same as, or less complex than the shape toFind it has no effect on the search.
27       \param[in] toFind shape type to find.
28       \param[in] toAvoid shape type to avoid.
29    */
30   GEOMAPI_EXPORT
31   GeomAPI_ShapeExplorer(const std::shared_ptr<GeomAPI_Shape>& theShape,
32                         const GeomAPI_Shape::ShapeType toFind,
33                         const GeomAPI_Shape::ShapeType toAvoid = GeomAPI_Shape::SHAPE);
34
35   /** \brief Resets this explorer. It is initialized to search on theShape, for shapes of type toFind,
36    *  that are not part of a shape toAvoid. If the shape toAvoid is equal to GeomAPI_SHape::SHAPE,
37    *  or if it is the same as, or less complex than the shape toFind it has no effect on the search.
38       \param[in] toFind shape type to find.
39       \param[in] toAvoid shape type to avoid.
40    */
41   GEOMAPI_EXPORT
42   void init(const std::shared_ptr<GeomAPI_Shape>& theShape,
43             const GeomAPI_Shape::ShapeType toFind,
44             const GeomAPI_Shape::ShapeType toAvoid = GeomAPI_Shape::SHAPE);
45
46   /// \return true if there are more shapes in the exploration.
47   GEOMAPI_EXPORT
48   bool more() const;
49
50   /// Moves to the next Shape in the exploration or do nothing if there are no more shapes to explore.
51   GEOMAPI_EXPORT
52   void next();
53
54   /// \return the current shape in the exploration or empty pointer if this explorer has no more shapes to explore.
55   GEOMAPI_EXPORT
56   std::shared_ptr<GeomAPI_Shape> current();
57
58   /// Reinitialize the exploration with the original arguments.
59   GEOMAPI_EXPORT
60   void reinit();
61
62   /// \return the current depth of the exploration. 0 is the shape to explore itself.
63   GEOMAPI_EXPORT
64   int depth() const;
65
66   /// Clears the content of the explorer. It will return False on more().
67   GEOMAPI_EXPORT
68   void clear();
69
70 };
71
72 #endif