Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Надписи на графике





Надписи можно наносить по оси Х, по оси Y и над точками линий графика. Причем иногда бывает целесообразно выполнять соседние надписи со сдвигом по оси Y. Кроме того - надписи выполняются не пером, а кистями и требуют задания шрифта. Таким образом, перед выполнением надписей надо установить в классе соответственно шрифт и кисть (Brush).

Для передачи шрифта и кисти создадим в классе свойства:

public Brush brush

{

set { objBrush = value; }

}

public Font font

{

set { objFont = value; }

}

В функции рисования графика запишем код:

Font objFont = new Font("Arial", 12, FontStyle.Bold | FontStyle.Italic);

clPaint.font = objFont;

clPaint.brush = Brushes.Blue;

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

#region Текст по оси X - Цифры отсчетов

//Параметр: false - соседние значения без сдвига по оси Y

// true - соседние значения со здвигом по оси Y

public void vDrawTextAxXNumber(bool f)

{

//Пикселей для надписей по оси х

float fdeltax = viX - viDeltaaxisL - viDeltaaxisR;

//Пикселей на один отсчет

fdeltax = fdeltax / (float)(viMaxRg - 1);

float x = viDeltaaxisL;

float y = viY - viDeltaaxisH + objPenLine.Width;

for (int i = 1; i < viMaxRg + 1; i++)

{

if (!f || i % 2 == 0)

{

graph.DrawString(Convert.ToString(i), objFont, objBrush, x + (i - 1) * fdeltax, y);

}

else

{

graph.DrawString(Convert.ToString(i),

objFont, objBrush, x + (i - 1) * fdeltax, y + objFont.Size);

}

}

}

#endregion

 

#region Текст по оси X - Параметр массива

//Параметр: false - соседние значения без сдвига по оси Y

// true - соседние значения со здвигом по оси Y

public void vDrawTextAxXValues(bool f)

{

string s = string.Empty;

//Пикселей для надписей по оси х

float fdeltax = viX - viDeltaaxisL - viDeltaaxisR;

//Пикселей на один отсчет

fdeltax = fdeltax / (float)(viMaxRg - 1);

float x = viDeltaaxisL;

float y = viY - viDeltaaxisH;// +objPenLine.Width;

for (int i = 0; i < viMaxRg; i++)

{

if (!f || i % 2 == 0)

{

graph.DrawString(rgsValues[i, 1], objFont, objBrush, x + i * fdeltax, y);

}

else

{

graph.DrawString(rgsValues[i, 1], objFont, objBrush, x + i * fdeltax, y + objFont.Size);

}

}

}

#endregion

 

#region Текст по оси Y - Значения по отсчетам сетки оси Y

public void vDrawTextAxYValues()

{

string s = string.Empty;

float f = 0;

float fMax = float.MinValue;

for (int i = 0; i < viMaxRg; i++)

{

s = rgsValues[i, 0];

if (fMax < float.Parse(s)) fMax = float.Parse(s);

}

f = fMax / (float)(viMaxRg - 1);

//Пикселей для надписей по оси х

float fdeltay = viY - 2 * viDeltaaxisH;

//Пикселей на один отсчет

fdeltay = fdeltay / (float)(viMaxRg - 1);

float y = viY - viDeltaaxisH - objFont.Size;

for (int i = 0; i < viMaxRg; i++)

{

graph.DrawString(((float)(i * f)).ToString("0.00"),

objFont, objBrush, viDeltaaxisL - (objFont.Size) * 5 - 5, y - i * fdeltay);

}

}

#endregion

 

#region Надписи - Значения над точкой

//1 параметр = false - без отображения процентов, true - с отображением

//2 параметр = false - без сдвига, true - со здвигом по оси Y

public void vDrawTextAxYValuesPoint(bool a, bool b)

{

string s = string.Empty;

float fMax = float.MinValue;

float fSum = 0;

for (int i = 0; i < viMaxRg; i++)

{

s = rgsValues[i, 0];

fSum += float.Parse(s);

if (fMax < float.Parse(s)) fMax = float.Parse(s);

}

//Пикселей для надписей по оси х

float fdeltax = viX - viDeltaaxisL - viDeltaaxisR;

//Пикселей на один отсчет по х

fdeltax = fdeltax / (float)(viMaxRg - 1);

float x = viDeltaaxisL;

float fdeltay = viY - 2 * viDeltaaxisH;

float y = viY - viDeltaaxisH - objFont.Size;

//Пикселей на одну единицу

fdeltay = fdeltay / fMax;

float fdelta = 0;

for (int i = 0; i < viMaxRg; i++)

{

if (a)

{

if (i % 2 == 0) fdelta = objFont.Size;

else fdelta = 2 * objFont.Size;

}

else

{

fdelta = objFont.Size;

}

if (b)

{

graph.DrawString(rgsValues[i, 0], objFont, objBrush, x + i * fdeltax,

y - (float.Parse(rgsValues[i, 0]) * fdeltay) - fdelta);

}

else

{

float fp = float.Parse(rgsValues[i, 0]);

fp = (fp * 100) / fSum;

graph.DrawString(rgsValues[i, 0] + "-" + fp.ToString("0.0") + "%",


objFont, objBrush, x + i * fdeltax,

y - (float.Parse(rgsValues[i, 0]) * fdeltay) - fdelta);

}

}

}

#endregion

Мы создали полностью код для отображения линейного графика. Все функции для управления построением и изменения внешнего вида представлены в void vCreateLinGr():

private void vCreateLinGr()

{

//Создаем массив значений для вывода на графике

vCreateRg();

//Создаем класс и передаем ему размер холсты

PaintCl clPaint = new PaintCl(pictureBox1.Width, pictureBox1.Height);

//Фон холста

clPaint.vSetBackground(Color.White);

//Параметры вызоыва: отступы слева, справа, сверху(снизу),Цвет осей, толщина пера

clPaint.vDravAxis(50, 50, 30, Color.Red, 2,true);

clPaint.vSetPenWidthLine(1);

clPaint.vSetPenColorLine(Color.Silver);

clPaint.MaxRg = 20;

clPaint.vDravGrid();

clPaint.vSetPenWidthLine(2);

clPaint.vSetPenColorLine(Color.Green);

clPaint.RgValue = rgsValues;

clPaint.vDrawGraphLines();

Font objFont = new Font("Arial", 7, FontStyle.Bold | FontStyle.Italic);

clPaint.font = objFont;

clPaint.brush = Brushes.Blue;

//Здесь необходимо поэксперементировать с

//использованием различных надписей и изменением параметров

clPaint.vDrawTextAxXNumber(false);

//clPaint.vDrawTextAxXValues(true);

clPaint.vDrawTextAxYValues();

clPaint.vDrawTextAxYValuesPoint(true,false);

//Принимаем нарисованное в pictureBox

pictureBox1.Image = clPaint.Bmp;

}

Результат выполнения кода показан на Рис.10.:

Рис.10. Линейный график


В начало







Date: 2015-09-02; view: 512; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.019 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию