1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
3 // File: PartSet_WidgetPoint2dDistance.h
4 // Created: 23 June 2014
5 // Author: Vitaly Smetannikov
7 #ifndef PartSet_WidgetPoint2dDistance_H
8 #define PartSet_WidgetPoint2dDistance_H
11 #include <ModuleBase_WidgetDoubleValue.h>
13 #include <ModelAPI_CompositeFeature.h>
16 class ModuleBase_IWorkshop;
17 class ModuleBase_IViewWindow;
22 * Implementation of model widget for widget which provides input of a distance between two points
23 * In XML file can be defined as following:
25 * <point2ddistance id="CircleRadius"
26 * first_point="CircleCenter"
31 * icon=":icons/radius.png"
32 * tooltip="Set radius">
33 * <validator id="GeomValidators_Positive"/>
37 class PARTSET_EXPORT PartSet_WidgetPoint2dDistance : public ModuleBase_WidgetDoubleValue
42 /// \param theParent the parent object
43 /// \param theWorkshop a current workshop
44 /// \param theData the widget configuation. The attribute of the model widget is obtained from
45 /// \param theParentId is Id of a parent of the current attribute
46 PartSet_WidgetPoint2dDistance(QWidget* theParent, ModuleBase_IWorkshop* theWorkshop,
47 const Config_WidgetAPI* theData,
48 const std::string& theParentId);
50 virtual ~PartSet_WidgetPoint2dDistance();
52 /// The methiod called when widget is deactivated
53 virtual void deactivate();
55 /// \returns the sketch instance
56 CompositeFeaturePtr sketch() const { return mySketch; }
58 /// Set sketch instance
59 void setSketch(CompositeFeaturePtr theSketch) { mySketch = theSketch; }
61 /// Returns true if the event is processed.
62 virtual bool processEnter();
65 /// Process of mouse move
66 /// \param theWnd a pointer to a window
67 /// \param theEvent a mouse event
68 void onMouseMove(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent);
71 /// Process of mouse release
72 /// \param theWnd a pointer to a window
73 /// \param theEvent a mouse event
74 void onMouseRelease(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent);
77 /// Store current value in cashed value
78 void storeCurentValue();
80 /// Restore cashed value in the model attribute
81 /// \return boolean state if the restored feature shoud be hidden
82 bool restoreCurentValue();
84 /// Fills the widget with default values
85 /// \return true if the widget current value is reset
86 virtual bool resetCustom();
88 /// The methiod called when widget is activated
89 virtual void activateCustom();
91 /// Set the second point which defines a value in the widget as a distance with a first point defined by feature
92 void setPoint(FeaturePtr theFeature, const std::shared_ptr<GeomAPI_Pnt2d>& thePnt);
94 /// Compute the distance between points
95 /// \param theFirstPnt a point value of the out point attribute
96 /// \param theCurrentPnt a point of the current widget
97 /// \return a double value
98 virtual double computeValue(const std::shared_ptr<GeomAPI_Pnt2d>& theFirstPnt,
99 const std::shared_ptr<GeomAPI_Pnt2d>& theCurrentPnt);
102 /// A reference to workshop
103 ModuleBase_IWorkshop* myWorkshop;
105 /// A name of the first point
106 std::string myFirstPntName;
108 /// Reference to sketch
109 CompositeFeaturePtr mySketch;
111 bool myValueIsCashed; /// boolean state if the value is cashed during value state change
112 bool myIsFeatureVisibleInCash; /// boolean value if the feature was visible when cash if filled
113 double myValueInCash; /// the cashed X value during value state change