开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 3285|回复: 0

LightningChart数据可视化控件使用篇11-图形视图

[复制链接]

0

精华

10

贡献

2071

赞扬

帖子
141
软币
3968
在线时间
255 小时
注册时间
2021-1-21
发表于 2021-3-17 12:05:58 | 显示全部楼层 |阅读模式
本帖最后由 .net_wang 于 2021-3-17 12:12 编辑

LightningChart的主要视图如下:
- ViewXY
- View3D
- ViewPie3D
- ViewPolar
- ViewSmith
通过设置ActiveView属性可以对可视化视图进行更改。默认视图为ViewXY。
[C#] 纯文本查看 复制代码
// 设置可视化视图为3D
chart.ActiveView = ActiveView.View3D;



视图与缩放区域定义
LightningChart视图包含了几个不同的区域,各自反映了不同的信息。这些区域根据视图的内容可以看做是几个平面矩形,但无论视图类型如何,这些定义都是一致的;特别是在缩放操作时,将决定要显示图表的哪部分区域。
-ChartArea/ViewArea: 整个区域包含图表及图边距。
-MarginRectangle: MarginRectangle (或 MarginRect)包括图边距内部的区域.
-GraphArea: 该区域由轴范围界定。包含主网格及次网格。除非某些数据值超出了轴范围,否则数据会绘制在这个区域中。
-Background area / circle: 基本上和GraphArea一样。还包含轴范围与网格之外的图形部分。
-LabelsArea: 该区域包括图形及轴标签。忽略了数据。

-Data: 该区域仅包含数据。由数据的最大与最小值决定。
-DataAndLabelsArea: 结合了Data 和 LabelsArea 两个部分。包括了所有的数据、轴、标签以及标记。
-Border: 一个可自定义的1像素宽的矩形,指示出图边距的位置。通过禁用/启用可以显示或者隐藏。
-Margins: 图边距是图形区域周围的空白区域。视图的大部分内容都填置在图边距内,图边距外部分都会被剪切掉。
-ZoomPadding: 该区域是在缩放操作后,图边距与另外的预定义区域之间留出的空间。在ViewXY视图中没有作用。

微信截图_20210317113013.png

设置背景填充
所有的视图的背景填充都一样。
• 在WinForms中使用chart.Background
chart.Background.Color = Color.DarkBlue;

• 在WPF中使用chart.ChartBackground
chart.ChartBackground.Color = Colors.DarkBlue;

背景填充支持以下几种方式
• 纯色填充。设置GradientFill = Solid ,然后用Color 来定义颜色。
• 渐变填充,改 Color 为 GradientColor。设置 GradientFill = Linear / Radial / RadialStretched / Cylindrical,用GradientDirection来控制渐变方向为Linear(线性)或是Cylindrical(圆柱形 )。

chart.ChartBackground.GradientFill = GradientFill.Cylindrical;
chart.ChartBackground.GradientColor = Colors.Black;
chart.ChartBackground.GradientDirection = -45;

• 位图填充,有几个不同的平铺和拉伸选项。还支持位图着色与透明度调节,可设置半透明填充位图。

以下展示在Background中为背景选项,在 ViewXY列下为参数。 GradientFill = Solid,Color = DimGray
微信截图_20210317113219.png

以下展示在View3D 视图模式下,设置背景(Background)为渐变圆柱形。GradientFill = Cylindrical, Color = Maroon, GradientColor = Black. GradientDirection = -45 degrees(度)
微信截图_20210317113342.png

以下展示在ViewPolar 视图模式下,设置背景为平铺位图填充。 Style = Bitmap, 设置一张图片 Bitmap.Image, Bitmap.Layout = Tile
微信截图_20210317113425.png

设置透明背景
在WPF中,可将图表设置成显示为透明,这样在图表下方的对象可以透过图表显示出来。

以下展示WPF图表中的透明背景
微信截图_20210317113529.png

设置 ChartBackground.Color = #00000000(全透明黑色)
注意!不要设置 ‘Transparent’ (#00FFFFFF)。该设置无法穿透显示。
WinForms不支持控件透明背景。


配置外观/性能设置
ChartRenderOptions (在WinForms 中为RenderOptions)包含用于配置外观和性能的属性。
以下展示RenderOptions 下的属性.
微信截图_20210317113728.png
DeviceType
[C#] 纯文本查看 复制代码
// 通过代码更改渲染设备
chart.ChartRenderOptions.DeviceType = RendererDeviceType.Auto;


Auto 也称为AutoPreferD11 选项,此为默认设置。
AutoPreferD9 更倾向于 DirectX9 硬件渲染,并根据可用性依照顺序:HW9 -> HW11 -> SW11 -> SW9自动选择设备。当硬件不可用时,则会返回至WARP(SW11)软件渲染。
AutoPreferD11更适合DirectX11硬件渲染,并根据可用性依照顺序:HW11 -> HW9 -> SW11 -> SW9 自动选择设备。当硬件不可用时,则会返回至WARP(SW11)软件渲染。这可作为一种通用的高性能和最佳外观设置使用。 比起采用DirectX9渲染程序,视觉外观会更好。
HardwareOnlyD9 仅使用hardware 9来进行渲染。
HardwareOnlyD11仅使用hardware 11来进行渲染。
SoftwareOnlyD11 使用DirectX11 WARP,这与DirectX9参考光栅设备相比非常快(但比硬件选项慢)

SoftwareOnlyD9 使用DirectX9参考光栅设备(非常慢)
None 如果图表被隐藏或者在背景中处于非使用状态,设置DeviceType为None,可以将图表资源释放给其他图表。


GPUPreference
[C#] 纯文本查看 复制代码
chart.ChartRenderOptions.GPUPreference = GPUPreference.SystemSetting;

适用于带有双图形适配器系统的计算机,主要是带有集成了低性能GPU的CPU/芯片组和较高性能图形GPU(例如AMD或者Nvidia)的笔记本电脑。
SystemSetting使用在Windows、AMD或Nvidia控制面板的图形设置中可选择的选项。
PreferHighPerformanceGraphics 使用高性能GPU(若系统中存在)。通常会带来更佳的新能表现,但能耗较高。
PreferLowPowerGraphics 使用较低性能的集成GPU(即便系统中安装有高性能的GPU)
默认情况下,PreferHighPerformanceGraphics 为首选。不要取消此项会获得最佳的性能。

FontsQuality
[C#] 纯文本查看 复制代码
chart.ChartRenderOptions.FontsQuality = FontsRenderingQuality.High;

Low 性能最佳,字体边缘更光滑。仔细选择字体类型,获得最合意的外观效果。
Mid 其性能与Low几乎相似。字体边缘同样具有反锯齿效果。此项为默认设置。
High 外观最佳,但对性能表现有很大影响。
注意: 出于渲染技术限制,透明背景不适用于采用High 质量设置的DirectX 11 渲染,但可适用于DirectX9 。


AntiAliasLevel
[C#] 纯文本查看 复制代码
chart.ChartRenderOptions.AntiAliasLevel = 1;

全屏反锯齿系数。其实用性取决于硬件。值越大,外观越好,但是性能越差。设置0或1以达到性能最大化。有关反锯齿设置的更多信息,请参阅第5.12章节。

WaitForVSync
[C#] 纯文本查看 复制代码
chart.ChartRenderOptions.WaitForVSync = true;


建议: 保持默认值。 启用后,持续渲染,直到下一次刷新(例如,1/60 秒的下一个倍 数)。这只是暂时性建议,例如采用当与外部屏幕捕获应用程序同步,以防止出现条带化,或当屏幕顶部的图像与屏幕底部不同步时。这可能显示为中断的波形数据。在启用后,特别是在WPF中,性能会受到明显影响。

UpdateType
[C#] 纯文本查看 复制代码
chart.ChartRenderOptions.UpdateType = ChartUpdateTypes.Sync;

Sync (default): 图表同步更新。图表在最后一次EndUpdate()调用后更新,或者当设置属性(或调用一个method)会改变图表时更新。属性的改变(没有BeginUpdate…EndUpdate)会引发即时渲染新帧。
Async: 图表以异步方式更新。图表在属性改变后将尽快更新,但是图表将在随后的某个的点渲染一个新帧。这也许让图表在某些情况下更方便使用。
LimitedFrameRate: 帧率受限于在FrameRateLimit属性中规定的值。0 = 无限制。例如,如果想要最大每秒刷新10次,则设置值为10。这与Async选项类似,但会防止在第一个帧之后立即渲染新的帧,如此以来,减少帧率,但节省了系统资源。
注意! 确保在LimitedFrameRate和Async模式下正确的线程处理。如果异步更新图表,并且图表属性也同时更新,可能会引发冲突,导致图表或应用程序奔溃。


InvokeRenderingInUIThread
[C#] 纯文本查看 复制代码
chart.ChartRenderOptions.InvokeRenderingInUIThread = true;

在应用程序中使用后台时,来自该线程的所有UI更新都必须通过Invoke(在WinForms中为Control.Invoke()在WPF中为Dispatcher.Invoke()
在启用后,渲染部分将使用内部调用来处理UI线程。
默认值为False,因为以线程安全的方式设置属性和调用方法也应该要注意到,即使启用了此属性,也要防止在图表的内部状态中发生线程冲突。


HeadlessMode
[C#] 纯文本查看 复制代码
chart.ChartRenderOptions.HeadlessMode = true;

将此值设置为True,可以在后台服务、控制台应用程序或其他没有用户界面的应用程序中使用图表。


DPI 处理器

默认情况下,WPF应用程序支持DPI(Dots Per Inch每英寸点数),而WinForms应用程序不支持。此外,DPIs还可用以代替像素来测量尺寸大小。LightningChart 不支持Per-Monitor DPI 感知,但支持系统感知,这意味着WPF应用程序支持DPI系统。 在WinForms 中,默认DPI为72,但若加载了wpf .dll 文件的话可以忽略,该值会变为96。
然而,当移动到具有不同DPI设置的另一个屏幕时,LightningChart不会自动调整大小。要启用大小调整,需要把ChartOptions 中的AllowDPIChangeInduceWindowsResize 属性设置为true 。或者,用户可以注册到OnDPIChanged事件并更改它的allowWindowResize属性。这些在WinForms不起作用。


[C#] 纯文本查看 复制代码
// 启动自动调整大小 
chart.Options.AllowDPIChangeInduceWindowResize = true;

// 通过OnDPIChanged –事件 
chart.OnDPIChanged += chart_OnDPIChanged; 

private void chart_OnDPIChanged(LightningChartUltimate chart, float dpix, float dpiy, ref bool allowWindowResize)
 { allowWindowResize = true;
 }


DpiHelper类
LightningChart 的DpiHelper 类,包含与DPI相关的问题的helper类。
DpiAware 声明系统进程是否被DPI感知。但是,目前还无法区分系统感知和per-monitor感知。

[C#] 纯文本查看 复制代码
bool isDPIAware = DpiHelper.DpiAware;


DpiXFactor/ DpiYFactor 是屏幕宽度/高度的系统DPI的有效缩放系数。该系数说明了在X/Y方向上每一个DPI有多少个实际像素。
[C#] 纯文本查看 复制代码
float dpiXFactor = DpiHelper.DpiXFactor;


DipToPx and PxToDip 方法使用系统DPI设置将DIP转换为像素,反之亦然。它们可以转换单个点或像素,也可以转换矩形的大小和位置值。
[C#] 纯文本查看 复制代码
double pixelValue = DpiHelper.DipToPx(dipValue);



反锯齿
LightningChart® .NET 支持反锯齿渲染。可以应用于具有AntiAliasing属性的对象。通过反锯齿,线条等的边缘可以渲染的更加平滑,呈现出更圆滑的图形外观,但是随着性能成本的增加,CPU/GPU的消耗也会随之增加。


启动反锯齿
通过AntiAliasing属性可以控制反锯齿,即根据相关组件通过一个布尔值或LineAntialias枚举设置。对于后者而言,目前有两个可用的选项:
LineAntialias.None; 无反锯齿
LineAntialias.Normal; 反锯齿
[C#] 纯文本查看 复制代码
seriesEventMarker.Symbol.Antialiasing = true;

[C#] 纯文本查看 复制代码
pointLineSeries.LineStyle.AntiAliasing = LineAntialias.Normal;


图表的AntiAliasLevel 系数也会影响反锯齿效果。这一系数基于所选的渲染引擎(DirectX9和DirectX11)来定义应用的反锯齿模式。设置反锯齿级别为0或1,结果是渲染时不应用反锯齿,即使个别组件的AntiAliasing属性设置为true或LineAntialias.Normal。
通过图表的渲染选项可以设置AntiAliasLevel 值:
[C#] 纯文本查看 复制代码
// 反锯齿系数。值0和1都不会应用反锯齿。
chart.ChartRenderOptions.AntiAliasLevel = 2;

没有手动设置该值时,AntiAliasLevel默认为4。

DirectX 11 反锯齿
在DirectX11 中,当用反锯齿渲染时,有几个共同的特点应该考虑到:
• 如果设置的值大于1,那么设置AntiAliasLevel 值会覆盖AntiAliasing属性,也就说,即使AntiAliasing属性设置为false或者LineAntialias.None,也会使用反锯齿来完成渲染。唯一的例外情况是应用LineOptimization.Hairline(只适用于使用3D渲染)。
LineAntiAliasType 可用于选择是使用alpha-blending反锯齿(ALAA),还是使用quadrilateral反锯齿(QLAA):


LineAntiAliasingType.ALAA;Alpha-blending 反锯齿
LineAntiAliasingType.QLAA;Quadrilateral 反锯齿

chart.ChartRenderOptions.LineAAType2D = LineAntiAliasingType.ALAA;

RasterizerStateDescriptionIsMultisampleEnabled IsAntialiasedLineEnabled 设置还会以以下方式(只适用于渲染线条line rendering)影响QLAA 和 ALAA 渲染:
• 如果RasterizerStateDescription.IsMultisampleEnabled == true,用QLAA
• 如果 RasterizerStateDescription.IsMultisampleEnabled == false,用ALAA
• 如果 RasterizerStateDescription.IsAntialiasedLineEnabled == true,用ALAA ,这只有在同时RasterizerStateDescription.IsMultisampleEnabled == false的时候才有效。
注意!利用DirectX11进行3D渲染时,除非设置AntiAliasLevel值为0或1,否则所有三角线都总是用反锯齿渲染。


遇到使用问题,关注Arction公众号可以跟官方技术支持在线聊天解决,技术支持这一块儿Lightningchart做的还是不错的。
微信公众号
LightningChar0t.png

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

最新版V10 LightningChart下载地址:https://katechanresearch.com/xzzx





回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-4-20 05:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表