图表控件LightningChart .NET中文教程 - 创建3D网格模型实时着色应用

LightningChart.NET完全由GPU加速,并且性能经过优化,可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D,高级3D,Polar,Smith,3D饼/甜甜圈,地理地图和GIS图表以及适用于科学,工程,医学,航空,贸易,能源和其他领域的体绘制功能。

立即获取LightningChart.NET新版下载

3D网格模型实时着色应用程序

在这个例子中,我们将使用一个飞机对象来创建一个3D网格模型实时着色应用程序。这个应用程序示例对于实时显示来自3D模型的模拟或诊断数据非常有用,例如连接到机器上的传感器可以将数据传输到3D模型并提供实时测量。

在本文中,我们将基于飞机的3D网格模型创建一个WPF 3D网格模型实时着色应用程序,这种类型的图表有助于增强态势感知。在本例中,在飞机模型的某些点测量温度数据,并将温度读数转换为像素/3D模型的颜色。

这个应用程序可以帮助飞行员清楚地看到周围空域中其他飞机的接近程度,例如在航空业这些基于3D网格模型的图表可以提高态势感知能力,帮助飞行员避免潜在的飞机碰撞。

WPF三维网格模型实时着色图也可以改善飞行员和空中交通管制员之间的沟通,您可以把航空工业中的航海图看作是对其他飞机位置的视觉参考。

当然,在做出关于如何调整飞行路径以保持与其他物体的安全距离的明智决策时,决策受益于可视化的实时性,这通常有助于提高飞行安全和效率。

项目演示

在这个项目中,我们将使用一点3D建模,因此将不得不加载预制的3D对象(飞机),然后使用LightningChart.NET提供的网格映射工具。

LightningChart.NET允许我们使用本文中提到的属性轻松创建3D对象,接下来的部分会详细解释这些属性。

作为参考,3D网格模型从多边形的基础创建模型。因此对于3D对象,我们需要使用X、Y和Z坐标,它们将表示航空图表模型的高度、宽度和深度。

图表控件LightningChart .NET中文教程

戳这里下载WPF航空图项目(.ZIP)>>

本地设置

对于这个polar图表项目,我们需要考虑以下要求来编写项目。

  • 操作系统:32位或64位Windows Vista及以上版本、Windows Server 2008 R2及以上版本。
  • DirectX: 9.0c (Shader model 3及更高版本)或11.0兼容的图形适配器。
  • Visual Studio:2010-2019用于开发,不需要部署。
  • 平台 .NET 框架:安装版本为4.0或更高。

现在转到下一个URL并单击下载按钮:LightningChart® .NET v11.0.1试用版下载慧都资源下载-慧都网

如果下载了SDK,会得到这样一个.exe文件:

图表控件LightningChart .NET中文教程

安装将是一个典型的Windows过程,所以请继续它,直到完成。安装完成后,您将看到以下程序:

图表控件LightningChart .NET中文教程

License Manager:在此应用程序中,您将看到购买选项。您将使用此试用SDK创建的所有项目都可以在启用所有功能的情况下用于未来的开发。

图表控件LightningChart .NET中文教程

Visual Studio项目

现在让我们使用Visual Studio项,使用LightningChart.NET可视化工具和使用Visual Studio的主要区别在于,我们可以对源代码中的许多特性进行分析和实验。在LC可视化器中,选择飞机的颜色并运行示例:

图表控件LightningChart .NET中文教程

在窗口的右上方区域,您将看到以下选项:

图表控件LightningChart .NET中文教程

对于试用SDK,我们将能够使用WPF和WinForms框架。如果您完全熟悉windows forms,那么这个选项会更适合您。在这种情况下,我将使用Windows Presentation Foundation框架。

点击要使用的框架后,我们需要指定一个创建项目的文件夹:

图表控件LightningChart .NET中文教程

最后,项目将被创建,Visual Studio将被打开并准备执行。

图表控件LightningChart .NET中文教程

代码审查

主代码将被封装在MainWindow.xaml.cs中。在这里,我们将找到UI控件的代码。

图表控件LightningChart .NET中文教程

在代码中,我们将检查两个方法,它们将创建正确绘制图表所需的属性。

CreateChart()

这个main方法将初始化LightningChart.NET框架提供的许多属性,这里最大的优点是,如果您了解C#知识,这种语法会更容易。

_chart:

图表对象将包含LightningChart构造函数…基本上,这将包含一个图表对象的新实例。

_chart = new LightningChart();

BeginUpdate:

启用此选项会在修改属性时暂停控件重绘,当有多个属性更新或更新系列点时,建议使用此方法。

_chart.BeginUpdate();

Specifying the type of chart:

Mesh chart = View3D_chart.ActiveView = ActiveView.View3D;
... public enum ActiveView
{
...ViewXY = 0,
...View3D = 1,
...ViewPolar = 2,
...ViewSmith = 3,
...ViewPie3D = 4,
}

给出图表的名称和背景

注意,这里的chartGrid指的是XAML中的网格。

_chart.ChartBackground.Color = Color.FromArgb(30, 30, 30, 30);
_chart.Title.Text = "Airplane colored in real-time by spatial distance";
chartGrid.Children.Add(_chart);

MeshModel 对象

我们现在正在创建MeshModel对象并添加3D飞机对象,网格模型需要X、Y和Z轴的3D图表实例。

LoadFromFile将帮助将3D对象加载到网格中,所有的视觉属性都将被包裹在3D模型中。

MeshModel model = new MeshModel(scene3D, Axis3DBinding.Primary, Axis3DBinding.Primary, Axis3DBinding.Primary);
model.LoadFromFile(Environment.CurrentDirectory + "\\Content\\A340-600_OBJ.obj");

添加尺寸,位置,旋转(度)的模型

Model_GeometryConstructed帮助创建辅助数据,以便实时计算几何形状和颜色,这种方法有助于获得每个轴上所有点之间的距离。

model.Size.SetValues(sizeFactor, sizeFactor, sizeFactor);
model.Position.SetValues(0, -15, 0);
model.Rotation.SetValues(0, 0, 0);
model.Fill = comboBoxFill.SelectedIndex < 2;
model.Wireframe = comboBoxWireframe.SelectedIndex < 2;
model.WireframeLineColor = DefaultColor;
model.AllowUserInteraction = false;
model.GeometryConstructed += model_GeometryConstructed;
scene3D.MeshModels.Add(model);

创建数据

[MakeDataPoinst]函数将创建一个点数组,为了给网格分配数据点,我们需要使用SeriesPoint3D结构体。

_points = MakeDataPoints();
_pointCount = _points.Length;
_dataPointValues = new double[_pointCount];

这些值是两个X、两个Y和两个Z,对于本例这些值是硬编码的,但如果需要动态赋值,逻辑将是相同的。

// Engines, inner.
new SeriesPoint3D(-11.6, -3.6, -8),
new SeriesPoint3D(11.6, -3.6, -8),
// Engines, outer.
new SeriesPoint3D(-24.8, -2.4, 0),
new SeriesPoint3D(24.8, -2.4, 0),
// Nose.
new SeriesPoint3D(0, 0, -44),// Body.
new SeriesPoint3D(0, 0, -16),
new SeriesPoint3D(0, 0, 16),
new SeriesPoint3D(0, 5, 36),
// Wing tips.
new SeriesPoint3D(-36, 2.4, 12),
new SeriesPoint3D(36, 2.4, 12),

图表控件LightningChart .NET中文教程

图例彩色面板

在这里我们将创建额外的侧面板,其中包含航空图表上温度参考代码的颜色。

SurfaceGridSeries3D surface = new SurfaceGridSeries3D(scene3D, Axis3DBinding.Primary, Axis3DBinding.Primary, Axis3DBinding.Primary)
{
WireframeType = SurfaceWireframeType3D.None,
ContourLineType = ContourLineType3D.None
};
surface.ContourPalette = CreatePalette(surface);
surface.Title.Text = "Temperature";
scene3D.SurfaceGridSeries3D.Add(surface);

图表控件LightningChart .NET中文教程

我们可以在当前的表面网格中创建浮动面板,每个面板都可以是一个SurfaceGridSeries3D对象,并且可以添加到父网格中。要创建一个范围调色板,我们需要将一个ValueRangePalette对象分配给contourPalette属性。

private ValueRangePalette CreatePalette(SurfaceSeries3DBase ownerSeries)
{
ValueRangePalette palette = new ValueRangePalette(ownerSeries);
palette.Steps.Clear(); // Remove existing palette steps.
for (int i = 0; i < _paletteStepCount; i++)
{
palette.Steps.Add(new PaletteStep(palette, _paletteStepColors[i], _paletteStepValues[i]));
}
palette.Type = PaletteType.Gradient;
palette.MinValue = _paletteStepValues[0];
return palette;
}

向图表添加数据点

_dataPointSeries = new PointLineSeries3D(scene3D, Axis3DBinding.Primary, Axis3DBinding.Primary, Axis3DBinding.Primary)
{
Points = _points
};

数据点存储在_points数组对象中,所以我们需要创建一个新的实例PointLinSeries3D,将其添加到当前的scene3D中:

scene3D.PointLineSeries3D.Add(_dataPointSeries);

在添加它之前,我们可以为点指定默认的UI属性:

_dataPointSeries.PointStyle.Shape3D = PointShape3D.Sphere;
_dataPointSeries.LineVisible = false;
_dataPointSeries.IndividualPointColors = true;
_dataPointSeries.AllowUserInteraction = true;
_dataPointSeries.PointStyle.Size3D.SetValues(2, 2, 2);
_dataPointSeries.Visible = (bool)checkBoxShowDataPoints.IsChecked;
_dataPointSeries.Highlight = Highlight.None;
_dataPointSeries.PointStyle.Shape2D.Shape = Shape.Circle;
_dataPointSeries.PointStyle.Shape2D.GradientFill = GradientFillPoint.Solid;
_dataPointSeries.PointStyle.Shape2D.Width = 11;
_dataPointSeries.PointStyle.Shape2D.Height = 11;
_dataPointSeries.ShowInLegendBox = false;
  • Shape3D = 点的形状(3D视图中的球体)。
  • IndividualPointColors = 如果为true,每个点将有不同的颜色。
  • AllowUserInteraction = 与鼠标的交互。
  • PointStyle.Size3D = 每个点的大小、宽度、高度、深度。

EndUpdate()

启用控件重绘并刷新控件。

最终的应用程序

这是最终的3D网格模型航空图:

图表控件LightningChart .NET中文教程

在本文中,我们创建了一个三维网格模型实时着色应用程序的飞机对象。然而LightningChart .NET给了您所有的自由来合并D对象和自定义他们的特性,您可以随意地将此图表模型合并到航空图表应用程序中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/9449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

住房“以旧换新”,后续需要关注啥?

政治局会议提出对房地产“消化存量、优化增量”&#xff0c;地产政策重心或转向去库存&#xff0c;各地住房“以旧换新”政策引发关注。“以旧换新”分为国企收购、市场化交易、购房补贴三种模式&#xff0c;其中国企收购政策力度较大&#xff0c;消化商品房库存增加保障房供给…

第4章 处理多种内容类型

4.1 内容类型Content-Type 4.1.1 什么是Content-Type Content-Type是HTTP协议头中的一个字段&#xff0c;它用于描述HTTP请求或响应中所传输的实体数据的媒体类型&#xff08;MIME类型&#xff09;。Content-Type告诉客户端和服务器端所传输的数据的实际内容类型&#xff0c;使…

数据库(MySQL)基础:约束

一、概述 1.概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 2.目的&#xff1a;保证数据库中数据的正确、有效性和完整性。 3.分类 约束描述关键字非空约束限制该字段的数据不能为nullnot null唯一约束保证该字段的所有数据都是唯一…

Python深度学习基于Tensorflow(2)Tensorflow基础

文章目录 基本操作数据转换和数据生成操作形状数据提取和保存变量Numpy和Tensorflow的比较 计算图静态图动态图自动图 自动微分使用Tensorflow 实现回归 首先是Tensorflow的安装&#xff0c;由于可能会出现版本冲突&#xff0c;最好在conda环境安装&#xff0c;同时&#xff0c…

什么是IT服务台?

IT服务台是组织中的单一联系点&#xff0c;负责解决所有与 IT 相关的问题、查询和请求。IT服务台也称为技术支持、支持中心、信息中心、IT 解决方案中心或技术支持。 IT 服务台的多用途角色可实现多个目标&#xff0c;例如快速解决问题、培养用户满意度、提高组织流程效率以及提…

华为ensp中BFD和OSPF联动(原理及配置命令)

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年5月6日20点26分 BFD通常指的是双向转发检测。BFD是一个旨在快速检测通信链路故障的网络协议&#xff0c;提供了低开销、短延迟的链路故障检测机制。它主要用于监测两个…

【复试分数线】C9历年分数线汇总(第二弹)

今天我将分析C9中主要考信号的5所院校&#xff1a;复旦大学、上海交通大学、南京大学、哈尔滨工业大学、西安交通大学。 这次会为大家整理四电四邮的整理了近三年各院校的复试分数线作为参考&#xff0c;大家可以参考&#xff01; 大多数院校采取的是1.2:1差额的形式复试。举…

egg数据统计之mysql数据库创建视图并可当表使用并查询

打开视图---->新建视图-----> 运行sql ----> 保存 统计地区的愿望数量 sql语句 select user.id AS id,count(userplant.userid) AS amount,user.locationid AS locationid,user->location.name AS locationname from ((userplants userplant left join users us…

macOS12安装 php7.1和apache

1. 安装php 7.1 macOS12不再自带php brew tap shivammathur/php 查看可安装版本 brew search php 安装指定版本&#xff08;禅道适用PHP运行环境(7.0/7.1/7.2版本)&#xff09; brew install php7.1 环境配置 vim ~/.zshrc export PATH"/usr/local/opt/php7.1/bin:…

Rust 使用egui创建一个简单的下载器demo

仓库连接: https://github.com/GaN601/egui-demo-download-util 这是我第一个rust gui demo, 学习rust有挺长时间了, 但是一直没有落实到实践中, 本着对桌面应用的兴趣, 考察了slint、egui两种框架, 最后还是选择了egui. 这篇博客同时包含我当前的一些理解, 但是自身技术有限,…

Java 7大排序

&#x1f435;本篇文章将对数据结构中7大排序的知识进行讲解 一、插入排序 有一组待排序的数据array&#xff0c;以升序为例&#xff0c;从第二个数据开始&#xff08;用tmp表示&#xff09;依次遍历整组数据&#xff0c;每遍历到一个数据都再从tmp的前一个数据开始&#xff0…

LeetCode-2960. 统计已测试设备【数组 模拟】

LeetCode-2960. 统计已测试设备【数组 模拟】 题目描述&#xff1a;解题思路一&#xff1a;模拟解题思路二&#xff1a; 一次遍历&#xff0c;简洁写法解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个长度为 n 、下标从 0 开始的整数数组 batteryPercentages &#xf…

自动驾驶纵向控制算法

本文来源——b站忠厚老实的老王&#xff0c;链接&#xff1a;忠厚老实的老王投稿视频-忠厚老实的老王视频分享-哔哩哔哩视频 (bilibili.com)&#xff0c;侵删。 功率和转速之间的关系就是&#xff1a;功率P等于转矩M乘以转速ω。并不是油门越大加速度就越大。 发动机和电机的转…

AngularJS基本概念

版本&#xff1a; AngularJs 1.x&#xff1a;https://angularjs.org/ AngularJs 2&#xff1a;https://angular.io/ 或 https://angular.cn/ 实现语言&#xff1a; Angular 1.x&#xff1a;使用ES(avaScript)编写&#xff0c;可直接在浏览器中运行。 Angular 2&#xff1a…

【机器学习】AI时代的核心驱动力

机器学习&#xff1a;AI时代的核心驱动力 一、引言二、机器学习的基本原理与应用三、机器学习算法概览四、代码实例&#xff1a;线性回归的Python实现 一、引言 在数字化浪潮席卷全球的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经不再是科幻小说中的遥远概念&…

[muduo网络库]——muduo库三大核心组件之Channel类(剖析muduo网络库核心部分、设计思想)

接着上文[muduo网络库]——muduo库的Reactor模型&#xff08;剖析muduo网络库核心部分、设计思想&#xff09;&#xff0c;接下来详细介绍一下这三大核心组件中的Channel类。 先回顾一下三大核心组件之间的关系。 接着我们进入正题。 Channel Channel类封装了一个 fd 、fd感兴…

【STM32 |程序实测】LED灯闪烁、LED灯流水线、蜂鸣器

LED闪烁&LED流水灯&蜂鸣器的面包板接线图&#xff0c;及对应程序示例 LED闪烁 面包板接线图如下 开启APB2时钟&#xff0c;并且在GPIOA上进行配置&#xff0c;推挽输出&#xff0c;引脚A0&#xff0c;50HZ速度 #include "stm32f10x.h" /…

[Linux][网络][网络层][IP协议]详细讲解

目录 0.基本概念1.IP协议头格式2.IP分片与组装1.为什么要分片&#xff1f;2.分片后谁来组装&#xff1f;3.这个分片操作传输层知道吗&#xff1f;4.如何识别报文和报文的不同&#xff1f;5.接收端&#xff0c;如何得知报文是独立的还是一个分片&#xff1f;6.如何区别哪些分片是…

【论文泛读|附源码】如何进行动力学重构? 神经网络自动编码器结合SINDy发现数据背后蕴含的方程

这一篇文章叫做 数据驱动的坐标发现与方程发现算法。 想回答的问题很简单&#xff0c;“如何根据数据写方程”。 想想牛顿的处境&#xff0c;如何根据各种不同物体下落的数据&#xff0c;写出万有引力的数学公式的。这篇文章就是来做这件事的。当然&#xff0c;这篇论文并没有…

数据结构--图。

在前面&#xff0c;我们学习了线性表和树&#xff0c;而接下来我们要学习的图相较于他们就更加复杂。 目录 一.图的有关概念 一.图的有关概念 1.定义 图(graph)G由两个集合V和E组成&#xff0c;记为G&#xff08;VE)。V是顶点的有穷非空集合;E是边的集合,边是V中顶点的无序对…