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

Преобразования

    Вот код, который вращает и заставляет кувыркнуться законченную линию, а также перемещает место ее старта в правильное место. Я включил некоторые комментарии, чтобы обозначить, что делает каждая строка.

' Мы хотим, чтобы линия изменила направление на противоположное и для этого вращаем ее на 180 градусов

g.RotateTransform(180)

' Из-за того, что вращение также удаляет линию из поля зрения (влево), поэтому

' нам нужно отрегулировать x так, чтобы он переместился в положительную сторону от

' вертикальной оси.

' Значение Y остается неизменным, поэтому используется масштаб «1»

' (т.е. не производится никаких изменений)

g.ScaleTransform(-1, 1)

' Перемещаем начальную точку к нижнему левому углу

' Значение X остается неизменным

' Y перемещается вниз, к концу вертикальной оси, приравнивая

' коэффициент 10, чтобы компенсировать вертикальное смещение.

g.TranslateTransform(0, VertLineLength + 10, MatrixOrder.Append)

Рисуем преобразованную линию

    Рисование полной линии, которую мы только что создали и преобразовали, является простым делом рисования GraphicsPath на объекте Graphics. GraphicsPath, конечно, содержит все данные, которые мы ввели для сегментов линии.

Dim MyPen As Pen = New Pen(Color.Blue, 3)

g.DrawPath(MyPen, MyPath)

    Одна задача решена, но еще одна очень важная остается. Мы должны сбросить или вернуть все преобразования, которые были применены к объекту Graphics. Если это сделать плохо, то все будущие задачи рисования, использующие этот объект Graphics, будут иметь те же преобразования, примененные к ним. Результаты будут тогда в точности не теми, которые вы ожидаете.

g.ResetTransform()

Проверяем

    И снова, мы можем проверить, что все происходит по плану. В событии Click кода кнопки введите это:

Private Sub btnDraw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDraw.Click

DrawOutline()

DrawTheLine()

TempDisplay()

End Sub

    Запустите проект и щелкните на кнопке. Вы увидите теперь линию диаграммы, которая представляет цифры продаж.

Отображаем месяцы

    Чтобы быть полезными и пригодными к употреблению, нам нужно показать названия месяцев, продажи которых представляют числа. Чтобы сделать это, мы используем метод DrawString тем же способом, что и в прошлых статьях. Это значит, что мы «пишем» текст, рисуя его кистью. Это странный для людей способ решения задачи написания, но совершенно логичный для компьютера; буквы алфавита, в конце концов, являются просто фигурами – рисунками, которым случилось превратиться во что-то осмысленное в наших головах. Во-первых, мы определяем начальную точку для первой буквы первого слова. Это 18 пикселей внутрь от левого поля. Затем мы создаем Кисть (Brush), чтобы рисовать, а так же определяем детали шрифта (Font), который мы хотели бы применить.

' Устанавливаем начальную точку первого слова

Dim TextStartX As Integer = CInt(LeftMargin + 18)

' Создаем кисть Brush для рисования текста

Dim TextBrsh As Brush = New SolidBrush(Color.Black)

' Создаем экземпляр объекта Font для отображения текста

Dim TextFont As New Font("Arial", 10, FontStyle.Regular)

    Мы все установили и теперь можем продолжать двигаться вперед и рисовать названия месяцев. Возможно, вы помните, что эти названия были помещены в массив Month в самом начале этого проекта:

For i As Integer = 0 To Months.Length - 1

' Рисуем название месяца

g.DrawString(Months(i), TextFont, TextBrsh, TextStartX, _

CInt(PBLineChart.Height - (BaseMargin - 4)))

' Перемещаем начальную точку для следующего названия вправо

TextStartX += CInt(LineWidth)

Next

    Теперь мы закончили с объектами Brush и Font, нам следует избавиться от них, что будет хорошей практикой. Это не критично для такого маленького проекта, как этот, но это хорошая привычка.

TextBrsh.Dispose()

TextFont.Dispose()