*/
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);
/** \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
/// \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
/// 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