Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технология Windows Presentation Foundation.docx
Скачиваний:
44
Добавлен:
18.08.2019
Размер:
850.41 Кб
Скачать

10.3. Трансформации

Трансформация – это заданное изменение координатной системы, в которой отображается элемент. Описание таких трансформаций на плоскости, как масштабирование, отражение и поворот, можно выполнить в терминах числовых матриц размером 2х2. Чтобы представить в матричной форме операцию сдвига координатной системы, используют однородные координаты.

Однородными координатами точки (x, y) является тройка вида (x, y, 1). Если дана тройка чисел (a, b, c), соответствующая точка в однородных координатах находится после применения нормировки – деления на c: (a/c, b/c, 1). Тройки (a, b, 0) описывают в однородных координатах бесконечно удалённую точку.

В терминах однородных координат основные трансформации можно выразить следующим образом:

1. Масштабирование (включая отражения): .

2. Поворот на угол φ: .

3. Сдвиг: .

Комбинация трансформаций выполняется как умножение матриц.

В WPF трансформации представлены классами, унаследованными от абстрактного класса System.Windows.Media.Transform. Набор предопределённых трансформаций перечислен в табл. 6.

Таблица 6

Классы трансформаций

Имя класса

Описание

Важные

свойства

TranslateTransform

Смещает координатную систему на указанную величину

X, Y

RotateTransform

Поворачивает координатную систему вокруг заданной точки

Angle, CenterX, CenterY

ScaleTransform

Масштабирует координатную систему. Можно применять разную степень масштабирования по измерениям X и Y

ScaleX, ScaleY, CenterX, CenterY

SkewTransform

Деформирует координатную систему, наклоняя её оси на заданное число градусов

AngleX, AngleY, CenterX, CenterY

MatrixTransform

Выполняет трансформацию, используя указанную матрицу вида

Matrix

TransformGroup

Комбинирует несколько трансформаций. Порядок трансформаций имеет значение

Children

Укажем некоторые способы задания трансформаций:

1. Класс UIElement определяет свойства RenderTransform и RenderTransformOrigin. RenderTransform – это трансформация, выполняемая после процесса компоновки непосредственно перед отображением элемента. RenderTransformOrigin задаёт стартовую (неподвижную) точку трансформации. По умолчанию это точка имеет координаты (0, 0) (координаты точки относительные, в терминах виртуального ограничивающего прямоугольника).

2. Класс FrameworkElement содержит свойство LayoutTransform для трансформации, применяемой до процесса компоновки.

3. Класс Brush имеет свойства RelativeTransform и Transform, позволяющие выполнить трансформацию кисти до и после её применения.

Следующий пример демонстрирует использование трансформаций.

<StackPanel Orientation="Horizontal">

<Button Height="40" Width="70" Content="Translate">

<Button.RenderTransform>

<TranslateTransform X="10" Y="-10"/>

</Button.RenderTransform>

</Button>

<Button Height="40" Width="70" Content="Rotate">

<Button.LayoutTransform>

<RotateTransform Angle="-45" />

</Button.LayoutTransform>

</Button>

<Button Height="40" Width="70" Content="Scale">

<Button.LayoutTransform>

<ScaleTransform ScaleX="-1" ScaleY="1.5" />

</Button.LayoutTransform>

</Button>

<Button Height="40" Width="70" Content="Skew">

<Button.RenderTransform>

<SkewTransform AngleX="20" AngleY="0" />

</Button.RenderTransform>

</Button>

<Button Height="40" Width="70" Content="Matrix">

<Button.LayoutTransform>

<MatrixTransform Matrix="1,0.5,1,-1,20,10" />

</Button.LayoutTransform>

</Button>

</StackPanel>

Рис. 32. Кнопки, подвергшиеся трансформации.