Salome HOME
Fix for the issue #2753 : error when dump/load script
[modules/shaper.git] / src / SketchSolver / SketchSolver_ConstraintDistance.cpp
index 4aa15648da14c82c36c8e290a0d591224c0b5f60..1f827a3c637b279b4b2ea6bfa56a99ea96897757 100644 (file)
@@ -87,6 +87,12 @@ void SketchSolver_ConstraintDistance::update()
   SketchSolver_Constraint::update();
 }
 
+bool SketchSolver_ConstraintDistance::remove()
+{
+  removeConstraintsKeepingSign();
+  return SketchSolver_Constraint::remove();
+}
+
 void SketchSolver_ConstraintDistance::addConstraintsToKeepSign()
 {
   std::shared_ptr<PlaneGCSSolver_Storage> aStorage =
@@ -144,6 +150,9 @@ void SketchSolver_ConstraintDistance::addConstraintsToKeepSign()
 
 void SketchSolver_ConstraintDistance::removeConstraintsKeepingSign()
 {
+  if (!myOddPoint)
+    return; // no sign kept => nothing to remove
+
   std::shared_ptr<PlaneGCSSolver_Storage> aStorage =
       std::dynamic_pointer_cast<PlaneGCSSolver_Storage>(myStorage);
 
@@ -158,8 +167,14 @@ void SketchSolver_ConstraintDistance::removeConstraintsKeepingSign()
   aParams.insert(myOddPoint->y);
   aStorage->removeParameters(aParams);
 
-  aGCSConstraints.pop_back();
-  aGCSConstraints.pop_back();
+  // remove constraints keeping sign of point-line distance,
+  // not more than 2 additional constraints is possible
+  if (!aGCSConstraints.empty())
+    aGCSConstraints.pop_back();
+  if (!aGCSConstraints.empty())
+    aGCSConstraints.pop_back();
   aConstraint->setConstraints(aGCSConstraints);
   aStorage->addConstraint(myBaseConstraint, aConstraint);
+
+  myIsSigned = false;
 }