X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchSolver%2FSketchSolver_ConstraintDistance.cpp;h=d7313a49dfc9609d7fb5dad62dfa5b9b0469cce5;hb=d3883990177d27a12b8a2278cdbb82250ff19b79;hp=d256a25ed2848881b5e70aa4af1000ef00294065;hpb=3d8567de3730b8b06e753b688668e0d1b408bc73;p=modules%2Fshaper.git diff --git a/src/SketchSolver/SketchSolver_ConstraintDistance.cpp b/src/SketchSolver/SketchSolver_ConstraintDistance.cpp index d256a25ed..d7313a49d 100644 --- a/src/SketchSolver/SketchSolver_ConstraintDistance.cpp +++ b/src/SketchSolver/SketchSolver_ConstraintDistance.cpp @@ -4,6 +4,8 @@ #include +#include + void SketchSolver_ConstraintDistance::process() { @@ -54,14 +56,28 @@ void SketchSolver_ConstraintDistance::process() aConstraint.h = myStorage->addConstraint(aConstraint); mySlvsConstraints.push_back(aConstraint.h); + myPrevValue = 0.0; + adjustConstraint(); +} + +void SketchSolver_ConstraintDistance::adjustConstraint() +{ // Adjust point-line distance if (getType() != SLVS_C_PT_LINE_DISTANCE) return; + // Check the sign of distance is changed + Slvs_Constraint aConstraint = myStorage->getConstraint(mySlvsConstraints.front()); + if (fabs(myPrevValue) == fabs(aConstraint.valA)) { + aConstraint.valA = myPrevValue; + myStorage->updateConstraint(aConstraint); + return; + } + // Get constraint parameters and check the sign of constraint value std::vector::iterator aCIter = mySlvsConstraints.begin(); for (; aCIter != mySlvsConstraints.end(); aCIter++) { - Slvs_Constraint aConstraint = myStorage->getConstraint(*aCIter); + aConstraint = myStorage->getConstraint(*aCIter); Slvs_Entity aLine = myStorage->getEntity(aConstraint.entityA); // Obtain point and line coordinates Slvs_hEntity aPointID[3] = {aConstraint.ptA, aLine.point[0], aLine.point[1]}; @@ -81,3 +97,10 @@ void SketchSolver_ConstraintDistance::process() } } } + +void SketchSolver_ConstraintDistance::update(ConstraintPtr theConstraint) +{ + Slvs_Constraint aConstraint = myStorage->getConstraint(mySlvsConstraints.front()); + myPrevValue = aConstraint.valA; + SketchSolver_Constraint::update(theConstraint); +}