Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на BASIC / Visual Basic / Гед Мид. Удачные диаграммы GDI+ Работа с графикой [doc].doc
Скачиваний:
23
Добавлен:
02.05.2014
Размер:
870.4 Кб
Скачать

Рисование Линии (Линий)

    Код для рисования линий будет помещен в отдельную процедуру, которая называется DrawTheLine. Первым делом необходимо вычислить длину каждого сегмента всей линии графика. Я хочу сказать, что число продаж каждого месяца должно быть представлено сегментом линии; нам нужно вычислить, сколько пространства PictureBox доступно для сегмента каждого месяца.     Это действительно простая математика:

' Вычисляем длину базовой линии, нарисованной в предыдущей процедуре

BaseLineLength = PBLineChart.Width - (LeftMargin + RightMargin)

' Вычисляем ширину каждого сегмента

LineWidth = (BaseLineLength / Sales.Length)

    Sales.Length – это, конечно, количество элементов в массиве, который содержит цифры продаж. Мы используем всю доступную ширину базовой линии и делим ее на количество сегментов, которыми мы хотим заполнить ее.

Расчет вертикальной шкалы

    Сегменты линии, которые мы рисуем, будут подниматься и опускаться, представляя повышения и понижения цифр продаж от месяца к месяцу. Эти значения фиксированы. Однако длина вертикальной оси может быть изменена (как мы показывали раньше, изменяя размеры формы и наблюдая, как также меняются размеры PictureBox). Чтобы гарантировать, что высота подъемов и падений будет нарисована пропорционально текущему размеру PictureBox, мы должны вычислить масштаб, т.е. сколько продаж представлено в одном пикселе вертикальной линии. Этот результат будет использован, чтобы гарантировать, что сегменты линии нарисованы пропорционально на всей доступной высоте. Это звучит сложно. В действительности это не так, само вычисление очень простое. Мы делим все число пикселей этой вертикальной линии на максимальное значение, которое мы установили для оси:

Dim VertScale As Double

VertScale = VertLineLength / 1000

и это предоставляет нам пропорциональное значение, которое будет подходящим, сколько бы раз мы не меняли размер формы.

Создаем и рисуем первый сегмент линии

    Первый сегмент линии, конечно, будет представлять число продаж января (которое будет началом сегмента линии) и число продаж февраля (конец сегмента линии). Мы знаем, что точки начала и конца каждой линии имеют значения X и Y. Лучшим способом нарисовать сегменты линии будет создание четырех переменных, по одной на каждые два значения X и по одной на каждые два значения Y. Вот код, который это делает:

Dim XPosStart As Integer = CInt(LeftMargin + 30)

Dim XPosEnd As Integer = CInt(XPosStart + LineWidth)

Dim YPosStart As Integer = CInt(Sales(0) * VertScale)

Dim YPosEnd As Integer = CInt(Sales(1) * VertScale)

Названия четырех переменных говорят сами за себя. Арифметика понятна: XPosStart - значение X начала сегмента линии и помещено в 30 пикселях от левого поля. XPosEnd - значение X конца сегмента линии, и вычислено добавлением ширины сегмента (или длины, если вы предпочитаете так думать об этом) к значению начальной точки. YPosStart - значение Y начала сегмента линии. Оно равно значению первого числа продаж (Jan) умноженному на коэффициент вертикального масштаба, который будет создан через мгновение. YPosEnd - значение Y конца сегмента линии. Оно равно значению следующего числа продаж, которым в предыдущем коде случилось быть числу Feb, второго элемента массива.