Синтаксис команд перемещения и рисования
Узнайте о командах перемещения и рисования (мини-языке), которые можно использовать для указания геометрий пути в качестве значения атрибута XAML. Команды перемещения и рисования используются многими инструментами проектирования и графики, которые могут выводить векторный рисунок или фигуру в качестве формата сериализации и обмена.
Свойства, использующие строки команд перемещения и рисования
Синтаксис команды перемещения и рисования поддерживается внутренним преобразователем типов для XAML, который анализирует команды и создает графическое представление во время выполнения. Это представление в основном является готовым набором векторов, готовых к презентации. Векторы сами не завершают сведения о презентации; Вам по-прежнему потребуется задать другие значения для элементов. Для объекта 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
Для среда выполнения Windows XAML команды перемещения и рисования создают pathGeometry с одним объектом PathFigure со значением свойства "Цифры". Каждая команда рисования создает производный класс PathSegment в одной коллекции Сегментов PathFigure, команда перемещения изменяет Начальную точку и существование близких наборов команд IsClosed на true. Эту структуру можно перемещать как объектную модель при проверке значений данных во время выполнения.
Базовый синтаксис
Синтаксис для команд перемещения и рисования можно суммировать следующим образом:
- Начните с необязательного правила заполнения. Обычно этот параметр указывается только в том случае, если не требуется значение по умолчанию EvenOdd . (Дополнительные сведения EvenOdd позже.)
- Укажите ровно одну команду перемещения.
- Укажите одну или несколько команд рисования.
- Укажите команду закрытия. Вы можете опустить закрытую команду, но это оставило бы фигуру открытой (это редко).
Общие правила этого синтаксиса:
- Каждая команда представлена ровно одной буквой.
- Это буква может быть верхним или нижним регистром. Дело имеет значение, как описано.
- Каждая команда, за исключением команды закрытия, обычно следует один или несколько чисел.
- Если для команды несколько чисел, разделите запятой или пробелом.
[fillRule] moveCommand drawCommand [drawCommand*] [closeCommand]
Многие команды рисования используют точки, в которых вы предоставляете значение x,y . Всякий раз, когда отображается заполнитель *точек, вы можете предположить, что вы предоставляете два десятичных значения для значения x,y точки.
Пробелы часто могут быть опущены, если результат не неоднозначный. Если вы используете запятые для всех наборов чисел (точек и размера), можно опустить все пробелы. Например, это использование является законным: F1M0,58L2,56L6,60L13,51L15,53L6,64z
Но это более типично, чтобы включить пробелы между командами для ясности.
Не используйте запятые в качестве десятичной запятой для десятичных чисел; Командная строка интерпретируется XAML и не учитывает соглашения о форматировании чисел для конкретного языка и региональных параметров, которые отличаются от тех, которые используются в языковом стандарте en-us .
Особенности синтаксиса
Правило заливки
Существует два возможных значения для необязательного правила заполнения: F0 или F1. (The F всегда верхний регистр.) F0 — это значение по умолчанию; оно создает поведение заполнения EvenOdd , поэтому обычно не указать его. Используйте F1 , чтобы получить поведение заливки nonzero . Эти значения заливки соответствуют значениям перечисления FillRule .
Команда перемещения
Задает начальную точку новой фигуры.
Синтаксис |
---|
M startPoint - или - m startPoint |
Срок | Description |
---|---|
startPoint | Point Начальная точка новой фигуры. |
Верхний регистр M указывает, что startPoint является абсолютной координатой; нижний регистр m указывает, что startPoint является смещением к предыдущей точке или (0,0), если предыдущей точки не было.
Обратите внимание , что после команды перемещения укажите несколько точек. Строка рисуется к этим точкам, как если бы вы указали команду строки. Однако это не рекомендуемый стиль; Вместо этого используйте команду выделенной строки.
Команды рисования
Команда рисования может состоять из нескольких команд фигуры: линия, горизонтальная линия, вертикальная линия, кубическая кривая Bezier, квадратная кривая Bezier, гладкая кубическая кривая Bezier, гладкая квадратная кривая Bezier и эллиптическая дуга.
Для всех команд рисования имеет значение регистра. Прописные буквы указывают абсолютные координаты и строчные буквы указывают координаты относительно предыдущей команды.
Контрольные точки для сегмента относятся к конечной точке предыдущего сегмента. При последовательном вводе нескольких команд одного типа можно опустить дубликат команды. Например, выражение L 100,200 300,400
будет эквивалентно L 100,200 L 300,400
.
Команда "Строка"
Создает прямую линию между текущей и заданной конечной точками. l 20 30
и L 20,30
являются примерами допустимых команд строки. Определяет эквивалент объекта LineGeometry.
Синтаксис |
---|
L конечная точка - или - l конечная точка |
Срок | Description |
---|---|
endPoint | Point Конечная точка строки. |
Команда горизонтальной строки
Создает горизонтальную линию между текущей точкой и заданной координатой X. H 90
— пример допустимой команды рисования горизонтальной линии.
Синтаксис |
---|
H x -или- h x |
Срок | Description |
---|---|
x | Двойной Координата X конечной точки линии. |
Команда вертикальной строки
Создает вертикальную линию между текущей точкой и заданной координатой Y. v 90
— пример допустимой команды рисования вертикальной линии.
Синтаксис |
---|
V y -или- v y |
Срок | Description |
---|---|
г | Двойной Координата Y конечной точки линии. |
Команда кривой "Кубическая Bézier"
Создает кубическую кривую Bézier между текущей точкой и указанной конечной точкой с помощью двух указанных точек управления (controlPoint1 и controlPoint2). C 100,200 200,400 300,200
— пример допустимой команды рисования кривой линии. Определяет эквивалент объекта PathGeometry с объектом BezierSegment.
Синтаксис |
---|
C controlPoint1 controlPoint2 endPoint -или- c controlPoint1 controlPoint2 endPoint |
Срок | Description |
---|---|
controlPoint1 | Point Первая контрольная точка кривой, которая определяет начальную касательную к кривой. |
controlPoint2 | Point Вторая контрольная точка кривой, которая определяет конечную касательную к кривой. |
endPoint | Point Точка для рисования кривой. |
Команда кривых квадратических Bézier
Создает квадратную кривую Bézier между текущей точкой и указанной конечной точкой с помощью указанной контрольной точки (controlPoint). q 100,200 300,200
является примером допустимой команды квадратной кривой Bézier. Определяет эквивалент PathGeometry с quadraticBezierSegment.
Синтаксис |
---|
Q controlPoint endPoint -или- q controlPoint endPoint |
Срок | Description |
---|---|
controlPoint | Point Контрольная точка кривой, которая определяет начальную и конечную касательные к кривой. |
endPoint | Point Точка для рисования кривой. |
Команда гладкой кубической кривой Bézier
Создает кубическую кривую Bézier между текущей точкой и указанной конечной точкой. Предполагается, что первая контрольная точка является отражением второй контрольной точки предыдущей команды относительно текущей точки. Если предыдущей команды нет или если предыдущая команда не была кубической кривой Bézier или гладкой командой кривой Bézier, предположим, что первая контрольная точка совпадает с текущей точкой. Вторая контрольная точка — контрольная точка для конца кривой — определяется элементом controlPoint2. Например, S 100,200 200,300
допустимая команда гладкой кубической кривой Bézier. Эта команда определяет эквивалент PathGeometry с bezierSegment, где был предыдущий сегмент кривой.
Синтаксис |
---|
S controlPoint2 конечная точка -или- s controlPoint2 endPoint |
Срок | Description |
---|---|
controlPoint2 | Point Контрольная точка кривой, которая определяет конечную касательную к кривой. |
endPoint | Point Точка для рисования кривой. |
Команда гладкой квадратной кривой Bézier
Создает квадратную кривую Bézier между текущей точкой и указанной конечной точкой. Предполагается, что контрольная точка является отражением контрольной точки предыдущей команды относительно текущей точки. Если предыдущей команды нет или если предыдущая команда не была четырехкратной командой кривой Bézier или гладкой квадратной кривой Bézier, точка управления совпадает с текущей точкой. Эта команда определяет эквивалент PathGeometry с quadraticBezierSegment, где был предыдущий сегмент кривой.
Синтаксис |
---|
T controlPoint конечная точка -или- t controlPoint конечная точка |
Срок | Description |
---|---|
controlPoint | Point Контрольная точка кривой, которая определяет начальную касательную к кривой. |
endPoint | Point Точка для рисования кривой. |
Команда эллиптической дуги
Создает эллиптическую дугу между текущей и заданной конечной точками. Определяет эквивалент PathGeometry с ArcSegment.
Синтаксис |
---|
A размер rotationAngle isLargeArcFlag sweepDirectionFlag endPoint -или- a размер rotationAngle isLargeArcFlag sweepDirectionFlag endPoint |
Срок | Description |
---|---|
size | Размер Радиус x и радиус y дуги. |
rotationAngle | Двойной Поворот эллипса в градусах. |
isLargeArcFlag | Значение 1, если угол дуги должен быть 180 градусов или больше, в противном случае — значение 0. |
sweepDirectionFlag | Значение 1, если дуга рисуется в направлении положительного угла, в противном случае — значение 0. |
endPoint | Point Точка, в которую рисуется дуга. |
Закрыть команду
Заканчивает текущую фигуру и создает линию, соединяющую текущую точку с начальной точкой фигуры. Эта команда создает соединительную линию (угол) между последним и первым сегментами фигуры.
Синтаксис |
---|
Z -или- z |
Синтаксис точки
Описывает координату x и y точки. См. также пункт "Точка".
Синтаксис |
---|
x,y -или- xy |
Срок | Description |
---|---|
x | Двойной Координата X точки. |
г | Двойной Координата Y точки. |
Дополнительные замечания
Вместо стандартных числовых значений можно использовать следующие специальные значения. Эти значения чувствительны к регистру.
- Бесконечность: представляет положительное значение.
- -Бесконечность: представляет отрицательное значениеInfinity.
- NaN: представляет NaN.
Вместо использования десятичных или целых чисел можно использовать научные нотации. Например, +1.e17
является допустимым значением.
Средства разработки, которые создают команды перемещения и рисования
Использование средства пера и других инструментов рисования в Blend для Microsoft Visual Studio 2015 обычно создает объект Path с командами перемещения и рисования.
Вы можете увидеть существующие данные команды перемещения и рисования в некоторых элементах управления, определенных в шаблонах среда выполнения Windows XAML по умолчанию для элементов управления. Например, некоторые элементы управления используют PathIcon с данными, определенными как команды перемещения и рисования.
Существуют экспортеры или подключаемые модули, доступные для других часто используемых средств проектирования векторной графики, которые могут выводить вектор в форме XAML. Обычно они создают объекты Path в контейнере макета с командами перемещения и рисования для Path.Data. В XAML может быть несколько элементов Path , чтобы применить различные кисти. Многие из этих экспортеров или подключаемых модулей изначально написаны для XAML-кода Windows Presentation Foundation (WPF) или Silverlight, но синтаксис пути XAML идентичен среда выполнения Windows XAML. Как правило, можно использовать блоки XAML из экспортера и вставить их прямо на страницу XAML среда выполнения Windows. (Однако вы не сможете использовать RadialGradientBrush, если он был частью преобразованного XAML, так как среда выполнения Windows XAML не поддерживает такую кисть.)