Salome HOME
Check selection for sketcher
[modules/shaper.git] / src / ModuleBase / ModuleBase_WidgetPoint2dDistance.cpp
index 53ebdea46dc57df736fb19a5415f576b9c38579b..871654bd21c99da06bc005768d8b300c1be95419 100644 (file)
@@ -3,6 +3,7 @@
 // Author:      Vitaly Smetannikov
 
 #include "ModuleBase_WidgetPoint2dDistance.h"
+#include "ModuleBase_WidgetValueFeature.h"
 
 #include <GeomAPI_Pnt2d.h>
 #include <Config_WidgetAPI.h>
@@ -23,14 +24,36 @@ ModuleBase_WidgetPoint2dDistance::~ModuleBase_WidgetPoint2dDistance()
 {
 }
 
+bool ModuleBase_WidgetPoint2dDistance::setValue(ModuleBase_WidgetValue* theValue)
+{
+  bool isDone = false;
+
+  if (theValue) {
+    ModuleBase_WidgetValueFeature* aFeatureValue = 
+                         dynamic_cast<ModuleBase_WidgetValueFeature*>(theValue);
+    if (aFeatureValue) {
+      boost::shared_ptr<GeomAPI_Pnt2d> aPnt = aFeatureValue->point();
+      ObjectPtr aObject = aFeatureValue->object();
+      FeaturePtr aFeature = boost::dynamic_pointer_cast<ModelAPI_Feature>(aObject);
+      if (aFeature && aPnt) {
+        setPoint(aFeature, aPnt);
+        isDone = true;
+      }
+    }
+  }
+  return isDone;
+}
+
 void ModuleBase_WidgetPoint2dDistance::setPoint(FeaturePtr theFeature, const boost::shared_ptr<GeomAPI_Pnt2d>& thePnt)
 {
   boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
   boost::shared_ptr<GeomDataAPI_Point2D> aPoint = boost::dynamic_pointer_cast<GeomDataAPI_Point2D>
                                                               (aData->attribute(myFirstPntName));
+  if (!aPoint) return;
+
   double aRadius = thePnt->distance(aPoint->pnt());
   AttributeDoublePtr aReal = aData->real(attributeID());
-  if (aReal && aReal->value() != mySpinBox->value()) {
+  if (aReal && (aReal->value() != aRadius)) {
     aReal->setValue(aRadius);
     mySpinBox->setValue(aRadius);
   }