X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchSolver%2FSketchSolver_ConstraintDistance.cpp;h=d7313a49dfc9609d7fb5dad62dfa5b9b0469cce5;hb=d3883990177d27a12b8a2278cdbb82250ff19b79;hp=51f0d73592bfeb8c433a5e9267e119296b3ea613;hpb=33b3a43ad2266cb044e4232c902344842adbba7c;p=modules%2Fshaper.git diff --git a/src/SketchSolver/SketchSolver_ConstraintDistance.cpp b/src/SketchSolver/SketchSolver_ConstraintDistance.cpp index 51f0d7359..d7313a49d 100644 --- a/src/SketchSolver/SketchSolver_ConstraintDistance.cpp +++ b/src/SketchSolver/SketchSolver_ConstraintDistance.cpp @@ -4,6 +4,8 @@ #include +#include + void SketchSolver_ConstraintDistance::process() { @@ -53,18 +55,29 @@ void SketchSolver_ConstraintDistance::process() getType(), myGroup->getWorkplaneId(), aValue, aPoint[0], aPoint[1], aLine, SLVS_E_UNKNOWN); 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]}; @@ -85,3 +98,9 @@ void SketchSolver_ConstraintDistance::adjustConstraint() } } +void SketchSolver_ConstraintDistance::update(ConstraintPtr theConstraint) +{ + Slvs_Constraint aConstraint = myStorage->getConstraint(mySlvsConstraints.front()); + myPrevValue = aConstraint.valA; + SketchSolver_Constraint::update(theConstraint); +}