Конструктор 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;
}