翻譯|使用教程|編輯:龔雪|2024-05-08 10:22:22.630|閱讀 115 次
概述:本教程介紹如何使用LightningChart .NET對(duì)3D網(wǎng)格模型應(yīng)用動(dòng)態(tài)數(shù)據(jù)著色,歡迎下載最新版控件體驗(yàn)!
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
LightningChart.NET完全由GPU加速,并且性能經(jīng)過(guò)優(yōu)化,可用于實(shí)時(shí)顯示海量數(shù)據(jù)-超過(guò)10億個(gè)數(shù)據(jù)點(diǎn)。 LightningChart包括廣泛的2D,高級(jí)3D,Polar,Smith,3D餅/甜甜圈,地理地圖和GIS圖表以及適用于科學(xué),工程,醫(yī)學(xué),航空,貿(mào)易,能源和其他領(lǐng)域的體繪制功能。
在這個(gè)例子中,我們將使用一個(gè)飛機(jī)對(duì)象來(lái)創(chuàng)建一個(gè)3D網(wǎng)格模型實(shí)時(shí)著色應(yīng)用程序。這個(gè)應(yīng)用程序示例對(duì)于實(shí)時(shí)顯示來(lái)自3D模型的模擬或診斷數(shù)據(jù)非常有用,例如連接到機(jī)器上的傳感器可以將數(shù)據(jù)傳輸?shù)?D模型并提供實(shí)時(shí)測(cè)量。
在本文中,我們將基于飛機(jī)的3D網(wǎng)格模型創(chuàng)建一個(gè)WPF 3D網(wǎng)格模型實(shí)時(shí)著色應(yīng)用程序,這種類型的圖表有助于增強(qiáng)態(tài)勢(shì)感知。在本例中,在飛機(jī)模型的某些點(diǎn)測(cè)量溫度數(shù)據(jù),并將溫度讀數(shù)轉(zhuǎn)換為像素/3D模型的顏色。
這個(gè)應(yīng)用程序可以幫助飛行員清楚地看到周圍空域中其他飛機(jī)的接近程度,例如在航空業(yè)這些基于3D網(wǎng)格模型的圖表可以提高態(tài)勢(shì)感知能力,幫助飛行員避免潛在的飛機(jī)碰撞。
WPF三維網(wǎng)格模型實(shí)時(shí)著色圖也可以改善飛行員和空中交通管制員之間的溝通,您可以把航空工業(yè)中的航海圖看作是對(duì)其他飛機(jī)位置的視覺(jué)參考。
當(dāng)然,在做出關(guān)于如何調(diào)整飛行路徑以保持與其他物體的安全距離的明智決策時(shí),決策受益于可視化的實(shí)時(shí)性,這通常有助于提高飛行安全和效率。
在這個(gè)項(xiàng)目中,我們將使用一點(diǎn)3D建模,因此將不得不加載預(yù)制的3D對(duì)象(飛機(jī)),然后使用LightningChart.NET提供的網(wǎng)格映射工具。
LightningChart.NET允許我們使用本文中提到的屬性輕松創(chuàng)建3D對(duì)象,接下來(lái)的部分會(huì)詳細(xì)解釋這些屬性。
作為參考,3D網(wǎng)格模型從多邊形的基礎(chǔ)創(chuàng)建模型。因此對(duì)于3D對(duì)象,我們需要使用X、Y和Z坐標(biāo),它們將表示航空?qǐng)D表模型的高度、寬度和深度。
對(duì)于這個(gè)polar圖表項(xiàng)目,我們需要考慮以下要求來(lái)編寫項(xiàng)目。
現(xiàn)在轉(zhuǎn)到下一個(gè)URL并單擊下載按鈕://fc6vip.cn/resource/detail-download-23539
如果下載了SDK,會(huì)得到這樣一個(gè).exe文件:
安裝將是一個(gè)典型的Windows過(guò)程,所以請(qǐng)繼續(xù)它,直到完成。安裝完成后,您將看到以下程序:
License Manager:在此應(yīng)用程序中,您將看到購(gòu)買選項(xiàng)。您將使用此試用SDK創(chuàng)建的所有項(xiàng)目都可以在啟用所有功能的情況下用于未來(lái)的開發(fā)。
現(xiàn)在讓我們使用Visual Studio項(xiàng),使用LightningChart.NET可視化工具和使用Visual Studio的主要區(qū)別在于,我們可以對(duì)源代碼中的許多特性進(jìn)行分析和實(shí)驗(yàn)。在LC可視化器中,選擇飛機(jī)的顏色并運(yùn)行示例:
在窗口的右上方區(qū)域,您將看到以下選項(xiàng):
對(duì)于試用SDK,我們將能夠使用WPF和WinForms框架。如果您完全熟悉windows forms,那么這個(gè)選項(xiàng)會(huì)更適合您。在這種情況下,我將使用Windows Presentation Foundation框架。
點(diǎn)擊要使用的框架后,我們需要指定一個(gè)創(chuàng)建項(xiàng)目的文件夾:
最后,項(xiàng)目將被創(chuàng)建,Visual Studio將被打開并準(zhǔn)備執(zhí)行。
主代碼將被封裝在MainWindow.xaml.cs中。在這里,我們將找到UI控件的代碼。
在代碼中,我們將檢查兩個(gè)方法,它們將創(chuàng)建正確繪制圖表所需的屬性。
這個(gè)main方法將初始化LightningChart.NET框架提供的許多屬性,這里最大的優(yōu)點(diǎn)是,如果您了解C#知識(shí),這種語(yǔ)法會(huì)更容易。
_chart:
圖表對(duì)象將包含LightningChart構(gòu)造函數(shù)…基本上,這將包含一個(gè)圖表對(duì)象的新實(shí)例。
_chart = new LightningChart();
BeginUpdate:
啟用此選項(xiàng)會(huì)在修改屬性時(shí)暫停控件重繪,當(dāng)有多個(gè)屬性更新或更新系列點(diǎn)時(shí),建議使用此方法。
_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中的網(wǎng)格。
_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 對(duì)象
我們現(xiàn)在正在創(chuàng)建MeshModel對(duì)象并添加3D飛機(jī)對(duì)象,網(wǎng)格模型需要X、Y和Z軸的3D圖表實(shí)例。
LoadFromFile將幫助將3D對(duì)象加載到網(wǎng)格中,所有的視覺(jué)屬性都將被包裹在3D模型中。
MeshModel model = new MeshModel(scene3D, Axis3DBinding.Primary, Axis3DBinding.Primary, Axis3DBinding.Primary); model.LoadFromFile(Environment.CurrentDirectory + "\\Content\\A340-600_OBJ.obj");
添加尺寸,位置,旋轉(zhuǎn)(度)的模型
Model_GeometryConstructed幫助創(chuàng)建輔助數(shù)據(jù),以便實(shí)時(shí)計(jì)算幾何形狀和顏色,這種方法有助于獲得每個(gè)軸上所有點(diǎn)之間的距離。
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);
創(chuàng)建數(shù)據(jù)
[MakeDataPoinst]函數(shù)將創(chuàng)建一個(gè)點(diǎn)數(shù)組,為了給網(wǎng)格分配數(shù)據(jù)點(diǎn),我們需要使用SeriesPoint3D結(jié)構(gòu)體。
_points = MakeDataPoints(); _pointCount = _points.Length; _dataPointValues = new double[_pointCount];
這些值是兩個(gè)X、兩個(gè)Y和兩個(gè)Z,對(duì)于本例這些值是硬編碼的,但如果需要?jiǎng)討B(tài)賦值,邏輯將是相同的。
// 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),
圖例彩色面板
在這里我們將創(chuàng)建額外的側(cè)面板,其中包含航空?qǐng)D表上溫度參考代碼的顏色。
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);
我們可以在當(dāng)前的表面網(wǎng)格中創(chuàng)建浮動(dòng)面板,每個(gè)面板都可以是一個(gè)SurfaceGridSeries3D對(duì)象,并且可以添加到父網(wǎng)格中。要?jiǎng)?chuàng)建一個(gè)范圍調(diào)色板,我們需要將一個(gè)ValueRangePalette對(duì)象分配給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; }
向圖表添加數(shù)據(jù)點(diǎn)
_dataPointSeries = new PointLineSeries3D(scene3D, Axis3DBinding.Primary, Axis3DBinding.Primary, Axis3DBinding.Primary) { Points = _points };
數(shù)據(jù)點(diǎn)存儲(chǔ)在_points數(shù)組對(duì)象中,所以我們需要?jiǎng)?chuàng)建一個(gè)新的實(shí)例PointLinSeries3D,將其添加到當(dāng)前的scene3D中:
scene3D.PointLineSeries3D.Add(_dataPointSeries);
在添加它之前,我們可以為點(diǎn)指定默認(rèn)的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;
EndUpdate()
啟用控件重繪并刷新控件。
這是最終的3D網(wǎng)格模型航空?qǐng)D:
在本文中,我們創(chuàng)建了一個(gè)三維網(wǎng)格模型實(shí)時(shí)著色應(yīng)用程序的飛機(jī)對(duì)象。然而LightningChart .NET給了您所有的自由來(lái)合并D對(duì)象和自定義他們的特性,您可以隨意地將此圖表模型合并到航空?qǐng)D表應(yīng)用程序中。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)