X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchSolver%2FSketchSolver_ConstraintRigid.cpp;h=ff52e577437e5f8db91ae8a17077de087fa94395;hb=d3883990177d27a12b8a2278cdbb82250ff19b79;hp=735412dde8706158efc1cfe6ca2dfdfdb9def8cb;hpb=fccb11b890bf75fde316cd0dbc911fa001368062;p=modules%2Fshaper.git diff --git a/src/SketchSolver/SketchSolver_ConstraintRigid.cpp b/src/SketchSolver/SketchSolver_ConstraintRigid.cpp index 735412dde..ff52e5774 100644 --- a/src/SketchSolver/SketchSolver_ConstraintRigid.cpp +++ b/src/SketchSolver/SketchSolver_ConstraintRigid.cpp @@ -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 aDistConstr = myStorage->getConstraintsByType(SLVS_C_PT_PT_DISTANCE); + std::list::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++) {