]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #148 fix: Eliminated recursive resolving of constraints
authorazv <azv@opencascade.com>
Mon, 22 Sep 2014 09:04:12 +0000 (13:04 +0400)
committerazv <azv@opencascade.com>
Mon, 22 Sep 2014 09:04:12 +0000 (13:04 +0400)
src/SketchSolver/SketchSolver_ConstraintGroup.cpp
src/SketchSolver/SketchSolver_ConstraintGroup.h
src/SketchSolver/SketchSolver_ConstraintManager.cpp

index bd70204c7cc386a41f59a36b979e24a89c4a6221..6b445b1873c554395f1b3c3c15fd5683c2e4b689 100644 (file)
@@ -606,10 +606,10 @@ Slvs_hParam SketchSolver_ConstraintGroup::changeParameter(
 //  Class:    SketchSolver_ConstraintGroup
 //  Purpose:  solve the set of constraints for the current group
 // ============================================================================
-void SketchSolver_ConstraintGroup::resolveConstraints()
+bool SketchSolver_ConstraintGroup::resolveConstraints()
 {
   if (!myNeedToSolve)
-    return;
+    return false;
 
   myConstrSolver.setGroupID(myID);
   myConstrSolver.setParameters(myParams);
@@ -621,7 +621,7 @@ void SketchSolver_ConstraintGroup::resolveConstraints()
   if (aResult == SLVS_RESULT_OKAY) {  // solution succeeded, store results into correspondent attributes
                                       // Obtain result into the same list of parameters
     if (!myConstrSolver.getResult(myParams))
-      return;
+      return true;
 
     // We should go through the attributes map, because only attributes have valued parameters
     std::map<boost::shared_ptr<ModelAPI_Attribute>, Slvs_hEntity>::iterator anEntIter =
@@ -634,6 +634,7 @@ void SketchSolver_ConstraintGroup::resolveConstraints()
 
   removeTemporaryConstraints();
   myNeedToSolve = false;
+  return true;
 }
 
 // ============================================================================
index 42ce8ddd522d7cc56c0be21367fef0ae1b64ba23..5d7123903abc50a099ba0a420e3f2b4784a72d07 100644 (file)
@@ -98,8 +98,9 @@ class SketchSolver_ConstraintGroup
   void splitGroup(std::vector<SketchSolver_ConstraintGroup*>& theCuts);
 
   /** \brief Start solution procedure if necessary and update attributes of features
+   *  \return \c false when no need to solve constraints
    */
-  void resolveConstraints();
+  bool resolveConstraints();
 
   /** \brief Searches the constraints built on the entity and emit the signal to update them
    *  \param[in] theEntity attribute of the constraint
index ea7a29bcd06c7c652db7efdb5a2d5bdea132fdb0..ac0223064b1660cc6affe6befaf3885f3f131831 100644 (file)
@@ -349,11 +349,14 @@ boost::shared_ptr<SketchPlugin_Feature> SketchSolver_ConstraintManager::findWork
 // ============================================================================
 void SketchSolver_ConstraintManager::resolveConstraints()
 {
+  bool needToUpdate = false;
   std::vector<SketchSolver_ConstraintGroup*>::iterator aGroupIter;
   for (aGroupIter = myGroups.begin(); aGroupIter != myGroups.end(); aGroupIter++)
-    (*aGroupIter)->resolveConstraints();
+    if ((*aGroupIter)->resolveConstraints())
+      needToUpdate = true;
 
   // Features may be updated => send events
-  Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED));
+  if (needToUpdate)
+    Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED));
 }