/// <summary> /// Gets the nearest line segment index from the given point. /// </summary> /// <returns>The smaller index of the segment vertex, or -1 if the point is too far from the segments.</returns> protected static int GetSegmentIndex(IList <Point> vertices, Point point, double maxDistance = 5) { if (vertices.Count < 2) { return(-1); } var nearestIndex = -1; var nearestDist = double.PositiveInfinity; for (int i = 0, j = vertices.Count - 1; i < j; i++) { if (!CanvasHelper.IsBetweenPoints(point, vertices[i], vertices[i + 1])) { continue; } var dist = CanvasHelper.DistanceToLine(point, vertices[i], vertices[i + 1]); if (dist > maxDistance) { continue; } if (dist < nearestDist) { nearestIndex = i; nearestDist = dist; } } return(nearestIndex); }