このチュートリアルでは、PointLineSeries3D を使用して 3D チャートに点や線を表示する方法や、複数の点系列を作成してマウスで点の値をトラッキングする方法を紹介します。トラッキングされた値はアノテーションを使用して表示され、チャート領域における任意の位置にラベルやグラフィックを表示できます。
View3D をアクティブなビューとして定義し、Z 軸の範囲を定義します。
// View3D をアクティブなビューとして定義して Z 軸の範囲を定義 chart.ActiveView = ActiveView.View3D; chart.View3D.ZAxisPrimary3D.SetRange(0, 80);新しい PointLineSeries3D オブジェクトを作成し、データを表示します。
// データを表示するための新しい PointLineSeries3D を作成して主軸に軸バインディングを設定 var series = new PointLineSeries3D(chart.View3D, Axis3DBinding.Primary, Axis3DBinding.Primary, Axis3DBinding.Primary) { // true に設定して個々の点への色付けを有効化 IndividualPointColors = true, // true に設定してマウス トラッキングを有効化 MouseInteraction = true };新しく作成した系列に、スタイルを追加します。
// 系列にタイトルを付ける series.Title.Text = "Series 0"; // 点の形状を球に設定 series.PointStyle.Shape3D = PointShape3D.Sphere; // 個々の点のサイズを設定 series.PointStyle.Size3D.SetValues(3, 3, 3); // 点の間の線の幅を設定 series.LineStyle.Width = 0.4f; // 線と同じ色で点の間に線を描画 series.LineStyle.LineOptimization = LineOptimization.NormalWithShading; // 線の色を設定 series.LineStyle.Color = Color.FromArgb(255, 255, 0, 0);データ ポイント用の SeriesPoint3D 配列を作成し、データを追加します。
// データ ポイント用の SeriesPoint3D 配列を作成 SeriesPoint3D[] points = new SeriesPoint3D[10]; // 配列にサンプル データを生成 for (int j = 0; j < 10; j++) { // データ ポイント用のランダムな値 points[j].X = 5 + j * 10; points[j].Y = 30 + random.NextDouble() * 25.0; points[j].Z = 10 + i * 10; // Color プロパティを使用して個々の点に色付け points[j].Color = Color.FromArgb(255, 255, 0, 0); } // Point プロパティへ点配列を設定 series.Points = points; // チャートの View3D に系列を追加 chart.View3D.PointLineSeries3D.Add(series);Annotation を作成して、マウス トラッキングの値を表示します。
// マウスをかざした際の点のターゲット値を表示するための新しいアノテーションを作成 mouseAnnotation = new Annotation3D(chart.View3D, Axis3DBinding.Primary, Axis3DBinding.Primary, Axis3DBinding.Primary) { // アノテーションをデフォルトで非表示に設定 Visible = false, // 軸の値を使用してアノテーションのターゲット位置座標を取得 TargetCoordinateSystem = AnnotationTargetCoordinates.AxisValues, // ターゲットに対する相対スクリーン座標を使用してアノテーションの位置を取得 LocationCoordinateSystem = CoordinateSystem.RelativeCoordinatesToTarget, // アノテーションにおけるマウス操作を無効化 MouseInteraction = false }; // アノテーションにオフセットを設定 mouseAnnotation.LocationRelativeOffset.SetValues(40, -70); // View3D にアノテーションを追加 chart.View3D.Annotations.Add(mouseAnnotation);MouseMove イベント ハンドラーに追加し、ポイント トラッキングを有効化します。
hart.MouseMove += Chart_MouseMove;MouseMove イベント ハンドラーの関数を作成します。
private void Chart_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) { // パフォーマンス向上のために BeginUpdate を呼び出してチャート上でマウスが移動している間のレンダリングを無効化 chart.BeginUpdate(); // マウスがかざされていない時にラベルを表示 mouseAnnotation.Visible = false; // マウスの下におけるオブジェクトの有無を確認 object obj = chart.GetActiveMouseOverObject(); if (obj != null) { // マウスの下のオブジェクトが PointLineSeries のオブジェクトであるかを確認 if (obj is PointLineSeries3D) { PointLineSeries3D pointLineSeries3D = obj as PointLineSeries3D; // 最後にマウスでヒットした点を取得 int pointIndex = pointLineSeries3D.LastMouseHitTestIndex; SeriesPoint3D point = pointLineSeries3D.Points[pointIndex]; // マウスでヒットした点にアノテーションの位置を設定 mouseAnnotation.TargetAxisValues.SetValues(point.X, point.Y, point.Z); // マウスでヒットした点に関する情報を表示するアノテーションのテキストを設定 mouseAnnotation.Text = "Series index: " + chart.View3D.PointLineSeries3D.IndexOf(pointLineSeries3D).ToString() + "\nPoint index: " + pointIndex.ToString() + "\nX=" + point.X.ToString("0.0") + " ; Y=" + point.Y.ToString("0.0") + " ; Z=" + point.Z.ToString("0.0"); // 点にマウスがかざされた時にアノテーションを表示するように設定 mouseAnnotation.Visible = true; } } // EndUpdate を呼び出して MouseMove イベントの後にレンダリングを有効化 chart.EndUpdate(); }- アプリケーションをビルドおよび実行します。