Как повернуть 2d объект в C #

Мне нужен столбец с несколькими значениями, он может быть реализован как поле xml

. Он может быть преобразован в запятую, если это необходимо

, запрашивающий список XML в sql-сервере, используя Xquery .

Будучи полем xml, некоторые проблемы могут быть устранены.

С CSV: не может гарантировать, что каждое значение является правильный тип данных: нет возможности предотвратить 1,2,3, банан, 5

С XML: значения в теге могут быть принудительно заданы для типа


С CSV: не удается использовать ограничения внешнего ключа для привязки значений к таблице поиска;

С XML: все еще проблема


С CSV: не может обеспечить уникальность: никакой возможности предотвратить 1,2,3,3 , 3,5

С XML: все еще проблема


С CSV: невозможно удалить значение из списка, не извлекая весь список.

С XML: отдельные элементы могут быть удалены


С CSV: трудно найти все объекты с заданным значением в списке; вам нужно использовать неэффективное сканирование таблицы.

С XML: поле xml можно индексировать


С CSV: трудно подсчитать элементы в списке или сделать другой агрегат запросы. **

С XML: не особо сложно


С CSV: трудно присоединить значения к справочной таблице, к которой они ссылаются. **

С XML: не особенно сложно


С CSV: трудно получить список в отсортированном порядке.

С XML: не особо сложно


С CSV: сохранение целых чисел в виде строк занимает в два раза больше места, чем сохранение двоичных целых чисел.

С XML: память еще хуже, чем csv


С CSV: Плюс много запятых.

С использованием XML: теги используются вместо запятых


Короче говоря, использование XML затрагивает некоторые проблемы с ограниченным списком И может быть при необходимости преобразуется в список с разделителями

1
задан Cody Gray 26 March 2019 в 18:23
поделиться

1 ответ

Ниже приведен пример того, как нарисовать одну и ту же форму (a GraphicsPath) в различных местах и ​​поворотах.

Ключом здесь являются следующие две команды

e.Graphics.TranslateTransform(x, y);
e.Graphics.RotateTransform(-angle);

См. Результаты ниже:

screenshot

и код, используемый для его генерации:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    // This code defines a graphics shape using a GraphicsPath
    // and draws multiple copies along a grid and with various
    // rotation angle angles.
    e.Graphics.SmoothingMode=SmoothingMode.AntiAlias;
    var target = sender as PictureBox;

    // Step 1 - Define a rectangle 20 by 12 pixels, center at origin.
    var gp = new GraphicsPath();
    gp.AddLines(new PointF[] {
        new PointF(-10, -6),
        new PointF( 10, -6),
        new PointF( 10,  6),
        new PointF(-10,  6) });
    gp.CloseFigure();

    // Step 2 - Define a 10×9 grid with two loops
    float angle = 0;
    for (int i = 0; i<9; i++)
    {
        // divide the control height into 10 divisions
        float y = (i+1)*target.Height/10;
        for (int j = 0; j<10; j++)
        {
            // divide the control width into 11 divisions
            float x = (j+1)*target.Width/11;
            // Save the default transformation state
            var state = e.Graphics.Save();

            // Traslate the origin to (x,y), each grid point
            e.Graphics.TranslateTransform(x, y);
            // Rotate shape by an angle (negative = CCW)
            e.Graphics.RotateTransform(-angle);

            // Draw the shape
            e.Graphics.FillPath(Brushes.LightSeaGreen, gp);
            e.Graphics.DrawPath(Pens.Black, gp);

            // Restore the default transformation state
            e.Graphics.Restore(state);

            // Increment the angle by one degree. 
            // The idea is to show all 90 degrees of rotation in a 10×9 grid.
            angle++;
        }
    }
}
0
ответ дан ja72 26 March 2019 в 18:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: