原文:Windows Phone开发(32):路径之PathGeometry

说起路径这玩意儿,其实说的就是Path类,它藏在命名空间System.Windows.Shapes下,应该好找,它有一个很重要的属性Data,你不妨在“对象浏览器”中把它抓出来看看,该属性为System.Windows.Media.Geometry类型,如果大家再查看一下,这个Geometry类是一个抽象类,就是因为它太抽象了,所以不能被实例化。

然后,我们看看它有哪些派生类?

1、EllipseGeometry:好理解吧,一个几何图形,啥形状的?圆 or 椭圆。

2、LineGeometry:这个家伙直来直去的,你更明白了,一条线的几何图形,两点一线啊。

3、RectangleGeometry:这个也好说,二维矩形。

4、PathGeometry:这个东东就有些个复杂了,它可以由弧线,曲线、直线、椭圆、矩形等组成的复杂路径。

5、GeometryGroup:如果上述几何图形满足不了你贪婪的需求的话,不妨试试这个,它可以把上述的各种几何图形组合成一个几何图形。

平常人们总喜欢从易到难地去说明问题,那么今天我们何不反过来试试,从难到易地去学习,如何?

在以上所列之图形中,当数PathGeometry最复杂,我们就拿它开刀,好不?只要把它干倒了,其实的就好学了。

首先,我们来看一看PathGeometry的结构再说吧。它包含一个Figures集合,而集合中每个元素都是一个PathFigure对象。然后,再往下拆,PathFigure类也有个集合属性Segments,该集合中的每个元素为PathSegment对象,但我们从“对象浏览器”中看到,PathSegment是一个抽象类,所以我们要继续往下找到它的派生类。

PathSegment类的派生如下图所示:

接下来,我们逐个演示一个它们的用法吧。

一、ArcSegment画弧线

该类表示一个圆,IsLargeArc属性指示圆弧是否大于180度,Point是圆弧的终点,Size是圆弧的大小……其实这些属性不必要一个个介绍,大家有兴趣自己玩一下就知道了,下面给出一个例子。

    <Grid>
<Path HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Stroke="{StaticResource grBrush}"
StrokeThickness="12">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="325,190">
<ArcSegment IsLargeArc="True" Point="365,410" Size="100,200" />
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Grid>

运行效果

二、三次贝塞尔曲线

BezierSegment类具有两个控制点和一个终点,如下面例子:

    <Grid>
<Path HorizontalAlignment="Stretch" VerticalAlignment="Stretch" StrokeThickness="8" Stroke="{StaticResource grBrush}">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="28,17">
<BezierSegment Point1="250,25" Point2="-100,245" Point3="300,450"/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Grid>

运行效果如下图所示。

三、两点一线LineSegment

这个就更简单了。

    <Grid>
<Path HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Stroke="{StaticResource grBrush}" StrokeThickness="8">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="15,35">
<LineSegment Point="120,245"/>
<LineSegment Point="370,385"/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Grid>

运行效果如下图所示:

四、更复杂的三次贝赛尔曲线PolyBezierSegment

这个家伙与前面说的三次贝赛尔曲线相似,但可以定义一条或多条,Points集合中每三个点确定一段贝赛尔曲线。

    <Grid>
<Path HorizontalAlignment="Stretch" VerticalAlignment="Stretch" StrokeThickness="8" Stroke="{StaticResource grBrush}">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="250,38">
<PolyBezierSegment>
<PolyBezierSegment.Points>
<Point X="16" Y="75"/>
<Point X="300" Y="100"/>
<Point X="92" Y="134"/>
<Point X="45" Y="200"/>
<Point X="23" Y="280"/>
<Point X="358" Y="460"/>
</PolyBezierSegment.Points>
</PolyBezierSegment>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Grid>

运行效果如图所示。

五、多线段集合PolyLineSegment

与前面所说的线不同的是,它可以包含多条线。

    <Grid>
<Path HorizontalAlignment="Stretch" VerticalAlignment="Stretch" StrokeThickness="8" Stroke="{StaticResource grBrush}">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="111,32">
<LineSegment Point="79,133"/>
<LineSegment Point="122,298"/>
<LineSegment Point="365,277"/>
<LineSegment Point="22,399"/>
<LineSegment Point="380,458"/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Grid>

运行效果如下图所示。

六、复合二次贝赛尔曲线PolyQuadraticBezierSegment

该复合曲线可包含一或N多个二次贝赛尔曲线,由于二次贝赛尔曲线只有一个控制点和终点,故Points是每两个点决定一条贝赛尔曲线。

    <Grid>
<Path VerticalAlignment="Stretch" HorizontalAlignment="Stretch" StrokeThickness="8" Stroke="{StaticResource grBrush}">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="20,25">
<PolyQuadraticBezierSegment Points="96,111 137,60 220,250 330,420"/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Grid>

运行效果如下图所示。

七、两点决定一条二次贝赛尔曲线QuadraticBezierSegment

这个相信比上面那个好理解。

    <Grid>
<Path HorizontalAlignment="Stretch" VerticalAlignment="Stretch" StrokeThickness="8" Stroke="{StaticResource grBrush}">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="200,25">
<QuadraticBezierSegment Point1="10,300" Point2="385,435"/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Grid>

运行效果如下图所示。

Windows Phone开发(32):路径之PathGeometry的更多相关文章

  1. Windows Phone开发(33):路径之其它Geometry

    原文:Windows Phone开发(33):路径之其它Geometry 上一节中,我们把最复杂的PathGeometry给干了,生剩下几个家伙就好办事了.一起来见见他们的真面目吧. 一.LineGe ...

  2. Windows Phone开发(34):路径标记语法

    原文:Windows Phone开发(34):路径标记语法 如果你觉得前面所讨论的绘制各种几何图形的方法过于复杂,那么,今天我们也来一次"减负"吧.当然,我们是很轻松的,本教程是不 ...

  3. Windows环境下32位汇编语言程序设计(典藏版)

    Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)(年,经典再现!) 罗云彬 著 ISBN 978-7-121-20759-4 2013年7月出版 定价:99.00元 756页 1 ...

  4. Windows驱动开发(中间层)

    Windows驱动开发 一.前言 依据<Windows内核安全与驱动开发>及MSDN等网络质料进行学习开发. 二.初步环境 1.下载安装WDK7.1.0(WinDDK\7600.16385 ...

  5. Windows Phone开发(38):动画之PointAnimation

    原文:Windows Phone开发(38):动画之PointAnimation PointAnimation也是很简单的,与前面说到的两个Animation是差不多的,属性也是一样的,如By.Fro ...

  6. Windows Phone开发(30):图形

    原文:Windows Phone开发(30):图形 图形如矩形.椭圆.路径等都从Shape类派生,它们一般表示规则或不规则图形,这些图形都是简单的二维图形,我相信大家都能理解的. 例一:矩形. 请看下 ...

  7. windows 驱动开发入门——驱动中的数据结构

    最近在学习驱动编程方面的内容,在这将自己的一些心得分享出来,供大家参考,与大家共同进步,本人学习驱动主要是通过两本书--<独钓寒江 windows安全编程> 和 <windows驱动 ...

  8. Windows环境下32位汇编语言程序设计(典藏版)

    <Windows环境下32位汇编语言程序设计(典藏版) > 基本信息 作者: 罗云彬 出版社:电子工业出版社 ISBN:9787121207594 上架时间:2013-7-8 出版日期:2 ...

  9. 开始在Windows上开发Android

    介绍 鉴于您正在阅读这篇文章,您很可能已经知道android是什么了.可能.在科幻小说和电影中,机器人本质上是具有拟人化特征的机器人.还记得<星球大战>里的C-3PO吗?那<星际迷航 ...

随机推荐

  1. SSL 中证书能否够使用IP而不是域名

    前言:曾经听别人说生成证书时能够用IP地址.今天用样例证实了下用IP地址是不行的. 情景一: 生成证书时指定的名称为IP地址 样例是做单点登录时的样例.web.xml中配置例如以下: <!--该 ...

  2. Swift - 将表格UITableView滚动条移动到底部

    有时我们需要通过代码自动将表格UITableView滚动条移动到尾部,只需要使用scrollToRowAtIndexPath方法即可,代码如下: 1 2 3 4 5 var secon = 1 //最 ...

  3. ThinkPhp学习09

    原文:ThinkPhp学习09 三.区间查询 $data['id']=array(array('gt',4),array('lt',10));//默认关系是 and 的关系 //SELECT * FR ...

  4. 新的方法 (New Approach)¶

    第一章:简介 - ANSI Common Lisp 中文版 新的方法 (New Approach)¶ 本书的目标之一是不仅是教授 Lisp 语言,而是教授一种新的编程方法,这种方法因为有了 Lisp ...

  5. 【MFC两种视频图像採集方法】DirectShow与Opencv

    效果图: DirectShow採集核心代码: 创建线程调用该函数,採集图像通过x264解码封装rtmp协议包.推送至FMSserver,可实现视频直播 UINT __stdcall StartVide ...

  6. c++ 使用全局变量的方法多个文件

    启动错误的做法 在global.h声明和定义变量 int sharedData = 9; 编译出错 Building target: CTest Invoking: GCC C++ Linker g+ ...

  7. Codeforces 474B Worms 二分法(水

    主题链接:http://codeforces.com/contest/474/problem/B #include <iostream> #include <cmath> #i ...

  8. Spire.XLS for .NET 測评

         有一位朋友推荐了我 Spire.Office (官网:http://www.e-iceblue.com/) -- 基于.NET的办公软件库,说不错. 究竟怎样呢?仅仅有亲測一下才干知道了. ...

  9. linux 软连接 硬连接

    1.Linux链接概念 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接] 硬连接指通过索引 ...

  10. 安卓MP3播放器开发实例(1)之音乐列表界面

    学习安卓开发有一年了,想想这一年的努力,确实也收获了不少.也找到了比較如意的工作. 今天准备分享一个以前在初学阶段练习的一个项目.通过这个项目我真正的找到了开发安卓软件的感觉,从此逐渐步入安卓开发的正 ...