WPF绘图(一):几何(Geometry)与形状(Shape)
1. Geometry
在数学中,我们可以用一个方程描述圆:x2+y2=25。这个方程描述的是,一个半径为5,中心点在(0,0)的圆。这种纯数学的描述就是Geometry(几何)。
但此时,这个“圆”我们是看不见,摸不着的。如果想要看到这个几何图形,就必须用画笔,颜色等信息,去“绘制”它。
.Net中,Geometry类就是用于描述这种几何图形的类。它只包含描述几何图形的必要属性,并提供包括命中测试、动画等功能。它派生出以下七个类,以简化对图形的描述:
|
类名
|
功能
|
|
LineGeometry
|
直线
|
|
EllipseGeometry
|
椭圆(圆也是椭圆的一种)
|
|
RectangleGeometry
|
矩形
|
|
PathGeometry
|
路线(类似与随手画的一条任意线)
|
|
GeometryGroup
|
几何图形组(把多个几何图形放在一起)
|
|
CombinedGeometry
|
组合图形(将多个几何图形做布尔运算)
|
|
StreamGeometry
|
它是PathGeometry的轻量级对象。
|
1.1 LineGeometry
它表示一条直线。
它主要属性有EndPoint和StartPoint,用于定义直线的终点和起点。
Point start = new Point(0,0);
Point end = new Point(50,50);
LineGeometry line = new LineGeometry(start,end);
1.2 EllipseGeometry
它表示一个椭圆(圆也是椭圆的一种)。
它主要属性有Center(中心点坐标)、RadiusX(x轴半径)、RadiusY(Y轴半径)。
Point center = new Point(50,50);
EllipseGeometry ellipseGeo = new EllipseGeometry(center , 45, 20);
1.3 RectangleGeometry
它表示一个矩形(正方形也是矩形的一种)。
它主要属性有Rect(矩形框)、RadiusX(x轴半径)、RadiusY(y轴半径)。当定义了Rect属性后,RadiusX和RadiusY的值也就确定了;当给定了RadiusX和RadiusY的值,Rect属性的值也就确定了。
RectangleGeometry rect = new RectangleGeometry(10,20);
1.4 PathGeometry
它表示一条路线。这条路线中,可以有直线给,也可以有曲线。
它最重要的属性是Figures(路径图元),类型是PathFigureCollection,意味着它是一个集合,可以装载多个PathFigure对象。
PathFigure类,有一个重要的属性Segments,类型是PathSegmentCollection,意味着它也是一个集合,可以装载多个PathSegment(路径中的一部分)对象。
由此可见:多个Segment组成了一个PathSegmentCollection(PathFigure的Segment属性);多个PathFigure组成了一个PathFigureCollection(PathGeometry的PathFigure属性)。
// 定义SegmentCollection1
LineSegment line1 = new(...); // 定义直线部分
PolyLineSegment pline1 = new (...); // 定义多段线部分
ArcSegment arc1 = new(...); // 定义弧形线段部分
PathSegmentCollection segments1 = new(new PathSegment[] { line1, pline1, arc1 }); // 定义PathSegment集合
PathFigure path1 = new(new Point(0, 0), segments1, false); // 定义第一个的PathFigure
// 定义SegmentCollection2
LineSegment line2 = new(...);
BezierSegment beszier = new(...); // 定义Bezier曲线部分
PathSegmentCollection segments2 = new(new PathSegment[] { line2, beszier });
PathFigure path2 = new(new Point(300, 0), segments2, false); // 定义第二个的PathFigure
// 定义PathFigureCollection
PathFigureCollection pathFigures = new(new PathFigure[] { path1, path2 });
PathGeometry pathGeo = new() { Figures = pathFigures }; // 定义PathGeometry

备注:.Net提供“路径标记语法”用于简化PathFigures的创建。
1.5 GeometryGroup
它表示多个集合图形的集合。
它的主要属性有Children(包含的子图形),类型是GeometryCollection,意味着它可以可以装载多个Geometry对象。
LineGeometry lineGeo = new();
RectangleGeometry rectGeo = new();
PathGeometry pathGeo = new();
GeometryGroup geoGroup = new() { Children = new GeometryCollection() { lineGeo, rectGeo, pathGeo } };
GeometryGroup中的几何图形,也可以设置FillRule属性,以设置多个几何图形交叉区域的合并方式。
1.6 CombinedGeometry
它表示一个,由两个几何图形组合而成的图形。
它的主要属性有Geometry1(几何图形1)、Geometry2(几何图形2)、GeometryCombineMode(图形结合的方式)
RectangleGeometry rectGeo = new();
PathGeometry pathGeo = new();
CombinedGeometry CombineGeo = new(GeometryCombineMode.Exclude, rectGeo, pathGeo);
备注:
- 该类的GeometryCombineMode指的是多个图形的“结合”方式,这种方式通常指的是布尔运算;而部分Geometry对象的FillRule,指的是交叠的图形的“填充”方式。指的是图形的重叠闭合区域的“填充”方式;
- 虽然CombineGeometry只能“结合”两个Geometry对象。但是要注意,Geometry1和Geometry2的类型都是Geometry,意味只要只要是Geometry的子类,都可以赋值给这两个属性。因此,可以将多个Geometry填到GemetryGroup中,也可以两两CombinedGeometry,然后再将CombinedGeometry再CombinedGeometry。
1.7 StreamGeometry
它是PathGeometry的轻量级表示,不支持数据绑定、动画或修改。
这意味着,如果PathGeometry占用太多资源,且不需要数据绑定、动画、修改等功能,可以用StreamGeometry来替代。
它的工作原理是创建一个StreamGeometryContext对象,并在这个对象中绘制图形。所以,它没有图形数据相关的属性,
StreamGeometry streamGoe = new();
StreamGeometryContext context = streamGoe.Open();
context.ArcTo(...); // SteamGeometryContext类提供了多种绘图方法。 context.PolyLineTo(...);
context.Close();
2. Shape
形状(Shape),就是一个能看得到的几何图形。例如我们在白纸上,用红色的笔画一条直线,一个矩形。
由此可见,Shape的本质,就是在几何图形(Geometry)的基础上,加上画笔,颜色等信息,绘制而成。
.Net中,Shape就是表示“形状”的类。它是一个抽象类,继承自FrameworkElement,这意味着它是一个元素,可以直接显示在窗体上。
Shape类派生出了以下几个类:
|
类型
|
功能
|
|
Ellipse
|
椭圆形
|
|
Line
|
直线
|
|
Path
|
路径
|
|
Polygon
|
多边形
|
|
Polyline
|
多段线
|
|
Rectangle
|
矩形
|
这些类都比较容易使用,就不再一一赘述。
WPF绘图(一):几何(Geometry)与形状(Shape)的更多相关文章
- WPF 10天修炼 第八天 - 形状、画刷和变换
图形 在WPF中使用绘图最简单的就是使用Shape类.Shape类继承自FrameworkElement,是一个专门用来绘图的类.Shape类中年派生的类有直线.矩形.多边形和圆形等. System. ...
- 利用WPF绘图
C#入门经典 25章的一个例子,利用WPF绘图. XAML: <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/p ...
- FastReport.Net使用:[18]形状(Shape)控件用法
FastReport中,如果要画一张漂亮的报表,经常会画些形状控件来美化?那么如何用好形状(Shape)控件呢? 形状的5种类型 在工具栏的图形控件下拉菜单中有5种类型(矩形.圆角矩形.椭圆形.三角形 ...
- 18 UI美化自定义形状shape
自定义某个控件的形状 如 圆角 巨型 环形 : 在工程文件的新建 res/drawable/shape文件(以下键一个圆角) <?xml version="1.0" enco ...
- WPF 反射加载Geometry几何图形数据图标
相信大家在阅读WPF相关GitHub开源项目源码时都会看见一串串这种数据 这种Geometry数据就是几何图形数据 为什么要用Geometry数据做图标? 有一种做法是使用ttf字体文件代替,不过使用 ...
- 【R绘图】当图例映射color/shape等多个属性时,如何修改图例标题?
一般而言,我们修改ggplot2图例标题,常用以下三种方法: + guides(fill=guide_legend(title="New Legend Title")) + lab ...
- 关于WPF绘图中的path.data在后台重新赋值的语法
//XAML语法 <Path Name="path_M" Fill="LawnGreen" Data="M 0 0 L 100 0 L 100 ...
- WPF 绘图 和动画
wpf 的动画:https://www.cnblogs.com/TianFang/p/4050845.html
- WPF绘图性能问题
代码: /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWind ...
- wpf 绘图
随机推荐
- PDF书签的编辑器,基于(python、Tkinter)
使用 脚本 在github下载源码. 安装python3 安装必要的python包 pip install numpy pip install pandas pip install PyMuPDF p ...
- UE4构建基础和实践:一、概述
序言 构建这个概念是和应用程序包及资源等相关的,它的特点是使用脚本控制一系列的任务的处理,以减少人力操作带来的成本和操作失误风险. 在UE的概念里,构建往往是和打包相关的(如编译.cook.压缩打包等 ...
- Mysql高级4-索引的使用规则
一.最左前缀法则 如果索引了多列(联合索引),要遵守最左前缀法则.最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列,如果跳跃某一列,索引将部分失效(后面的字段索引失效) 示例1:acco ...
- ASP.NET Core WebAPI如何获得远程文件返回文件流给前端?
一.根据网络路径把文件保存成byte[]返回给前端 项目采用的是前后端分离的模式,后端使用ASP.NET Core WebAPI方式,将文件流返回给前端. /// <summary> // ...
- centos转移mysql的数据存储目录
前言 centos7使用yum安装mysql的时候,没修改存储位置,/var也没单独挂载,导致长时间运行后根目录空间不足.现需要将数据转移到大分区的/home,操作步骤如下. 步骤 创建新目录 mkd ...
- C#性能优化-树形结构递归优化
前言 大家好,我是wacky,最近在工作中遇到一个有趣的问题,同事反馈说WPF中有一个树形结构的集合,在加载时会直接报堆栈溢出,一直没时间(懒得)看,导致很久了也没人解决掉.于是,组长就把这个&quo ...
- [FlareOn4]login-buu ctf
打开压缩包 是个html,我直接???? 这不是web弄的吗 离谱了,不过f12还是会的 不过其中的逻辑还是比较清楚的 先用伪代码确定加密逻辑,再直接写直接进行爆破解码 wo cao,wrong!fl ...
- C#byte数组获取每一位值
获取byte中每一位的值 byte byData = 0x36; int n0, n1, n2, n3, n4, n5, n6, n7; n0 = (byData & 0x01) == 0x0 ...
- ChatGPT接入Siri(保姆级教程)
今天,我将为大家分享如何将ChatGPT应用集成到苹果手机的Siri中 (当然手机是需要魔法(TZ)的) 第一步:获取OpenAPI的Key 提取API网址:https://platform.open ...
- Android13深入了解 Android 小窗口模式和窗口类型
Android13深入了解 Android 小窗口模式和窗口类型 小窗模式,作为一种在移动设备上的多任务处理方式,为用户带来了便捷和高效的体验,尤其在一些特定场景下,其价值愈发凸显.以下是为什么需要小 ...