Есть целый набор “оконных” классов для создания окон с графикой 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()
.