Salome HOME
c10f497e191a5e478ee90902bd4b4fec7508dcb7
[modules/shaper.git] / src / ModelAPI / ModelAPI_CompositeFeature.h
1 // Copyright (C) 2014-2023  CEA, EDF
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 MODELAPI_COMPOSITEFEATURE_H_
21 #define MODELAPI_COMPOSITEFEATURE_H_
22
23 #include "ModelAPI.h"
24 #include "ModelAPI_Feature.h"
25
26 /**\class ModelAPI_CompositeFeature
27  * \ingroup DataModel
28  * \brief Feature that consists of other features: like sketcher
29  * with edges inside. It just allows to add a feature to this feature only
30  * instead of adding in both document and this feature.
31  */
32 class ModelAPI_CompositeFeature : public ModelAPI_Feature
33 {
34 public:
35   MODELAPI_EXPORT virtual ~ModelAPI_CompositeFeature();
36
37   /// Adds feature to the sketch and to its document
38   virtual std::shared_ptr<ModelAPI_Feature> addFeature(std::string theID) = 0;
39
40   /// Returns the number of sub-elements
41   virtual int numberOfSubs(bool forTree = false) const = 0;
42
43   /// Returns the sub-feature by zero-base index
44   virtual std::shared_ptr<ModelAPI_Feature> subFeature(const int theIndex,
45                                                        bool forTree = false) = 0;
46
47   /// Returns the sub-feature unique identifier in this composite feature by zero-base index
48   virtual int subFeatureId(const int theIndex) const = 0;
49
50   /// Returns true if feature or result belong to this composite feature as subs
51   virtual bool isSub(ObjectPtr theObject) const = 0;
52
53   /// This method to inform that sub-feature is removed and must be removed from the internal data
54   /// structures of the owner (the remove from the document will be done outside just after)
55   virtual void removeFeature(std::shared_ptr<ModelAPI_Feature> theFeature) = 0;
56
57   /// in addition removes all subs
58   MODELAPI_EXPORT virtual void erase();
59 };
60
61 //! Pointer on the composite feature object
62 typedef std::shared_ptr<ModelAPI_CompositeFeature> CompositeFeaturePtr;
63
64 #endif