Главная » Разработка для Windows Phone 7 » Универсальный PathGeometry Windows Phone 7

0

LineGeometry, RectangleGeometry, EllipseGeometry, GeometryGroup – все это удобные особые случаи PathGeometry (Геометрический элемент контур), безусловно, самого универсального из всех производных класса Geometry. Классы Path и PathGeometry позволяют реализовывать любые задачи векторной графики, допустимые в Silverlight.

Сам PathGeometry определяет всего два свойства: уже знакомое нам FillRule и свойство Figures (Формы) типа PathFigureCollection (Коллекция контуров различной формы), который является коллекцией объектов PathFigure (Форма контура).

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

Для этих соединенных сегментов класс PathFigure описывает свойство Segments (Сегменты) типа PathSegmentCollection (Коллекция сегментов контура), который является коллекцией объектов PathSegment (Сегмент контура). Как видно из иерархии классов, PathSegment – это абстрактный класс:

Object

DependencyObject (абстрактный)

PathSegment (абстрактный)

LineSegment (запечатанный) PolyLineSegment (запечатанный) ArcSegment (запечатанный) QuadraticBezierSegment (запечатанный) PolyQuadraticBezierSegment (запечатанный) BezierSegment (запечатанный) PolyQuadraticBezierSegment (запечатанный)

PathFigure задает StartPoint. Первый объект PathSegment в коллекции Segments начинается в этой точке. Следующий объект PathSegment начинается в точке, в которой завершился первый PathSegment, и т.д.

Последняя точка последнего PathSegment в коллекции Segments может совпадать с начальной точкой (StartPoint) объекта PathFigure, а может и не совпадать. Чтобы PathFigure

гарантированно был замкнутым, можно задать свойство IsClosed (Замкнутый). В случае необходимости это обеспечит отрисовку прямой линии из последней точки последнего PathSegment в StartPoint объекта PathFigure.

PathFigure также определяет свойство IsFilled, имеющее значение true по умолчанию. Это свойство не зависит ни от одной кисти Fill, задаваемой для Path. Оно используется для вырезания (clipping) и проверки совпадения (hit-testing). В некоторых случаях Silverlight вопреки пожеланиям разработчика может предполагать, что область закрашена для целей вырезания и проверки совпадения. В этом случае задавайте свойству IsFilled значение false.

Итак, объект PathGeometry – это коллекция объектов PathFigure. Каждый объект PathFigure является серией соединенных прямых линий или кривых, определяемых коллекцией объектов PathSegment.

Остановимся на производных от PathSegment более подробно.

Класс LineSegment (Сегмент линия) описывает всего одно собственное свойство: Point типа Point. Объекту LineSegment необходим всего один объект Point, потому что он отрисовывает линию из точки, заданной свойством StartPoint объекта PathFigure (если LineSegment является первым сегментом в коллекции), или из конечной точки предыдущего сегмента.

Класс PolyLineSegment (Сегмент полилиния) определяет свойство Points типа PointCollection для отрисовки ряда соединенных прямых линий.

Рассмотрим PathGeometry с тремя объектами PathFigure, включающими 3, 2 и 1 объект PathSegment, соответственно:

<Grid Background="LightCyan"> <Path Stroke="Blue"

StrokeThickness="4" Fill="Green"> <Path.Data>

<PathGeometry>

<PathFigure StartPoint="2 4 0 60"> <LineSegment Point="380 240" /> <LineSegment Point="100 240" /> <LineSegment Point="240 60" /> </PathFigure>

<PathFigure StartPoint="240 150" IsClosed="True"> <LineSegment Point="380 330" /> <LineSegment Point="100 330" /> </PathFigure>

<PathFigure StartPoint="240 240" IsClosed="True"> <PolyLineSegment

Points="380 420, 100 420"

/>

</PathFigure> </PathGeometry> </Path.Data> </Path> </Grid>

Вторая и третья фигуры замкнуты явно посредством свойства IsClosed, но закрашены все три коллекции PathFigure.

Источник: Чарльз Петзольд, Программируем Windows Phone 7, Microsoft Press, © 2011.

По теме:

  • Комментарии