Salome HOME
Simplify sketcher model. Remove obsolete files and classes.
[modules/shaper.git] / src / SketchSolver / PlaneGCSSolver / PlaneGCSSolver_Solver.h
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 // File:    PlaneGCSSolver_Solver.h
4 // Created: 14 Dec 2014
5 // Author:  Artem ZHIDKOV
6
7 #ifndef PlaneGCSSolver_Solver_H_
8 #define PlaneGCSSolver_Solver_H_
9
10 #include <SketchSolver_IConstraintWrapper.h>
11 #include <PlaneGCSSolver_Defs.h>
12
13 #include <GCS.h>
14
15 /// \brief The main class that performs the high-level operations for connection to the PlaneGCS.
16 class PlaneGCSSolver_Solver
17 {
18 public:
19   /// The result of constraints solution
20   enum SolveStatus {
21     STATUS_OK,
22     STATUS_INCONSISTENT,
23     STATUS_EMPTYSET,
24     STATUS_FAILED, // set if no one other status is applicable
25     STATUS_UNKNOWN // set for newly created groups
26   };
27
28   PlaneGCSSolver_Solver();
29   ~PlaneGCSSolver_Solver();
30
31   /// \brief Clear system of equations
32   void clear();
33
34   /// \brief Add constraint to the system of equations
35   void addConstraint(GCSConstraintPtr theConstraint);
36
37   /// \brief Remove constraint from the system of equations
38   void removeConstraint(ConstraintID theID);
39
40   /// \brief Initialize memory for new solver's parameter
41   double* createParameter();
42   /// \brief Release memory occupied by parameters
43   void removeParameters(const GCS::SET_pD& theParams);
44
45   /// \brief Solve the set of equations
46   /// \return identifier whether solution succeeded
47   SolveStatus solve();
48
49   /// \brief Revert solution to initial values
50   void undo();
51
52   /// \brief Check the constraint is conflicted with others
53   bool isConflicting(const ConstraintID& theConstraint) const;
54
55   /// \brief Degrees of freedom
56   int dof();
57
58 private:
59   void collectConflicting();
60
61 private:
62   typedef std::map<ConstraintID, std::set<GCSConstraintPtr> > ConstraintMap;
63
64   GCS::VEC_pD                  myParameters;     ///< list of unknowns
65   ConstraintMap                myConstraints;    ///< list of constraints
66
67   std::shared_ptr<GCS::System> myEquationSystem; ///< set of equations for solving in FreeGCS
68
69   GCS::SET_I                   myConflictingIDs; ///< list of IDs of conflicting constraints
70
71   /// specifies the conflicting constraints are already collected
72   bool                         myConfCollected;
73
74   int                          myDOF;            ///< degrees of freedom
75 };
76
77 typedef std::shared_ptr<PlaneGCSSolver_Solver> SolverPtr;
78
79 #endif