Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }