Шпаргалка по ZedGraph. Как пересчитывать координаты из оконной системы координат в систему координат графика и наоборот

Данный пример обрабатывает событие, связанное с нажанием кнопки мыши на график, пересчитывает полученные координаты курсора мыши в систему координат, связанную с графиком, а затем обратно в систему координат, связанную с окном компонента.

Все примеры объединены в одном solution для Visual Studio 2005 и написаны на языке C#, скачать их можно отсюда.

Проект в примере - WindowsCoord

public partial class Form1 : Form
{
    public Form1 ()
    {
        InitializeComponent ();

        // Подпишемся на событие, возникающее при нажатии кнопки мыши
        // Обратите внимание, что подписываемся на событие MouseDownEvent, а не MouseDown
        zedGraph.MouseDownEvent +=
            new ZedGraphControl.ZedMouseEventHandler (zedGraph_MouseDownEvent);

        DrawGraph ();
    }


    /// <summary>
    /// Обработчик события нажатия на кнопку мыши
    /// </summary>
    /// <returns>Метод возвращает true, если нужно запретить дальнейшую встроенную обработку события (показ контекстного меню, начало выделения и т.п.), и false, если обработка события должна быть продолжена</returns>
    bool zedGraph_MouseDownEvent (ZedGraphControl sender, MouseEventArgs e)
    {
        GraphPane pane = zedGraph.GraphPane;

        // Координаты, которые переданы в событие
        Point eventPoint = new Point (e.X, e.Y);
        eventCoord.Text = string.Format ("({0}; {1})", eventPoint.X, eventPoint.Y);

        // Координаты, пересчитанные в систему координат графика
        double graphX, graphY;

        // Пересчитать координаты из системы координат, связанной с контролом zedGraph
        // в систему координат, связанную с графиком
        pane.ReverseTransform (new PointF (e.X, e.Y), out graphX, out graphY);
        graphCoord.Text = string.Format ("({0:F3}; {1:F3})", graphX, graphY);

        // Пересчитаем в обратную сторону из системы координат графика
        // в систему координат контрола.
        // Должны получить те же значения, что и в eventPoint
        // (с точностью до погрешности округления)
        // Последний параметр CoordType.AxisXYScale обозначает,
        // в какой системе координат заданы координаты, переданные в первых двух параметрах.
        PointF controlPoint = pane.GeneralTransform (new PointF ((float)graphX,
            (float)graphY),
            CoordType.AxisXYScale);

        controlCoord.Text = string.Format ("({0}; {1})", controlPoint.X, controlPoint.Y);

        return false;
    }


    private double f (double x)
    {
        if (x == 0)
        {
            return 1;
        }

        return Math.Sin (x) / x;
    }


    private void DrawGraph ()
    {
        GraphPane pane = zedGraph.GraphPane;

        pane.XAxis.MajorGrid.IsVisible = true;
        pane.YAxis.MajorGrid.IsVisible = true;

        // Очистим список кривых
        pane.CurveList.Clear ();

        // Создадим список точек
        PointPairList list = new PointPairList ();

        double xmin = -50;
        double xmax = 50;

        // Заполняем список точек
        for (double x = xmin; x <= xmax; x += 0.01)
        {
            // добавим в список точку
            list.Add (x, f (x));
        }

        // Создадим кривую
        LineItem myCurve = pane.AddCurve ("", list, Color.Blue, SymbolType.None);

        // Вызываем метод AxisChange (), чтобы обновить данные об осях.
        zedGraph.AxisChange ();

        // Обновляем график
        zedGraph.Invalidate ();
    }
}

Вернуться к остальным примерам

Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
4 stars

Рейтинг 4.0/5. Всего 7 голос(а, ов)



Ivan 16.02.2018 - 09:59

вывод значений в формате ДатаВремя

Как сделать так, чтоб получать значение по оси Х в формате Дата-Время. У меня какая бы дата не была, отсчет ведется от 1900г, и неверно масштабируется, в одном году несколько лет получается


Подписаться на комментарии
Автор:
Тема:
 Ваш комментарий
 
 
Введите код 885