Компьютерная графика, мультимедиа и игры на Visual C#

       

Вращение линии


Листинг 54.1. Код проектирования рисунка.

//Объявляем глобальную переменную для угла "angle"

//и приравниваем ее нулю:

int angle = 0;

private void pictureBox1_Paint(object sender,

                                            PaintEventArgs e)

{

    //Объявляем объект myGraphicsPath класса GraphicsPath:

    GraphicsPath myGraphicsPath = new GraphicsPath();

    //На объекте myGraphicsPath выполняем процедуру

    //AddLine для построения линии по двум точкам

    //с координатами (29, 29) и (100, 100):

    myGraphicsPath.AddLine(29, 29, 100, 100);



    //В классе Matrix создаем объект myMatrix

    //в виде матицы преобразований:

    Matrix myMatrix = new Matrix(1, 0, 0, 1, 1, 1);

    //В структуре PointF создаем объект myPointF

    //с координатами точки (100, 100);,

    //вокруг которой будет вращаться линия:

    PointF myPointF = new PointF(100, 100);

    //Поворачиваем линию вокруг точки (100, 100)

    //на один шаг при помощи метода RotateAt

    //класса Matrix:

    myMatrix.RotateAt(angle, myPointF);

    //Применяем метод Transform класса GraphicsPath

    //для трансформирования матрицы myMatrix:

    myGraphicsPath.Transform(myMatrix);

    //Рисуем на экране трансформированную линию

    //черным пером толщиной 3 (Pen(Color.Black, 3)):

    e.Graphics.DrawPath(new Pen(Color.Black, 3),

                                           myGraphicsPath);

    //Увеличиваем текущий угол поворота линии

    //на один шаг, равный 6 градусам:

    angle = angle + 6;

    //Обнуляем угол поворота линии,

    //когда линия сделает полный оборот в 360 градусов:

    if (angle == 360) angle = 0;

    //Для наглядности внутри квадрата 200x200

    //рисуем окружность (типа циферблата часов)

    //синим пером толщиной 2 (Pen(Color.Blue, 2),

    //внутри которой будет вращаться линия:

    e.Graphics.DrawEllipse(new Pen(Color.Blue, 2),

                                         0, 0, 200, 200);


    //Рисуем две оси симметрии окружности,
    //горизонтальную и вертикальную:
    e.Graphics.DrawLine(new Pen(Color.Red, 1),
                                  0, 100, 200, 100);
    e.Graphics.DrawLine(new Pen(Color.Red, 1),
                                  100, 0, 100, 200);
}
Листинг 54.2. Код для анимации рисунка.
 
private void timer1_Tick(object sender, EventArgs e)
{
      // Перерисовываем клиентскую область элемента управления
      //pictureBox1 через каждый Interval времени:
      pictureBox1.Refresh();
}
Напомним, что в этом коде метод Refresh (класса Control) перерисовывает клиентскую область элемента управления (в нашем примере, элемента управления PictureBox) через каждые, заданные нами в таймере, 1000 миллисекунд (1 секунду). За счет этого мы видим поворот стрелки в динамике (во времени).
Таким образом, в этой главе мы разработали методику создания анимации (в комплексе Visual C#) на экране монитора и печати текущего положения анимации на принтере. Теперь по этой методике продолжим разработку следующих форм (согласно оглавлению системы анимации) для проектирования более сложных анимаций (в следующей главе).

Содержание раздела