X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_ConstraintLength.cpp;h=3d37cf3aedcc2eba7a9b9c32a3cc02c661526036;hb=b5893b0a30fac08134c24de4565cb513a43affa6;hp=ba18dae3e82b711fe03b25772d411ff0aaee6932;hpb=d34842c50d5f335cca443c78910c16c54139c7d0;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_ConstraintLength.cpp b/src/SketchPlugin/SketchPlugin_ConstraintLength.cpp index ba18dae3e..3d37cf3ae 100644 --- a/src/SketchPlugin/SketchPlugin_ConstraintLength.cpp +++ b/src/SketchPlugin/SketchPlugin_ConstraintLength.cpp @@ -68,10 +68,12 @@ void SketchPlugin_ConstraintLength::execute() // aValueAttr->setValue(aLenght); //} - // 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 - AttributePtr aFlyOutAttribute = data()->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT()); + AttributePtr aFlyOutAttribute = + data()->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT()); if (!aFlyOutAttribute->isInitialized()) { compute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT()); } @@ -91,9 +93,9 @@ bool SketchPlugin_ConstraintLength::compute(const std::string& theAttributeId) std::shared_ptr aFlyOutAttr = std::dynamic_pointer_cast< GeomDataAPI_Point2D>(data()->attribute(theAttributeId)); - std::shared_ptr aLine = + std::shared_ptr aLine = std::shared_ptr(new GeomAPI_Lin2d(aStartPoint->pnt(), anEndPoint->pnt())); - if (!aFlyOutAttr->isInitialized() || + if (!aFlyOutAttr->isInitialized() || (fabs(aFlyOutAttr->x()) < tolerance && fabs(aFlyOutAttr->y()) < tolerance)) { double aDist = aPoint1->distance(aPoint2)/5.; std::shared_ptr aFPnt = aLine->shiftedLocation(aDist); @@ -103,6 +105,18 @@ bool SketchPlugin_ConstraintLength::compute(const std::string& theAttributeId) return true; } +bool SketchPlugin_ConstraintLength::computeLenghtValue(double& theValue) +{ + bool aResult = false; + std::shared_ptr aPoint1, aPoint2; + std::shared_ptr aStartPoint, anEndPoint; + if (getPoints(aPoint1, aPoint2, aStartPoint, anEndPoint)) { + theValue = aPoint1->distance(aPoint2); + aResult = true; + } + return aResult; +} + bool SketchPlugin_ConstraintLength::getPoints( std::shared_ptr& thePoint1, std::shared_ptr& thePoint2, std::shared_ptr& theStartPoint, @@ -133,8 +147,8 @@ AISObjectPtr SketchPlugin_ConstraintLength::getAISObject(AISObjectPtr thePreviou if (!sketch()) return thePrevious; - AISObjectPtr anAIS = SketcherPrs_Factory::lengthDimensionConstraint(this, sketch()->coordinatePlane(), - thePrevious); + AISObjectPtr anAIS = SketcherPrs_Factory::lengthDimensionConstraint(this, + sketch()->coordinatePlane(), thePrevious); return anAIS; } @@ -170,17 +184,15 @@ void SketchPlugin_ConstraintLength::move(double theDeltaX, double theDeltaY) } void SketchPlugin_ConstraintLength::attributeChanged(const std::string& theID) { - if (theID == SketchPlugin_Constraint::ENTITY_A()) + if (theID == SketchPlugin_Constraint::ENTITY_A()) { std::shared_ptr aValueAttr = std::dynamic_pointer_cast< ModelAPI_AttributeDouble>(attribute(SketchPlugin_Constraint::VALUE())); - if (!aValueAttr->isInitialized()) { // only if it is not initialized, try to compute the current value - std::shared_ptr aPoint1, aPoint2; - std::shared_ptr aStartPoint, anEndPoint; - if (getPoints(aPoint1, aPoint2, aStartPoint, anEndPoint)) { - double aLength = aPoint1->distance(aPoint2); + if (!aValueAttr->isInitialized()) { + // only if it is not initialized, try to compute the current value + double aLength; + if (computeLenghtValue(aLength)) aValueAttr->setValue(aLength); - } } } else if (theID == SketchPlugin_Constraint::FLYOUT_VALUE_PNT() && !myFlyoutUpdate) { myFlyoutUpdate = true;