From b0319882ff12b3c6b3832e023b6719fb688eef80 Mon Sep 17 00:00:00 2001 From: azv Date: Wed, 31 Aug 2016 12:12:32 +0300 Subject: [PATCH] Freeze when canceling conflicting constraint (issue #1688) --- .../PlaneGCSSolver/PlaneGCSSolver_Solver.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/SketchSolver/PlaneGCSSolver/PlaneGCSSolver_Solver.cpp b/src/SketchSolver/PlaneGCSSolver/PlaneGCSSolver_Solver.cpp index d0f503aba..c522bbacc 100644 --- a/src/SketchSolver/PlaneGCSSolver/PlaneGCSSolver_Solver.cpp +++ b/src/SketchSolver/PlaneGCSSolver/PlaneGCSSolver_Solver.cpp @@ -183,14 +183,13 @@ GCS::SolveStatus PlaneGCSSolver_Solver::solveWithoutTangent() if (aResult == GCS::Success) { GCS::VEC_I aRedundant; aSystemWithoutTangent->getRedundant(aRedundant); - if (aRedundant.empty()) - myEquationSystem = aSystemWithoutTangent; - else + if (!aRedundant.empty()) aResult = GCS::Failed; } // additional check that removed constraints are still correct if (aResult == GCS::Success) { + aSystemWithoutTangent->applySolution(); std::set::const_iterator aRemIt = aRemovedTangent.begin(); for (; aRemIt != aRemovedTangent.end(); ++aRemIt) if (!isTangentTruth(*aRemIt)) @@ -199,8 +198,10 @@ GCS::SolveStatus PlaneGCSSolver_Solver::solveWithoutTangent() aResult = GCS::Failed; } - // Add IDs of removed tangent to the list of conflicting constraints - if (aResult == GCS::Failed) { + if (aResult == GCS::Success) + myEquationSystem = aSystemWithoutTangent; + else { + // Add IDs of removed tangent to the list of conflicting constraints std::set::const_iterator aRemIt = aRemovedTangent.begin(); for (; aRemIt != aRemovedTangent.end(); ++aRemIt) myConflictingIDs.insert((*aRemIt)->getTag()); -- 2.39.2