void _dragHelper_DragDelta(object sender, C1DragDeltaEventArgs e) { if (moving != null) { Point position = e.GetPosition(Chart.View.Viewport); position.X -= offset.X; position.Y -= offset.Y; if (moving.Attach != ChartPanelAttach.None) { MeasureOption x = MeasureOption.X; if (moving.Attach == ChartPanelAttach.DataY) { x = MeasureOption.Y; } else if (moving.Attach == ChartPanelAttach.DataXY) { x = MeasureOption.XY; } int seriesIndex = -1; int pointIndex = -1; DataDistanceFromPoint(position, x, out seriesIndex, out pointIndex); if ((seriesIndex >= 0) && (pointIndex >= 0)) { position = Chart.View.DataIndexToPoint(seriesIndex, pointIndex); } } position = Chart.View.PointToData(moving.AxisX, moving.AxisY, position); moving.SetPoint(position); base.InvalidateArrange(); } }
double DataDistanceFromPoint(Point pt, MeasureOption measureOption, out int seriesIndex, out int pointIndex) { int num = Chart.Data.Children.Count; double naN = double.NaN; seriesIndex = -1; pointIndex = -1; for (int i = 0; i < num; i++) { double distance = 0.0; int num5 = Chart.View.DataIndexFromPoint(pt, i, measureOption, out distance); if (double.IsNaN(naN) || (distance < naN)) { naN = distance; seriesIndex = i; pointIndex = num5; } } return(naN); }
void ChartPanel_MouseMove(object sender, PointerRoutedEventArgs e) { int num = Children.Count; bool flag = false; for (int i = 0; i < num; i++) { ChartPanelObject obj2 = Children[i]; if (obj2.Action == ChartPanelAction.MouseMove) { Point position = e.GetPosition(Chart.View.Viewport); if (obj2.Attach != ChartPanelAttach.None) { int num3; int num4; MeasureOption x = MeasureOption.X; if (obj2.Attach == ChartPanelAttach.DataY) { x = MeasureOption.Y; } else if (obj2.Attach == ChartPanelAttach.DataXY) { x = MeasureOption.XY; } DataDistanceFromPoint(position, x, out num3, out num4); if ((num3 >= 0) && (num4 >= 0)) { position = Chart.View.DataIndexToPoint(num3, num4); } } position = Chart.View.PointToData(obj2.AxisX, obj2.AxisY, position); obj2.SetPoint(position); flag = true; } } if (flag) { base.InvalidateArrange(); } }
public int DataIndexFromPoint(Point pt, int seriesIndex, MeasureOption option, out double distance) { distance = double.MaxValue; if (seriesIndex >= _chart.Data.Children.Count) { return(-1); } DataSeries ds = _chart.Data.Children[seriesIndex]; double[,] values = ds.GetValues(); if (values == null) { return(-1); } PointD td = PointToData(ds, pt); int num = 0; double y = td.Y; if (option == MeasureOption.X) { num = 1; y = td.X; } else if (option == MeasureOption.XY) { num = 2; } int num3 = -1; int length = values.GetLength(0); Axis axisX = GetAxisX(ds); Axis axisY = GetAxisY(ds); double actualMin = axisX.ActualMin; double actualMax = axisX.ActualMax; double num7 = axisY.ActualMin; double num8 = axisY.ActualMax; if (values != null) { int num9 = values.GetLength(1); for (int i = 0; i < num9; i++) { double d = (length > 1) ? values[1, i] : ((double)i); double num12 = values[0, i]; if (((d >= actualMin) && (d <= actualMax)) && ((num12 >= num7) && (num12 <= num8))) { if (num == 2) { if (!double.IsNaN(d) && !double.IsNaN(num12)) { PointD td2 = PointFromData(ds, new PointD(d, num12)); double num13 = td2.X - pt.X; double num14 = td2.Y - pt.Y; double num15 = Math.Sqrt((num13 * num13) + (num14 * num14)); if (num15 < distance) { distance = num15; num3 = i; } } } else { double num16 = (num == 1) ? d : num12; if (!double.IsNaN(num16)) { double num17 = Math.Abs((double)(num16 - y)); if (num17 < distance) { distance = num17; num3 = i; } } } } } } if (distance != double.MaxValue) { if (option == MeasureOption.X) { distance = _viewport.ConvertX(distance) - _viewport.ConvertX(0.0); return(num3); } if (option == MeasureOption.Y) { distance = _viewport.ConvertY(distance) - _viewport.ConvertY(0.0); } } return(num3); }