Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp_Graphics.doc
Скачиваний:
16
Добавлен:
16.11.2019
Размер:
3.1 Mб
Скачать

Глобальные и локальные преобразования

Глобальными преобразованиями называются преобразования, которые применяются ко всем элементам, нарисованным с помощью данного объекта Graphics. Локальным преобразованием называется преобразование, применяемое к определенному рисуемому элементу.

Глобальные преобразования

Чтобы создать глобальное преобразование, нужно создать объект Graphics и нужным образом изменить значение его свойства Transform. Значением свойства Transform является объект Matrix, который может содержать любую последовательность аффинных преобразований. Преобразование, заданное свойством Transform, называется объемным преобразование. Класс Graphics содержит несколько методов, осуществляющих составные объемные преобразования: MultiplyTransform, RotateTransform, ScaleTransform и TranslateTransform. В приведенном ниже примере дважды демонстрируется рисование эллипса: один раз перед заданием объемных преобразований и один раз после. Преобразование заключается в масштабировании вдоль оси Y с масштабным коэффициентом 0,5, после которого выполняется сдвиг на 50 единиц по оси X, а затем выполняется поворот на 30 градусов.

-------

На приведенном ниже рисунке изображены использовавшиеся при задании преобразования матрицы.

-----

Примечание.

В приведенном выше примере поворот эллипса выполняется относительно расположенного в верхнем левом углу клиентской области начала координат. Результат применения такого поворота отличается от поворота эллипса относительно его собственного центра.

Local Transformations

A local transformation applies to a specific item to be drawn. For example, a GraphicsPath object has a Transform method that allows you to transform the data points of that path. The following example draws a rectangle with no transformation and a path with a rotation transformation. (Assume that there is no world transformation.)

Matrix myMatrix = new Matrix();

myMatrix.Rotate(45);

myGraphicsPath.Transform(myMatrix);

myGraphics.DrawRectangle(myPen, 10, 10, 100, 50);

myGraphics.DrawPath(myPen, myGraphicsPath);

You can combine the world transformation with local transformations to achieve a variety of results. For example, you can use the world transformation to revise the coordinate system and use local transformations to rotate and scale objects drawn on the new coordinate system.

Suppose you want a coordinate system that has its origin 200 pixels from the left edge of the client area and 150 pixels from the top of the client area. Furthermore, assume that you want the unit of measure to be the pixel, with the x-axis pointing to the right and the y-axis pointing up. The default coordinate system has the y-axis pointing down, so you need to perform a reflection across the horizontal axis. The following illustration shows the matrix of such a reflection.

Next, assume you need to perform a translation 200 units to the right and 150 units down.

The following example establishes the coordinate system just described by setting the world transformation of a Graphics object.

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

myGraphics.Transform = myMatrix;

myGraphics.TranslateTransform(200, 150, MatrixOrder.Append);