Конструктор CGraph



Конструктор CGraph

Если вы поняли, что происходит в методе Scale, то дальнейшие манипуляции с данными графика не вызовут у вас затруднений. Рассмотрим конструктор класса CGraph. В первом параметре по ссылке он получает контейнер с точками графика. Для того чтобы исключить копирование всех точек внешнего контейнера, мы инициализируем в заголовке конструктора свою собственную ссылку m_Points на входной контейнер. Кроме контейнера с точками графика пользователь объектом CGraph должен передать два текста, помечающих оси графика (sX, SY) и текст его заголовка (sTitle). В теле конструктора готовим два объекта типа TData для данных о разметке двух осей, создаем два шрифтовых объекта и инициализируем переменные управления параметрами линии графика. В данной реализации мы убрали диалог по изменению атрибутов пера, который вы можете сделать по своему вкусу.

Примечание 1
Примечание 1

Следует отметить, что при изображении нескольких кривых функциональных зависимостей на одном графике необходимо дать пользователю возможность управлять стилем пера для каждой кривой в отдельности. В начале книги мы рассматривали, как это делается. Кроме того, следует учитывать существующие традиции изображения научной графики. Например, можно помечать кривые крестиками, ноликами и т. д. Это делается с помощью цикла прохода по точкам кривой и вывода в определенных местах растровых изображений, маркирующих кривую. Эти возможности ввиду необходимости описывать объекты классов Stingray Objective Grid мы также убрали из данной реализации.

//======= Конструктор класса CGraph

CGraph::CGraph (vector<CDPoint>S pt,

CString sTitle, CString sX, CString sY)

: m_Points(pt)

{

//===== Готовим данные, характеризующие оси координат


ZeroMemory(Sra_DataX, sizeof(TData));

ZeroMemory(sm_DataY, sizeof(TData));

m_DataX.bX = true;

m_DataY.bX = false;

m_sTitle = sTitle;

m_sX = sX;

m_sY = sY;

//======= Создаем шрифт для оцифровки осей

m_Font.CreateFont(16,0,0,0,100,0,0,0,DEFAULT_CHARSET,

OUT_RASTER_PRECIS,CLIP_DEFAULT_PRECIS,

DEFAULT_QUALITY,FF_DONTCARE,"Arial");

//======= Выясняем вертикальный размер буквы

TEXTMETRIC tm; CClientDC dc(0);

dc.SelectObject(Sm_Font);

dc.GetTextMetrics(Stm);

m_LH = tm.tmHeight;

//======= Создаем шрифт для вывода заголовка

m_TitleFont.CreateFont(24,О,О,0,100, 0, 0, 0,

DEFAULT_CHARSET, OUT_RASTER__PRECIS,

CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE,

"Times New Roman");

//======= Задаем параметры пера

m_Clr = RGB(0,0,255); m_Width = 2;

}



Содержание раздела