LightningChart数据可视化图形控件使用篇30-持续的系列渲染图层

1,753 阅读6分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

持续的系列渲染图层

演示示例: Lines / points; Areas /high-lows

PersistentSeriesRenderingLayer 可用于非常快速渲染重复的线/点数据,或在相同的X和Y值域内反复绘制的线/点/高低/区域填充数据。

例如,看下FFT监控的情况:每秒钟收到20个新的数据条。最新的数据应该与所有的历史轨迹一样可见。但是监控会持续数小时。通过用常规渲染法来渲染这种数据,每小时则需要20 * 60 * 60 = 72000 个新线条系列。计算机可能会在还没监控1小时便耗尽内存。可以肯定的是渲染会变得非常慢,以至于再不能起作用。

PersistentSeriesRenderingLayer 是一种位图,可循序渐进地添加渲染数据。如果没有清除指令,可以一直存储图形。这样,每一轮渲染,图层上只会渲染一个系列,随后进行屏幕上的图层渲染。 CPU负载或内存占用不会增加。如果现有的数据应该逐渐消失,可以通过增加位图像素的透明度来实现。

根据需要可以创建任意数量的PersistentSeriesRenderingLayer对象,在每一轮更新中,任何的系列量都可以在它们每个上面渲染。

微信截图_20220509110338.png 图:持续性图层可显示历史轨迹(绿色)。其上方显示的是一个普通的 PointLineSeries(红色)

微信截图_20220509110920.png 图:持续性图层可显示历史轨迹(绿色)。在更新渲染层中的新数据之前调用MultiplyAlpha方法,使最早的轨迹消失。

创建图层

PersistentSeriesRenderingLayer 不是ViewXY的子属性,并且不能用Visual Studio的属性网格来添加。

PersistentSeriesRenderingLayer 对象必须在代码中创建。创建方法如下:

using Arction.[edition].Charting.Views.ViewXY;

PersistentSeriesRenderingLayer layer = new PersistentSeriesRenderingLayer (m_chart.ViewXY, m_chart.ViewXY.XAxes[0]);

通过提供ViewXY 对象作为参数,这可绑定在 ViewXY 中的图层。提供相同的XAxis对象,该对象与在其上渲染的系列一起使用。

多个图层将按照图表的创建顺序渲染。

清除图层

layer.Clear()可清除图层,并用ARGB=(0,255,255,255)对颜色初始化。

layer.Clear(Color color)用给定的颜色来清除图层。在大多数情况下,设置与在背景中使用的同样颜色非常有用,但要设置其A = 0。 若背景为黑色的,则使用layer.Clear(Color.FromArgb(0,0,0,0));

调整图层透明度

MultiplyAlpha(value)可让图层更透明或不透明。将图层中每个像素单独相乘。倍增操作会分别对图层中的每一个像素起作用。

给定值 < 1, 透明度增加(衰减图层)

给定值> 1, 不透明度增加(让图层的可见性更加)

值为1时无效。

例如, MultiplyAlpha(0.8)即设置透明度为当前透明度的80%。MultiplyAlpha(2)则调整其为 200%。

渲染数据到图层中

用PointLineSeries、SampleDataSeries、FreeformPointLineSeries、HighLowSeries 或 AreaSeries 中任一个对象可将数据渲染到图层中。这些系列可以是添加到 ViewXY.PointLineSeries、ViewXY.SampleDataSeries、ViewXY.FreeformPointLineSeries、ViewXY.HighLowSeries 或 ViewXY.AreaSeries 集中的。

还未添加到这些集中的临时系列也可以使用。以常规方式填充数据至系列中(PointLineSeries可参阅# [LightningChart数据可视化图形控件使用篇8-ViewXY·图边距、通用、PointLineSeries](LightningChart数据可视化图形控件使用篇8-ViewXY·图边距、通用、PointLineSeries - 掘金 (juejin.cn))章节,

SampleDataSeries可参阅# [LightningChart数据可视化图形控件使用篇9-ViewXY·SampleDataSeries](LightningChart数据可视化图形控件使用篇9-ViewXY·SampleDataSeries - 掘金 (juejin.cn))章节,

FreeformPointLineSeries可参阅# [LightningChart数据可视化图形控件使用篇11-ViewXY·FreeformPointLineSeries](LightningChart数据可视化图形控件使用篇11-ViewXY·FreeformPointLineSeries - 掘金 (juejin.cn))章节,

HighLowSeries可参阅# [LightningChart数据可视化图形控件使用篇13-ViewXY·High-lowSeries (高低系列)添加数据](LightningChart数据可视化图形控件使用篇13-ViewXY·High-lowSeries (高低系列) - 掘金 (juejin.cn))章节,

AreaSeries可参阅#[ LightningChart数据可视化图形控件使用篇14-ViewXY·AreaSeries添加数据](LightningChart数据可视化图形控件使用篇14-ViewXY·AreaSeries - 掘金 (juejin.cn))章节

layer.RenderSeries(PointLineSeriesBase series): 在图层上渲染一个系列。

layer.RenderSeries(List seriesList): 在图层上渲染所有给定的系列。这比分别为每个系列调用layer.RenderSeries(PointLineSeriesBase series)更有效。

注意! 所有给定的系列将在图层上渲染,即便其Visible设置为False。

注意! 与该系列一起使用的X轴必须与提供给PersistentSeriesRenderingLayer构造函数的X轴相同。否则,将跳过该系列对象。

注意! RenderSeries用以渲染至图层中。在普通的系列之前,图层自己会先渲染 (PointLineSeries, SampleDataSeries, FreeformPointLineSeries, HighLowSeries, AreaSeries).

排列图层

调用layer.Dispose()可排列图层,并防止图层和图表一起渲染。

消除图层中数据的锯齿

设置layer.AntiAliasing为True,可在图表渲染阶段消除数据锯齿。如果硬件不支持它,它也支持反锯齿。

获得图层列表

ViewXY.GetPersistentSeriesRenderingLayers ( )返回所有创建的图层列表,包括 PersistentSeriesRenderingIntensityLayers.

需要注意的一些图层限制

由于其特殊的渲染技术,请记住这些限制:

  • X 轴的 ScrollMode 必须设置为 None. 这种方法不可能实现X轴的实时滚动。

  • 缩放、平移、轴调整以及图表调整大小都将导致图像与轴的范围不同步。在使用持久绘图或应用程序逻辑时,应该禁用这些特性,以便清除图层并临时为新层渲染重新创建之前的线条系列(有用于轴范围更改和大小调整的事件处理程序)。

  • 改变图表大小会清除图层,并从Windows桌面锁状态重新开始。

  • 仅在图层上渲染的系列中不支持鼠标交互

  • EMF/WMF/SVG SVG导出格式,以矢量格式复制到剪贴板以及以矢量格式打印不支持图层。只支持栅格格式。

关于LightningChart数据可视化图形控件使用篇30-持续的系列渲染图层章节就分享到这里了。

如果在实际应用中遇到技术问题或需要帮助,可以添加下方微信号联系官方技术支持。

微信号:lightningchart_china

如果您想进一步使用LightningChart数据可视化图形控件,请添加后回复“学习”可免费领取一套全功能版LightningChart数据可视化控件。

后续我会不断更新LightingChart更详细的使用方法,写文不易,还望多多回复关注支持!谢谢!

最新版V10 LightningChart下载地址:猛击下载