Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по C#.doc
Скачиваний:
259
Добавлен:
08.11.2018
Размер:
5.81 Mб
Скачать
      1. Примеры построения графических объектов

        1. Кривая Безье

Пусть в проекте создана на форме панель Panel1. На этой панели нарисуем пучок кривых Безье, исходящих из единого центра. Центр пучка совпадает с точкой соприкосновения курсора мыши с панелью. При нажатии левой кнопки мыши пучок появляется. При движении мыши с нажатой левой кнопкой центр пучка перемещается за мышью и кривые перерисовываются. Как только кнопка мыши отпускается – рисунок фиксируется. Двойным щелчком мыши полотно очищается.

Чтобы создать пучок кривых из трех кривых Безье, исходящих из точки соприкосновения курсора мыши с полотном выполните следующие действия:

  1. Создайте класс глобальных переменных для объектов: перо, полотно, координаты центра пучка и его концов, индикатора нажатия мыши.

Пример:

public class MyMouse

{ public static int ind; //индикатор нажатия мыши

public static Graphics graph; //полотно

public static Pen MyPen; //перо

public static Point pt, pt1, pt2, pt3;

}

  1. Создайте обработчик нажатия мыши, в котором пропишите характеристики пера, инициализацию переменных для координат кривых и полотна. Чтобы отследить положение кнопок мыши в дальнейшем, зададим индикатору мыши значение 1 – «нажата». При движении мыши с нажатой клавишей (со значением индикатора равным 1), кривые будут перерисовываться. При движении мыши с не нажатой клавишей (со значением индикатора равным 0), кривые рисоваться не будут.

Пример.

private void panel1_MouseDown(object sender, MouseEventArgs e)

{ MyMouse.ind = 1;

MyMouse.graph = this.panel1.CreateGraphics();

MyMouse.MyPen = new Pen(Color.Azure, 1);

MyMouse.pt = new Point(); //центр пучка

MyMouse.pt2 = new Point();

MyMouse.pt3 = new Point();

MyMouse.pt1 = new Point();

}

  1. Создайте обработчик отжатия мыши, в котором присвойте индикатору мыши значение 0 – «не нажата».

Пример.

private void panel1_MouseUp(object sender, MouseEventArgs e)

{ MyMouse.ind = 0; }

  1. Создайте обработчик движения мыши. Если индикатор мыши равен единицы, то необходимо прописать в коде: очистку полотна, координаты центра пучка, и координаты кривых Безье. В качестве трех дополнительных точек кривых Безье используются статические точки, находящиеся на различных границах полотна. Дополнительные точки можно создавать и с помощью датчика случайных чисел.

Пример.

private void panel1_MouseMove(object sender, MouseEventArgs e)

{ if (MyMouse.ind == 1)

{ // Очищаем полотно

MyMouse.graph.Clear(Color.White);

//Считываем координаты мыши и присваиваем их координатам центра

MyMouse.pt.X = e.X; MyMouse.pt.Y = e.Y;

//Задаем цвет первой кривой

MyMouse.MyPen.Color = Color.Blue;

// Задаем дополнительные точки

MyMouse.pt1.X = 0; MyMouse.pt1.Y = 0;

MyMouse.pt2.X = 0; MyMouse.pt2.Y = panel1.Height;

MyMouse.pt3.X = panel1.Width; MyMouse.pt3.Y = panel1.Height;

// Рисуем первую кривую

MyMouse.graph.DrawBezier(MyMouse.MyPen, MyMouse.pt, MyMouse.pt1,

MyMouse.pt2, MyMouse.pt3);

// Вторая кривая

MyMouse.MyPen.Color = Color.Green;

MyMouse.pt1.X = panel1.Width; MyMouse.pt1.Y = 0;

MyMouse.pt2.X = panel1.Width; MyMouse.pt2.Y = panel1.Height;

MyMouse.pt3.X = 0; MyMouse.pt3.Y = panel1.Height;

MyMouse.graph.DrawBezier(MyMouse.MyPen, MyMouse.pt, MyMouse.pt1,

MyMouse.pt2, MyMouse.pt3);

// Третья кривая

MyMouse.MyPen.Color = Color.Red;

MyMouse.pt1.X = panel1.Width/3; MyMouse.pt1.Y = panel1.Height / 2;

MyMouse.pt2.X = 2*panel1.Width/3; MyMouse.pt2.Y = panel1.Height/2;

MyMouse.pt3.X = MyMouse.pt.X; MyMouse.pt3.Y = MyMouse.pt.Y;

MyMouse.graph.DrawBezier(MyMouse.MyPen, MyMouse.pt, MyMouse.pt1,

MyMouse.pt2, MyMouse.pt3);

} }

  1. Создайте обработчик двойного щелчка мыши, в котором пропишите команду очистки полотна

private void panel1_MouseDoubleClick(object sender, MouseEventArgs e)

{ MyMouse.graph.Clear(Color.White);

}