From 22b8f7fe2eccd1eeee183f52834b191b1e904dc3 Mon Sep 17 00:00:00 2001 From: azv Date: Fri, 11 Sep 2015 09:36:16 +0300 Subject: [PATCH] Update the angle calculation when lines are intersected in the inner point --- .../SketchPlugin_ConstraintAngle.cpp | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/SketchPlugin/SketchPlugin_ConstraintAngle.cpp b/src/SketchPlugin/SketchPlugin_ConstraintAngle.cpp index 9fbe2d84f..7874be395 100644 --- a/src/SketchPlugin/SketchPlugin_ConstraintAngle.cpp +++ b/src/SketchPlugin/SketchPlugin_ConstraintAngle.cpp @@ -154,16 +154,31 @@ double SketchPlugin_ConstraintAngle::calculateAngle() std::shared_ptr aStartB = aPointB1->pnt(); std::shared_ptr aEndB = aPointB2->pnt(); + double aDist[2][2] = { + { anInter->distance(aStartA), anInter->distance(aEndA) }, + { anInter->distance(aStartB), anInter->distance(aEndB) } + }; + // Directions of lines - if (anInter->distance(aEndA) < tolerance) + if (aDist[0][1] < tolerance) aEndA = aStartA; - if (anInter->distance(aEndB) < tolerance) + if (aDist[1][1] < tolerance) aEndB = aStartB; std::shared_ptr aDirA(new GeomAPI_Dir2d(aEndA->xy()->decreased(anInter->xy()))); std::shared_ptr aDirB(new GeomAPI_Dir2d(aEndB->xy()->decreased(anInter->xy()))); - anAngle = aDirA->angle(aDirB) * 180.0 / PI; - return fabs(anAngle); + anAngle = fabs(aDirA->angle(aDirB)) * 180.0 / PI; + + // If the lines intersected inside one of them, the angle selected is less than 90 degrees + if ((aDist[0][0] >= tolerance && aDist[0][1] >= tolerance && + aDist[0][0] + aDist[0][1] < aStartA->distance(aEndA) + 2.0 * tolerance) || + (aDist[1][0] >= tolerance && aDist[1][1] >= tolerance && + aDist[1][0] + aDist[1][1] < aStartB->distance(aEndB) + 2.0 * tolerance)) { + if (anAngle > 90.0) + anAngle = 180.0 - anAngle; + } + + return anAngle; } void SketchPlugin_ConstraintAngle::move(double theDeltaX, double theDeltaY) -- 2.30.2