Есть целый набор “оконных” классов для создания окон с графикой MathGL: mglWnd и mglGLUT для окон целиком, Fl_MathGL и QMathGL для виджетов. Все эти классы позволяют пользователю просмотривать, вращать, экспортировать рисунок. Большинство из них (кроме mglGLUT) имеют панель инструментов для упрощения изменения графика. Все оконные классы имеют схожий набор функций. Ниже приведен список классов с краткими комментариями.
Для рисования можно использовать: указатель NULL если планируется обновлять график вручную, глобальную функцию типа int draw( или HMGL gr, void *p)int draw(, или экземпляр класса, производного от mglDraw class. Этот класс определен в mglGraph *gr)#include <mgl2/wnd.h> и имеет 2 основных виртуальных метода:
class mglDraw
{
public:
virtual int Draw(mglGraph *) { return 0; };
virtual void Reload() {};
};
Вам следует наследовать свой класс от mglDraw и определить один или оба метода.
Непосредственно окна можно создать используя один из следующих классов (см. Использование окон MathGL для примеров).
mglFLTK: mglFLTK (const char *title="MathGL") ¶mglFLTK: mglFLTK (int (*draw)(HMGL gr, void *p), const char *title="MathGL", void *par=NULL, void (*reload)(HMGL gr, void *p)=0) ¶mglFLTK: mglFLTK (int (*draw)(mglGraph *gr), const char *title="MathGL") ¶mglFLTK: mglFLTK (mglDraw *draw, const char *title="MathGL") ¶HMGL mgl_create_graph_fltk (int (*draw)(HMGL gr, void *p), const char *title, void *par, void (*reload)(HMGL gr, void *p)) ¶Создает FLTK окно для вывода графика. Параметр draw – указатель (имя) функции рисования. Есть возможность создания нескольких кадров вначале (требует больше памяти) и их быстрая анимации в дальнейшем. В этом случае функция draw должна возвращать число кадров или ноль для рисования по запросу. Замечу, что draw может быть равна NULL для отображения статической (текущей) картинки. Параметр title задает заголовок окна. Параметр par содержит указатель на данные, передаваемые функции рисования draw. FLTK окна обеспечивают быстрое рисование и хорошо поддерживают многопоточность.
mglWnd: int RunThr () ¶int mgl_fltk_thr () ¶Запускает цикл обработки сообщений в отдельном потоке. В данный момент работает только для окон FLTK.
mglQT: mglQT (const char *title="MathGL") ¶mglQT: mglQT (int (*draw)(HMGL gr, void *p), const char *title="MathGL", void *par=NULL, void (*reload)(HMGL gr, void *p)=0) ¶mglQT: mglQT (int (*draw)(mglGraph *gr), const char *title="MathGL") ¶mglQT: mglQT (mglDraw *draw, const char *title="MathGL") ¶HMGL mgl_create_graph_qt (int (*draw)(HMGL gr, void *p), const char *title, void *par, void (*reload)(HMGL gr, void *p)) ¶Создает Qt окно для вывода графика. Параметр draw – указатель (имя) функции рисования. Есть возможность создания нескольких кадров вначале (требует больше памяти) и их быстрая анимации в дальнейшем. В этом случае функция draw должна возвращать число кадров или ноль для рисования по запросу. Замечу, что draw может быть равна NULL для отображения статической (текущей) картинки. Параметр title задает заголовок окна. Параметр par содержит указатель на данные, передаваемые функции рисования draw.
mglGLUT: mglGLUT (const char *title="MathGL") ¶mglGLUT: mglGLUT (int (*draw)(HMGL gr, void *p), const char *title="MathGL", void *par=NULL, void (*reload)(HMGL gr, void *p)=0) ¶mglGLUT: mglGLUT (int (*draw)(mglGraph *gr), const char *title="MathGL") ¶mglGLUT: mglGLUT (mglDraw *draw, const char *title="MathGL") ¶HMGL mgl_create_graph_glut (int (*draw)(HMGL gr, void *p), const char *title, void *par, void (*reload)(HMGL gr, void *p)) ¶Создает окно для вывода графика. Параметр draw – указатель (имя) функции рисования. Есть возможность создания нескольких кадров вначале (требует больше памяти) и их быстрая анимации в дальнейшем. В этом случае функция draw должна возвращать число кадров или ноль для рисования по запросу. Замечу, что draw может быть равна NULL для отображения статической (текущей) картинки. Параметр title задает заголовок окна. Параметр par содержит указатель на данные, передаваемые функции рисования draw. Параметр kind может иметь следующие значения: ‘0’ – использовать окно FLTK, ‘1’ – использовать окно Qt.
В окне просмотра можно использовать клавиши: ’a’, ’d’, ’w’, ’s’ для вращения; ’,’, ’.’ для просмотра предыдущего и следующего кадров; ’r’ для переключения прозрачности; ’f’ для переключения оспещенности; ’x’ для закрытия окна.
Следует отметить, что цикл обработки сообщений GLUT можно остановить вызовом функции glutLeaveMainLoop().