1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
3 // File: SketchPlugin_MacroCircle.h
4 // Created: 26 May 2014
5 // Author: Artem ZHIDKOV
7 #ifndef SketchPlugin_MacroCircle_H_
8 #define SketchPlugin_MacroCircle_H_
10 #include <ModelAPI_IReentrant.h>
12 #include "SketchPlugin.h"
14 #include "SketchPlugin_SketchEntity.h"
16 #include <GeomAPI_IPresentable.h>
21 /**\class SketchPlugin_MacroCircle
23 * \brief Feature for creation of the new circle in Sketch.
25 class SketchPlugin_MacroCircle: public SketchPlugin_SketchEntity,
26 public GeomAPI_IPresentable,
27 public ModelAPI_IReentrant
30 /// Circle feature kind
31 inline static const std::string& ID()
33 static const std::string ID("SketchMacroCircle");
37 inline static const std::string& CIRCLE_TYPE()
39 static const std::string ID("circle_type");
43 inline static const std::string& EDIT_CIRCLE_TYPE()
45 static const std::string ID("edit_circle_type");
49 /// Creation method by center and passed point.
50 inline static const std::string& CIRCLE_TYPE_BY_CENTER_AND_PASSED_POINTS()
52 static const std::string ID("circle_type_by_center_and_passed_points");
56 /// Creation method by three points.
57 inline static const std::string& CIRCLE_TYPE_BY_THREE_POINTS()
59 static const std::string ID("circle_type_by_three_points");
63 /// 2D point - center of the circle.
64 inline static const std::string& CENTER_POINT_ID()
66 static const std::string ID("center_point");
70 /// Reference for center point selection.
71 inline static const std::string& CENTER_POINT_REF_ID()
73 static const std::string ID("center_point_ref");
77 /// 2D point - passed point of the circle
78 inline static const std::string& PASSED_POINT_ID()
80 static const std::string ID("passed_point");
84 /// Reference for passed point selection.
85 inline static const std::string& PASSED_POINT_REF_ID()
87 static const std::string ID("passed_point_ref");
92 inline static const std::string& FIRST_POINT_ID()
94 static const std::string ID("first_point");
98 /// Reference for first point selection.
99 inline static const std::string& FIRST_POINT_REF_ID()
101 static const std::string ID("first_point_ref");
106 inline static const std::string& SECOND_POINT_ID()
108 static const std::string ID("second_point");
112 /// Reference for second point selection.
113 inline static const std::string& SECOND_POINT_REF_ID()
115 static const std::string ID("second_point_ref");
120 inline static const std::string& THIRD_POINT_ID()
122 static const std::string ID("third_point");
126 /// Reference for third point selection.
127 inline static const std::string& THIRD_POINT_REF_ID()
129 static const std::string ID("third_point_ref");
133 /// Radius of the circle
134 inline static const std::string& CIRCLE_RADIUS_ID()
136 static const std::string ID("circle_radius");
140 /// Returns the kind of a feature
141 SKETCHPLUGIN_EXPORT virtual const std::string& getKind()
143 static std::string MY_KIND = SketchPlugin_MacroCircle::ID();
147 /// \brief Request for initialization of data model of the feature: adding all attributes.
148 SKETCHPLUGIN_EXPORT virtual void initAttributes();
150 /// Called on change of any argument-attribute of this object
151 SKETCHPLUGIN_EXPORT virtual void attributeChanged(const std::string& theID);
153 /// Returns the AIS preview
154 virtual AISObjectPtr getAISObject(AISObjectPtr thePrevious);
156 /// Creates a new part document if needed
157 SKETCHPLUGIN_EXPORT virtual void execute();
159 /// Moves the feature
160 /// \param theDeltaX the delta for X coordinate is moved
161 /// \param theDeltaY the delta for Y coordinate is moved
162 SKETCHPLUGIN_EXPORT virtual void move(const double theDeltaX, const double theDeltaY)
165 /// Reimplemented from ModelAPI_Feature::isMacro().
167 SKETCHPLUGIN_EXPORT virtual bool isMacro() const {return true;};
169 SKETCHPLUGIN_EXPORT virtual bool isPreviewNeeded() const {return false;};
171 /// Apply information of the message to current object. It fills reference object,
172 /// tangent type and tangent point refence in case of tangent arc
173 virtual std::string processEvent(const std::shared_ptr<Events_Message>& theMessage);
175 /// Use plugin manager for features creation
176 SketchPlugin_MacroCircle();
179 void fillByCenterAndPassed();
180 void fillByThreePoints();
181 /// set fields if only two of three points is initialized
182 void fillByTwoPassedPoints();
184 void constraintsForCircleByCenterAndPassed(FeaturePtr theCircleFeature);
185 void constraintsForCircleByThreePoints(FeaturePtr theCircleFeature);
187 FeaturePtr createCircleFeature();
190 std::shared_ptr<GeomAPI_Pnt2d> myCenter;