LightningChart は、3D サーフェスを表示するための 2 つの異なる方法があります。SurfaceGridSeries3D
では、X と Z 空間においてノードが等間隔に配置されています。もう一方の SurfaceMeshSeries3D
では、3D 空間でノードを自由に配置できます。
このチュートリアルでは、LightningChart の SurfaceGridSeries3D
を使用して、ワイヤーフレームと等高線付きの 3D サーフェス グリッド チャートを作成する方法を紹介します。SurfaceGrid
により、データを 3D サーフェスとして視覚化でき、データやデータの変動の表示、測定、検証に使用できます。
また、このチュートリアルでは、値に応じて異なる色でデータを表示するためのパレットを使用します。カラー パレットに関する詳細は、「シンプルな 2D (XY) ヒートマップ チャート」 で紹介していますので、ご参照ください。
このチュートリアルでは、簡単な使用と分かりやすいコードを記述する事を目的に、いくつかの変数を事前に定義します。
Form または MainWindow クラス内で、以下のように変数を定義します。/// <summary> /// LightningChart コンポーネント /// </summary> private LightningChartUltimate _chart = null; /// <summary> /// SurfaceGrid 系列の参照 /// </summary> private SurfaceGridSeries3D _surfaceGrid = null; /// <summary> /// SurfaceGrid 行 /// </summary> int _rows = 500; ///<summary> /// SurfaceGrid 列 ///</summary> int _columns = 500; /// <summary> /// X 軸の最小値 /// </summary> private const int MinX = 0; /// <summary> /// X 軸の最大値 /// </summary> private const int MaxX = 100; /// <summary> /// Z 軸の最小値 /// </summary> private const int MinZ = 0; /// <summary> /// Z 軸の最大値 /// </summary> private const int MaxZ = 100;View3D をアクティブなビューとして定義し、Y 軸の範囲を定義します。
// View3D をアクティブなビューとして定義して Y 軸の範囲を定義 _chart.ActiveView = ActiveView.View3D; _chart.View3D.YAxisPrimary3D.SetRange(-50, 100);SurfaceGridSeries3D として SurfaceGrid インスタンスを新たに作成します。
// SurfaceGridSeries3D として SurfaceGrid インスタンスを新たに作成 _surfaceGrid = new SurfaceGridSeries3D(_chart.View3D, Axis3DBinding.Primary, Axis3DBinding.Primary, Axis3DBinding.Primary);SurfaceGrid の設定を定義します。
// SurfaceGrid の範囲、サイズ、彩度オプションを設定 _surfaceGrid.RangeMinX = MinX; _surfaceGrid.RangeMaxX = MaxX; _surfaceGrid.RangeMinZ = MinZ; _surfaceGrid.RangeMaxZ = MaxZ; _surfaceGrid.SizeX = _columns; _surfaceGrid.SizeZ = _rows; // より強力な色 _surfaceGrid.ColorSaturation = 80;ValueRangePalette を作成して、SurfaceGrid の ContourPalette として設定します。
// SurfaceGrid データに色を指定する ValueRangePalette の作成 ValueRangePalette palette = CreatePalette(_surfaceGrid); _surfaceGrid.ContourPalette = palette;SurfaceGrid のワイヤーフレームと等高線を定義します。
// SurfaceGrid のワイヤーフレームと等高線を定義 _surfaceGrid.WireframeType = SurfaceWireframeType3D.WireframePalettedByY; _surfaceGrid.ContourLineType = ContourLineType3D.ColorLineByY; _surfaceGrid.ContourLineWidth = 2;データを生成します。
// データを生成 public void GenerateData(int columns, int rows) { // データを格納するための変数を作成 double data = 0; // パフォーマンスを向上して複数のプロパティを変更中に不必要なチャートの再描画を防ぐためにチャート更新前のレンダリングを無効化 _chart.BeginUpdate(); // データ値を設定して SurfaceGrid に追加 for (int i = 0; i < _columns; i++) { for (int j = 0; j < _rows; j++) { // SurfacePoints として SurfaceGrid に値を追加 // 点は以下の関数に基づいて散布される data = 30.0 + 8 * Math.Cos(20 + 0.0001 * (double)(i * j)) + 60.0 * Math.Cos((double)(j - i) * 0.01); _surfaceGrid.Data[i, j].Y = data; } } // 更新されたデータをチャートに通知 _surfaceGrid.InvalidateData(); // EndUpdate を呼び出してレンダリングを再開 _chart.EndUpdate(); }- アプリケーションをビルドおよび実行します。