Как нарисовать выбираемую линию? - PullRequest
3 голосов
/ 30 августа 2010

Я хочу создать приложение, которое пользователь сможет манипулировать линией, которую он рисует.Что-то вроде удаления строки или ее выбора.Как мне это сделать?

Заранее спасибо


Мне удалось сделать это с помощью жестко закодированного прямоугольника.Но у меня до сих пор нет идеи, как это сделать с помощью drawLine() Могу ли я использовать drawPath для проведения теста на попадание?

Вот код:

private bool selectGraph = false;
private Rectangle myrec = new Rectangle(50, 50, 100, 100);
private Graphics g;

private void panel1_Paint(object sender, PaintEventArgs e)
    {
        SolidBrush sb = new SolidBrush(Color.Blue);
        Pen p = new Pen(Color.Blue, 5);

        e.Graphics.DrawRectangle(p, myrec);
        e.Graphics.FillRectangle(sb, myrec);
    }

    private void panel1_MouseUp(object sender, MouseEventArgs e)
    {
        Point mPT = new Point(e.X, e.Y);

        if (e.Button == MouseButtons.Left)
        {
            if (myrec.Contains(mPT))
            {
                selectGraph = true;
                button1.Enabled = true;
            }
            else
            {
                selectGraph = false;
                button1.Enabled = false;
            }
        }
        Invalidate();
    }

Ответы [ 2 ]

2 голосов
/ 30 августа 2010

Ну, вы могли бы начать с чего-то вроде простого Line класса:

public class Line
{
    public Point Start { get; set; }
    public Point End { get; set; }
}

Тогда вы могли бы иметь свою форму:

private Line Line = new Line();

protected override void OnPaint(PaintEventArgs e)
{
    e.Graphics.DrawLine(Pens.Red, this.Line.Start, this.Line.End);
}

protected override void OnMouseMove(MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        this.Line.Start = e.Location;
        this.Refresh();
    }
    else if (e.Button == MouseButtons.Right)
    {
        this.Line.End = e.Location;
        this.Refresh();
    }
}

Так что в принципе тогда они могли бы удалить this.Line может быть по нажатию "MiddleButton" или как-то так.Этого должно быть достаточно, чтобы начать работу.

Я создал образец , который показывает, как это можно сделать.Установите некоторые контрольные точки и посмотрите, как это делается.

0 голосов
/ 30 августа 2010

Нет простого однострочного решения для этого.Вы должны запрограммировать это сами.

Вы должны отслеживать каждый нарисованный вами объект.В событии onmousedown вы должны выяснить, щелкала ли мышь по объекту, который вы хотите переместить / удалить, или рядом с ним, путем сравнения координат.Затем вам нужно нарисовать какое-то визуальное руководство, чтобы линия была «выделена».Удаление теперь довольно просто, удалив объект из коллекции.

Для перетаскивания вы должны сделать нечто подобное, изменив координаты объекта в соответствии с движением мыши.

...