1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
3 // File: PlaneGCSSolver_Solver.h
4 // Created: 14 Dec 2014
5 // Author: Artem ZHIDKOV
7 #ifndef PlaneGCSSolver_Solver_H_
8 #define PlaneGCSSolver_Solver_H_
10 #include <SketchSolver_IConstraintWrapper.h>
11 #include <PlaneGCSSolver_Defs.h>
15 /// \brief The main class that performs the high-level operations for connection to the PlaneGCS.
16 class PlaneGCSSolver_Solver
19 /// The result of constraints solution
24 STATUS_FAILED, // set if no one other status is applicable
25 STATUS_UNKNOWN // set for newly created groups
28 PlaneGCSSolver_Solver();
29 ~PlaneGCSSolver_Solver();
31 /// \brief Clear system of equations
34 /// \brief Add constraint to the system of equations
35 void addConstraint(GCSConstraintPtr theConstraint, const SketchSolver_ConstraintType theType);
37 /// \brief Remove constraint from the system of equations
38 void removeConstraint(ConstraintID theID);
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);
45 /// \brief Solve the set of equations
46 /// \return identifier whether solution succeeded
49 /// \brief Revert solution to initial values
52 /// \brief Check the constraint is conflicted with others
53 bool isConflicting(const ConstraintID& theConstraint) const;
55 /// \brief Degrees of freedom
59 void collectConflicting();
62 typedef std::map<ConstraintID, std::set<GCSConstraintPtr> > ConstraintMap;
64 GCS::VEC_pD myParameters; ///< list of unknowns
65 ConstraintMap myConstraints; ///< list of constraints
67 /// IDs of constraints (coincidence, tangency) which will not be treated as conflicting
68 /// if they are reported as redundant
69 GCS::SET_I myConstraintIDsNotRedundant;
71 std::shared_ptr<GCS::System> myEquationSystem; ///< set of equations for solving in FreeGCS
73 GCS::SET_I myConflictingIDs; ///< list of IDs of conflicting constraints
75 /// specifies the conflicting constraints are already collected
78 int myDOF; ///< degrees of freedom
81 typedef std::shared_ptr<PlaneGCSSolver_Solver> SolverPtr;