X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchSolver%2FSketchSolver_Group.h;h=ea22b03d0175aba0eea37a21841dc4424a279dcf;hb=801131b41013eeb97fe917311b47bff78fb86d86;hp=534d48051b4ee4dac9185f58af6fdc0717ebfa0a;hpb=0d245288551534bd4327b2be5709a46e7debd28d;p=modules%2Fshaper.git diff --git a/src/SketchSolver/SketchSolver_Group.h b/src/SketchSolver/SketchSolver_Group.h index 534d48051..ea22b03d0 100644 --- a/src/SketchSolver/SketchSolver_Group.h +++ b/src/SketchSolver/SketchSolver_Group.h @@ -10,18 +10,14 @@ #include "SketchSolver.h" #include #include -#include -#include +#include #include -#include #include -#include #include #include #include -#include #include typedef std::map ConstraintConstraintMap; @@ -42,22 +38,17 @@ class SketchSolver_Group ~SketchSolver_Group(); /// \brief Returns group's unique identifier - inline const Slvs_hGroup& getId() const + inline const GroupID& getId() const { return myID; } /// \brief Returns identifier of the workplane - inline const Slvs_hEntity& getWorkplaneId() const + inline const EntityID& getWorkplaneId() const { return myWorkplaneID; } - /// \brief Find the identifier of the feature, if it already exists in the group - Slvs_hEntity getFeatureId(FeaturePtr theFeature) const; - /// \brief Find the identifier of the attribute, if it already exists in the group - Slvs_hEntity getAttributeId(AttributePtr theAttribute) const; - /// \brief Returns true if the group has no constraints yet inline bool isEmpty() const { @@ -70,8 +61,11 @@ class SketchSolver_Group return mySketch->data() && mySketch->data()->isValid(); } - /// \brief Verifies the constraint is complex, i.e. it needs another constraints to be created before - static bool isComplexConstraint(FeaturePtr theConstraint); + /// \brief Check the group has conflicting constraints + inline bool isFailed() const + { + return !myConflictingConstraints.empty(); + } /** \brief Adds or updates a constraint in the group * \param[in] theConstraint constraint to be changed @@ -82,19 +76,20 @@ class SketchSolver_Group /** \brief Updates the data corresponding the specified feature * \param[in] theFeature the feature to be updated */ - bool updateFeature(std::shared_ptr theFeature); + bool updateFeature(FeaturePtr theFeature); /** \brief Updates the data corresponding the specified feature moved in GUI. * Additional Fixed constraints are created. * \param[in] theFeature the feature to be updated + * \return \c true, if the feature is moved */ - void moveFeature(std::shared_ptr theFeature); + bool moveFeature(FeaturePtr theFeature); /** \brief Verifies the feature attributes are used in this group * \param[in] theFeature constraint or any other object for verification of interaction * \return \c true if some of attributes are used in current group */ - bool isInteract(std::shared_ptr theFeature) const; + bool isInteract(FeaturePtr theFeature) const; /** \brief Verifies the specified feature is equal to the base workplane for this group * \param[in] theWorkplane the feature to be compared with base workplane @@ -126,22 +121,26 @@ class SketchSolver_Group /** \brief Cut from the group several subgroups, which are not connected to the current one by any constraint * \param[out] theCuts enlarge this list by newly created groups */ - void splitGroup(std::vector& theCuts); + void splitGroup(std::list& theCuts); /** \brief Start solution procedure if necessary and update attributes of features * \return \c false when no need to solve constraints */ bool resolveConstraints(); + /** \brief Collect all features applicable for the sketch + * \param theObjects list of features + * \return list of bolted and sorted features + */ + static std::list selectApplicableFeatures(const std::set& theObjects); + protected: /** \brief Removes constraints from the group * \param[in] theConstraint constraint to be removed */ void removeConstraint(ConstraintPtr theConstraint); - /** \brief Remove all temporary constraint after computation finished - * \param[in] theRemoved indexes of constraints to be removed. If empty, all temporary constraints should be deleted - */ + /// \brief Remove all temporary constraint after computation finished void removeTemporaryConstraints(); private: @@ -151,20 +150,30 @@ private: */ bool addWorkplane(CompositeFeaturePtr theSketch); - /// \brief Apply temporary rigid constraints for the list of features - void fixFeaturesList(AttributeRefListPtr theList); + /// \brief Append given constraint to the group of temporary constraints + void setTemporary(SolverConstraintPtr theConstraint); + + /// \brief Verifies is the feature valid + bool checkFeatureValidity(FeaturePtr theFeature); + + /// \brief Notify all interested constraints that coincidence appears or removed + /// \param[in] theCoincidence coincidence constraint + void notifyCoincidenceChanged(SolverConstraintPtr theCoincidence); private: - Slvs_hGroup myID; ///< Index of the group - Slvs_hEntity myWorkplaneID; ///< Index of workplane, the group is based on + GroupID myID; ///< Index of the group + EntityID myWorkplaneID; ///< Index of workplane, the group is based on CompositeFeaturePtr mySketch; ///< Sketch is equivalent to workplane ConstraintConstraintMap myConstraints; ///< List of constraints std::set myTempConstraints; ///< List of temporary constraints + std::map myParametricConstraints; ///< List of parametric constraints StoragePtr myStorage; ///< Container for the set of SolveSpace constraints and their entities - FeatureStoragePtr myFeatureStorage; ///< Container for the set of SketchPlugin features and their dependencies - SketchSolver_Solver myConstrSolver; ///< Solver for set of equations obtained by constraints + SolverPtr mySketchSolver; ///< Solver for set of equations obtained by constraints + + SketchSolver_SolveStatus myPrevResult; ///< Result of previous solution of the set of constraints + std::set myConflictingConstraints; ///< List of conflicting constraints }; #endif