]> SALOME platform Git repositories - modules/shaper.git/blob - src/ModuleBase/ModuleBase_WidgetPoint2dDistance.cpp
Salome HOME
Sources formated according to the codeing standards
[modules/shaper.git] / src / ModuleBase / ModuleBase_WidgetPoint2dDistance.cpp
1 // File:        ModuleBase_WidgetPoint2dDistance.h
2 // Created:     23 June 2014
3 // Author:      Vitaly Smetannikov
4
5 #include "ModuleBase_WidgetPoint2dDistance.h"
6 #include "ModuleBase_WidgetValueFeature.h"
7
8 #include <GeomAPI_Pnt2d.h>
9 #include <Config_WidgetAPI.h>
10 #include <GeomDataAPI_Point2D.h>
11
12 #include <ModelAPI_Data.h>
13 #include <ModelAPI_AttributeDouble.h>
14
15 #include <QDoubleSpinBox>
16
17 ModuleBase_WidgetPoint2dDistance::ModuleBase_WidgetPoint2dDistance(QWidget* theParent,
18                                                                    const Config_WidgetAPI* theData,
19                                                                    const std::string& theParentId)
20     : ModuleBase_WidgetDoubleValue(theParent, theData, theParentId)
21 {
22   myFirstPntName = theData->getProperty("first_point");
23 }
24
25 ModuleBase_WidgetPoint2dDistance::~ModuleBase_WidgetPoint2dDistance()
26 {
27 }
28
29 bool ModuleBase_WidgetPoint2dDistance::setValue(ModuleBase_WidgetValue* theValue)
30 {
31   bool isDone = false;
32
33   if (theValue) {
34     ModuleBase_WidgetValueFeature* aFeatureValue =
35         dynamic_cast<ModuleBase_WidgetValueFeature*>(theValue);
36     if (aFeatureValue) {
37       boost::shared_ptr<GeomAPI_Pnt2d> aPnt = aFeatureValue->point();
38       ObjectPtr aObject = aFeatureValue->object();
39       FeaturePtr aFeature = boost::dynamic_pointer_cast<ModelAPI_Feature>(aObject);
40       if (aFeature && aPnt) {
41         setPoint(aFeature, aPnt);
42         isDone = true;
43       }
44     }
45   }
46   return isDone;
47 }
48
49 void ModuleBase_WidgetPoint2dDistance::setPoint(FeaturePtr theFeature,
50                                                 const boost::shared_ptr<GeomAPI_Pnt2d>& thePnt)
51 {
52   boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
53   boost::shared_ptr<GeomDataAPI_Point2D> aPoint = boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(
54       aData->attribute(myFirstPntName));
55   if (!aPoint)
56     return;
57
58   double aRadius = thePnt->distance(aPoint->pnt());
59   AttributeDoublePtr aReal = aData->real(attributeID());
60   if (aReal && (aReal->value() != aRadius)) {
61     aReal->setValue(aRadius);
62     mySpinBox->setValue(aRadius);
63   }
64 }