前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于UWP图形绘制

关于UWP图形绘制

原创
作者头像
李富贵
修改2019-04-25 18:34:50
1.6K0
修改2019-04-25 18:34:50
举报

当前在做的毕业设计涉及到一些曲线图形的绘制问题,苦于System.Drawing不能使用(平台不支持,这个问题我没有解决掉,这里说的平台可能是UWP平台而不是dotnetcore平台,如果有dalao清楚的话还希望能指点一下)只得换用Win2d.uwp

win2d提供了三种画布:canvasControl,CanvasAnimatedControl,CanvasVirtualControl;这三种当中,CanvasAnimatedControl适合需要频繁触发绘制的操作;有很大的图,一次性加载的话有很多资源会浪费在看不见的部分的情况下,适合使用CanvasVirtualControl;

目前我在做的毕业设计关于列车运行,如果以1m为分辨率,以太原到北京为例,距离长达600km,要绘制的点将达到6*10^5个;

设置断点观察,默认窗口大小下画布的尺寸为644*323,全屏情况下尺寸为1086*355;以默认尺寸计算,如果以一个显示单位为1m,要显示6*10^5个单位,需要至少931页;将近1000页的容量明显会对使用软件造成极大的影响,并且在一页上显示一个闭塞分区也有一定的难度;

这种情况下如果就按一个显示单位1m的话使用CanvasVirtualControl是最理想的,因为在显示一页的时候调用资源把其他999页绘制出来明显是不合理的;但是如果按一个显示单位1m,软件的显示效果就不那么理想,整个软件的显示重点应当是放在列车制动部分上,而列车的紧急制动大致需要两个分区;以目前的固定1500m为一个分区计算,大致需要在644个显示单位上显示3000米的信息,也就是以五米为间隔进行显示,每次显示3220m,这样计算的话,需要大致200页,就能完成太原到北京的线路的模拟,1/200的显示比例仍旧比较高,选择使用CanvasVirtualControl;

目前已经能同过一个函数,将整个输入线路的目标—距离模式曲线存储到一个三维数组中(分辨率1m);数组的第二个值(【】【这个】【】)就是在当前区间内的位置,通过存取数组中的信息构成一个(仅包含位置和速度的)临时temp数组;

绘制思路:

注意:这一条涉及到两个分辨率:计算距离分辨率(计算分辨率)和显示距离分辨率(显示分辨率);前者与显示器没有任何关联,仅仅是用于操作曲线计算的一个参数,用于确定曲线中间隔最小两个点的距离;

1.确定勾选了使用crh3模板,按照crh3模板设定数值依据用户自定义的轨道参数进行距离——模式曲线的计算(注意:这里仅仅是计算,仅仅是计算,并没有在这一步将距离模式曲线的图形绘制出来!!!!)

2.确定显示分辨率:这一步应当添加一个控件供用户选择显示分辨率;

3.按照显示分辨率把曲线绘制出来;绘制步骤:通过

canvasPathBuilder.BeginFigure(x0,y0);

canvasPathBuilder.AddLine(x1,y1);

canvasPathBuilder.EndFigure(CanvasFigureLoop.Open);循环绘制

每次绘制在区间距离上-5;直到区间区里小于等于0,停止绘制

4.图形的显示:CanvasVirtualControl经常和ScrollViewor连用,这样就可以确定显示的部分;关于显示策略,我个人倾向于做成翻页形式的而不是平滑滚动,原因有三,一是做成平滑滚动可能对帧数要求较高,频繁调用绘制方法可能并达不到这个帧数要求;二是平滑滚动对数据变化的观察造成了影响,对用户造成了不必要的负担;三是翻页模式笔记平滑滚动模式实现也更为方便,重新绘制的部分较少,不用擦除已经绘制的部分;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档