一、Geometry和Share

Geometry类(几何绘图)包括,LineGeometry(几何线条)、RectangleGeometry(几何矩形)、EllipesGeometry(几何椭圆图形)、GeometryGroup(几何组合)、PathGeometry(几何路径)他可以描述任何几何的2D形状。

从绘图来看Geometry类和Share类似乎都是绘制2D图形,但是这两个类有着重要的区别。Geometry(几何绘图)类更加轻量级,绘图效率更高于Share。

二、Geometry和Path

LineGeometry(几何线条)、RectangleGeometry(几何矩形)、EllipesGeometry(几何椭圆图形)、GeometryGroup(几何组合)、PathGeometry(几何路径)都是由Geometry继承而来的。

事实上Path还可以做为一个容器,允许容纳任何Geometry形状的几何图形包含在Path.Data内。

LineGeometry

类似于Share的Line对象用来生成一条线,区别在于Line用的是X和Y坐标来生成线条,而LineGeometry是利用StartPoint和EndPoint来完成线条的绘制。

如:

<LineGeometry StartPoint="0,0" EndPoint="100,500" />

RectangleGeometry(几何矩形)、EllipesGeometry(几何椭圆图形)类似于Share中的Rectangle和Ellipes这里不做过多描述。

GeometryGroup

有些时候需要将某些图形组合起来,GeometryGroup就具备这个功能,如下面的例子:

<StackPanel x:Name="LayoutRoot" Orientation="Horizontal" Background="AliceBlue"><Path Fill="Cyan" Stroke="Black" StrokeThickness="3"><Path.Data><!--GeometryGroup 组合--><GeometryGroup FillRule="EvenOdd"><RectangleGeometry  RadiusX="2" RadiusY="2" Rect="80,50 200,100"></RectangleGeometry><EllipseGeometry Center="300,100" RadiusX="80" RadiusY="60"></EllipseGeometry></GeometryGroup></Path.Data></Path><Path Fill="Cyan" Stroke="Black" StrokeThickness="3"><Path.Data><!--GeometryGroup 组合--><GeometryGroup FillRule="Nonzero"><RectangleGeometry  RadiusX="2" RadiusY="2" Rect="80,50 200,100"></RectangleGeometry><EllipseGeometry Center="300,100" RadiusX="80" RadiusY="60"></EllipseGeometry></GeometryGroup></Path.Data></Path> </StackPanel>

运行结果如下:

在两个图形交叉的时候,可以使用Geometry的FillRule属性来定义组合图形的填充规则。FillRule属性有两个枚举值(EvenOdd)和(Zonzero).

PathGeometry

PathGeometry是Geometry中最灵活的,他可以绘制任意的2D几何图形。

 <Path Stroke="Black" StrokeThickness="1"><Path.Data><!--指定Path.Data的填充是PathGeometry--><PathGeometry><!--定义PathGeometry的Figuress--><PathGeometry.Figures><PathFigureCollection><!--PathFigure表示几何图形的一个子部分、一系列单独连接的二维几何线段。IsClosed:获取或设置一个值,该值指示是否连接该图形的第一条线段和最后一条线段。 --><PathFigure IsClosed="True" StartPoint="50,100"><PathFigure.Segments><BezierSegment Point1="100,0" Point2="200,200" Point3="300,100"/><LineSegment Point="400,100" /><ArcSegment Size="50,50" RotationAngle="45" IsLargeArc="False"  SweepDirection="Clockwise" Point="200,100"/></PathFigure.Segments></PathFigure></PathFigureCollection></PathGeometry.Figures></PathGeometry></Path.Data></Path>

运行结果:

为简化上面xaml,wpf提供了路径语法解析器,由

   <Path Stroke="Black" StrokeThickness="1" Data="M 10,100 L 100,100 100,50 Z M 10,10 100,10 100,40 Z" />

LineSegment对

利用LineSegment对象创建直线对象

<Path Stroke="DarkCyan" StrokeThickness="3"><Path.Fill><LinearGradientBrush><GradientStop Color="Orange"/><GradientStop Color="White" Offset="1"/></LinearGradientBrush></Path.Fill><Path.Data><PathGeometry><!-- 指明是闭线条并且指定起始位置--><PathFigure IsClosed="True" StartPoint="50,100"><LineSegment Point="200,200" /><LineSegment Point="200,150" /><LineSegment Point="400,150" /><LineSegment Point="400,50" /><LineSegment Point="200,50" /><LineSegment Point="200,0" /></PathFigure></PathGeometry></Path.Data></Path>

运行结果:

ArcSegment 对象  
 
利用ArcSegment对象来绘制弧线元素:
 <Path Stroke="DarkCyan" StrokeThickness="3"><Path.Data><PathGeometry><!--ArcSegment 指定弧的起始点--><PathFigure IsClosed="False" StartPoint="50,50"><!--ArcSegment 声明第一条弧的结束点和弧度--><ArcSegment Size="280,280" Point="400,50" /><!--ArcSegment 声明第二条弧的结束点和弧度--><ArcSegment Size="90,280" Point="550,150" /><ArcSegment Size="50,50" Point="600,50" /></PathFigure></PathGeometry></Path.Data></Path>

运行结果:

BezierSegment对象
 
利用BeezierSegment对象来绘制贝塞尔曲线,贝塞尔曲线是由比较复杂的数学公式产生的。它用来计算两个控制点之间如何确定一条曲线的轮廓。如下例子:
  <!--开始绘制贝塞尔曲线--><Path Stroke="DarkCyan" Fill="YellowGreen" StrokeThickness="5"><Path.Data><PathGeometry><!--声明贝塞尔曲线--><PathFigure StartPoint="10,10"><BezierSegment Point1="130,30" Point2="40,140" Point3="150,150"/></PathFigure></PathGeometry></Path.Data></Path>

运行结果:

WPF之路——绘制几何图形相关推荐

  1. WPF 使用Path绘制几何图形

    Path类继承自Shape,可以绘制很多简单的,复合的图形.Path类通过提供的Data属性,Data属性接受一个Geometry对象(我的理解就是Data要装什么集合图形呀),Geometry一共有 ...

  2. WPF使用Canvas绘制可变矩形

    WPF使用Canvas绘制可变矩形 原文:WPF使用Canvas绘制可变矩形 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/WANGYAN9110/ ...

  3. C# 画(绘制)直线 C#如何画直线 C#绘制直线 WPF 画(绘制)直线

    C#画直线 1.winform 使用的是 Graphics private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g ...

  4. 【OpenCV 4开发详解】图像上绘制几何图形

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  5. 【Android开发】图形图像处理技术-绘制几何图形

    常见的几何图形包括点.线.弧.矩形等.在Android中,Canvas类提供了丰富的绘制几何图形的方法,通过这些方法,可以绘制出各种几何图形.常用的几何图形的绘制方法如下所示: 1. 画一个圆使用的是 ...

  6. html5 绘制图形,HTML5绘制几何图形

    绘制几何图形 var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext(" ...

  7. Win10系列:VC++绘制几何图形2

    新建了Direct2D中的资源后,接下来初始化用于绘制图形的应用窗口.在解决方案资源管理器窗口中右键点击项目图标,在弹出的菜单栏中选中"添加", 并在"添加"的 ...

  8. OpenGL入门学习 课程 (三) 绘制几何图形的一些细节问题

    http://oulehui.blog.163.com/blog/static/79614698201191832753312/ 先回顾一下我们都学习了些什么: 第一课,编写第一个OpenGL程序 第 ...

  9. 绘制几何图形,生成辅助线的思路

    目录 辅助线的概念 绘制线规则 捕捉辅助线的思路 生成辅助线的思路 总结 在实际绘制几何图形过程时,有几个工具比较实用: 鼠标绘制时,焦点捕捉已绘制图形的端点.线段上: 撤销与回退 辅助线 焦点捕捉的 ...

最新文章

  1. 探索Java语言与JVM中的Lambda表达式
  2. java ee期末项目相关
  3. 编译执行和解释执行/初识量子计算机
  4. linux 追加多行文件,linux多行文件信息追加
  5. 【PDF直接下载】6G总体愿景与潜在关键技术白皮书
  6. Composer下载安装
  7. JAVA编程语言基础第六章
  8. 通过取消反向DNS加速ssh登录速度
  9. SQLServer数据库密码已过期问题 处理
  10. mysql组复制(MGR)——部署
  11. Java学习者常用软件与学习网站
  12. Echarts (option.yAxis) Y轴 的属性
  13. 使用python语言调用科大讯飞离线语音合成
  14. php 解压文件中有中文,ZipArchive 解压中文文件乱码解决方案和疑惑
  15. 你真的认为iPhone只是一部手机?苹果惊天秘密之 二
  16. 【删除重复数据,仅保留一条-mysql】
  17. 读心术python_有哪些厉害的观人术读心术?
  18. fastapi 如何响应文件下载
  19. 游戏代理要把用户数据和充值数据牢牢抓在自己手上
  20. 在matlab中chrom,一段matlab程序,其中chrom(i,j)=p(chrom(i,j),j)是什么意思

热门文章

  1. 1加9pro刷个lineageOS Android11
  2. 小程序运营打包 遇到找不到game.json
  3. 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)
  4. 人人都是网站分析师(从分析师视角理解网站和解读数据)-读书笔记4(完结)
  5. 萌新学Java之渐入佳境三-----线程试炼
  6. 基于深度学习下的稳定学习究竟是什么?因果学习?迁移学习?之一
  7. 权重推送 产品定位 直通车投放 关键词 直通车人群 创意标题 补单 新手上路,直通车烧钱没效果怎么办?
  8. android服务无法启动,Android服务无法启动(Android service would't start)
  9. 尚硅谷 尚医通学习笔记
  10. Win7闪屏黑屏蓝屏解决办法