std::shared_ptr<GeomAPI_Pnt2d> aStartB = aPointB1->pnt();
std::shared_ptr<GeomAPI_Pnt2d> 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<GeomAPI_Dir2d> aDirA(new GeomAPI_Dir2d(aEndA->xy()->decreased(anInter->xy())));
std::shared_ptr<GeomAPI_Dir2d> 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)