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