- •Давайте не будем изобретать колесо.
- •Прежде всего: Данные
- •Рисование и Упорство
- •Объект Graphics
- •Начинаем
- •Расположение и Размер
- •Вычислите Общее значение
- •Вычислите Доли и Нарисуйте Диаграмму
- •Рисуем диаграмму
- •Улучшите диаграмму
- •Заголовок
- •Пули (Bullets) и Информация о Компании
- •Расположите После Использования
- •Все сделано!
- •Нарисуем это!
- •Давайте начнем
- •Шаг 1: генерация данных
- •Шаг 2: Получаем элемент управления
- •Повторно используемые значения
- •Шаг 3: Установка полей, промежутки и размеры
- •Шаг 4а: Объекты Graphics и Bitmap
- •Шаг 4b: Вертикальная ось
- •Шаг 4c: Отметки и текст
- •Шаг 4d: Время для проверки
- •Шаг 5: Горизонтальная ось и панели
- •5B. Панели
- •5C. Названия стран
- •Шаг 6: Все показано!
- •Удачные диаграммы: Вторая помощь в круговых диаграммах. Часть 3
- •Разметка формы
- •Давайте начнем писать код
- •Временные переменные
- •Элементы пользовательского ввода
- •Получение данных
- •Создание диаграммы
- •Рисуем Panel
- •Финальное домоводство
- •Опция «Уппс!»
- •Настройка
- •Создаем данные
- •Элементы управления
- •Вертикальная ось
- •Точечные отметки шкалы
- •Проверяем 1, 2, 3
- •Базовая линия (ось X)
- •3D Панели
- •Последние штрихи
- •Удачные диаграммы. Часть 5 - Линейные графики
- •Данные для образца
- •Переменные
- •Внешние границы диаграммы
- •Объект Graphics
- •Вертикальная ось
- •Отметки
- •Горизонтальная ось (a.K.A. Базовая линия)
- •Рисование Линии (Линий)
- •Расчет вертикальной шкалы
- •Создаем и рисуем первый сегмент линии
- •Превращающаяся и исчезающая проблема линий
- •Первый сегмент линии
- •Остающиеся сегменты линии
- •Преобразования
- •Рисуем преобразованную линию
- •Проверяем
- •Отображаем месяцы
- •Отображаем результат
- •Соединения линий
- •Линии сетки
- •Горизонтальные линии сетки
- •Вертикальные линии сетки
- •Последнее отображение
- •Удачные диаграммы. Часть 6 - Динамическая линейная диаграмма
- •Элементы управления формы
- •Инициирующий код
- •Рисование направляющих линий диаграммы
- •Как это работает
- •Отображаем значения
- •Использование Vertical ScrollBar
- •Проверяем
- •Итоги первой демонстрации
- •Затененный график
- •Значения вертикальной оси
- •Код Вертикальных Значений
- •Подвижные направляющие линии
- •Отображаем направляющие линии
- •Направляющие линии и отображенные значения
- •Вертикальные значения
- •Возможные улучшения
- •Охваченные темы
Преобразования
Вот код, который вращает и заставляет кувыркнуться законченную линию, а также перемещает место ее старта в правильное место. Я включил некоторые комментарии, чтобы обозначить, что делает каждая строка.
' Мы хотим, чтобы линия изменила направление на противоположное и для этого вращаем ее на 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()