Salome HOME
Added option to create Construction Point by intersection of two lines.
[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 creation method.
63   inline static const std::string& CREATION_METHOD_BY_LINES_INTERSECTION()
64   {
65     static const std::string MY_CREATION_METHOD_ID("by_lines_intersection");
66     return MY_CREATION_METHOD_ID;
67   }
68
69   /// Attribute name for X coordinate.
70   inline static const std::string& X()
71   {
72     static const std::string POINT_ATTR_X("x");
73     return POINT_ATTR_X;
74   }
75
76   /// Attribute name for Y coordinate.
77   inline static const std::string& Y()
78   {
79     static const std::string POINT_ATTR_Y("y");
80     return POINT_ATTR_Y;
81   }
82
83   /// Attribute name for Z coordinate.
84   inline static const std::string& Z()
85   {
86     static const std::string POINT_ATTR_Z("z");
87     return POINT_ATTR_Z;
88   }
89
90   /// Attribute name for seleted edge.
91   inline static const std::string& EDGE()
92   {
93     static const std::string ATTR_ID("edge");
94     return ATTR_ID;
95   }
96
97   /// Attribute name for distance.
98   inline static const std::string& DISTANCE_VALUE()
99   {
100     static const std::string ATTR_ID("value");
101     return ATTR_ID;
102   }
103
104   /// Attribute name for percent flag.
105   inline static const std::string& DISTANCE_PERCENT()
106   {
107     static const std::string ATTR_ID("percent");
108     return ATTR_ID;
109   }
110
111   /// Attribute name for reverse flag.
112   inline static const std::string& REVERSE()
113   {
114     static const std::string ATTR_ID("reverse");
115     return ATTR_ID;
116   }
117
118   /// Attribute name for point.
119   inline static const std::string& POINT()
120   {
121     static const std::string ATTR_ID("point");
122     return ATTR_ID;
123   }
124
125   /// Attribute name for plane.
126   inline static const std::string& PLANE()
127   {
128     static const std::string ATTR_ID("plane");
129     return ATTR_ID;
130   }
131
132   /// Attribute name for seleted first line.
133   inline static const std::string& FIRST_LINE()
134   {
135     static const std::string ATTR_ID("first_line");
136     return ATTR_ID;
137   }
138
139   /// Attribute name for seleted second line.
140   inline static const std::string& SECOND_LINE()
141   {
142     static const std::string ATTR_ID("second_line");
143     return ATTR_ID;
144   }
145
146   /// Creates a new part document if needed.
147   CONSTRUCTIONPLUGIN_EXPORT virtual void execute();
148
149   /// Request for initialization of data model of the feature: adding all attributes.
150   CONSTRUCTIONPLUGIN_EXPORT virtual void initAttributes();
151
152   /// Construction result is allways recomuted on the fly.
153   CONSTRUCTIONPLUGIN_EXPORT virtual bool isPersistentResult() {return false;}
154
155   /// Use plugin manager for features creation
156   ConstructionPlugin_Point();
157
158   /// Customize presentation of the feature
159   virtual bool customisePresentation(ResultPtr theResult, AISObjectPtr thePrs,
160                                      std::shared_ptr<GeomAPI_ICustomPrs> theDefaultPrs);
161
162 private:
163   std::shared_ptr<GeomAPI_Vertex> createByXYZ();
164   std::shared_ptr<GeomAPI_Vertex> createByDistanceOnEdge();
165   std::shared_ptr<GeomAPI_Vertex> createByProjection();
166   std::shared_ptr<GeomAPI_Vertex> createByIntersection();
167
168 };
169
170 #endif