From: azv Date: Wed, 30 Sep 2015 04:48:40 +0000 (+0300) Subject: Persistence for keep arc orientation (issue #1027) X-Git-Tag: V_1.4.0_demo1~4 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=1799ecc7033cf0c4716e9ac3f90d5a313962fa8f;p=modules%2Fshaper.git Persistence for keep arc orientation (issue #1027) --- diff --git a/src/SketchPlugin/SketchPlugin_Arc.cpp b/src/SketchPlugin/SketchPlugin_Arc.cpp index f8042bada..7a75652b2 100644 --- a/src/SketchPlugin/SketchPlugin_Arc.cpp +++ b/src/SketchPlugin/SketchPlugin_Arc.cpp @@ -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 aEndPoint(aSketch->to3D(anEndAttr->x(), anEndAttr->y())); + AttributeBooleanPtr isInversed = std::dynamic_pointer_cast(attribute(INVERSED_ID())); std::shared_ptr anXDir(new GeomAPI_Dir(aStartPoint->xyz()->decreased(aCenter->xyz()))); std::shared_ptr 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 aCircleShape; - if(myForwardDirection) { + if(!isInversed->value()) { aCircleShape = GeomAlgoAPI_EdgeBuilder::lineCircleArc(aCenter, aStartPoint, aEndPoint, aNormal); } else { aCircleShape = GeomAlgoAPI_EdgeBuilder::lineCircleArc(aCenter, aEndPoint, aStartPoint, aNormal); diff --git a/src/SketchPlugin/SketchPlugin_Arc.h b/src/SketchPlugin/SketchPlugin_Arc.h index d3d9e597d..efc90f529 100644 --- a/src/SketchPlugin/SketchPlugin_Arc.h +++ b/src/SketchPlugin/SketchPlugin_Arc.h @@ -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: