Salome HOME
Issue #2535: Intersection - Include into sketch result does not work
[modules/shaper.git] / src / SketchSolver / SketchSolver_ConstraintMulti.cpp
index dad8f2488eb15aa3f1febda6ed1bebd838cd887f..58634795baca9d49a923dfb0cf48ebc978b48286 100644 (file)
@@ -14,7 +14,8 @@
 // License along with this library; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+// See http://www.salome-platform.org/ or
+// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
 //
 
 #include <SketchSolver_ConstraintMulti.h>
@@ -231,10 +232,21 @@ void SketchSolver_ConstraintMulti::notify(const FeaturePtr& theFeature,
       myCopiedFeatures.find(theFeature) == myCopiedFeatures.end())
     return; // the feature is not used by constraint => nothing to update
 
-  // update derivative object
-  updateLocal();
-  myAdjusted = false;
-  adjustConstraint();
+  if (myIsProcessingNotify)
+    return; // "notify" is already processing
+
+  // do not adjust "multi"-constraint if the number of objects is changed,
+  // wait until the constraint is updated (issue #2425: changing number of copies by parameter)
+  if (myNumberOfCopies + 1 == myBaseConstraint->integer(nameNbObjects())->value()) {
+    myIsProcessingNotify = true;
+
+    // update derivative object
+    updateLocal();
+    myAdjusted = false;
+    adjustConstraint();
+
+    myIsProcessingNotify = false;
+  }
 }
 
 void SketchSolver_ConstraintMulti::blockEvents(bool isBlocked)