X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchSolver%2FSketchSolver_ConstraintManager.h;h=a12cc6d5da815f34fe8a3cd3fdf284b7495c27be;hb=a27497e7383dc1ab66d2775d6383778873a31831;hp=7bd108df6f62ad480d2a563bbc976de6e99a5959;hpb=277db1718bb7a3226515e4cc2272d83b463b3434;p=modules%2Fshaper.git diff --git a/src/SketchSolver/SketchSolver_ConstraintManager.h b/src/SketchSolver/SketchSolver_ConstraintManager.h index 7bd108df6..a12cc6d5d 100644 --- a/src/SketchSolver/SketchSolver_ConstraintManager.h +++ b/src/SketchSolver/SketchSolver_ConstraintManager.h @@ -6,133 +6,102 @@ #define SketchSolver_ConstraintManager_Headerfile #include "SketchSolver.h" +#include +#include +#include #include -// Need to be defined before including SolveSpace to avoid additional dependances on Windows platform -#if defined(WIN32) && !defined(HAVE_C99_INTEGER_TYPES) -typedef unsigned int UINT32; -#endif #include #include +#include #include #include +#include -// Unknown constraint (for error reporting) -#define SLVS_C_UNKNOWN 0 - /** \class SketchSolver_ConstraintManager * \ingroup DataModel - * \brief Transforms the Constraint feature into the format understandable by SolveSpace library. + * \brief Listens the changes of SketchPlugin features and transforms the Constraint + * feature into the format understandable by SolveSpace library. * - * Constraints created for SolveSpace library will be divided into the groups. + * Constraints created for SolveSpace library are divided into the groups. * The division order based on connectedness of the features by the constraints. * The groups may be fused or separated according to the new constraints. + * + * \remark This is a singleton. */ -class SketchSolver_ConstraintManager +class SketchSolver_ConstraintManager : public Events_Listener { public: - SketchSolver_ConstraintManager(); - ~SketchSolver_ConstraintManager(); - - /** \brief Adds a constraint into the manager - * \param[in] theConstraint constraint to be added - * \return \c true if the constraint added successfully - */ - SKETCHSOLVER_EXPORT bool addConstraint(boost::shared_ptr theConstraint); - - /** \brief Removes a constraint from the manager - * \param[in] theConstraint constraint to be removed - * \return \c true if the constraint removed successfully + /** \brief Main method to create constraint manager + * \return pointer to the singleton */ - SKETCHSOLVER_EXPORT bool removeConstraint(boost::shared_ptr theConstraint); + static SketchSolver_ConstraintManager* Instance(); -private: - class SketchSolver_ConstraintGroup; - - /** \brief Searches list of groups which interact with specified constraint - * \param[in] theConstraint constraint to be found - * \param[out] theGroups list of group indexes interacted with constraint + /** \brief Implementation of Event Listener method + * \param[in] theMessage the data of the event */ - void findGroups(boost::shared_ptr theConstraint, - std::vector& theGroupIDs) const; - -private: - std::vector myGroups; ///< groups of constraints -}; - + virtual void processEvent(const Events_Message* theMessage); -/** \class SketchSolver_ConstraintGroup - * \ingroup DataModel - * \brief Keeps the group of constraints which based on the same entities - */ -class SketchSolver_ConstraintManager::SketchSolver_ConstraintGroup -{ -public: - SketchSolver_ConstraintGroup(); - ~SketchSolver_ConstraintGroup(); - - /// \brief Returns group's unique identifier - const Slvs_hGroup& getId() const - {return myID;} +protected: + SketchSolver_ConstraintManager(); + ~SketchSolver_ConstraintManager(); - /** \brief Adds a constraint into the group - * \param[in] theConstraint constraint to be added - * \return \c true if the constraint added successfully + /** \brief Adds or updates a constraint in the suitable group + * \param[in] theConstraint constraint to be changed + * \return \c true if the constraint changed successfully */ - bool addConstraint(boost::shared_ptr theConstraint); + bool changeConstraint(boost::shared_ptr theConstraint); - /** \brief Removes a constraint into the group + /** \brief Removes a constraint from the manager * \param[in] theConstraint constraint to be removed * \return \c true if the constraint removed successfully */ bool removeConstraint(boost::shared_ptr theConstraint); - /** \brief Verifies the constraint uses the objects from this group - * \param[in] theConstraint constraint for verification of interaction - * \return \c true if the constrained objects are used in current group + /** \brief Adds or updates a workplane in the manager + * \param[in] theSketch the feature to create or update workplane + * \return \c true if the workplane changed successfully + * \remark Type of theSketch is not verified inside */ - bool isInteract(boost::shared_ptr theConstraint) const; + bool changeWorkplane(boost::shared_ptr theSketch); -protected: - /** \brief Creates a workplane from the sketch parameters - * \param[in] theParams list of the basic parameters of the workplane - * \return \c true if success + /** \brief Removes a workplane from the manager. + * All groups based on such workplane will be removed too. + * \param[in] theSketch the feature to be removed + * \return \c true if the workplane removed successfully + */ + bool removeWorkplane(boost::shared_ptr theSketch); + + /** \brief Updates entity which is neither workplane nor constraint + * \param[in] theFeature entity to be updated */ - bool addWorkplane(std::list< boost::shared_ptr >& theParams); + void updateEntity(boost::shared_ptr theFeature); - /** \brief Adds an entity into the group - * \param[in] theEntity the object of constraint - * \return identifier of created entity or 0 if entity was not added + /** \brief Goes through the list of groups and solve the constraints */ - Slvs_hEntity addEntity(boost::shared_ptr theEntity); + void resolveConstraints(); - /** \brief Adds a parameter into the group - * \param[in] theParam parameter to be added - * \return identifier of created parameter or 0 if it was not added +private: + /** \brief Searches list of groups which interact with specified constraint + * \param[in] theConstraint constraint to be found + * \param[out] theGroups list of group indexes interacted with constraint */ - Slvs_hParam addParameter(double theParam); + void findGroups(boost::shared_ptr theConstraint, + std::set& theGroupIDs) const; - /** \brief Compute constraint type according to SolveSpace identifiers - * \param[in] theConstraint constraint which type should be determined - * \return identifier of constraint type + /** \brief Searches in the list of groups the workplane which constains specified constraint + * \param[in] theConstraint constraint to be found + * \return workplane containing the constraint */ - int getConstraintType(const boost::shared_ptr& theConstraint) const; + boost::shared_ptr findWorkplaneForConstraint( + boost::shared_ptr theConstraint) const; private: - Slvs_hGroup myID; ///< the index of the group - Slvs_Entity myWorkplane; ///< Workplane for the current group - std::vector myParams; ///< List of parameters of the constraints - Slvs_hParam myParamMaxID; ///< Actual maximal ID of parameters - std::vector myEntities; ///< List of entities of the constaints - Slvs_hEntity myEntityMaxID; ///< Actual maximal ID of entities - std::vector myConstraints; ///< List of constraints in SolveSpace format - Slvs_hConstraint myConstrMaxID; ///< Actual maximal ID of constraints - Slvs_System myConstrSet; ///< SolveSpace's set of equations obtained by constraints - std::map, Slvs_Constraint> - myConstraintMap; ///< The map between SketchPlugin and SolveSpace constraints + static SketchSolver_ConstraintManager* _self; ///< Self pointer to implement singleton functionality + std::vector myGroups; ///< Groups of constraints }; #endif