public static bool SnapLineToIntersection(IEnumerable <LineShape> lines, double threshold, Point2 point, out Point2 snap, out LineSnapMode result) { snap = default(Point2); result = default(LineSnapMode); foreach (var line0 in lines) { foreach (var line1 in lines) { if (line0 == line1) { continue; } Point2 clip; if (Line2.LineIntersectWithLine(line0.StartPoint.ToPoint2(), line0.Point.ToPoint2(), line1.StartPoint.ToPoint2(), line1.Point.ToPoint2(), out clip)) { var distance = clip.DistanceTo(point); if (distance < threshold) { snap = clip; result = LineSnapMode.Intersection; return(true); } } } } return(false); }
public static bool SnapLineToMiddle(IEnumerable <LineShape> lines, double threshold, Point2 point, out Point2 snap, out LineSnapMode result) { snap = default(Point2); result = default(LineSnapMode); foreach (var line in lines) { var middle = Line2.Middle(line.StartPoint.ToPoint2(), line.Point.ToPoint2()); var distance = middle.DistanceTo(point); if (distance < threshold) { snap = middle; result = LineSnapMode.Middle; return(true); } } return(false); }