6 “Оконные” классы

Есть целый набор “оконных” классов для создания окон с графикой MathGL: mglWnd и mglGLUT для окон целиком, Fl_MathGL и QMathGL для виджетов. Все эти классы позволяют пользователю просмотривать, вращать, экспортировать рисунок. Большинство из них (кроме mglGLUT) имеют панель инструментов для упрощения изменения графика. Все оконные классы имеют схожий набор функций. Ниже приведен список классов с краткими комментариями.

Для рисования можно использовать: указатель NULL если планируется обновлять график вручную, глобальную функцию типа int draw(HMGL gr, void *p) или int draw(mglGraph *gr), или экземпляр класса, производного от mglDraw class. Этот класс определен в #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().