X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_ConstraintRadius.cpp;h=d43eeddd99e59d3925477efb035f2782aa9c15cf;hb=5c13fa0e68725babdd09541b028c186896e27b4f;hp=9530bc2add833bcc01071a6d07379deaa65276b6;hpb=feb83de70e93d26ac5fc47f8b6ae82ebe965309a;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_ConstraintRadius.cpp b/src/SketchPlugin/SketchPlugin_ConstraintRadius.cpp index 9530bc2ad..d43eeddd9 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() @@ -39,6 +40,14 @@ void SketchPlugin_ConstraintRadius::initAttributes() data()->addAttribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT(), GeomDataAPI_Point2D::typeId()); } +void SketchPlugin_ConstraintRadius::colorConfigInfo(std::string& theSection, std::string& theName, + std::string& theDefault) +{ + theSection = "Visualization"; + theName = "sketch_dimension_color"; + theDefault = SKETCH_DIMENSION_COLOR; +} + void SketchPlugin_ConstraintRadius::execute() { std::shared_ptr aRef = std::dynamic_pointer_cast< @@ -66,7 +75,8 @@ void SketchPlugin_ConstraintRadius::execute() // aValueAttr->setValue(aRadius); //} - // 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 std::shared_ptr aFlyoutAttr = std::dynamic_pointer_cast< @@ -91,16 +101,17 @@ bool SketchPlugin_ConstraintRadius::compute(const std::string& theAttributeId) GeomDataAPI_Point2D>(data()->attribute(theAttributeId)); // Prepare a circle if (aCyrcFeature->getKind() == SketchPlugin_Circle::ID()) { // circle - std::shared_ptr aCenterAttr = std::dynamic_pointer_cast( + std::shared_ptr aCenterAttr = + std::dynamic_pointer_cast( aCyrcFeature->data()->attribute(SketchPlugin_Circle::CENTER_ID())); double aShift = aRadius * 1.1; std::shared_ptr aPnt = aCenterAttr->pnt(); - std::shared_ptr aFPnt = + std::shared_ptr aFPnt = std::shared_ptr(new GeomAPI_Pnt2d(aPnt->x() + aShift, aPnt->y() + aShift)); aFlyoutAttr->setValue(aFPnt); } else { // arc std::shared_ptr aStartAttr = std::dynamic_pointer_cast< - GeomDataAPI_Point2D>(aCyrcFeature->data()->attribute(SketchPlugin_Arc::START_ID())); + GeomDataAPI_Point2D>(aCyrcFeature->data()->attribute(SketchPlugin_Arc::START_ID())); aFlyoutAttr->setValue(aStartAttr->pnt()); } return true; @@ -143,15 +154,8 @@ AISObjectPtr SketchPlugin_ConstraintRadius::getAISObject(AISObjectPtr thePreviou if (!sketch()) return thePrevious; - AISObjectPtr anAIS = thePrevious; - if (!anAIS) { - anAIS = SketcherPrs_Factory::radiusConstraint(this, sketch()->coordinatePlane()); - } - - // Set color from preferences - std::vector aRGB = Config_PropManager::color("Visualization", "sketch_dimension_color", - SKETCH_DIMENSION_COLOR); - anAIS->setColor(aRGB[0], aRGB[1], aRGB[2]); + AISObjectPtr anAIS = SketcherPrs_Factory::radiusConstraint(this, sketch()->coordinatePlane(), + thePrevious); return anAIS; } @@ -161,27 +165,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; } @@ -189,7 +176,8 @@ void SketchPlugin_ConstraintRadius::attributeChanged(const std::string& theID) { if (theID == SketchPlugin_Constraint::ENTITY_A()) { std::shared_ptr aValueAttr = std::dynamic_pointer_cast< ModelAPI_AttributeDouble>(data()->attribute(SketchPlugin_Constraint::VALUE())); - if (!aValueAttr->isInitialized()) { // only if it is not initialized, try to compute the current value + if (!aValueAttr->isInitialized()) { + // only if it is not initialized, try to compute the current value std::shared_ptr aCyrcFeature; double aRadius = circleRadius(aCyrcFeature); if (aRadius > 0) { // set as value the radius of updated reference to another circle