Нарисуйте несколько линий по щелчку мыши, но без перекрытия

этот код работает для рисования нескольких линий щелчками мыши. Но линии перекрываются или пересекаются, даже если одна линия уже создана.

Может ли кто-нибудь помочь мне, как я могу рисовать несколько строк [дан рабочий код для рисования нескольких строк], не перекрывая друг друга, вместо этого он найдет другой обходной путь, чтобы избежать конфликтов с другими строками.

    public partial class Form1 : Form
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    private Point _setPointA, _setPointB;
    private static List<Point> PointList = new List<Point>();
    private Dictionary<Point, Point> PointDictionary = new Dictionary<Point, Point>();

    public Form1()
    {
        PointDictionary.Add(new Point { X = 10, Y = 10 }, new Point { X = 85, Y = 85 });

    }
    protected override void OnMouseClick(MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            if (!PointList.Any())
            {
                _setPointA = e.Location;
                PointList.Add(_setPointA);
            }
            else
            {
                _setPointB = e.Location;
                PointList.Add(_setPointB);

                //check if not intersects

                if (_setPointA.X <= _setPointB.X)
                {
                    PointDictionary.Add(_setPointA, _setPointB);
                }
                else
                {
                    PointDictionary.Add(_setPointB, _setPointA);
                }
                Refresh();
            }
        }
        base.OnMouseClick(e);
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        foreach (var v in PointDictionary)
        {
            e.Graphics.DrawLine(SystemPens.ControlDarkDark, v.Key, v.Value);
        }

        base.OnPaint(e);
        PointList.Clear();
    }
}

person APALALA    schedule 21.02.2016    source источник
comment
Пока вы набираете только два очка. Для большего количества линий вам нужно собрать больше, лучше всего в List<Point> pointlist. Чтобы нарисовать их, используйте if (pointlist.Count > 1) DrawLines<pen, pointlist.ToArray()); в событии рисования! Другое дело — избежать пересечения линий. Вы можете проверить, прежде чем добавлять новую строку, используя два GraphicsPath и выполняя операцию набора для двух областей, полученных из них. Знаете ли вы, что делать, когда новая линия пересекает одну из предыдущих строк?   -  person TaW    schedule 21.02.2016
comment
Это классическая проблема программирования Winforms, и на сайте уже есть множество соответствующих вопросов и ответов. Как следует из предыдущего комментария, первым шагом является исправление работы с несколькими строками. См. отмеченный дубликат для этого. После того, как вы решили эту проблему, попробуйте решить проблему пересечения самостоятельно; если вы не можете, опубликуйте новый вопрос, в который вы включили хороший минимально воспроизводимый пример, показывающий, что вы пробовали, с четким и кратким описанием того, что делает код и что вы хотите, чтобы он делал вместо этого.   -  person Peter Duniho    schedule 21.02.2016