Salome HOME
40fd6301a6933faafea9675ea4c5b3d8a6a58e5c
[modules/shaper.git] / src / SketchPlugin / SketchPlugin_Projection.h
1 // Copyright (C) 2014-2019  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 SketchPlugin_Projection_H_
21 #define SketchPlugin_Projection_H_
22
23 #include "SketchPlugin_SketchEntity.h"
24
25 /** \class SketchPlugin_Projection
26  *  \ingroup Plugins
27  *  \brief Feature for creation of external feature as a projection onto the sketch plane.
28  */
29 class SketchPlugin_Projection : public SketchPlugin_SketchEntity
30 {
31 public:
32   /// Projection feature kind
33   inline static const std::string& ID()
34   {
35     static const std::string MY_PROJECTION_ID("SketchProjection");
36     return MY_PROJECTION_ID;
37   }
38   /// Returns the kind of a feature
39   virtual const std::string& getKind()
40   {
41     static std::string MY_KIND = SketchPlugin_Projection::ID();
42     return MY_KIND;
43   }
44
45   static const std::string& EXTERNAL_FEATURE_ID()
46   {
47     static std::string MY_EXT_FEATURE_ID("ExternalFeature");
48     return MY_EXT_FEATURE_ID;
49   }
50
51   static const std::string& PROJECTED_FEATURE_ID()
52   {
53     static std::string MY_PROJ_FEATURE_ID("ProjectedFeature");
54     return MY_PROJ_FEATURE_ID;
55   }
56
57   static const std::string& INCLUDE_INTO_RESULT()
58   {
59     static std::string MY_INCLUDE("IncludeToResult");
60     return MY_INCLUDE;
61   }
62
63   /// Returns true because projected feature is always external
64   virtual bool isFixed()
65   { return true; }
66
67   /// Returns true if the feature and the feature results can be displayed.
68   /// \return false
69   SKETCHPLUGIN_EXPORT virtual bool canBeDisplayed() const
70   {
71     return false;
72   }
73
74   /// Creates a new part document if needed
75   SKETCHPLUGIN_EXPORT virtual void execute();
76
77   /// Called on change of any argument-attribute of this object: for external point
78   SKETCHPLUGIN_EXPORT virtual void attributeChanged(const std::string& theID);
79
80   /// Use plugin manager for features creation
81   SketchPlugin_Projection();
82
83 protected:
84   /// \brief Initializes attributes of derived class.
85   virtual void initDerivedClassAttributes();
86
87 private:
88   /// \brief Find projection of a feature onto sketch plane
89   void computeProjection(const std::string& theID);
90
91   /// \brief Delete already calculated projected feature
92   ///        if the selection of the projection is changed
93   /// \param[in/out] theProjection   projected feature
94   /// \param[in] theSupportedTypes   types supported relatively to the base selection
95   /// \param[in] theRequestedFeature type of the new feature to be created
96   ///                                (remove only if empty string).
97   bool rebuildProjectedFeature(FeaturePtr& theProjection,
98                                const std::set<std::string>& theSupportedTypes,
99                                const std::string& theRequestedFeature = std::string());
100
101   bool myIsComputing;
102 };
103
104 #endif