Сделайте программу калейдоскопа в C#

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

Обработчики событий MouseDown, MouseMove и MouseUp выполняют большую часть работы. Программа сохраняет информацию о чертеже в List & lt; List & lt; Point & gt; & gt; & gt; & lt; / tt>. Каждый элемент в списке дает список точек для рисования, чтобы сделать кривую. Обработчики событий MouseDown, MouseMove и MouseUp создают списки точек.

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

private void picCanvas_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

        List matrices = new List();
    matrices.Add(new Matrix());

        int wid = picCanvas.ClientSize.Width;
    int hgt = picCanvas.ClientSize.Height;
    Rectangle src_rect = new Rectangle(0, 0, wid, hgt);
    if (mnuStyleReflectX.Checked || mnuStyleReflectXY.Checked)
    {
                Point[] pts = { new Point(wid, 0), new Point(0, 0),
            new Point(wid, hgt) };
        Matrix mat = new Matrix(src_rect, pts);
        matrices.Add(mat);
    }
    if (mnuStyleReflectY.Checked || mnuStyleReflectXY.Checked)
    {
                Point[] pts = { new Point(0, hgt), new Point(wid, hgt),
            new Point(0, 0) };
        Matrix mat = new Matrix(src_rect, pts);
        matrices.Add(mat);
    }
    if (mnuStyleReflectXY.Checked)
    {
                Point[] pts = { new Point(wid, hgt), new Point(0, hgt),
            new Point(wid, 0) };
        Matrix mat = new Matrix(src_rect, pts);
        matrices.Add(mat);
    }
    if (mnuStyleRotate2.Checked)
    {
                Matrix mat = new Matrix();
        mat.RotateAt(180, new PointF(wid / 2, hgt / 2));
        matrices.Add(mat);
    }
    if (mnuStyleRotate4.Checked)
    {
                for (int i = 1; i <= 3; i++)
        {
            Matrix mat = new Matrix();
            mat.RotateAt(i * 90, new PointF(wid / 2, hgt / 2));
            matrices.Add(mat);
        }
    }
    if (mnuStyleRotate8.Checked)
    {
                for (int i = 1; i <= 7; i++)
        {
            Matrix mat = new Matrix();
            mat.RotateAt(i * 45, new PointF(wid / 2, hgt / 2));
            matrices.Add(mat);
        }
    }

        foreach (Matrix mat in matrices)
    {
        e.Graphics.Transform = mat;
        foreach (List pline in Polylines)
        {
            e.Graphics.DrawLines(Pens.Blue, pline.ToArray());
        }
    }
}

Код создает List & lt; Matrix & gt; для хранения матриц преобразования. Он инициализирует список, добавляя преобразование идентичности, которое оставляет рисунок неизменным. Затем, в зависимости от стиля калейдоскопа, выбранного в меню программы, код добавляет в список другие матрицы преобразования.

После того, как был составлен список преобразований, программа проходит через них. Для каждого преобразования программа проходит через List & lt; List & lt; Point & gt; & gt;, соединяющая точки для рисования кривых, которые вы сделали. Результатом является несколько преобразованных копий ваших кривых, что делает калейдоскопический результат.

Источник: http://csharphelper.com/blog/2015/07/make-a-kaleidoscope-program-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector