]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Persistence for keep arc orientation (issue #1027)
authorazv <azv@opencascade.com>
Wed, 30 Sep 2015 04:48:40 +0000 (07:48 +0300)
committerazv <azv@opencascade.com>
Wed, 30 Sep 2015 04:48:40 +0000 (07:48 +0300)
src/SketchPlugin/SketchPlugin_Arc.cpp
src/SketchPlugin/SketchPlugin_Arc.h

index f8042bada9694a5f21c22941a8f3054e8a919d22..7a75652b2e538a60f53641fdb2bf667434d9d788 100644 (file)
@@ -28,6 +28,13 @@ const double tolerance = 1e-7;
 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()
 {
@@ -37,7 +44,6 @@ SketchPlugin_Arc::SketchPlugin_Arc()
   myXEndBefore = 0;
   myYEndBefore = 0;
 
-  myForwardDirection = true;
   myParamBefore = 0;
 }
 
@@ -52,6 +58,8 @@ void SketchPlugin_Arc::initAttributes()
   data()->addAttribute(EXTERNAL_ID(), ModelAPI_AttributeSelection::typeId());
   ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), EXTERNAL_ID());
 
+  data()->addAttribute(INVERSED_ID(), ModelAPI_AttributeBoolean::typeId());
+
   // get the initial values
   if (anEndAttr->isInitialized()) {
     myXEndBefore = anEndAttr->x();
@@ -98,6 +106,7 @@ void SketchPlugin_Arc::execute()
       anEndAttr->setValue(aProjection);
     */
     std::shared_ptr<GeomAPI_Pnt> aEndPoint(aSketch->to3D(anEndAttr->x(), anEndAttr->y()));
+    AttributeBooleanPtr isInversed = std::dynamic_pointer_cast<ModelAPI_AttributeBoolean>(attribute(INVERSED_ID()));
 
     std::shared_ptr<GeomAPI_Dir> anXDir(new GeomAPI_Dir(aStartPoint->xyz()->decreased(aCenter->xyz())));
     std::shared_ptr<GeomAPI_Ax2> anAx2(new GeomAPI_Ax2(aCenter, aNormal, anXDir));
@@ -106,16 +115,16 @@ void SketchPlugin_Arc::execute()
     if(aCirc->parameter(aEndPoint, paramTolerance, aParameterNew)) {
       if(0 < myParamBefore && myParamBefore <= PI / 2.0
         && PI * 1.5 < aParameterNew && aParameterNew <= PI * 2.0) {
-          myForwardDirection = false;
+          isInversed->setValue(true);
       } else if(PI * 1.5 < myParamBefore && myParamBefore <= PI * 2.0
         && 0 < aParameterNew && aParameterNew <= PI / 2.0) {
-          myForwardDirection = true;
+          isInversed->setValue(false);
       }
     }
     myParamBefore = aParameterNew;
 
     std::shared_ptr<GeomAPI_Shape> aCircleShape;
-    if(myForwardDirection) {
+    if(!isInversed->value()) {
       aCircleShape = GeomAlgoAPI_EdgeBuilder::lineCircleArc(aCenter, aStartPoint, aEndPoint, aNormal);
     } else {
       aCircleShape = GeomAlgoAPI_EdgeBuilder::lineCircleArc(aCenter, aEndPoint, aStartPoint, aNormal);
index d3d9e597d29940e5f175ba04eb8b6a88e8d739de..efc90f529ca5ea7373e8d65e1dd1e345dab41ce1 100644 (file)
@@ -28,7 +28,6 @@ class SketchPlugin_Arc : public SketchPlugin_SketchEntity, public GeomAPI_IPrese
   double myXEndBefore, myYEndBefore;
 
   /// to define in which direction draw arc
-  bool myForwardDirection;
   double myParamBefore;
 
  public: