Salome HOME
Issue #2622: Weak naming
[modules/shaper.git] / src / ModelHighAPI / ModelHighAPI_Selection.h
1 // Copyright (C) 2014-2017  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
18 // email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
19 //
20
21 #ifndef SRC_MODELHIGHAPI_MODELHIGHAPI_SELECTION_H_
22 #define SRC_MODELHIGHAPI_MODELHIGHAPI_SELECTION_H_
23
24 //--------------------------------------------------------------------------------------
25 #include "ModelHighAPI.h"
26
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_Result;
36 //--------------------------------------------------------------------------------------
37 typedef std::pair<std::shared_ptr<ModelAPI_Result>, std::shared_ptr<GeomAPI_Shape> >
38   ResultSubShapePair;
39 typedef std::pair<std::string, std::string> TypeSubShapeNamePair;
40 typedef std::pair<std::string, std::shared_ptr<GeomAPI_Pnt> > TypeInnerPointPair;
41 typedef std::pair<std::string, std::pair<std::string, int> > TypeWeakNamingPair;
42 //--------------------------------------------------------------------------------------
43 /**\class ModelHighAPI_Selection
44  * \ingroup CPPHighAPI
45  * \brief Class for filling ModelAPI_AttributeSelection
46  */
47 class ModelHighAPI_Selection
48 {
49 public:
50   enum VariantType {
51     VT_Empty,
52     VT_ResultSubShapePair,
53     VT_TypeSubShapeNamePair,
54     VT_TypeInnerPointPair,
55     VT_WeakNamingPair
56   };
57
58 public:
59   /// Default constructor with empty selection.
60   MODELHIGHAPI_EXPORT
61   ModelHighAPI_Selection();
62
63   /// Constructor for result and sub-shape
64   MODELHIGHAPI_EXPORT
65   ModelHighAPI_Selection(const std::shared_ptr<ModelAPI_Result>& theContext,
66                          const std::shared_ptr<GeomAPI_Shape>& theSubShape =
67                          std::shared_ptr<GeomAPI_Shape>());
68   /// Constructor for sub-shape by the textual Name
69   MODELHIGHAPI_EXPORT
70   ModelHighAPI_Selection(const std::string& theType,
71                          const std::string& theSubShapeName);
72
73   /// Constructor for sub-shape by inner point coordinates
74   MODELHIGHAPI_EXPORT
75   ModelHighAPI_Selection(const std::string& theType,
76                          const std::shared_ptr<GeomAPI_Pnt>& theSubShapeInnerPoint);
77
78
79   /// Constructor for sub-shape by weak naming identifier
80   MODELHIGHAPI_EXPORT
81     ModelHighAPI_Selection(const std::string& theType,
82       const std::string& theContextName, const int theIndex);
83
84   /// Destructor
85   MODELHIGHAPI_EXPORT
86   virtual ~ModelHighAPI_Selection();
87
88   /// Fill attribute values
89   MODELHIGHAPI_EXPORT virtual
90     void fillAttribute(const std::shared_ptr<ModelAPI_AttributeSelection> & theAttribute) const;
91
92   /// Append to list attribute
93   MODELHIGHAPI_EXPORT virtual
94     void appendToList(const std::shared_ptr<ModelAPI_AttributeSelectionList> & theAttribute) const;
95
96   /// \return variant type.
97   MODELHIGHAPI_EXPORT
98   virtual VariantType variantType() const;
99
100   /// \return pair of result and sub-shape.
101   MODELHIGHAPI_EXPORT
102   virtual ResultSubShapePair resultSubShapePair() const;
103
104   /// \return pair of sub-shape type and name.
105   MODELHIGHAPI_EXPORT
106   virtual TypeSubShapeNamePair typeSubShapeNamePair() const;
107
108   /// \return pair of sub-shape type and inner point to identify sub-shape.
109   MODELHIGHAPI_EXPORT
110   virtual TypeInnerPointPair typeInnerPointPair() const;
111
112   /// \return shape type.
113   MODELHIGHAPI_EXPORT
114   virtual std::string shapeType() const;
115
116   /// Shortcut for result()->data()->setName()
117   MODELHIGHAPI_EXPORT
118   void setName(const std::string& theName);
119
120   /// Shortcut for result()->data()->name()
121   MODELHIGHAPI_EXPORT
122   std::string name() const;
123
124   /// Change result's color
125   MODELHIGHAPI_EXPORT
126   void setColor(int theRed, int theGreen, int theBlue);
127
128   /// Change result's deflection
129   MODELHIGHAPI_EXPORT
130   void setDeflection(double theValue);
131
132   /// Change result's transparency
133   MODELHIGHAPI_EXPORT
134   void setTransparency(double theValue);
135
136   /// Returns the number of sub-elements.
137   MODELHIGHAPI_EXPORT
138   int numberOfSubs() const;
139
140   /// Returns the sub-result by zero-base index.
141   MODELHIGHAPI_EXPORT
142   ModelHighAPI_Selection subResult(int theIndex) const;
143
144 private:
145   VariantType myVariantType;
146   ResultSubShapePair myResultSubShapePair;
147   TypeSubShapeNamePair myTypeSubShapeNamePair;
148   TypeInnerPointPair myTypeInnerPointPair;
149   TypeWeakNamingPair myWeakNamingPair;
150 };
151
152 //--------------------------------------------------------------------------------------
153 //--------------------------------------------------------------------------------------
154 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_SELECTION_H_ */