- •Давайте не будем изобретать колесо.
- •Прежде всего: Данные
- •Рисование и Упорство
- •Объект 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
- •Проверяем
- •Итоги первой демонстрации
- •Затененный график
- •Значения вертикальной оси
- •Код Вертикальных Значений
- •Подвижные направляющие линии
- •Отображаем направляющие линии
- •Направляющие линии и отображенные значения
- •Вертикальные значения
- •Возможные улучшения
- •Охваченные темы
Внешние границы диаграммы
Мы начинаем рисовать оси X и Y диаграммы, включая отметки и числа вертикальной оси. Это код содержится в процедуре, названной DrawOutline.
Объект Graphics
Если вы читали предыдущие статьи, то помните, что мы можем думать об объекте Graphics, как о прозрачном холсте, прямо на котором мы можем рисовать. Код ниже позволяет нам рисовать на объекте Graphics Bitmap’а. Позже мы возьмем законченный Bitmap и присвоим его элементу PictureBox; в результате пользователь увидит нарисованную диаграмму внутри PictureBox.
Private Sub DrawOutline()
' Инициируем bmap и присваиваем ему ширину и высоту как у PictureBox.
' Также устанавливаем разрешение bitmap равным PictureBox
bmap = New Bitmap(PBLineChart.Width, _ PBLineChart.Height, PBLineChart.CreateGraphics)
' Присваиваем Bitmap объекту Graphics.
g = Graphics.FromImage(bmap)
Вертикальная ось
Код вертикальной оси тот же, что мы использовали в некоторых из предыдущих статей. Мы рисуем вертикальную линию, а затем вставляем 10 маленьких горизонтальных отметок на равных расстояниях одна от другой. Для простоты мы снова используем значения от 0 до 1000. Если вам нужно применить другие максимальные значения (а во многих случаях так и будет), то вы увидите описание того, как это сделать в статье Части 4 здесь. Первым делом нужно рассчитать точки начала и конца вертикальной линии. Вы увидите, что мы делаем это с помощью переменных, установленных раньше для полей.
' Рисуем линию для вертикальной оси.
Dim StartPoint As New Point(LeftMargin, PBLineChart.Height - BaseMargin)
Dim EndPoint As New Point(LeftMargin, TopMargin)
' Основное перо для рисования внешних линий
Dim LinePen As New Pen(Color.Black, 2)
' Рисуем вертикальную линию
g.DrawLine(LinePen, StartPoint, EndPoint)
Чтобы добавить отметки и значения (100, 200 и т.д. до 1000) используйте следующий код.
Dim StartPoint As New Point(LeftMargin, PBBarChart.Height - BaseMargin)
Dim EndPoint As New Point(LeftMargin, TopMargin)
Названия переменных StartPoint и EndPoint не нуждаются в объяснении, но понятие Point (точка) стоит упоминания. Нам хорошо знакомо понятие точки – это определенное место, которое может быть определено определенным способом. В графике .NET точка (Point) идентифицируется ее X-положением (как далеко она отдалена от левого края) и ее Y-положением (как далека она от верха). В данном проекте мы измеряем эти два значения в пикселях, потому что эта единица используется для определения позиций на экране. Важно понимать, что Point – это не просто положение в пространстве, фактически это Объект, завершенный в своих свойствах и методах. Вы видите, что StartPoint объекта Point имеет свою X-позицию, установленную в строке с левым полем, которое мы установили раньше; ее Y-позиция вычисляется при перемещении от основания PictureBox на расстояние, равное BaseMargin. EndPoint оси имеет X-значение, такое же, как и у StartPoint, чего можно было ожидать (в конце концов, это вертикальная линия). Ее Y-значение установлено в точке, которая отступает от верхнего края PictureBox на значение TopMargin. Вооружившись начальной и конечной точками, мы берем перо и рисуем линию:
Dim LinePen As New Pen(Color.Black, 2)
g.DrawLine(LinePen, StartPoint, EndPoint)
Если вы вводите код по мере прочтения статьи (и вы не читали предыдущих статей), вы можете поинтересоваться, почему ничего не появляется в PictureBox. Причина в том, что мы нарисовали линию на объекте, который еще не видим для пользователя. Вы узнаете, что мы создали объект изображения того же размера, что и PictureBox и скрыто используем это изображение. (В самом деле, технически правильно – как объяснялось раньше – мы рисуем на GraphicObject Bitmap, но эффект тот же). На этом уровне мы еще не присвоили это изображение PictureBox в качестве его изображения, поэтому PictureBox остается пустым.