“Интерактивный” способ использования MathGL состоит в создании окна с помощью классов mglQT
, mglFLTK
или mglGLUT
(см. “Оконные” классы) и последующем рисовании в этом окне. Соответствующий код выглядит так:
#include <mgl2/qt.h> int sample(mglGraph *gr) { gr->Rotate(60,40); gr->Box(); return 0; } //----------------------------------------------------- int main(int argc,char **argv) { mglQT gr(sample,"MathGL examples"); return gr.Run(); }
Здесь используется callback функция sample
, выполняющая собственно рисование. Функция main
– точка входа в программу – создает окно (объект gr типа mglQT
) и запускает цикл обработки сообщений (вызов gr.Run()
). Для компиляции достаточно выполнить команду
gcc test.cpp -lmgl-qt5 -lmgl
Вы можете использовать "-lmgl-qt4" вместо "-lmgl-qt5", если установлен Qt4.
Альтернативный способ состоит в использовании класса, производного от mglDraw
с переопределенной функцией Draw()
:
#include <mgl2/qt.h> class Foo : public mglDraw { public: int Draw(mglGraph *gr); }; //----------------------------------------------------- int Foo::Draw(mglGraph *gr) { gr->Rotate(60,40); gr->Box(); return 0; } //----------------------------------------------------- int main(int argc,char **argv) { Foo foo; mglQT gr(&foo,"MathGL examples"); return gr.Run(); }
Или в использовании функций С:
#include <mgl2/mgl_cf.h> int sample(HMGL gr, void *) { mgl_rotate(gr,60,40,0); mgl_box(gr); } int main(int argc,char **argv) { HMGL gr; gr = mgl_create_graph_qt(sample,"MathGL examples",0,0); return mgl_qt_run(); /* generally I should call mgl_delete_graph() here, * but I omit it in main() function. */ }
Похожий код получается и при использовании окон mglFLTK
, mglGLUT
(функция sample()
та же):
#include <mgl2/glut.h> int main(int argc,char **argv) { mglGLUT gr(sample,"MathGL examples"); return 0; }
The rotation, shift, zooming, switching on/off transparency and lighting can be done with help of tool-buttons (for mglWindow
) or by hot-keys: ‘a’, ‘d’, ‘w’, ‘s’ for plot rotation, ‘r’ and ‘f’ switching on/off transparency and lighting. Press ‘x’ for exit (or closing the window).
In this example function sample
rotates axes (Rotate()
, see Матрица преобразования) and draws the bounding box (Box()
). Drawing is placed in separate function since it will be used on demand when window canvas needs to be redrawn.