| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Класс mglGraph (see section Ядро MathGL) обеспечивает базовые функции для создания научной графики, но это абстрактный класс. Причина в том, что существует несколько возможностей вывода/отображения получившегося рисунка: в растровый или в векторный файлы, используя OpenGL и т.д. В результате, для конечной отрисовки необходимо использовать производные классы. В принципе, можно наследовать непосредственно mglGraph (и так было до версии 1.6). Однако, я рекомендую использовать в качестве базового класс mglGraphAB для большего единообразия получающейся графики в различных классах. Класс mglGraphAB – другой абстрактный класс, обеспечивающий преобразование координат, базовые функции рисования и сохранения в растровое изображение. Он требует доопределения функций рисования линий, треугольников и четырехугольников. Ниже приведены классы “отрисовки” с короткими комментариями.
Абстрактный класс, обеспечивающий отрисовку по глубине, преобразование к экранным координатам, сохранение в растровое изображение и т.д. Класс определен в #include <mgl/mgl_ab.h>.
Реализует растровую отрисовку изображения используя Z-Buffer. Можно использовать для рисования в памяти (или в консоли/SSH терминале). Также этот класс используется как базовый для рисования в окне (например, используя FLTK, Qt, wxWidgets библиотеки и пр.). При экспорте в EPS формат сохраняется растровая картинка. Получающийся рисунок лучшего качества, но рисуется медленнее чем в классе mglGraphPS. Класс определен в #include <mgl/mgl_zb.h>.
Реализует векторную отрисовку изображения с возможностью сохранения в векторный PostScript или SVG файл. Можно использовать для рисования в памяти (или в консоли/SSH терминале). Замечу, что сглаживание цвета не поддерживается, а при экспорте в EPS не поддерживается и прозрачность (в силу ограничения формата). В результате рисунок получается быстрее, но более низкого качества чем в классе mglGraphZB. Класс определен в #include <mgl/mgl_eps.h>.
Реализует векторную графику с использованием OpenGL. Класс не может быть использован для рисования в консоли. В силу ограничения OpenGL возможна проблема корректного отображения нескольких перекрывающихся поверхностей. Класс определен в #include <mgl/mgl_gl.h>.
Реализует экспорт графики в IDTF формате, который затем можно преобразовать в формат U3D. Класс определен в #include <mgl/mgl_idtf.h>.
| 4.1 Класс mglGraphAB |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Вообще говоря это чуть “менее абстрактный” класс чем mglGraph (see section Ядро MathGL). Он предоставляет много методов для обработки промежуточных данных и требует в производных классах определения только нескольких методов для отрисовки примитивов. Разработчикам, наследующим этот класс, следует посмотреть файл ‘mgl_ab.h’ и комментарии в нем или обратиться к автору.
Ниже я только перечислю основные общедоступные методы класса mglGraphAB. В первую очередь это функции, возвращающие созданный растровый рисунок, его ширину и высоту. В дальнейшем его можно использовать в любой графической библиотеке (см. также, “Оконные” классы) или сохранить в файл (см. также, Экспорт в файл).
mglGraphAB (C++): const unsigned char * GetBits ()mglGraph (Python): void GetRGB (char *buf, int size)mglGraph (Python): void GetBGRN (char *buf, int size)const unsigned char * mgl_get_rgb (HMGL gr)Возвращает растровое изображение в формате RGB для текущего кадра. Формат каждого элемента (пикселя): {red, green, blue}. Число элементов Width*Height. Положение элемента {i,j} есть [3*i + 3*Width*j] (или [4*i + 4*Width*j] для GetBGRN()). В Python вы должны предоставить буфер buf достаточного размера size, т.е. код должен выглядеть следующим образом
from mathgl import * gr = mglGraph(); bits='\t'; bits=bits.expandtabs(4*gr.GetWidth()*gr.GetHeight()); gr.GetBGRN(bits, len(bits));
mglGraphAB (C++): const unsigned char * GetRGBA ()mglGraph (Python): void GetRGBA (char *buf, int size)const unsigned char * mgl_get_rgba (HMGL gr)Возвращает растровое изображение в формате RGBA для текущего кадра. Формат каждого элемента (пикселя): {red, green, blue, alpha}. Число элементов Width*Height. Положение элемента {i,j} есть [4*i + 4*Width*j].
mglGraphAB (C++, Python): int GetWidth ()mglGraphAB (C++, Python): int GetHeight ()int mgl_get_width (HMGL gr)int mgl_get_height (HMGL gr)Возвращает ширину и высоту изображения.
Класс mglGraphAB – базовый класс для “оконных классов”. Поэтому он содержит набор функций для создания и управления окном. Большинство из них применимо только в “оконных классах” (типа mglGraphFLTK и др, see section “Оконные” классы). В остальных случаях функции ничего не делают. Если вы создаете оконный класс, то Вам следует предоставить такой же интерфейс для удобства пользователя.
void Window (int argc, char **argv, int (*draw)(mglGraph *gr, void *p), const char *title, void *par=NULL, void (*reload)(int next, void *p)=NULL, bool maximize=false)Создает окно для вывода графика. Параметры argc, argv содержат информацию операционной системы и их слеудет передать в эту функцию из функции main(int argc,char **argv) (хотя они и могут быть равны NULL). Параметр draw – указатель (имя) функции рисования. Есть возможность создания нескольких кадров вначале (требует больше памяти) и их быстрая анимации в дальнейшем. В этом случае функция draw должна возвращать число кадров или ноль для рисования по запросу. Замечу, что draw может быть равна NULL для отображения статической (текущей) картинки. Параметр title задает заголовок окна. Параметр par содержит указатель на данные, передаваемые функции рисования draw. Параметр maximize=true открывает окно раскрытым на весь экран.
В окне просмотра можно использовать клавиши: ’a’, ’d’, ’w’, ’s’ для вращения; ’,’, ’.’ для просмотра предыдущего и следующего кадров; ’r’ для переключения прозрачности; ’f’ для переключения оспещенности; ’x’ для закрытия окна.
ВАЖНО!!! Вам не следует вызывать функцию Rotate() (see section Матрица преобразования) если Вы хотите вращать график.
void Window (int argc, char **argv, mglDraw *draw, const char *title, bool maximize=false)В основном аналогична предыдущей. Основное отличие в том, что функции рисования и обновления данных определены в классе наследнике класса mglDraw. Этот класс определен в #include <mgl/mgl_define.h> и имеет только 2 метода:
class mglDraw
{
public:
virtual int Draw(mglGraph *) { return 0; };
virtual void Reload(int) {};
};
Вы можете создать класс-наследник mglDraw и переопределить один или оба метода для использования с данной функцией.
mglGraphAB (C++): void ToggleAlpha ()int mgl_wnd_toggle_alpha (HMGL gr)Включает/выключает прозрачность, но не перезаписывает настройки пользовательской функции рисования.
mglGraphAB (C++): void ToggleLight ()int mgl_wnd_toggle_light (HMGL gr)Включает/выключает освещение, но не перезаписывает настройки пользовательской функции рисования. Switch on/off lighting but do not overwrite switches in user drawing function.
mglGraphAB (C++): void ToggleZoom ()int mgl_wnd_toggle_zoom (HMGL gr)Включает/выключает приближение выбранного мышью области рисунка.
mglGraphAB (C++): void ToggleRotate ()int mgl_wnd_toggle_rotate (HMGL gr)Включает/выключает режим вращения мышью. Обычно левая кнопка вращает график, средняя сдвигает, правая приближает и меняет перспективу.
mglGraphAB (C++): void ToggleNo ()int mgl_wnd_toggle_no (HMGL gr)Выключает режим приближения/вращения и восстанавливает вид по умолчанию. Switch off all zooming and rotation and restore initial state.
mglGraphAB (C++): void Update ()int mgl_wnd_update (HMGL gr)Обновляет содержимое окна.
mglGraphAB (C++): void ReLoad (bool o)int mgl_wnd_reload (HMGL gr, int val)Перезагружает данные пользователя и обновляет картинку.
mglGraphAB (C++): void Adjust ()int mgl_wnd_adjust (HMGL gr)Подгоняет размер картинки под размер окна (виджета).
mglGraphAB (C++): void NextFrame ()int mgl_wnd_next_frame (HMGL gr)Показывает следующий кадр.
mglGraphAB (C++): void PrevFrame ()int mgl_wnd_prev_frame (HMGL gr)Показывает предыдущий кадр. Show previous frame if one.
mglGraphAB (C++): void Animation ()int mgl_wnd_animation (HMGL gr)Запускает/останавливает слайд-шоу (анимацию) кадров.
int mgl_wnd_set_auto_clf (HMGL gr, int val)bool AutoClfВключает/выключает автоматическую очистку рисунка между перерисовкой. Выключение полезно для рисования с накоплением (например, результатов/точек расчета).
int mgl_wnd_set_delay (HMGL gr, int val)float DelayЗадержка анимации в секундах. По умолчанию равно 1 секунде.
mglGraphAB (C++, Python): mglPoint CalcXYZ (int xs, int ys)void mgl_calc_xyz (HMGL gr, int xs, int ys, float *x, float *y, float *z)Вычисляет 3D координаты {x,y,z} для экранной точки {xs,ys}. В данный момент игнорируется перспектива графика и формулы перехода в криволинейные координаты. Вычисления производятся для последнего использованного InPlot (see section Матрица преобразования).
mglGraphAB (C++, Python): mglPoint CalcScr (mglPoint p)mglGraphAB (C++): void CalcScr (mglPoint p, int *xs, int *ys)void mgl_calc_scr (HMGL gr, float x, float y, float z, int *xs, int *ys)Вычисляет экранные координаты {xs,ys} для 3D координат {x,y,z}. Вычисления производятся для последнего использованного InPlot (see section Матрица преобразования).
int mgl_wnd_set_show_mouse_pos (HMGL gr, int val)float ShowMousePosВключает/выключает показ координат последнего нажатия кнопки мыши на рисунке.
mglPoint LastMousePosПоследнее положение нажатия кнопки мыши.
| [ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on December 13, 2012 using texi2html 1.82.