Salome HOME
Remove extra files
[modules/shaper.git] / src / SketchSolver / SketchSolver_Manager.h
index 8a6851ef376f924567c26de99154729394f6c9b1..5eab8bc9e5d7c02c5d59ca796d684ac465cc6fd8 100644 (file)
@@ -41,6 +41,12 @@ public:
    */
   virtual void processEvent(const std::shared_ptr<Events_Message>& theMessage);
 
+  /**
+   * The solver needs all the updated objects are transfered in one group, not one by one.
+   * This iscreases performance and avoids problems in resolve of only part of the made updates.
+   */
+  virtual bool groupMessages();
+
   /// \brief Initialize builder for solver's data structure entities
   /// \param theBuilder [in]  solver's specific builder
   SKETCHSOLVER_EXPORT void setBuilder(BuilderPtr theBuilder);
@@ -79,14 +85,17 @@ protected:
 
   /** \brief Updates entity which is moved in GUI
    *  \param[in] theFeature entity to be updated
+   *  \return \c true, if the entity has been moved
    */
-  void moveEntity(std::shared_ptr<SketchPlugin_Feature> theFeature);
+  bool moveEntity(std::shared_ptr<SketchPlugin_Feature> theFeature);
 
   /** \brief Goes through the list of groups and solve the constraints
    *  \param[in] theGroups  list of groups to be resolved (if empty list, all groups are resolved)
-   *  \return \c true, if groups are resolved, and features should be updated (send the Update event)
+   *  \return \c true, if groups are resolved, and features should be updated 
+   *  (send the Update event)
    */
-  bool resolveConstraints(const std::list<SketchSolver_Group*>& theGroups = std::list<SketchSolver_Group*>());
+  bool resolveConstraints(const std::list<SketchSolver_Group*>& theGroups = 
+    std::list<SketchSolver_Group*>());
 
 private:
   /** \brief Searches list of groups which interact with specified feature
@@ -109,6 +118,13 @@ private:
   /// \brief Allow to send the Update event
   void allowSendUpdate() const;
 
+  /// \brief If the message shows that any group is repaired after conflicting,
+  ///        find other groups on the same sketch, which have conflicts.
+  void checkConflictingConstraints(const std::shared_ptr<Events_Message>& theMessage);
+
+  /// \brief Calculate DoF for each sketch and send messages if changed
+  void degreesOfFreedom();
+
 private:
   static SketchSolver_Manager*     mySelf;    ///< Self pointer to implement singleton functionality
   std::list<SketchSolver_Group*>   myGroups;  ///< Groups of constraints
@@ -116,6 +132,8 @@ private:
   /// true if computation is performed and all "updates" are generated by this algo
   /// and needs no recomputation
   bool myIsComputed;
+
+  std::map<CompositeFeaturePtr, int> myDoF; ///< Degree of freedom for corresponding sketch
 };
 
 #endif