Salome HOME
Copyright update 2022
[modules/shaper.git] / src / ModelHighAPI / ModelHighAPI_Selection.h
1 // Copyright (C) 2014-2022  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #ifndef SRC_MODELHIGHAPI_MODELHIGHAPI_SELECTION_H_
21 #define SRC_MODELHIGHAPI_MODELHIGHAPI_SELECTION_H_
22
23 //--------------------------------------------------------------------------------------
24 #include "ModelHighAPI.h"
25
26 #include <list>
27 #include <memory>
28 #include <string>
29 #include <utility>
30 //--------------------------------------------------------------------------------------
31 class GeomAPI_Pnt;
32 class GeomAPI_Shape;
33 class ModelAPI_AttributeSelection;
34 class ModelAPI_AttributeSelectionList;
35 class ModelAPI_FiltersFeature;
36 class ModelAPI_Result;
37 //--------------------------------------------------------------------------------------
38 typedef std::pair<std::shared_ptr<ModelAPI_Result>, std::shared_ptr<GeomAPI_Shape> >
39   ResultSubShapePair;
40 typedef std::pair<std::string, std::wstring> TypeSubShapeNamePair;
41 typedef std::pair<std::string, std::shared_ptr<GeomAPI_Pnt> > TypeInnerPointPair;
42 typedef std::pair<std::string, std::pair<std::wstring, int> > TypeWeakNamingPair;
43 //--------------------------------------------------------------------------------------
44 /**\class ModelHighAPI_Selection
45  * \ingroup CPPHighAPI
46  * \brief Class for filling ModelAPI_AttributeSelection
47  */
48 class ModelHighAPI_Selection
49 {
50 public:
51   enum VariantType {
52     VT_Empty,
53     VT_ResultSubShapePair,
54     VT_TypeSubShapeNamePair,
55     VT_TypeInnerPointPair,
56     VT_WeakNamingPair,
57     VT_Filtering
58   };
59
60 public:
61   /// Default constructor with empty selection.
62   MODELHIGHAPI_EXPORT
63   ModelHighAPI_Selection();
64
65   /// Constructor for result and sub-shape
66   MODELHIGHAPI_EXPORT
67   ModelHighAPI_Selection(const std::shared_ptr<ModelAPI_Result>& theContext,
68                          const std::shared_ptr<GeomAPI_Shape>& theSubShape =
69                          std::shared_ptr<GeomAPI_Shape>());
70   /// Constructor for sub-shape by the textual Name
71   MODELHIGHAPI_EXPORT
72   ModelHighAPI_Selection(const std::string& theType,
73                          const std::wstring& theSubShapeName);
74
75   /// Constructor for sub-shape by inner point coordinates
76   MODELHIGHAPI_EXPORT
77   ModelHighAPI_Selection(const std::string& theType,
78                          const std::shared_ptr<GeomAPI_Pnt>& theSubShapeInnerPoint);
79
80   /// Constructor for sub-shape by inner point coordinates given by a tuple
81   MODELHIGHAPI_EXPORT
82   ModelHighAPI_Selection(const std::string& theType,
83                          const std::list<double>& theSubShapeInnerPoint);
84
85
86   /// Constructor for sub-shape by weak naming identifier
87   MODELHIGHAPI_EXPORT
88     ModelHighAPI_Selection(const std::string& theType,
89       const std::wstring& theContextName, const int theIndex);
90
91   /// Destructor
92   MODELHIGHAPI_EXPORT
93   virtual ~ModelHighAPI_Selection();
94
95   /// Fill attribute values
96   MODELHIGHAPI_EXPORT virtual
97     void fillAttribute(const std::shared_ptr<ModelAPI_AttributeSelection> & theAttribute) const;
98
99   /// Append to list attribute
100   MODELHIGHAPI_EXPORT virtual
101     void appendToList(const std::shared_ptr<ModelAPI_AttributeSelectionList> & theAttribute) const;
102
103   /// \return variant type.
104   MODELHIGHAPI_EXPORT
105   virtual VariantType variantType() const;
106
107   /// \return pair of result and sub-shape.
108   MODELHIGHAPI_EXPORT
109   virtual ResultSubShapePair resultSubShapePair() const;
110
111   /// \return pair of sub-shape type and name.
112   MODELHIGHAPI_EXPORT
113   virtual TypeSubShapeNamePair typeSubShapeNamePair() const;
114
115   /// \return pair of sub-shape type and inner point to identify sub-shape.
116   MODELHIGHAPI_EXPORT
117   virtual TypeInnerPointPair typeInnerPointPair() const;
118
119   /// \return pair of sub-shape type and pair of context name and sub-shape index.
120   MODELHIGHAPI_EXPORT
121     virtual TypeWeakNamingPair typeWeakNamingPair() const;
122
123   /// \return shape type.
124   MODELHIGHAPI_EXPORT
125   virtual std::string shapeType() const;
126
127   /// Shortcut for result()->data()->setName()
128   MODELHIGHAPI_EXPORT
129   void setName(const std::wstring& theName);
130
131   /// Shortcut for result()->data()->name()
132   MODELHIGHAPI_EXPORT
133   std::wstring name() const;
134
135   /// Change result's color
136   MODELHIGHAPI_EXPORT
137   void setColor(int theRed = 0, int theGreen = 0, int theBlue = 0, bool random = false);
138
139   /// Change result's deflection
140   MODELHIGHAPI_EXPORT
141   void setDeflection(double theValue);
142
143   /// Change result's transparency
144   MODELHIGHAPI_EXPORT
145   void setTransparency(double theValue);
146
147   /// Returns the number of sub-elements.
148   MODELHIGHAPI_EXPORT
149   int numberOfSubs() const;
150
151   /// Returns the sub-result by zero-base index.
152   MODELHIGHAPI_EXPORT
153   ModelHighAPI_Selection subResult(int theIndex) const;
154
155 protected:
156   VariantType myVariantType;
157   ResultSubShapePair myResultSubShapePair;
158   TypeSubShapeNamePair myTypeSubShapeNamePair;
159   TypeInnerPointPair myTypeInnerPointPair;
160   TypeWeakNamingPair myWeakNamingPair;
161   std::shared_ptr<ModelAPI_FiltersFeature> myFilterFeature;
162 };
163
164 //--------------------------------------------------------------------------------------
165 //--------------------------------------------------------------------------------------
166 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_SELECTION_H_ */