Salome HOME
Fix compilation errors (part 2)
[modules/shaper.git] / src / SketchPlugin / SketchPlugin_ConstraintLength.cpp
index 949908b293f628672969fdd7e52a85d5b3204d34..3d37cf3aedcc2eba7a9b9c32a3cc02c661526036 100644 (file)
@@ -68,10 +68,12 @@ void SketchPlugin_ConstraintLength::execute()
     //  aValueAttr->setValue(aLenght);
     //}
 
-    // the value should to be computed here, not in the getAISObject in order to change the model value
+    // the value should to be computed here, not in the getAISObject
+    // in order to change the model value
     // inside the object transaction. This is important for creating a constraint by preselection.
     // The display of the presentation in this case happens after the transaction commit
-    AttributePtr aFlyOutAttribute = data()->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT());
+    AttributePtr aFlyOutAttribute =
+      data()->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT());
     if (!aFlyOutAttribute->isInitialized()) {
       compute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT());
     }
@@ -91,9 +93,10 @@ bool SketchPlugin_ConstraintLength::compute(const std::string& theAttributeId)
   std::shared_ptr<GeomDataAPI_Point2D> aFlyOutAttr = std::dynamic_pointer_cast<
       GeomDataAPI_Point2D>(data()->attribute(theAttributeId));
 
-  std::shared_ptr<GeomAPI_Lin2d> aLine = 
+  std::shared_ptr<GeomAPI_Lin2d> aLine =
     std::shared_ptr<GeomAPI_Lin2d>(new GeomAPI_Lin2d(aStartPoint->pnt(), anEndPoint->pnt()));
-  if (fabs(aFlyOutAttr->x()) < tolerance && fabs(aFlyOutAttr->y()) < tolerance) {
+  if (!aFlyOutAttr->isInitialized() ||
+      (fabs(aFlyOutAttr->x()) < tolerance && fabs(aFlyOutAttr->y()) < tolerance)) {
     double aDist = aPoint1->distance(aPoint2)/5.;
     std::shared_ptr<GeomAPI_Pnt2d> aFPnt = aLine->shiftedLocation(aDist);
     aFlyOutAttr->setValue(aFPnt);
@@ -102,6 +105,18 @@ bool SketchPlugin_ConstraintLength::compute(const std::string& theAttributeId)
   return true;
 }
 
+bool SketchPlugin_ConstraintLength::computeLenghtValue(double& theValue)
+{
+  bool aResult = false;
+  std::shared_ptr<GeomAPI_Pnt> aPoint1, aPoint2;
+  std::shared_ptr<GeomDataAPI_Point2D> aStartPoint, anEndPoint;
+  if (getPoints(aPoint1, aPoint2, aStartPoint, anEndPoint)) {
+    theValue = aPoint1->distance(aPoint2);
+    aResult = true;
+  }
+  return aResult;
+}
+
 bool SketchPlugin_ConstraintLength::getPoints(
   std::shared_ptr<GeomAPI_Pnt>& thePoint1, std::shared_ptr<GeomAPI_Pnt>& thePoint2,
   std::shared_ptr<GeomDataAPI_Point2D>& theStartPoint,
@@ -132,8 +147,8 @@ AISObjectPtr SketchPlugin_ConstraintLength::getAISObject(AISObjectPtr thePreviou
   if (!sketch())
     return thePrevious;
 
-  AISObjectPtr anAIS = SketcherPrs_Factory::lengthDimensionConstraint(this, sketch()->coordinatePlane(),
-                                                                      thePrevious);
+  AISObjectPtr anAIS = SketcherPrs_Factory::lengthDimensionConstraint(this,
+    sketch()->coordinatePlane(), thePrevious);
   return anAIS;
 }
 
@@ -169,17 +184,15 @@ void SketchPlugin_ConstraintLength::move(double theDeltaX, double theDeltaY)
 }
 
 void SketchPlugin_ConstraintLength::attributeChanged(const std::string& theID) {
-  if (theID == SketchPlugin_Constraint::ENTITY_A()) 
+  if (theID == SketchPlugin_Constraint::ENTITY_A())
   {
     std::shared_ptr<ModelAPI_AttributeDouble> aValueAttr = std::dynamic_pointer_cast<
       ModelAPI_AttributeDouble>(attribute(SketchPlugin_Constraint::VALUE()));
-    if (!aValueAttr->isInitialized()) { // only if it is not initialized, try to compute the current value
-      std::shared_ptr<GeomAPI_Pnt> aPoint1, aPoint2;
-      std::shared_ptr<GeomDataAPI_Point2D> aStartPoint, anEndPoint;
-      if (getPoints(aPoint1, aPoint2, aStartPoint, anEndPoint)) {
-        double aLength = aPoint1->distance(aPoint2);
+    if (!aValueAttr->isInitialized()) {
+      // only if it is not initialized, try to compute the current value
+      double aLength;
+      if (computeLenghtValue(aLength))
         aValueAttr->setValue(aLength);
-      }
     }
   } else if (theID == SketchPlugin_Constraint::FLYOUT_VALUE_PNT() && !myFlyoutUpdate) {
     myFlyoutUpdate = true;