Salome HOME
Added option to create Construction Point by projection point on plane. Fixed CPP...
[modules/shaper.git] / src / ConstructionPlugin / ConstructionPlugin_Point.h
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 // File:        ConstructionPlugin_Point.h
4 // Created:     3 Apr 2014
5 // Author:      Mikhail PONIKAROV
6
7 #ifndef ConstructionPlugin_Point_H_
8 #define ConstructionPlugin_Point_H_
9
10 #include "ConstructionPlugin.h"
11
12 #include <GeomAPI_ICustomPrs.h>
13 #include <ModelAPI_Feature.h>
14 #include <ModelAPI_Result.h>
15
16 class GeomAPI_Vertex;
17
18 /// \class ConstructionPlugin_Point
19 /// \ingroup Plugins
20 /// \brief Feature for creation of the new part in PartSet.
21 class ConstructionPlugin_Point: public ModelAPI_Feature, public GeomAPI_ICustomPrs
22 {
23 public:
24   /// Returns the kind of a feature.
25   CONSTRUCTIONPLUGIN_EXPORT virtual const std::string& getKind();
26
27   /// Point kind.
28   inline static const std::string& ID()
29   {
30     static const std::string CONSTRUCTION_POINT_KIND("Point");
31     return CONSTRUCTION_POINT_KIND;
32   }
33
34   /// Attribute name for creation method.
35   inline static const std::string& CREATION_METHOD()
36   {
37     static const std::string MY_CREATION_METHOD_ID("creation_method");
38     return MY_CREATION_METHOD_ID;
39   }
40
41   /// Attribute name for creation method.
42   inline static const std::string& CREATION_METHOD_BY_XYZ()
43   {
44     static const std::string MY_CREATION_METHOD_ID("by_xyz");
45     return MY_CREATION_METHOD_ID;
46   }
47
48   /// Attribute name for creation method.
49   inline static const std::string& CREATION_METHOD_BY_DISTANCE_ON_EDGE()
50   {
51     static const std::string MY_CREATION_METHOD_ID("by_distance_on_edge");
52     return MY_CREATION_METHOD_ID;
53   }
54
55   /// Attribute name for creation method.
56   inline static const std::string& CREATION_METHOD_BY_PROJECTION()
57   {
58     static const std::string MY_CREATION_METHOD_ID("by_projection");
59     return MY_CREATION_METHOD_ID;
60   }
61
62   /// Attribute name for X coordinate.
63   inline static const std::string& X()
64   {
65     static const std::string POINT_ATTR_X("x");
66     return POINT_ATTR_X;
67   }
68
69   /// Attribute name for Y coordinate.
70   inline static const std::string& Y()
71   {
72     static const std::string POINT_ATTR_Y("y");
73     return POINT_ATTR_Y;
74   }
75
76   /// Attribute name for Z coordinate.
77   inline static const std::string& Z()
78   {
79     static const std::string POINT_ATTR_Z("z");
80     return POINT_ATTR_Z;
81   }
82
83   /// Attribute name for seleted edge.
84   inline static const std::string& EDGE()
85   {
86     static const std::string ATTR_ID("edge");
87     return ATTR_ID;
88   }
89
90   /// Attribute name for distance.
91   inline static const std::string& DISTANCE_VALUE()
92   {
93     static const std::string ATTR_ID("value");
94     return ATTR_ID;
95   }
96
97   /// Attribute name for percent flag.
98   inline static const std::string& DISTANCE_PERCENT()
99   {
100     static const std::string ATTR_ID("percent");
101     return ATTR_ID;
102   }
103
104   /// Attribute name for reverse flag.
105   inline static const std::string& REVERSE()
106   {
107     static const std::string ATTR_ID("reverse");
108     return ATTR_ID;
109   }
110
111   /// Attribute name for point.
112   inline static const std::string& POINT()
113   {
114     static const std::string ATTR_ID("point");
115     return ATTR_ID;
116   }
117
118   /// Attribute name for plane.
119   inline static const std::string& PLANE()
120   {
121     static const std::string ATTR_ID("plane");
122     return ATTR_ID;
123   }
124
125   /// Creates a new part document if needed.
126   CONSTRUCTIONPLUGIN_EXPORT virtual void execute();
127
128   /// Request for initialization of data model of the feature: adding all attributes.
129   CONSTRUCTIONPLUGIN_EXPORT virtual void initAttributes();
130
131   /// Construction result is allways recomuted on the fly.
132   CONSTRUCTIONPLUGIN_EXPORT virtual bool isPersistentResult() {return false;}
133
134   /// Use plugin manager for features creation
135   ConstructionPlugin_Point();
136
137   /// Customize presentation of the feature
138   virtual bool customisePresentation(ResultPtr theResult, AISObjectPtr thePrs,
139                                      std::shared_ptr<GeomAPI_ICustomPrs> theDefaultPrs);
140
141 private:
142   std::shared_ptr<GeomAPI_Vertex> createByXYZ();
143   std::shared_ptr<GeomAPI_Vertex> createByDistanceOnEdge();
144   std::shared_ptr<GeomAPI_Vertex> createByProjection();
145
146 };
147
148 #endif