WPF之路——绘制几何图形
一、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>
运行结果:
<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>
运行结果:
<!--开始绘制贝塞尔曲线--><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之路——绘制几何图形相关推荐
- WPF 使用Path绘制几何图形
Path类继承自Shape,可以绘制很多简单的,复合的图形.Path类通过提供的Data属性,Data属性接受一个Geometry对象(我的理解就是Data要装什么集合图形呀),Geometry一共有 ...
- WPF使用Canvas绘制可变矩形
WPF使用Canvas绘制可变矩形 原文:WPF使用Canvas绘制可变矩形 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/WANGYAN9110/ ...
- C# 画(绘制)直线 C#如何画直线 C#绘制直线 WPF 画(绘制)直线
C#画直线 1.winform 使用的是 Graphics private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g ...
- 【OpenCV 4开发详解】图像上绘制几何图形
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【Android开发】图形图像处理技术-绘制几何图形
常见的几何图形包括点.线.弧.矩形等.在Android中,Canvas类提供了丰富的绘制几何图形的方法,通过这些方法,可以绘制出各种几何图形.常用的几何图形的绘制方法如下所示: 1. 画一个圆使用的是 ...
- html5 绘制图形,HTML5绘制几何图形
绘制几何图形 var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext(" ...
- Win10系列:VC++绘制几何图形2
新建了Direct2D中的资源后,接下来初始化用于绘制图形的应用窗口.在解决方案资源管理器窗口中右键点击项目图标,在弹出的菜单栏中选中"添加", 并在"添加"的 ...
- OpenGL入门学习 课程 (三) 绘制几何图形的一些细节问题
http://oulehui.blog.163.com/blog/static/79614698201191832753312/ 先回顾一下我们都学习了些什么: 第一课,编写第一个OpenGL程序 第 ...
- 绘制几何图形,生成辅助线的思路
目录 辅助线的概念 绘制线规则 捕捉辅助线的思路 生成辅助线的思路 总结 在实际绘制几何图形过程时,有几个工具比较实用: 鼠标绘制时,焦点捕捉已绘制图形的端点.线段上: 撤销与回退 辅助线 焦点捕捉的 ...
最新文章
- 探索Java语言与JVM中的Lambda表达式
- java ee期末项目相关
- 编译执行和解释执行/初识量子计算机
- linux 追加多行文件,linux多行文件信息追加
- 【PDF直接下载】6G总体愿景与潜在关键技术白皮书
- Composer下载安装
- JAVA编程语言基础第六章
- 通过取消反向DNS加速ssh登录速度
- SQLServer数据库密码已过期问题 处理
- mysql组复制(MGR)——部署
- Java学习者常用软件与学习网站
- Echarts (option.yAxis) Y轴 的属性
- 使用python语言调用科大讯飞离线语音合成
- php 解压文件中有中文,ZipArchive 解压中文文件乱码解决方案和疑惑
- 你真的认为iPhone只是一部手机?苹果惊天秘密之 二
- 【删除重复数据,仅保留一条-mysql】
- 读心术python_有哪些厉害的观人术读心术?
- fastapi 如何响应文件下载
- 游戏代理要把用户数据和充值数据牢牢抓在自己手上
- 在matlab中chrom,一段matlab程序,其中chrom(i,j)=p(chrom(i,j),j)是什么意思
热门文章
- 1加9pro刷个lineageOS Android11
- 小程序运营打包 遇到找不到game.json
- 区块链 Hyperledger Composer 使用教程(环境搭建、项目开发 一)
- 人人都是网站分析师(从分析师视角理解网站和解读数据)-读书笔记4(完结)
- 萌新学Java之渐入佳境三-----线程试炼
- 基于深度学习下的稳定学习究竟是什么?因果学习?迁移学习?之一
- 权重推送 产品定位 直通车投放 关键词 直通车人群 创意标题 补单 新手上路,直通车烧钱没效果怎么办?
- android服务无法启动,Android服务无法启动(Android service would't start)
- 尚硅谷 尚医通学习笔记
- Win7闪屏黑屏蓝屏解决办法