Salome HOME
Issue #424: Avoid conflicting constraint message.
[modules/shaper.git] / src / SketchSolver / SketchSolver_ConstraintRigid.cpp
index 75cf0d0d0ec87f4f63e52dee18dcb9d9a086f2cf..a1deb96ccd44516b25004ebf166363b615ae6554 100644 (file)
@@ -113,6 +113,8 @@ void SketchSolver_ConstraintRigid::getAttributes(
     anEntityID = myGroup->getFeatureId(myBaseFeature);
     if (anEntityID == SLVS_E_UNKNOWN)
       anEntityID = changeEntity(myBaseFeature, aType);
+    else
+      myFeatureMap[myBaseFeature] = anEntityID;
   }
 
   // Check the entity is complex
@@ -223,11 +225,19 @@ void SketchSolver_ConstraintRigid::fixArc(const Slvs_Entity& theArc)
   }
 
   // Fix radius of the arc
-  aConstraint = Slvs_MakeConstraint(SLVS_E_UNKNOWN, myGroup->getId(), SLVS_C_DIAMETER, myGroup->getWorkplaneId(),
-    aRadius * 2.0, SLVS_E_UNKNOWN, SLVS_E_UNKNOWN, myFeatureMap.begin()->second, SLVS_E_UNKNOWN);
-  aConstraint.h = myStorage->addConstraint(aConstraint);
-  mySlvsConstraints.push_back(aConstraint.h);
-  if (!myBaseConstraint)
-    myStorage->addTemporaryConstraint(aConstraint.h);
+  bool isExists = false;
+  std::list<Slvs_Constraint> aDiamConstraints = myStorage->getConstraintsByType(SLVS_C_DIAMETER);
+  std::list<Slvs_Constraint>::iterator anIt = aDiamConstraints.begin();
+  for (; anIt != aDiamConstraints.end() && !isExists; anIt)
+    if (anIt->entityA == myFeatureMap.begin()->second)
+      isExists = true;
+  if (!isExists) {
+    aConstraint = Slvs_MakeConstraint(SLVS_E_UNKNOWN, myGroup->getId(), SLVS_C_DIAMETER, myGroup->getWorkplaneId(),
+      aRadius * 2.0, SLVS_E_UNKNOWN, SLVS_E_UNKNOWN, myFeatureMap.begin()->second, SLVS_E_UNKNOWN);
+    aConstraint.h = myStorage->addConstraint(aConstraint);
+    mySlvsConstraints.push_back(aConstraint.h);
+    if (!myBaseConstraint)
+      myStorage->addTemporaryConstraint(aConstraint.h);
+  }
 }