Salome HOME
Fix incorrect processing of the copied entities after the "Multi" constraint has...
[modules/shaper.git] / src / SketchSolver / PlaneGCSSolver / PlaneGCSSolver_Solver.cpp
index d06446e6f534ccb4d22fe7c0845a60f74e77c6a7..57529dc35510836b69f62ac5f02261abaf3ffd44 100644 (file)
@@ -63,6 +63,22 @@ double* PlaneGCSSolver_Solver::createParameter()
   return aResult;
 }
 
+void PlaneGCSSolver_Solver::addParameters(const GCS::SET_pD& theParams)
+{
+  GCS::SET_pD aParams(theParams);
+  // leave new parameters only
+  GCS::VEC_pD::iterator anIt = myParameters.begin();
+  for (; anIt != myParameters.end(); ++anIt)
+    if (aParams.find(*anIt) != aParams.end())
+      aParams.erase(*anIt);
+
+  myParameters.insert(myParameters.end(), aParams.begin(), aParams.end());
+  if (myConstraints.empty() && myDOF >=0)
+    myDOF += (int)aParams.size(); // calculate DoF by hand if and only if there is no constraints yet
+  else
+    myDiagnoseBeforeSolve = true;
+}
+
 void PlaneGCSSolver_Solver::removeParameters(const GCS::SET_pD& theParams)
 {
   for (int i = (int)myParameters.size() - 1; i >= 0; --i)
@@ -70,6 +86,8 @@ void PlaneGCSSolver_Solver::removeParameters(const GCS::SET_pD& theParams)
       myParameters.erase(myParameters.begin() + i);
       --myDOF;
     }
+  if (!myConstraints.empty())
+    myDiagnoseBeforeSolve = true;
 }
 
 void PlaneGCSSolver_Solver::initialize()