X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchSolver%2FSketchSolver_Group.cpp;h=f437103ac38527035421f86396b2fe5c6c0d26fd;hb=87b6a30a3afb8fb32e7e43ade8d9c947d9eb1684;hp=bf0746fdb4f1cf6605e7decab077bc0be03b32ca;hpb=5605f5ffcd3255b11594ad7f45fe1d0fce5f31d3;p=modules%2Fshaper.git diff --git a/src/SketchSolver/SketchSolver_Group.cpp b/src/SketchSolver/SketchSolver_Group.cpp index bf0746fdb..f437103ac 100644 --- a/src/SketchSolver/SketchSolver_Group.cpp +++ b/src/SketchSolver/SketchSolver_Group.cpp @@ -1,8 +1,22 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -// File: SketchSolver_Group.cpp -// Created: 27 May 2014 -// Author: Artem ZHIDKOV +// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or +// email : webmaster.salome@opencascade.com +// #include "SketchSolver_Group.h" #include @@ -125,15 +139,22 @@ bool SketchSolver_Group::moveFeature(FeaturePtr theFeature) } // Create temporary Fixed constraint - SolverConstraintPtr aConstraint = PlaneGCSSolver_Tools::createMovementConstraint(theFeature); + std::shared_ptr aConstraint = + PlaneGCSSolver_Tools::createMovementConstraint(theFeature); if (!aConstraint) return false; - aConstraint->process(myStorage, myIsEventsBlocked); - if (aConstraint->error().empty()) + SolverConstraintPtr(aConstraint)->process(myStorage, myIsEventsBlocked); + if (aConstraint->error().empty()) { setTemporary(aConstraint); - else - myStorage->notify(theFeature); + if (!myStorage->isEmpty()) + myStorage->setNeedToResolve(true); + + mySketchSolver->initialize(); + aConstraint->moveFeature(); + } + // notify all observers that theFeature has been changed + myStorage->notify(theFeature); return true; } @@ -141,7 +162,6 @@ bool SketchSolver_Group::moveFeature(FeaturePtr theFeature) // Function: resolveConstraints // Class: SketchSolver_Group // Purpose: solve the set of constraints for the current group -#include // ============================================================================ bool SketchSolver_Group::resolveConstraints() { @@ -169,6 +189,7 @@ bool SketchSolver_Group::resolveConstraints() aResult = mySketchSolver->solve(); if (aResult == PlaneGCSSolver_Solver::STATUS_FAILED && !myTempConstraints.empty()) { + mySketchSolver->undo(); removeTemporaryConstraints(); aResult = mySketchSolver->solve(); }