#ifndef PlaneGCSSolver_Solver_H_
#define PlaneGCSSolver_Solver_H_
-#include <SketchSolver_IConstraintWrapper.h>
#include <PlaneGCSSolver_Defs.h>
+#include <PlaneGCSSolver_ConstraintWrapper.h>
#include <GCS.h>
void clear();
/// \brief Add constraint to the system of equations
- void addConstraint(GCSConstraintPtr theConstraint, const SketchSolver_ConstraintType theType);
+ void addConstraint(GCSConstraintPtr theConstraint);
/// \brief Remove constraint from the system of equations
void removeConstraint(ConstraintID theID);
/// \brief Initialize memory for new solver's parameter
double* createParameter();
+ /// \brief Add parameters created elsewhere
+ void addParameters(const GCS::SET_pD& theParams);
/// \brief Release memory occupied by parameters
void removeParameters(const GCS::SET_pD& theParams);
+ /// \brief Preliminary initialization of solver (useful for moving a feature).
+ /// When called, the solve() method does not reinitialize a set of constraints.
+ void initialize();
+
/// \brief Solve the set of equations
/// \return identifier whether solution succeeded
SolveStatus solve();
/// \brief Check the constraint is conflicted with others
bool isConflicting(const ConstraintID& theConstraint) const;
+ /// \brief Check conflicting/redundant constraints and DoF
+ void diagnose();
+
/// \brief Degrees of freedom
int dof();
GCS::VEC_pD myParameters; ///< list of unknowns
ConstraintMap myConstraints; ///< list of constraints
- /// IDs of constraints (coincidence, tangency) which will not be treated as conflicting
- /// if they are reported as redundant
- GCS::SET_I myConstraintIDsNotRedundant;
-
std::shared_ptr<GCS::System> myEquationSystem; ///< set of equations for solving in FreeGCS
+ bool myDiagnoseBeforeSolve; ///< is the diagnostic necessary
+ bool myInitilized; ///< is the system already initialized
GCS::SET_I myConflictingIDs; ///< list of IDs of conflicting constraints
-
/// specifies the conflicting constraints are already collected
bool myConfCollected;