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