Silverlight开发历程—(绘制矢量图之路径绘图)

 路径(Path)是一种比较特殊的,用开描述比较复杂的元素,它支持绘制从简单到复杂的任意图形绘制能力。

路径标记语法

使用Path 绘图需要使用它的专用路径标记语法(mini-language)。它是一种由路径指令组成的语法,使用mini-language可以产生任何形状的2D图形。下面是路径标记语法(mini-language)所支持的指令:

fillRule

FillRule

指定该路径使用 EvenOdd 还是 NonZero 填充规则值:

  • F0 指定 EvenOdd 填充规则。

  • F1 指定 Nonzero 填充规则。

如果省略此命令,则路径使用默认行为,即 EvenOdd。如果指定此命令,则必须将其置于最前面。

figureDescription

图形由移动命令、绘制命令和可选的关闭命令组成。

moveCommand drawCommands [ closeCommand ]

moveCommand

用来指定图形起点的移动命令,可以用大写M或小写m表示,当用M的时候表示的是绝对值,当用小写m的时候表示的是相对于上一点的偏移量。

drawCommands

一个或多个描绘图形内容的绘制命令。属于一个指令的集合,用来描述外形轮廓的内容,包含Silverlight中大量的直线和曲线绘图指令。

closeCommand

可选的关闭命令,用于关闭图形。用来闭合整个Path并在当前结束点与开始点之间画一条张,用z表示。

Data是Path的重要属性,可以用Data来产生不同形状的几何图形,使用时只需要将组合好的指令直接赋给Data,Path会根据Data中的指令来完成绘图指令。

例如:

 <Canvas x:Name="LayoutRoot" Background="White">
        <Path  Stroke="Blue" Fill="Gold"  Data="M 50,200 L150,200 100,50z" />
    </Canvas>

运行结果:

MoveCommand、DrawCommand、CloseCommand这些指令集组成了mini-language,如图:


M 50,200是MoveCommand移动指令表示起始为是50,200、L150,200是DrawCommand直线指令 L表示线条类型终点是100,50 、z是CloseCommand关闭指令用来封闭整个图形的轮廓。

绘图指令

 

 

下列表是DrawCommand支持的直线和曲线指令:

 

注:当绘制贝塞尔曲线的时候,需要提供三个坐标点,其中前两个坐标点是控制点,第三点是贝塞尔曲线的结束点。

绘制直线和曲线

下面代码利用Path对象来绘制直线和曲线并进行填充:

<StackPanel x:Name="LayoutRoot" Background="White" Orientation="Horizontal">
        <!--绘制贝塞尔曲线-->
        <Path Stroke="Blue" StrokeThickness="3" Fill="Gold" Margin="25,50,50,0" Data="M 10,100 C 100,300 300,-200 300,100"/>
        <!--绘制三角形-->
        <Path Stroke="Blue" StrokeThickness="3" Fill="Gold" Data="M 0,200 L 200,200 100,50z" />
 </StackPanel>


运行结果:

 

 

例如下代码:

<StackPanel x:Name="LayoutRoot" Background="White" Orientation="Horizontal">
        <!--大写V指令-->
        <Path Stroke="Green" StrokeThickness="3" Data="M 0,50 H 200 V 50 l 50,50" />
        <!--小写V指令-->
        <Path Stroke="Green" StrokeThickness="3" Data="M 0,50 H 200 v 50 l 50,50" />
    </StackPanel>


运行结果:

 

上面例子中,分别利用了H、V(v)、l 三个指令集合,大写V与小写v的效果显然区别很大,第一个Path的起始点是H 50,50 所以V 50产生的垂直线条长度就为0。但第二个Path使用的是小写v,而小写v是相对于上一点坐标点做为起始点那么他就产生了一条长50的垂直线条。

PolyLine 、Polygon 和Path三个绘图对象,PolyLine 、Polygon比较简单,而Path则相对比较灵活。

 

补充:有的朋友可能会遇到这种问题,就是在编码过程中无论怎么打,Path对象都打不出来而且生成的时候也会报错。那是因为你的项目中没有添加Path这个控件,那么你需要在工具->右击选择“选择项”->然后在Silverlight组件中找到Path控件,然后勾选上点击确定就可了。如图:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目描述: 该项目是一款计算机平面几何学的绘图工具。 内置了一些交互的样式库,供在线浏览。 项目使用Silverlight 2.0(可以使用Microsoft Expression v3 beta 转换成 silverlight v3.0) 以及 C#3.0进行开发(在silverlight 和 wpf 上各自实现了一个版本)。核心的绘图引擎具备了良好的灵活性和扩展性,方便开发人员添加新的图形和功能。 我们将面临的工作类型: 将已有的之前无法顺利迁移到web上的桌面应用程序(庞大交互复杂,有一定安全要求或者比较华丽总之就是Ajax无法胜任)使用Silverlight 3.0 技术迁移到web上。 对于一些良好的Flash应用的迁移。(这属于站坑拉屎,谁先占住坑的谁就是大爷) 对于现有AJAX应用进行更加丰富的扩展。 我们将面临的挑战: 开发WinForm程序的大爷们终于可以灵活的涉足于Web界而不需要搞令人沮丧到要无限次重构直到自己写http协议的Asp.net框架。他们来了。 欢迎Flex阵营的朋友投身的到Silverlight3.0 的圈子中,思路一致(不好听的说法叫抄袭)很好迁移,你们也来吧。 之所以能带来更加丰富的用户体验,是因为那纠葛交错的WinForm消息循环体系,任何的动作都可以轻易牵动应用全身,这远远区别于Web应用开发(因为很多时候我们选择--我刷我刷我刷刷刷)。我们的优势: XAML = html,XAML(资源文件) = CSS,C#(Ruby or Python even JS) = JS。 可见,你依然可以像开发web一样开发Silverlight应用只要大脑思路一转。 Silverlight 最终还是要放置在网站之上(我们首先不考虑Out of browser功能),所以熟悉HTML熟悉JS我们可以方便的让Silverlight与 HTML交互。 赘述到此,我想大家应该已经明白, 这款Silverlight 在线本版的平面几何图形画图板便是经典的WinForm 到 Web的迁移。当你解读Silverlight代码和WPF代码的时候,你将会发现这并没有什么重大的不同之处(所以现在出现了Silverlight 和 WPF的兼容性类库,甚至出现了Silverlight 和 WPF的转换程序)。或者我们不妨悲剧的理解这本就是一个WebForm应用。我们带着强烈的愤怒怀疑这个微软的结构师本就是开发了10+年的WinForm(顺便仰慕一下)。 Main/SilverlightClient下为综合演示Demo,用VS2008打开后运行(或右键:在浏览器中打开)即可看到效果 自带了一些在线Demo,其他文件夹中还有些其他几何模型,有兴趣的可以自行研究

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值