Синтаксис разметки пути
Более подробные сведения о путях приведены в разделах Обзор фигур и базовых средств рисования в приложении WPF и Общие сведения о классе Geometry. В этом подразделе подробно описывается эффективный комплексный мини-язык, который можно использовать для более компактного определения геометрических объектов пути с помощью Extensible Application Markup Language (XAML).
В этом разделе содержатся следующие подразделы.
Предварительные требования
Перед изучением этого раздела следует ознакомиться с основными возможностями объектов класса Geometry. Дополнительные сведения см. в разделе Общие сведения о классе Geometry.
Мини-языки StreamGeometry и PathFigureCollection
В WPF поддерживаются два класса, предоставляющие мини-языки для описания геометрических путей: StreamGeometry и PathFigureCollection.
Мини-язык StreamGeometry используется при установке свойств типа Geometry, например свойства Clip для объекта UIElement или свойства Data для объекта Path. В следующем примере используется синтаксис атрибутов для создания объекта StreamGeometry.
<Path Stroke="Black" Fill="Gray" Data="M 10,100 C 10,300 300,-200 300,100" />
Мини-язык PathFigureCollection используется для установки свойства Figures для объекта PathGeometry. В следующем примере используется синтаксис атрибутов для создания объекта PathFigureCollection для объекта PathGeometry.
<Path Stroke="Black" Fill="Gray"> <Path.Data> <PathGeometry Figures="M 10,100 C 10,300 300,-200 300,100" /> </Path.Data> </Path>
Как видно из предыдущих примеров, эти мини-языки очень похожи. Язык PathGeometry можно использовать в любых ситуациях, в которых допускается использование StreamGeometry. В связи с этим, выбор используемого языка определяется действиями, которые необходимо выполнить. Язык StreamGeometry используется в случаях, когда не требуется изменять путь после его создания. Язык PathGeometry используется при необходимости изменения пути.
Дополнительные сведения о различиях между объектами PathGeometry и StreamGeometry см. в разделе Общие сведения о классе Geometry.
Примечание. Использование пробелов
Для краткости в разделах синтаксиса далее отображается один пробел, но также допускается использование нескольких пробелов вместо одного.
В случае однозначности результирующей строки два числа не обязательно должны разделяться запятыми или пробелами. Например, строка 2..3 фактически представляет два числа: "2,0" и "0,3". Аналогичным образом, строка 2-3 представляет числа "2" и "-3". Пробелы не требуются ни до, ни после команды.
Синтаксис
Использование синтаксиса атрибутов Extensible Application Markup Language (XAML) для объекта StreamGeometry состоит из необязательного значения FillRule и одного или нескольких следующих описаний.
Использование атрибута XAML StreamGeometry |
---|
<object property="[fillRule] figureDescription[figureDescription]*" ... /> |
Использование синтаксиса атрибутов Extensible Application Markup Language (XAML) для PathFigureCollection состоит из одного или нескольких следующих описаний.
Использование атрибута XAML PathFigureCollection |
---|
<object property="figureDescription[figureDescription]*" ... /> |
Термин |
Описание |
---|---|
fillRule |
Определение правила, используемого в свойстве StreamGeometry: EvenOdd или Nonzero FillRule. Если опустить эту команду, во вложенном пути используется поведение по умолчанию, то есть EvenOdd. Если эта команда задается, ее необходимо поместить в начале. |
figureDescription |
Фигура, состоящая из команды перемещения, команд рисования и необязательной команды закрытия. moveCommanddrawCommands [closeCommand] |
moveCommand |
Команда перемещения, которая указывает начальную точку фигуры. См. подраздел Команда перемещения. |
drawCommands |
Одна или несколько команд рисования, описывающих содержимое фигуры. См. подраздел Команды рисования. |
closeCommand |
Необязательная команда закрытия, используемая для закрытия фигуры. См. подраздел Команда закрытия. |
Команда перемещения
Определение начальной точки новой фигуры.
Синтаксис |
---|
M startPoint - или - m startPoint |
Термин |
Описание |
---|---|
startPoint |
Начальная точка новой фигуры. |
Прописная буква M указывает, что параметр startPoint содержит абсолютное значение. Строчная буква m указывает, что параметр startPoint содержит смещение относительно предыдущей точки или, если таковая не существует, от точки (0,0). Если после команды перемещения перечислено несколько точек, линия строится по этим точкам даже в том случае, если была задана команда линии.
Команды рисования
Команда рисования может состоять из нескольких команд формы. Доступны следующие команды формы: линия, горизонтальная линия, вертикальная линия, кривая Безье третьего порядка, кривая Безье второго порядка, гладкая кривая Безье третьего порядка, гладкая кривая Безье второго порядка, эллиптическая дуга.
Каждая команда вводится с помощью прописной или строчной буквы: прописные буквы определяют абсолютные значения, а строчные — относительные. Контрольные точки для этого сегмента указываются относительно конечной точки предыдущего примера. При последовательном вводе нескольких команд одного типа можно опустить повторяющуюся команду. Например, команда L 100,200 300,400 эквивалентна команде L 100,200 L 300,400. В следующей таблице описаны команды move и draw.
Линия
Создание прямой между текущей точкой и заданной конечной точкой. l 20 30 и L 20,30 — примеры допустимых команд line.
Синтаксис |
---|
L endPoint - или - l endPoint |
Термин |
Описание |
---|---|
endPoint |
Конечная точка линии. |
Горизонтальная линия
Создание горизонтальной линии между текущей точкой и заданной х-координатой. H 90 — пример допустимой команды горизонтальной линии.
Синтаксис |
---|
H x - или - h x |
Термин |
Описание |
---|---|
x |
Координата конечной точки линии по оси x. |
Вертикальная линия
Создание вертикальной линии между текущей точкой и заданной y-координатой. v 90 — пример допустимой команды вертикальной линии.
Синтаксис |
---|
V y - или - v y |
Термин |
Описание |
---|---|
y |
Координата конечной точки линии по оси y. |
Кривая Безье третьего порядка
Создание кривой Безье третьего порядка между текущей точкой и заданной конечной точкой с использованием двух заданных контрольных точек (controlPoint1 и controlPoint2). C 100,200 200,400 300,200 — пример допустимой команды кривой Безье третьего порядка.
Синтаксис |
---|
C controlPoint1 controlPoint2 endPoint - или - c controlPoint1 controlPoint2 endPoint |
Термин |
Описание |
---|---|
controlPoint1 |
Первая контрольная точка кривой, которая определяет начальную касательную к кривой. |
controlPoint2 |
Вторая контрольная точка кривой, которая определяет конечную касательную к кривой. |
endPoint |
Конечная точка кривой. |
Кривая Безье второго порядка
Создание кривой Безье второго порядка между текущей точкой и заданной конечной точкой с использованием заданной контрольной точки (controlPoint). q 100,200 300,200 — пример допустимой команды кривой Безье второго порядка.
Синтаксис |
---|
Q controlPoint endPoint - или - q controlPoint endPoint |
Термин |
Описание |
---|---|
controlPoint |
Контрольная точка кривой, которая определяет начальную и конечную касательные к кривой. |
endPoint |
Конечная точка кривой. |
Гладкая кривая Безье третьего порядка
Создание кривой Безье третьего порядка между текущей точкой и заданной конечной точкой. В качестве первой контрольной точки принимается отражение второй контрольной точки предыдущей команды относительно текущей точки. Если предыдущая команда не задана или не является командой стандартной или гладкой кривой Безье третьего порядка, в качестве первой контрольной точки принимается текущая точка. Вторая контрольная точка, определяемая для конечной точки кривой, задается с помощью параметра controlPoint2. Например, S 100,200 200,300 — допустимая команда гладкой кривой Безье третьего порядка.
Синтаксис |
---|
S controlPoint2 endPoint - или - s controlPoint2 endPoint |
Термин |
Описание |
---|---|
controlPoint2 |
Контрольная точка кривой, которая определяет конечную касательную к кривой. |
endPoint |
Конечная точка кривой. |
Гладкая кривая Безье второго порядка
Создание кривой Безье второго порядка между текущей точкой и заданной конечной точкой. В качестве контрольной точки принимается отражение контрольной точки предыдущей команды относительно текущей точки. Если предыдущая команда не задана или не является командой стандартной или гладкой кривой Безье второго порядка, в качестве контрольной точки принимается текущая точка.
Синтаксис |
---|
T controlPoint endPoint - или - t controlPoint endPoint |
Термин |
Описание |
---|---|
controlPoint |
Контрольная точка кривой, которая определяет начальную и конечную касательные к кривой. |
endPoint |
Конечная точка кривой. |
Эллиптическая дуга
Создание эллиптической дуги между текущей точкой и заданной конечной точкой.
Синтаксис |
---|
A size rotationAngle isLargeArcFlag sweepDirectionFlag endPoint - или - a size rotationAngle isLargeArcFlag sweepDirectionFlag endPoint |
Термин |
Описание |
---|---|
size |
Радиусы дуги по осям X и Y. |
rotationAngle |
Поворот эллипса в градусах. |
isLargeArcFlag |
Значение 1, если угол дуги должен быть больше или равен 180 градусам. В противном случае — значение 0. |
sweepDirectionFlag |
Значение 1, если дуга рисуется с положительным углом. В противном случае — значение 0. |
endPoint |
Точка, в которую рисуется дуга. |
Команда закрытия
Завершение текущей фигуры и создание линии от текущей точки до начальной точки фигуры. С помощью этой команды первый и последний сегменты фигуры соединяются линией (углом).
Синтаксис |
---|
Z - или - z |
Синтаксис точки
Описание координат точки по осям x и y.
Синтаксис |
---|
x,y - или - x y |
Термин |
Описание |
---|---|
x |
Координата x точки. |
y |
Координата y точки. |
Специальные значения
Вместо стандартного числового значения можно также использовать следующие специальные значения. При вводе этих значений учитывается регистр знаков.
Infinity
Представляет Double.PositiveInfinity.-Infinity
Представляет Double.NegativeInfinity.не число
Представляет Double.NaN.
Также можно использовать экспоненциальное представление. Например, +1.e17 является допустимым значением.
См. также
Ссылки
Основные понятия
Обзор фигур и базовых средств рисования в приложении WPF
Общие сведения о классе Geometry