Salome HOME
A unit test for the issue #1799
[modules/shaper.git] / src / Model / Model_AttributeSelection.h
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 // File:        Model_AttributeSelection.h
4 // Created:     8 May 2014
5 // Author:      Mikhail PONIKAROV
6
7 #ifndef Model_AttributeSelection_H_
8 #define Model_AttributeSelection_H_
9
10 #include "Model.h"
11 #include "Model_AttributeReference.h"
12 #include <ModelAPI_AttributeSelection.h>
13 #include <TDF_LabelMap.hxx>
14
15 class Model_AttributeSelectionList;
16
17 /**\class Model_AttributeSelection
18  * \ingroup DataModel
19  * \brief Attribute that contains reference to the sub-shape of some result, the selected shape.
20  */
21 class Model_AttributeSelection : public ModelAPI_AttributeSelection
22 {
23   Model_AttributeReference myRef;  ///< The reference functionality reusage
24   TDF_LabelMap myScope; ///< the map of valid labels for naming selection solving
25   /// temporarily storages to avoid keeping in the data structure if not needed
26   ResultPtr myTmpContext;
27   /// temporarily storages to avoid keeping in the data structure if not needed
28   std::shared_ptr<GeomAPI_Shape> myTmpSubShape;
29   /// Reference to the partent attribute, if any (to split selection compounds in issue 1799)
30   Model_AttributeSelectionList* myParent;
31 public:
32   /// Defines the result and its selected sub-shape
33   /// \param theContext object where the sub-shape was selected
34   /// \param theSubShape selected sub-shape (if null, the whole context is selected)
35   /// \param theTemporarily if it is true, do not store and name the added in the data framework
36   ///           (used to remove immideately, without the following updates)
37   MODEL_EXPORT virtual void setValue(
38     const ResultPtr& theContext, const std::shared_ptr<GeomAPI_Shape>& theSubShape,
39     const bool theTemporarily = false);
40
41   /// Reset temporary stored values
42   virtual void removeTemporaryValues();
43
44   /// Returns the selected subshape
45   MODEL_EXPORT virtual std::shared_ptr<GeomAPI_Shape> value();
46
47   /// Returns the context of the selection (the whole shape owner)
48   MODEL_EXPORT virtual ResultPtr context();
49
50   /// Sets the feature object
51   MODEL_EXPORT virtual void setObject(const std::shared_ptr<ModelAPI_Object>& theObject);
52
53   /// Updates the underlied selection due to the changes in the referenced objects
54   /// \returns false if update is failed
55   MODEL_EXPORT virtual bool update();
56
57   /// Returns a textual string of the selection
58   /// \param theDefaultValue a name, which is returned if the naming name can not be obtained
59   MODEL_EXPORT virtual std::string namingName(const std::string& theDefaultValue = "");
60
61   /// Returns an Id of the selection
62   /// NOTE: This method has been added for temporary export of groups towards old GEOM
63   /// It should then be removed when a direct use of objects from SHAPER
64   /// will be possible from SMESH module of SALOME.
65   MODEL_EXPORT virtual int Id();
66
67   /// Defines the sub-shape by Id
68   /// NOTE: This method is opposite to Id() method.
69   MODEL_EXPORT virtual void setId(int theID);
70
71   /// Selects (i.e. creates Naming data structure) of sub-shape specifed by textual name
72   MODEL_EXPORT virtual void selectSubShape(const std::string& theType,
73                                            const std::string& theSubShapeName);
74
75   /// Returns true if attribute was  initialized by some value
76   MODEL_EXPORT virtual bool isInitialized();
77
78   /// Returns true if recomute of selection become impossible
79   MODEL_EXPORT virtual bool isInvalid();
80
81   /// Updates the arguments of selection if something was affected by creation
82   /// or reorder of features upper in the history line (issue #1757)
83   MODEL_EXPORT virtual void updateInHistory();
84
85 protected:
86   /// Objects are created for features automatically
87   MODEL_EXPORT Model_AttributeSelection(TDF_Label& theLabel);
88
89   /// Performs the selection for the body result (TNaming Selection)
90
91   /// Performs the selection for the body result (TNaming selection)
92   virtual void selectBody(
93     const ResultPtr& theContext, const std::shared_ptr<GeomAPI_Shape>& theSubShape);
94
95   /// Performs the selection for the construction result (selection by index)
96   virtual void selectConstruction(
97     const ResultPtr& theContext, const std::shared_ptr<GeomAPI_Shape>& theSubShape);
98
99   /// Performs the selection for the part result (selection by name of body result inside of part)
100   /// \param theContext the result - owner of the selection
101   /// \param theSubShape selected shape
102   /// \param theUpdate flag that shows that it must be just update, theShape is null
103   /// \returns true if eveything is selected correctly
104   virtual bool selectPart(
105     const ResultPtr& theContext, const std::shared_ptr<GeomAPI_Shape>& theSubShape,
106     const bool theUpdate = false);
107
108   /// Returns the label where TNaming_Selection results are stored
109   /// Note: there must be no attributes stored at the same label because Selector clears this lab
110   TDF_Label selectionLabel();
111
112   /// Returns the prepared map of valid labels for naming selection solving (creates if not exists)
113   TDF_LabelMap& scope();
114
115   /// Sets the ID of the attribute in Data (called from Data): here it is used for myRef ID setting
116   MODEL_EXPORT virtual void setID(const std::string theID);
117
118   /// Returns the name by context. Adds the part name if the context is located in other document
119   std::string contextName(const ResultPtr& theContext) const;
120
121   /// Sets the parent attribute
122   void setParent(Model_AttributeSelectionList* theParent);
123
124   friend class Model_Data;
125   friend class Model_AttributeSelectionList;
126 };
127
128 #endif