Salome HOME
Issue #604 Creation of an unexpected line in the Sketcher
[modules/shaper.git] / src / SketchSolver / SketchSolver_ConstraintRigid.cpp
index 735412dde8706158efc1cfe6ca2dfdfdb9def8cb..ff52e577437e5f8db91ae8a17077de087fa94395 100644 (file)
@@ -37,8 +37,12 @@ void SketchSolver_ConstraintRigid::process()
   getAttributes(aValue, anEntities);
   if (!myErrorMsg.empty() || (myFeatureMap.empty() && myAttributeMap.empty()))
     return;
+  fixFeature();
+}
 
-  Slvs_hEntity anEntID; 
+void SketchSolver_ConstraintRigid::fixFeature()
+{
+  Slvs_hEntity anEntID;
   if (!myFeatureMap.empty())
     anEntID = myFeatureMap.begin()->second;
   else
@@ -203,6 +207,13 @@ void SketchSolver_ConstraintRigid::fixLine(const Slvs_Entity& theLine)
         !myStorage->isPointFixed(theLine.point[1], aFixed, true))
       fixPoint(theLine.point[0]);
     if (!isUsedInEqual(theLine, anEqual)) {
+      // Check the distance is not set yet
+      std::list<Slvs_Constraint> aDistConstr = myStorage->getConstraintsByType(SLVS_C_PT_PT_DISTANCE);
+      std::list<Slvs_Constraint>::const_iterator aDIt = aDistConstr.begin();
+      for (; aDIt != aDistConstr.end(); aDIt++)
+        if ((aDIt->ptA == theLine.point[0] && aDIt->ptB == theLine.point[1]) ||
+            (aDIt->ptA == theLine.point[1] && aDIt->ptB == theLine.point[0]))
+          return;
       // Calculate distance between points on the line
       double aCoords[4];
       for (int i = 0; i < 2; i++) {