2018-8-10-win10-uwp-win2d-使用-Path-绘制界面
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
win10 uwp win2d 使用 Path 绘制界面
|
lindexi
|
2018-08-10 19:17:19 +0800
|
2018-06-06 08:57:28 +0800
|
win2d UWP 渲染
|
本文告诉大家如何在 Win2d 使用 Path 路径绘图
CanvasGeometry
在 win2d ,可以使用 DrawGeometry 的方式画出几何。而路径 Path 就是一种 Geometry 。传入的 CanvasGeometry 参数是不能通过实例创建,需要使用静态工厂创建。
通过 CanvasGeometry.CreatePath 就可以创建出路径几何,通过告诉线条颜色和线条宽度就可以画出 Path ,这个方法只能画出线条。
如果需要填充 Path 需要使用 FillGeometry 方法。
CanvasPathBuilder
因为 CanvasGeometry.CreatePath 的参数是 CanvasPathBuilder ,而 Path 也需要告诉每个点是如何画,所以需要 CanvasPathBuilder 来告诉 Path 每个点是怎么画。
在创建 CanvasPathBuilder 的时候需要传入 ICanvasResourceCreator ,也就是通过 args.DrawingSession 可以创建 CanvasPathBuilder 来画。
using (var canvasPathBuilder = new CanvasPathBuilder(args.DrawingSession))
上面的代码是写在 Canvas_OnDraw
private void Canvas_OnDraw(CanvasControl sender, CanvasDrawEventArgs args)
{ using (var canvasPathBuilder = new CanvasPathBuilder(args.DrawingSession))
{
// 这里可以画出 Path 或写出文字 lindexi.github.io
}
}
因为Path 可以使用多个 Path 组合,如果需要新建一个 Path 需要调用 BeginFigure 告诉 win2d 开始画出一个新的图形。在图形画完需要调用 EndFigure 告诉 win2d 已经画完。
例如准备画一条线,需要在开始画的时候调用 BeginFigure 告诉起点,在结束的时候使用 EndFigure 并且告诉这是不是封闭图形。
using (var canvasPathBuilder = new CanvasPathBuilder(args.DrawingSession))
{
// 这里可以画出 Path 或写出文字 lindexi.github.io
canvasPathBuilder.BeginFigure(100,100);
canvasPathBuilder.AddLine(200,100);
canvasPathBuilder.EndFigure(CanvasFigureLoop.Open);
}
现在运行代码会发现没有画出图形,因为没有调用画出来。调用 DrawGeometry 需要传入需要画的几何、线条颜色,线条宽度
using (var canvasPathBuilder = new CanvasPathBuilder(args.DrawingSession))
{
// 这里可以画出 Path 或写出文字 lindexi.github.io
canvasPathBuilder.BeginFigure(100, 100);
canvasPathBuilder.AddLine(200, 100);
canvasPathBuilder.EndFigure(CanvasFigureLoop.Open); args.DrawingSession.DrawGeometry(CanvasGeometry.CreatePath(canvasPathBuilder), Colors.Gray, 2);
}
画线
从上面的例子已经告诉大家如何画线,使用 BeginFigure 添加起点,然后使用 AddLine 把上一个点和输入的连成直线。
using (var canvasPathBuilder = new CanvasPathBuilder(args.DrawingSession))
{
// 这里可以画出 Path 或写出文字 lindexi.github.io
canvasPathBuilder.BeginFigure(100, 100);
canvasPathBuilder.AddLine(200, 100);
canvasPathBuilder.EndFigure(CanvasFigureLoop.Open);
}
例子
下面给大家看一些已经画好的路径界面
绘制坐标系
private void DrawPath(CanvasControl canvas, CanvasDrawEventArgs args)
{
var width = (float) canvas.ActualWidth-20;
var height = (float) (canvas.ActualHeight)-20;
var midWidth = (float) (width * .5);
var midHeight = (float) (height * .5);
Color color = Colors.Gray;
using (var cpb = new CanvasPathBuilder(args.DrawingSession))
{
// Horizontal line
// 水平线
cpb.BeginFigure(new Vector2(0, midHeight));
cpb.AddLine(new Vector2(width, midHeight));
cpb.EndFigure(CanvasFigureLoop.Open); // Horizontal line arrow
// 水平箭头
cpb.BeginFigure(new Vector2(width - 10, midHeight - 3));
cpb.AddLine(new Vector2(width, midHeight));
cpb.AddLine(new Vector2(width - 10, midHeight + 3));
cpb.EndFigure(CanvasFigureLoop.Open); args.DrawingSession.DrawGeometry(CanvasGeometry.CreatePath(cpb), color,strokeWidth: 1);
} using (var cpb = new CanvasPathBuilder(args.DrawingSession))
{
// Vertical line
// 垂直线
cpb.BeginFigure(new Vector2(midWidth, 0));
cpb.AddLine(new Vector2(midWidth, height));
cpb.EndFigure(CanvasFigureLoop.Open); // Vertical line arrow
cpb.BeginFigure(new Vector2(midWidth - 3, 10));
cpb.AddLine(new Vector2(midWidth, 0));
cpb.AddLine(new Vector2(midWidth + 3, 10));
cpb.EndFigure(CanvasFigureLoop.Open); args.DrawingSession.DrawGeometry(CanvasGeometry.CreatePath(cpb), color, 1);
}
}
2018-8-10-win10-uwp-win2d-使用-Path-绘制界面的更多相关文章
- win10 uwp win2d CanvasVirtualControl 与 CanvasAnimatedControl
本文来告诉大家 CanvasVirtualControl ,在什么时候使用这个控件. 在之前的入门教程win10 uwp win2d 入门 看这一篇就够了我直接用的是CanvasControl,实际上 ...
- win10 uwp 弹起键盘不隐藏界面元素
本文主要讲,在我们使用手机输入的时候,会因为手机的虚拟键盘隐藏了一些界面的元素.我们有一个简单的方法让虚拟键盘不隐藏界面元素. 我们需要的界面元素是在显示了虚拟键盘后的空间能全部显示,如果不能的话,还 ...
- win10 uwp 通过 Win2d 完全控制笔迹绘制逻辑
本文来告诉大家如何通过 Win2d 完全控制笔迹绘制逻辑,本文适合用来实现复杂的自定义逻辑,可以完全控制笔迹的行为.包括在书写过程中切换模式,如进行手势擦除切换为橡皮擦模式 本文提供的方法适合用来做复 ...
- win10 uwp 渲染原理 DirectComposition 渲染
本文来告诉大家一个新的技术DirectComposition,在 win7 之后(实际上是 vista),微软正在考虑一个新的渲染机制 在 Windows Vista 就引入了一个服务,桌面窗口管理器 ...
- win10 uwp 萤火虫效果
原文:win10 uwp 萤火虫效果 本文在Nukepayload2指导下,使用他的思想用C#写出来. 本文告诉大家,如何使用 win2d 做出萤火虫效果. 安装 win2d 安装win2d的方法请使 ...
- win10 uwp 列表模板选择器
本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector. 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的显示和其他行不 ...
- win10 uwp 毛玻璃
毛玻璃在UWP很简单,不会和WPF那样伤性能. 本文告诉大家,如何在 UWP 使用 win2d 做毛玻璃. 毛玻璃可以使用 win2D 方法,也可以使用 Compositor . 使用 win2d 得 ...
- win10 uwp 手把手教你使用 asp dotnet core 做 cs 程序
本文是一个非常简单的博客,让大家知道如何使用 asp dot net core 做后台,使用 UWP 或 WPF 等做前台. 本文因为没有什么业务,也不想做管理系统,所以看到起来是很简单. Visua ...
- win10 uwp 使用 Microsoft.Graph 发送邮件
在 2018 年 10 月 13 号参加了 张队长 的 Office 365 训练营 学习如何开发 Office 365 插件和 OAuth 2.0 开发,于是我就使用 UWP 尝试使用 Micros ...
- Win10 UWP开发实现Bing翻译
微软在WP上的发展从原来的Win7到Win8,Win8.1,到现在的Win10 UWP,什么是UWP,UWP即Windows 10 中的Universal Windows Platform简称.即Wi ...
随机推荐
- MaxCompute推出面向开发者的专属版本,普惠大数据开发者
3月20号,阿里云正式对外宣布推出MaxCompute产品的新规格-开发者版.MaxCompute开发者版是阿里云大数据计算服务发布的开发者专属版本.区别于原有的按量付费.按CU预付费规格,开发者版是 ...
- 【SPOJ 220】 PHRASES - Relevant Phrases of Annihilation
[链接]h在这里写链接 [题意] 给你n(n<=10)个字符串. 每个字符串长度最大为1e4; 问你能不能找到一个子串. 使得这个子串,在每个字符串里面都不想交出 ...
- qt获取本机用户名
//获取用户名 QString getUserName() { #if 1 QStringList envVariables; envVariables << "USERNAME ...
- JavaScript--函数中this的几种指向
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【水滴石穿】react-native-template-app
这个也是一个基础项目 地址如下https://github.com/ndlonghi/react-native-template-app 点击登陆跳转到首页 分析代码如 react-native-te ...
- PyCharm切换Python版本
由于代码格式问题,很多情况下需要我们去切换Python版本,那么在当下火爆的PyCharm中是如何切换Python版本的呢? 打开File菜单,选择Settings: 打开Settings窗口后,选择 ...
- thinkphp5.0 composer安装phpmailer
1.安装:composer require phpmailer/phpmailer 2.引入:use PHPMailer\PHPMailer\PHPMailer: 3.调用:$mail = new P ...
- 洛谷3067 BZOJ 2679题解(折半搜索)
传送门 BZOJ传送门(权限题) 看到n小于20,就可以想到搜索 所有的数要么在集合a中,要么在集合b中,要么都不在 可是3^n复杂度会炸,我们考虑优化 可以利用折半搜索,将前面一半的所有可能情况与后 ...
- 2018-9-30-VisualStudio-使用多个环境进行调试
title author date CreateTime categories VisualStudio 使用多个环境进行调试 lindexi 2018-09-30 18:39:26 +0800 20 ...
- @atcoder - AGC038F@ Two Permutations
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 N 与两个 0~N-1 的置换 P, Q. 现在你需要找到 ...