Salome HOME
Code cleanup
[modules/shaper.git] / src / SketchSolver / PlaneGCSSolver / PlaneGCSSolver_Solver.cpp
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 // File:    PlaneGCSSolver_Solver.cpp
4 // Created: 14 Dec 2014
5 // Author:  Artem ZHIDKOV
6
7 #include "PlaneGCSSolver_Solver.h"
8 #include <Events_LongOp.h>
9
10
11 PlaneGCSSolver_Solver::~PlaneGCSSolver_Solver()
12 {
13   clear();
14 }
15
16 void PlaneGCSSolver_Solver::clear()
17 {
18   std::set<GCS::Constraint*>::const_iterator anIt = myConstraints.begin();
19   for (; anIt != myConstraints.end(); ++anIt)
20     myEquationSystem.removeConstraint(*anIt);
21   myConstraints.clear();
22   myParameters.clear();
23 }
24
25 void PlaneGCSSolver_Solver::addConstraint(GCSConstraintPtr theConstraint)
26 {
27   GCS::Constraint* aConstraint = theConstraint.get();
28   if (myConstraints.find(aConstraint) != myConstraints.end())
29     return; // constraint already exists, no need to add it again
30
31   myEquationSystem.addConstraint(aConstraint);
32   myConstraints.insert(aConstraint);
33 }
34
35 void PlaneGCSSolver_Solver::removeConstraint(GCSConstraintPtr theConstraint)
36 {
37   GCS::Constraint* aConstraint = theConstraint.get();
38   if (myConstraints.find(aConstraint) == myConstraints.end())
39     return; // no constraint, no need to remove it
40
41   myEquationSystem.removeConstraint(aConstraint);
42   myConstraints.erase(aConstraint);
43 }
44
45 SketchSolver_SolveStatus PlaneGCSSolver_Solver::solve()
46 {
47   if (myConstraints.empty())
48     return STATUS_EMPTYSET;
49   if (myParameters.empty())
50     return STATUS_INCONSISTENT;
51
52   //myEquationSystem.calculateFaileds = myFindFaileds ? 1 : 0;
53
54   Events_LongOp::start(this);
55   GCS::SolveStatus aResult = (GCS::SolveStatus)myEquationSystem.solve(myParameters);
56   Events_LongOp::end(this);
57
58   SketchSolver_SolveStatus aStatus;
59   if (aResult == GCS::Success) {
60     myEquationSystem.applySolution();
61     aStatus = STATUS_OK;
62   } else
63     aStatus = STATUS_FAILED;
64
65   return aStatus;
66 }
67
68 void PlaneGCSSolver_Solver::undo()
69 {
70   myEquationSystem.undoSolution();
71 }