Шпаргалка по ZedGraph. Как вернуть масштабу по осям значение по умолчанию

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

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

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

Следующий код представляет собой обработчик события нажатия кнопки "Автомасштаб".

private void reset_Click (object sender, EventArgs e)
{
    GraphPane pane = zedGraph.GraphPane;

    // Установим масштаб по умолчанию для оси X
    pane.XAxis.Scale.MinAuto = true;
    pane.XAxis.Scale.MaxAuto = true;

    // Установим масштаб по умолчанию для оси Y
    pane.YAxis.Scale.MinAuto = true;
    pane.YAxis.Scale.MaxAuto = true;

    // Обновим данные об осях
    zedGraph.AxisChange ();

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

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

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

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



 29.03.2012 - 16:03

Пасиба огромное за пример !

Vasily 27.05.2013 - 00:31

установка равного масштаба по осям

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

Vasily 03.06.2013 - 01:57

установка равного масштаба по осям

спасибо, решил проблему самостоятельно:

 
public void SetEqualScale(GraphPane pane)
        {

            double Xmin = pane.XAxis.Scale.Min;
            double Xmax = pane.XAxis.Scale.Max;

            double Ymin = pane.YAxis.Scale.Min;
            double Ymax = pane.YAxis.Scale.Max;

            PointF PointMin = pane.GeneralTransform(Xmin, Ymin, CoordType.AxisXYScale);
            PointF PointMax = pane.GeneralTransform(Xmax, Ymax, CoordType.AxisXYScale);
            double dX = Math.Abs(Xmax - Xmin);
            double dY = Math.Abs(Ymax - Ymin);

            double Kx = dX / Math.Abs(PointMax.X - PointMin.X);
            double Ky = dY / Math.Abs(PointMax.Y - PointMin.Y);

            double K = Kx / Ky;
            //MessageBox.Show(K.ToString());
            if (K > 1.0)
            {
                pane.YAxis.Scale.Min = pane.YAxis.Scale.Min - dY * (K - 1.0) / 2.0;
                pane.YAxis.Scale.Max = pane.YAxis.Scale.Max + dY * (K - 1.0) / 2.0;
            }
            else
            {
                K = 1.0 / K;
                pane.XAxis.Scale.Min = pane.XAxis.Scale.Min - dX * (K - 1.0) / 2.0;
                pane.XAxis.Scale.Max = pane.XAxis.Scale.Max + dX * (K - 1.0) / 2.0;

            }

            // Обновим данные об осях
            zedGraphControl1.AxisChange();
            // Обновляем график
            zedGraphControl1.Invalidate();

        }


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

mh? 10.10.2009 - 00:30

Спасибо большое ;)

winking smiley