Hi Michael,
The following code snippet shows how to get the data point which is closest to the current mouse position and highlight it dynamically:
using System;
using System.Drawing;
using System.Windows.Forms;
using Nevron.Chart;
using Nevron.GraphicsCore;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// Handles mouse move
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void nChartControl1_MouseMove(object sender, MouseEventArgs e)
{
NChart chart = nChartControl1.Charts[0];
NXYScatterSeries series = (NXYScatterSeries)chart.Series[0];
NPointF mousePos = new NPointF(e.X, e.Y);
// find the data point closest to the mouse
double minDistance = GetDistanceFromDataPoint(series, 0, mousePos);
int minDistanceIndex = 0;
for (int i = 1; i < series.Values.Count; i++)
{
double curDistance = GetDistanceFromDataPoint(series, i, mousePos);
if (curDistance < minDistance)
{
minDistance = curDistance;
minDistanceIndex = i;
}
}
// mark it
series.MarkerStyles.Clear();
NMarkerStyle ms = new NMarkerStyle();
ms.Visible = true;
ms.FillStyle = new NColorFillStyle(Color.Red);
series.MarkerStyles[minDistanceIndex] = ms;
nChartControl1.Refresh();
}
/// <summary>
/// Gets the distance between a data point and the mouse
/// </summary>
/// <param name="series"></param>
/// <param name="dataPointIndex"></param>
/// <param name="mousePosition"></param>
/// <returns></returns>
private static double GetDistanceFromDataPoint(NXYScatterSeries series, int dataPointIndex, NPointF mousePosition)
{
NScale2DToViewTransformation view2Scale = new NScale2DToViewTransformation(series.Chart, (int)StandardAxis.PrimaryX, (int)StandardAxis.PrimaryY);
NPointF dataPointPosition = new NPointF();
view2Scale.Transform(new NVector2DD(series.UseXValues ? (double)series.XValues[dataPointIndex] : dataPointIndex, (double)series.Values[dataPointIndex]), ref dataPointPosition);
double dx = mousePosition.X - dataPointPosition.X;
double dy = mousePosition.Y - dataPointPosition.Y;
return Math.Sqrt(dx * dx + dy * dy);
}
private void Form1_Load(object sender, EventArgs e)
{
NChart chart = nChartControl1.Charts[0];
// create a dymmy line series
NLineSeries line = new NLineSeries();
line.DataLabelStyle.Visible = false;
chart.Series.Add(line);
Random rand = new Random();
for (int i = 0; i < 20; i++)
{
line.Values.Add(rand.Next(100));
}
nChartControl1.MouseMove += new MouseEventHandler(nChartControl1_MouseMove);
}
}
}
Hope this helps - let us know if you meet any problems or have any questions.
Best Regards,
Nevron Support Team