Поделиться через


Синтаксис команд перемещения и рисования

Информация о командах перемещения и рисования (мини-языке), которые вы можете использовать для указания геометрии путей в качестве значения атрибута XAML. Команды перемещения и рисования используются многими средствами разработки и графическими инструментами, умеющими выводить векторную графику или фигуру как формат сериализации и обмена.

Свойства, использующие строки команд перемещения и рисования

Синтаксис команд перемещения и рисования поддерживается конвертером внутренних типов для XAML, который анализирует команды и создает графическое представление времени выполнения. В сущности, это представление — конечный набор векторов, готовый для представления. Сами векторы не завершают подробности представления; вам еще нужно будет задать другие значения для элементов. Для объекта Path вам также требуются значения для Fill, Stroke и других свойств. Затем этот объект Path необходимо тем или иным образом подключить к визуальному дереву. Для объекта PathIcon задайте свойство Foreground.

В среде выполнения Windows есть два свойства, которые умеют использовать строку, представляющую команды перемещения и рисования: Path.Data и PathIcon.Data. Если вы задаете одно из этих свойств при помощи указания команд перемещения и рисования, вы обычно задаете его как значение атрибута XAML вместе с другими необходимыми атрибутами этого элемента. Если не вдаваться в подробности, это выглядит так:

<Path x:Name="Arrow" Fill="White" Height="11" Width="9.67"
  Data="M4.12,0 L9.67,5.47 L4.12,10.94 L0,10.88 L5.56,5.47 L0,0.06" />

Использование команд перемещения и рисования в сравнении с использованием PathGeometry

Для XAML среды выполнения Windows команды перемещения и рисования создают PathGeometry с одним объектом PathFigure со значением свойства Figures. Каждая команда рисования создает производный класс PathSegment в наборе Segments этого одного PathFigure, команда перемещения изменяет StartPoint, а при существовании команды закрытия для IsClosed устанавливается значение true. По этой структуре можно перемещаться как по объектной модели, если вы проверяете значения Data во время выполнения.

Основной синтаксис

Синтаксис команд перемещения и рисования в основном можно представить так:

  1. Начните с необязательного правила заливки. Обычно оно указывается только в случае, если нужно изменить действующее по умолчанию правило EvenOdd. (Подробнее об EvenOdd будет рассказано позже.)
  2. Укажите ровно одно команду перемещения.
  3. Укажите одну или несколько команд рисования.
  4. Укажите команду закрытия. Команду закрытия можно не указывать, но тогда фигура останется открытой (это используется редко).

Общие правила этого синтаксиса:

  • Каждая команда представлена ровно одной буквой.
  • Эта буква может быть в верхнем или нижнем регистре. Регистр имеет значение, как будет описано ниже.
  • Обычно после каждой команды, кроме команды закрытия, идет одно или несколько чисел.
  • Если после команды идет несколько чисел, разделите их запятыми или пробелами.

[fillRule]moveCommanddrawCommand[drawCommand*][closeCommand]

Многие команды рисования используют точки, при этом вы предоставляете значение x,y. Всякий раз, когда вы видите заполнитель *points , можно предположить, что вы даете два десятичных значения для значения x,y точки.

Пробел часто можно опустить, когда результат однозначен. Фактически можно опустить все пробелы, если вы используете запятые в качестве разделителей для всех наборов чисел (точки и размер). Например, такое использование допустимо: F1M0,58L2,56L6,60L13,51L15,53L6,64z. Но для ясности между командами чаще ставятся пробелы.

Не используйте запятые в качестве десятичных разделителей для дробных чисел. Строка команды интерпретируется языком XAML и не учитывает характерные для языка и региональных параметров соглашения о форматировании чисел, отличные от тех, что используются в языковом стандарте en-us.

Особенности синтаксиса

Правило заливки

Для необязательного правила заливки возможны два значения: F0 или F1. (F всегда в верхнем регистре.) F0 — это значение по умолчанию; оно задает поведение заливки EvenOdd, поэтому обычно его не указывают. Используйте F1, чтобы получить поведение заливки Nonzero. Эти значения заливки совпадают со значениями перечисления FillRule.

Команда "Переместить"

Задает начальную точку новой фигуры.

Синтаксис
M Начало
— или —
mНачало
Термин Описание
Начало Точки
Начальная точка новой фигуры.

M в верхнем регистре означает, что startPoint — это абсолютная координата; m в нижнем регистре означает, что startPoint — это смещение относительно предыдущей точки или же относительно (0,0), если предыдущей точки не было.

Примечание После команды перемещения можно указать несколько точек. К этим точкам проводится линия, как если бы вы указали команду линии. Однако такой стиль не рекомендуется; используйте вместо этого команду выделенной линии.

Команды рисования

Команда рисования может состоять из нескольких команд фигур: линия, горизонтальная линия, вертикальная линия, кривая Безье третьего порядка, кривая Безье второго порядка, гладкая кривая Безье третьего порядка, гладкая кривая Безье второго порядка и дуга эллипса.

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

Контрольные точки для сегмента указываются относительно конечной точки предыдущего сегмента. При последовательном вводе нескольких команд одного типа можно опустить повторяющуюся команду. Например, выражение L 100,200 300,400 будет эквивалентно L 100,200 L 300,400.

Команда строки

Создает прямую линию между текущей и заданной конечной точками. l 20 30 и L 20,30 являются примерами допустимых команд строки. Определяет эквивалент объекта LineGeometry.

Синтаксис
LКонечной точки
— или —
lКонечной точки
Термин Описание
endPoint Точки
Конечная точка строки.

Команда горизонтальной строки

Создает горизонтальную линию между текущей точкой и заданной координатой X. H 90 — пример допустимой команды рисования горизонтальной линии.

Синтаксис
H x
— или —
h x
Термин Описание
x Double
Координата X конечной точки линии.

Команда вертикальной строки

Создает вертикальную линию между текущей точкой и заданной координатой Y. v 90 — пример допустимой команды рисования вертикальной линии.

Синтаксис
V Y
— или —
v Y
Термин Описание
y Double
Координата Y конечной точки линии.

Команда кривой Безье третьего порядка

Создает кривую Безье третьего порядка между текущей точкой и указанной конечной точкой при помощи двух указанных контрольных точек (controlPoint1 и controlPoint2). C 100,200 200,400 300,200 — пример допустимой команды рисования кривой линии. Определяет эквивалент объекта PathGeometry с объектом BezierSegment.

Синтаксис
C controlPoint1controlPoint2endPoint
— или —
c controlPoint1controlPoint2endPoint
Термин Описание
controlPoint1 Точки
Первая контрольная точка кривой, которая определяет начальную касательную к кривой.
controlPoint2 Точки
Вторая контрольная точка кривой, которая определяет конечную касательную к кривой.
Конечной точки Точки
Точка для рисования кривой.

Команда кривой Безье второго порядка

Создает кривую Безье второго порядка между текущей точкой и указанной конечной точкой при помощи указанной контрольной точки (controlPoint). q 100,200 300,200 — это пример допустимой команды кривой Безье. Определяет эквивалент объекта PathGeometry с объектом QuadraticBezierSegment.

Синтаксис
Q ControlPoint endPoint
— или —
q ControlPoint endPoint
Термин Описание
controlPoint Точки
Контрольная точка кривой, которая определяет начальную и конечную касательные к кривой.
Конечной точки Точки
Точка для рисования кривой.

Команда гладкой кривой Безье третьего порядка

Создает кривую Безье третьего порядка между текущей точкой и указанной конечной точкой. Предполагается, что первая контрольная точка является отражением второй контрольной точки предыдущей команды относительно текущей точки. Если предыдущей команды нет или она не является командой кривой Безье третьего порядка или гладкой кривой Безье третьего порядка, считается, что первая контрольная точка совпадает с текущей точкой. Вторая контрольная точка — контрольная точка для конца кривой — указывается с помощью controlPoint2. Например, S 100,200 200,300 — допустимая команда гладкой кривой Безье третьего порядка. Эта команда определяет эквивалент объекта PathGeometry с объектом BezierSegment, где был предыдущий сегмент кривой.

Синтаксис
ScontrolPoint2endPoint
— или —
scontrolPoint2 endPoint
Термин Описание
controlPoint2 Точки
Контрольная точка кривой, которая определяет конечную касательную к кривой.
Конечной точки Точки
Точка для рисования кривой.

Команда гладкой кривой Безье второго порядка

Создает кривую Безье второго порядка между текущей точкой и указанной конечной точкой. Предполагается, что контрольная точка является отражением контрольной точки предыдущей команды относительно текущей точки. Если предыдущей команды нет или она не является командой кривой Безье второго порядка или гладкой кривой Безье второго порядка, контрольная точка совпадает с текущей точкой. Эта команда определяет эквивалент объекта PathGeometry с объектом QuadraticBezierSegment, где был предыдущий сегмент кривой.

Синтаксис
TControlPointendPoint
— или —
tControlPointendPoint
Термин Описание
controlPoint Точки
Контрольная точка кривой, которая определяет начальную касательную к кривой.
Конечной точки Точки
Точка для рисования кривой.

Команда elliptical arc

Создает эллиптическую дугу между текущей и заданной конечной точками. Определяет эквивалент объекта PathGeometry с объектом ArcSegment.

Синтаксис
A sizerotationAngleisLargeArcFlagsweepDirectionFlagendPoint
— или —
a sizerotationAngleisLargeArcFlagsweepDirectionFlagendPoint
Термин Описание
size Размер
Радиусы дуги по оси x и по оси y.
rotationAngle Double
Поворот эллипса в градусах.
isLargeArcFlag Значение 1, если угол дуги должен быть 180 градусов или больше, в противном случае — значение 0.
sweepDirectionFlag Значение 1, если дуга рисуется в направлении положительного угла, в противном случае — значение 0.
Конечной точки Точки
Точка, в которую рисуется дуга.

Команда "Закрыть"

Заканчивает текущую фигуру и создает линию, соединяющую текущую точку с начальной точкой фигуры. Эта команда создает соединительную линию (угол) между последним и первым сегментами фигуры.

Синтаксис
Z
— или —
z

Синтаксис точки

Описывает координаты точки (x и y). См. также Point.

Синтаксис
x,y
— или —
xy
Термин Описание
x Double
Координата X точки.
y Double
Координата Y точки.

Дополнительные замечания

Вместо стандартных числовых значений можно использовать следующие специальные значения. Эти значения указываются с учетом регистра.

  • Infinity: представляет PositiveInfinity.
  • -Infinity: представляет negativeInfinity.
  • NaN: представляет NaN.

Вместо десятичных или целых чисел можно использовать экспоненциальное представление. Например, +1.e17 — допустимое значение.

Средства проектирования, создающие команды перемещения и рисования

Перо и другие инструменты рисования в Blend для Microsoft Visual Studio 2015 обычно создают объект Path с использованием команд перемещения и рисования.

Вы можете увидеть существующие данные команд перемещения и рисования в некоторых частях элемента управления, определенных в стандартных XAML-шаблонах для элементов управления в среде выполнения Windows. Например, некоторые элементы управления используют PathIcon, который содержит данные, определенные как команды перемещения и рисования.

Существуют средства экспорта и подключаемые модули, доступные для других распространенных средств разработки, которые работают с векторной графикой и умеют выводить вектор в форме XAML. Они обычно создают объекты Path в контейнере макета с помощью команд перемещения и рисования для Path.Data. В XAML может быть несколько элементов Path, чтобы можно было применять разные кисти. Многие из этих средств экспорта или подключаемых модулей изначально были написаны для Windows Presentation Foundation (WPF) XAML или Silverlight, но синтаксис пути XAML идентичен синтаксису среда выполнения Windows XAML. Чаще всего можно использовать блоки XAML из средства экспорта и вставлять их прямо в XAML-страницу среды выполнения Windows. (Но вы не сможете использовать элемент RadialGradientBrush, если он был частью преобразованного XAML, так как XAML среды выполнения Windows не поддерживает эту кисть.)