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)的更多相关文章

  1. WPF 10天修炼 第八天 - 形状、画刷和变换

    图形 在WPF中使用绘图最简单的就是使用Shape类.Shape类继承自FrameworkElement,是一个专门用来绘图的类.Shape类中年派生的类有直线.矩形.多边形和圆形等. System. ...

  2. 利用WPF绘图

    C#入门经典 25章的一个例子,利用WPF绘图. XAML: <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/p ...

  3. FastReport.Net使用:[18]形状(Shape)控件用法

    FastReport中,如果要画一张漂亮的报表,经常会画些形状控件来美化?那么如何用好形状(Shape)控件呢? 形状的5种类型 在工具栏的图形控件下拉菜单中有5种类型(矩形.圆角矩形.椭圆形.三角形 ...

  4. 18 UI美化自定义形状shape

    自定义某个控件的形状 如 圆角 巨型 环形 : 在工程文件的新建 res/drawable/shape文件(以下键一个圆角) <?xml version="1.0" enco ...

  5. WPF 反射加载Geometry几何图形数据图标

    相信大家在阅读WPF相关GitHub开源项目源码时都会看见一串串这种数据 这种Geometry数据就是几何图形数据 为什么要用Geometry数据做图标? 有一种做法是使用ttf字体文件代替,不过使用 ...

  6. 【R绘图】当图例映射color/shape等多个属性时,如何修改图例标题?

    一般而言,我们修改ggplot2图例标题,常用以下三种方法: + guides(fill=guide_legend(title="New Legend Title")) + lab ...

  7. 关于WPF绘图中的path.data在后台重新赋值的语法

    //XAML语法 <Path Name="path_M" Fill="LawnGreen" Data="M 0 0 L 100 0 L 100 ...

  8. WPF 绘图 和动画

    wpf 的动画:https://www.cnblogs.com/TianFang/p/4050845.html

  9. WPF绘图性能问题

    代码: /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWind ...

  10. wpf 绘图

随机推荐

  1. Java版人脸跟踪三部曲之三:编码实战

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 作为<Java版人脸跟踪三部曲> ...

  2. 【HDC.Cloud 2023】华为云区块链分论坛内容值得再读!

    摘要:在Web3时代,基础设施不仅仅是传统意义上的服务器.网络等,还包括了区块链节点.智能合约等,这些基础设施的稳定性和可信度直接影响着Web3的发展. 本文分享自华为云社区<[HDC.Clou ...

  3. Typecho左右侧广告区域展示恋爱线时间

    该教程适用typecho动态博客框架,handsome主题,展示恋爱线时间,效果立于博客网页左侧右侧等区域,展示如下: 教程 typecho动态博客框架,handsome主题下,将下面代码粘贴到后台设 ...

  4. Hexo博客Next主题valine评论系统邮件提醒

    简介 Valine:一款快速.简洁且高效的无后端评论系统. Valine-Admin Github 项目地址,具体教程以 最新版 为准 Valine-Admin项目地址 简介 Valine Admin ...

  5. [HUBUCTF 2022 新生赛]simple_RE

    [HUBUCTF 2022 新生赛]simple_RE 查壳,64位 找main函数,F5查看伪代码,简单分析一下 int __cdecl main(int argc, const char **ar ...

  6. jdbc-plus是一款基于JdbcTemplate增强工具包,基于JdbcTemplate已实现分页、多租户、动态表名等插件,可与mybatis、mybatis-plus等混合使用

    jdbc-plus简介 jdbc-plus是一款基于JdbcTemplate增强工具包,基于JdbcTemplate已实现分页.多租户.动态表名等插件,可与mybatis.mybatis-plus等混 ...

  7. Centos查看挂载目录并挂载

    一.概述 本次已Centos7作为示例 挂载系统没有挂载的磁盘,可以分如下几步 1.查看系统哪些盘未挂载 2.给未挂载的磁盘进行分区 3.格式化磁盘并向磁盘中写入系统文件 4.挂载磁盘 5.设置开机自 ...

  8. 2021-7-12 VUE的组件认识

    VUE组件简单实例 <!DOCTYPE html> <html> <head> <title> </title> </head> ...

  9. Win10 下 tensorflow-gpu 2.5 环境搭建

    Win10 下 tensorflow-gpu 2.5 环境搭建 简介 机器学习环境搭建,tensorflow_gpu-2.5.0 + CUDA 11.2 + CUDNN 8.1 :环境必须是这个,具体 ...

  10. IDEA:使用Test注解,控制台无法输入

    解决方案 步骤一: 点击help ===> Edit Custom VM Options... 步骤二: 添加文件末尾添加如下内容 -Deditable.java.test.console=tr ...