From: azv Date: Thu, 16 Apr 2015 13:20:21 +0000 (+0300) Subject: Correct radius dimension X-Git-Tag: V_1.1.0~21^2~2 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=c91272eb0b16648a171f8e112194161a5f78dfdc;p=modules%2Fshaper.git Correct radius dimension --- diff --git a/src/SketchPlugin/SketchPlugin_ConstraintRadius.cpp b/src/SketchPlugin/SketchPlugin_ConstraintRadius.cpp index 9530bc2ad..03854444b 100644 --- a/src/SketchPlugin/SketchPlugin_ConstraintRadius.cpp +++ b/src/SketchPlugin/SketchPlugin_ConstraintRadius.cpp @@ -30,6 +30,7 @@ const double tolerance = 1.e-7; SketchPlugin_ConstraintRadius::SketchPlugin_ConstraintRadius() { + myFlyoutUpdate = false; } void SketchPlugin_ConstraintRadius::initAttributes() @@ -161,27 +162,10 @@ void SketchPlugin_ConstraintRadius::move(double theDeltaX, double theDeltaY) if (!aData->isValid()) return; - // The flyout point is calculated in local coordinates of the shape, - // so the center should be coincident with origin - std::shared_ptr aCenter(new GeomAPI_Pnt2d(0.0, 0.0)); - - // The specified delta applied on the circle curve, - // so it will be scaled due to distance between flyout and center points + myFlyoutUpdate = true; std::shared_ptr aFlyoutAttr = std::dynamic_pointer_cast< GeomDataAPI_Point2D>(aData->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT())); - std::shared_ptr aFlyout = aFlyoutAttr->pnt(); - - std::shared_ptr aRadius = std::dynamic_pointer_cast< - ModelAPI_AttributeDouble>(aData->attribute(SketchPlugin_Constraint::VALUE())); - double aScale = aFlyout->distance(aCenter) / aRadius->value(); - - std::shared_ptr aCircle(new GeomAPI_Circ2d(aCenter, aFlyout)); - aFlyout->setX(aFlyout->x() + aScale * theDeltaX); - aFlyout->setY(aFlyout->y() + aScale * theDeltaY); - aFlyout = aCircle->project(aFlyout); - - myFlyoutUpdate = true; - aFlyoutAttr->setValue(aFlyout->x(), aFlyout->y()); + aFlyoutAttr->setValue(aFlyoutAttr->x() + theDeltaX, aFlyoutAttr->y() + theDeltaY); myFlyoutUpdate = false; } diff --git a/src/SketcherPrs/SketcherPrs_Tools.cpp b/src/SketcherPrs/SketcherPrs_Tools.cpp index 980b28f23..aeefdb8e7 100644 --- a/src/SketcherPrs/SketcherPrs_Tools.cpp +++ b/src/SketcherPrs/SketcherPrs_Tools.cpp @@ -179,6 +179,7 @@ std::shared_ptr getAnchorPoint(const ModelAPI_Feature* theConstrain double aRadius = std::dynamic_pointer_cast( aConstraint->attribute(SketchPlugin_Constraint::VALUE()))->value(); double aLen = aFlyoutPnt->distance(anOrigin); + aRadius *= 1.001; // a gap to make point much closer to the circle, but not lying on it aFlyoutPnt->setX(aCenter->x() + aFlyoutPnt->x() * aRadius / aLen); aFlyoutPnt->setY(aCenter->y() + aFlyoutPnt->y() * aRadius / aLen); return thePlane->to3D(aFlyoutPnt->x(), aFlyoutPnt->y());