Salome HOME
Delete key regression corrections: in previous implementation sketch entities did...
[modules/shaper.git] / src / SketchPlugin / SketchPlugin_Arc.cpp
index 07e9b1a784176ae4117a6335d25f24a17537a07e..261e70b9526613c849954c5af876529c1c585dfb 100644 (file)
@@ -29,12 +29,6 @@ const double paramTolerance = 1.e-4;
 const double PI =3.141592653589793238463;
 
 
-static const std::string& INVERSED_ID()
-{
-  static const std::string MY_INVERSED_ID("InversedArc");
-  return MY_INVERSED_ID;
-}
-
 SketchPlugin_Arc::SketchPlugin_Arc()
     : SketchPlugin_SketchEntity()
 {
@@ -47,10 +41,8 @@ SketchPlugin_Arc::SketchPlugin_Arc()
   myParamBefore = 0;
 }
 
-void SketchPlugin_Arc::initAttributes()
+void SketchPlugin_Arc::initDerivedClassAttributes()
 {
-  SketchPlugin_SketchEntity::initAttributes();
-
   data()->addAttribute(CENTER_ID(), GeomDataAPI_Point2D::typeId());
   data()->addAttribute(START_ID(), GeomDataAPI_Point2D::typeId());
   std::shared_ptr<GeomDataAPI_Point2D> anEndAttr = std::dynamic_pointer_cast<
@@ -273,7 +265,7 @@ void SketchPlugin_Arc::attributeChanged(const std::string& theID)
     std::shared_ptr<GeomAPI_Pnt2d> aProjection = aCircleForArc->project(anEndAttr->pnt());
     if (aProjection && anEndAttr->pnt()->distance(aProjection) > tolerance) {
       if (!isStable()) { // issue #855: trying to update only not-updated coordinate if it is possible
-        if (abs(myXEndBefore - anEndAttr->x()) < 1.e-10) { // keep Y unchanged
+        if (fabs(myXEndBefore - anEndAttr->x()) < 1.e-10) { // keep Y unchanged
           double aVy = aCenterAttr->y() - anEndAttr->y();
           double aVy2 = aVy * aVy;
           double aR2 = aCircleForArc->radius() * aCircleForArc->radius();
@@ -285,7 +277,7 @@ void SketchPlugin_Arc::attributeChanged(const std::string& theID)
               aProjection->setX(aCenterAttr->x() - aDX);
             aProjection->setY(anEndAttr->y());
           }
-        } else if (abs(myYEndBefore - anEndAttr->y()) < 1.e-10) { // keep X unchanged
+        } else if (fabs(myYEndBefore - anEndAttr->y()) < 1.e-10) { // keep X unchanged
           double aVx = aCenterAttr->x() - anEndAttr->x();
           double aVx2 = aVx * aVx;
           double aR2 = aCircleForArc->radius() * aCircleForArc->radius();
@@ -325,3 +317,14 @@ void SketchPlugin_Arc::attributeChanged(const std::string& theID)
     myEndUpdate = false;
   }
 }
+
+void SketchPlugin_Arc::setReversed(bool isReversed)
+{
+  std::dynamic_pointer_cast<ModelAPI_AttributeBoolean>(attribute(INVERSED_ID()))->setValue(isReversed);
+  myParamBefore = 0.0;
+}
+
+bool SketchPlugin_Arc::isReversed()
+{
+  return std::dynamic_pointer_cast<ModelAPI_AttributeBoolean>(attribute(INVERSED_ID()))->value();
+}