Imported Upstream version 2~rc2+svn382
authorDimitrios Eftaxiopoulos <eftaxi12@otenet.gr>
Sun, 25 Mar 2012 18:34:23 +0000 (21:34 +0300)
committerDimitrios Eftaxiopoulos <eftaxi12@otenet.gr>
Sun, 25 Mar 2012 18:34:23 +0000 (21:34 +0300)
examples/fltk_example.cpp
examples/qt_example.cpp
include/mgl/data.h
include/mgl/glut.h
lang/mgl.i
src/export_3d.cpp
texinfo/example_en.texi
texinfo/widget_en.texi
todo.txt
widgets/glut.cpp
widgets/window.cpp

index 9e5eb5152b7cf2884314e330790dcd4953744bf2..0a34df0230aa41a987e3cc497834b04a455ed382 100644 (file)
@@ -31,24 +31,21 @@ int sample_d(mglGraph *gr);
 #include <unistd.h>\r
 mglPoint pnt;  // some global variable for changable data\r
 void *mgl_fltk_tmp(void *)     {       mgl_fltk_run(); return 0;       }\r
+//#define PTHREAD_SAMPLE\r
 //-----------------------------------------------------------------------------\r
 int main(int argc,char **argv)\r
 {\r
 #ifdef PTHREAD_SAMPLE\r
-       mglGraphFLTK gr;\r
-       gr.Window(argc,argv,NULL,"test",0,0);  // create window\r
-       gr.ClfOnUpdate = false;\r
-       static pthread_t tmp;\r
-       pthread_create(&tmp, 0, mgl_fltk_tmp, 0);\r
-       pthread_detach(tmp);    // run window handling in the separate thread\r
+       mglWindow gr("test");\r
+       gr.RunThr();\r
        for(int i=0;i<10;i++)   // do calculation\r
        {\r
-               sleep(2);             // which can be very long\r
+               sleep(1);             // which can be very long\r
                pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1);\r
                gr.Clf();             // make new drawing\r
                gr.Line(mglPoint(),pnt,"Ar2");\r
                char str[10] = "i=0";   str[3] = '0'+i;\r
-               gr.Text(mglPoint(),"");\r
+               gr.Puts(mglPoint(),"");\r
                gr.Update();       // update window\r
        }\r
        return 0;   // finish calculations and close the window\r
index 1a5f13e09f4c291f4bd8e2e6ef0fc06932b80791..bae26968d1564f495620370b7c26ff4364c11645 100644 (file)
@@ -34,36 +34,37 @@ void *mgl_qt_tmp(void *);
 //-----------------------------------------------------------------------------\r
 class Foo : public mglDraw\r
 {\r
+       mglPoint pnt;  // some result of calculation\r
 public:\r
+       mglWindow *Gr;  // graphics to be updated\r
        int Draw(mglGraph *gr);\r
+       void Calc();\r
 } foo;\r
 //-----------------------------------------------------\r
+void Foo::Calc()\r
+{\r
+       for(int i=0;i<30;i++)   // do calculation\r
+  {\r
+         sleep(1);           // which can be very long\r
+         pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1);\r
+         Gr->Update();        // update window\r
+  }\r
+}\r
+//-----------------------------------------------------\r
 int Foo::Draw(mglGraph *gr)\r
 {\r
-       gr->Rotate(60,40);\r
+       gr->Line(mglPoint(),pnt,"Ar2");\r
        gr->Box();\r
        return 0;\r
 }\r
 //-----------------------------------------------------\r
+//#define PTHREAD_SAMPLE\r
 int main(int argc,char **argv)\r
 {\r
 #ifdef PTHREAD_SAMPLE\r
-       mglWindow gr(1,NULL,"test");  // create window\r
-       gr.ClfOnUpdate = false;\r
-       static pthread_t tmp;\r
-       pthread_create(&tmp, 0, mgl_qt_tmp, 0);\r
-       pthread_detach(tmp);    // run window handling in the separate thread\r
-       for(int i=0;i<10;i++)   // do calculation\r
-       {\r
-               sleep(2);             // which can be very long\r
-               pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1);\r
-               gr.Clf();             // make new drawing\r
-               gr.Line(mglPoint(),pnt,"Ar2");\r
-               char str[10] = "i=0";   str[3] = '0'+i;\r
-               gr.Text(mglPoint(),"");\r
-               gr.Update();       // update window\r
-       }\r
-       return 0;   // finish calculations and close the window\r
+       mglWindow gr(&foo,"MathGL examples");\r
+       foo.Gr = &gr;   foo.Run();\r
+       return gr.Run();\r
 #else\r
        mglWindow *gr;\r
        char key = 0;\r
index e377cacf058982e580e7ea8affcebb195ac3acca..bfce511f8664f02a0256e8d1309a9f40f988274e 100644 (file)
@@ -423,8 +423,10 @@ inline bool operator==(const mglData &b, const mglData &d)
        return !memcmp(b.a,d.a,b.nx*b.ny*b.nz*sizeof(mreal));   }\r
 #endif\r
 //-----------------------------------------------------------------------------\r
+#ifndef SWIG\r
 mreal mglLinear(const mreal *a, long nx, long ny, long nz, mreal x, mreal y, mreal z);\r
 mreal mglSpline3(const mreal *a, long nx, long ny, long nz, mreal x, mreal y, mreal z,mreal *dx=0, mreal *dy=0, mreal *dz=0);\r
+#endif\r
 //-----------------------------------------------------------------------------\r
 /// Integral data transformation (like Fourier 'f' or 'i', Hankel 'h' or None 'n') for amplitude and phase\r
 inline mglData mglTransformA(const mglDataA &am, const mglDataA &ph, const char *tr)\r
index aea0bc6ee84cb7f38e545d3ac30b5e5a5d75ae7c..8060c5001efd2eff1a017382c1fb91f059a6ff52 100644 (file)
@@ -28,7 +28,7 @@ extern "C" {
 #endif\r
 /*****************************************************************************/\r
 void _mgl_key_up(unsigned char ch,int ,int );\r
-HMGL mgl_create_graph_glut(int (*draw)(HMGL gr, void *p), const char *title, void *par);\r
+HMGL mgl_create_graph_glut(int (*draw)(HMGL gr, void *p), const char *title, void *par, void (*load)(void *p));\r
 /*****************************************************************************/\r
 #ifdef __cplusplus\r
 }\r
@@ -80,12 +80,12 @@ private:
 class mglGLUT: public mglGraph\r
 {\r
 public:\r
-       mglGLUT(int (*draw)(HMGL gr, void *p), const char *title="MathGL", void *par=NULL) : mglGraph(-1)\r
-       {       gr = mgl_create_graph_glut(draw,title,par);     }\r
+       mglGLUT(int (*draw)(HMGL gr, void *p), const char *title="MathGL", void *par=0, void (*load)(void *p)=0) : mglGraph(-1)\r
+       {       gr = mgl_create_graph_glut(draw,title,par,load);        }\r
        mglGLUT(int (*draw)(mglGraph *gr), const char *title="MathGL") : mglGraph(-1)\r
-       {       gr = mgl_create_graph_glut(mgl_draw_graph,title,(void*)draw);   }\r
-       mglGLUT(mglDraw *dr=NULL, const char *title="MathGL") : mglGraph(-1)\r
-       {       mgl_create_graph_glut(mgl_draw_class,title,dr); }\r
+       {       gr = mgl_create_graph_glut(mgl_draw_graph,title,(void*)draw,0); }\r
+       mglGLUT(mglDraw *dr=0, const char *title="MathGL") : mglGraph(-1)\r
+       {       mgl_create_graph_glut(mgl_draw_class,title,dr,0);       }\r
 };\r
 //-----------------------------------------------------------------------------\r
 #endif\r
index 12548c6e7896d3a19dad80e0c0fe370d8582a406..3e1e1120fa53e52296be9e2b995f475a5314ed63 100644 (file)
@@ -36,6 +36,7 @@
 
 %{
 #define SWIG_FILE_WITH_INIT
+#include "mgl/config.h"
 #include "mgl/type.h"
 #include "mgl/data.h"
 #include "mgl/mgl.h"
@@ -87,6 +88,7 @@ import_array();
 %apply (int DIM1, int DIM2, int DIM3, double* IN_ARRAY3) {(int rows, int cols, int slc, const double* d)};
 #endif
 
+%include "mgl/config.h"
 %include "mgl/type.h"
 %include "mgl/data.h"
 %include "mgl/mgl.h"
index 67623e8aae8adadc60ad9bb0db4e2da76f0d9aaf..c56d94eacb6e4bee9cdcbff2f3c23b55d06d3965 100644 (file)
@@ -96,7 +96,7 @@ void mgl_obj_prim(const mglPrim &q, const mglPnt &p, FILE *fp, float size)
                        case '+':\r
                                fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z);\r
                                fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z);\r
-                               fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z);\r
+                               fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z);\r
                                fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z);\r
                                fprintf(fp,"l -4/%ld -3/%ld\n", i,i);\r
                                fprintf(fp,"l -2/%ld -1/%ld\n", i,i);   break;\r
@@ -229,13 +229,11 @@ void mgl_obj_prim(const mglPrim &q, const mglPnt &p, FILE *fp, float size)
                        }\r
                        break;\r
                case 1: fprintf(fp,"l %ld/%ld %ld/%ld\n", n1,n1, n2,n2);        break;\r
-               case 2: fprintf(fp,"f %ld/%ld/%ld %ld/%ld/%ld %ld/%ld/%ld\n",\r
-                       n1,n1,n1, n2,n2,n2, n3,n3,n3);  break;\r
+               case 2:\r
+                       fprintf(fp,"f %ld/%ld %ld/%ld %ld/%ld\n", n1,n1, n2,n2, n3,n3); break;\r
                case 3:\r
-                       fprintf(fp,"f %ld/%ld/%ld %ld/%ld/%ld %ld/%ld/%ld\n",\r
-                                       n1,n1,n1, n2,n2,n2, n3,n3,n3);\r
-                       fprintf(fp,"f %ld/%ld/%ld %ld/%ld/%ld %ld/%ld/%ld\n",\r
-                                       n4,n4,n4, n2,n2,n2, n3,n3,n3);break;\r
+                       fprintf(fp,"f %ld/%ld %ld/%ld %ld/%ld\n", n1,n1, n2,n2, n3,n3);\r
+                       fprintf(fp,"f %ld/%ld %ld/%ld %ld/%ld\n", n4,n4, n2,n2, n3,n3); break;\r
                case 4: break;  // TODO: add glyphs export later\r
        }\r
 }\r
@@ -837,7 +835,7 @@ void mgl_x3d_mdef(HMGL gr, void *fp, bool gz)
        if(m_P) {       m_p=true;       m_s=true;       }\r
        if(m_X) {       m_x=true;       m_s=true;       }\r
        if(m_p) mgl_printf(fp, gz, "<ProtoDeclare name='m_p'><ProtoInterface/>\n<ProtoBody>"\r
-               "<LineSet vertexCount=''>\n<Coordinate point='-1 0 0, 1 0 0, 0 -1 0, 0 1 0'/>"\r
+               "<LineSet vertexCount='0,1,2,3'>\n<Coordinate point='-1 0 0, 1 0 0, 0 -1 0, 0 1 0'/>"\r
                "\n</LineSet></ProtoBody></ProtoDeclare>\n");\r
        /*if(m_x)       mgl_printf(fp, gz, "/m_x {sm sm rm s2 s2 rl 0 sm 2 mul rm sm 2 mul s2 rl d0} def\n");   // TODO\r
         *      if(m_s) mgl_printf(fp, gz, "/m_s {sm sm rm 0 s2 rl s2 0 rl 0 sm 2 mul rl cp d0} def\n");\r
@@ -863,6 +861,7 @@ void mgl_x3d_mdef(HMGL gr, void *fp, bool gz)
 //-----------------------------------------------------------------------------\r
 void mgl_x3d_prim(const mglPrim &q, const mglPnt &p, const long *pnt, void *fp,bool gz, float size)\r
 {\r
+       // <ProtoInstance name='EmissiveMaterial'/>\r
 /*             if(q.type==0)   // mark\r
                {\r
                        float x0 = p1.x,y0 = p1.y;\r
index 6ab84ff9ad341414d5fffedd3ee55c2c8d54984d..adb8704616170fb60496b368687bf02ad80d9abc 100644 (file)
@@ -208,12 +208,12 @@ class Foo : public mglDraw
 {
   mglPoint pnt;  // some result of calculation
 public:
-  mglGraph *Gr;  // graphics to be updated
+  mglWindow *Gr;  // graphics to be updated
   int Draw(mglGraph *gr);
   void Calc();
 } foo;
 //-----------------------------------------------------
-int Foo::Calc()
+void Foo::Calc()
 {
   for(int i=0;i<30;i++)   // do calculation
   {
index 5c0b5226cb445992a23c352ce546cbe0ec4b9951..097d872e1bb395f18e31d59c064be211b4d0d607 100644 (file)
@@ -38,12 +38,12 @@ You should inherit yours class from @code{mglDraw} and re-implement one or both
 This class is derived from mglGraph class (@pxref{MathGL core}). It provide methods for handling window with MathGL graphics.
 
 @deftypefn {Constructor on @code{mglWindow}} {} mglWindow (@code{const char *}title=@code{"MathGL"})
-@deftypefnx {Constructor on @code{mglWindow}} {} mglWindow (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title=@code{"MathGL"}, @code{void *}par=@code{NULL}, @code{int} kind=@code{0})
+@deftypefnx {Constructor on @code{mglWindow}} {} mglWindow (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title=@code{"MathGL"}, @code{void *}par=@code{NULL}, @code{int} kind=@code{0}, @code{void} (*reload)(@code{HMGL} gr, @code{void *}p)=0)
 @deftypefnx {Constructor on @code{mglWindow}} {} mglWindow (@code{int} (*draw)(@code{mglGraph *}gr), @code{const char *}title=@code{"MathGL"}, @code{int} kind=@code{0})
 @deftypefnx {Constructor on @code{mglWindow}} {} mglWindow (@code{mglDraw *}draw, @code{const char *}title=@code{"MathGL"}, @code{int} kind=@code{0})
-@deftypefnx {C function} @code{HMGL} mgl_create_graph_qt (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title, @code{void *}par)
-@deftypefnx {C function} @code{HMGL} mgl_create_graph_fltk (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title, @code{void *}par)
-@deftypefnx {C function} @code{HMGL} mgl_create_graph_glut (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title, @code{void *}par)
+@deftypefnx {C function} @code{HMGL} mgl_create_graph_qt (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title, @code{void *}par, @code{void} (*reload)(@code{HMGL} gr, @code{void *}p))
+@deftypefnx {C function} @code{HMGL} mgl_create_graph_fltk (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title, @code{void *}par, @code{void} (*reload)(@code{HMGL} gr, @code{void *}p))
+@deftypefnx {C function} @code{HMGL} mgl_create_graph_glut (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title, @code{void *}par, @code{void} (*reload)(@code{HMGL} gr, @code{void *}p))
 
 Creates a window for plotting. Parameter @var{draw} sets a pointer to drawing function (this is the name of function) or instance of @code{mglDraw} class. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. Note, that @var{draw} can be @code{NULL} for displaying static bitmaps only (no animation or slides). Parameter @var{title} sets the title of the window. Parameter @var{par} contains pointer to data for the plotting function @var{draw}. Parameter @var{kind} may have following values: @samp{0} -- use FLTK window, @samp{1} -- use Qt window.
 
index 2ea7106eeca74bec0c807a2033cb2a33aa49eac9..b82787b64e5aba2debaf6b6351da4ebda451e935 100644 (file)
--- a/todo.txt
+++ b/todo.txt
@@ -6,6 +6,7 @@ Device 0 (VID=0502 and PID=337d) is UNKNOWN.
 1. Add sample for window in python/octave (like pthread) -- Docs
 2. Add help about cmake into the "Installation and using" -- after build system will be ready
 3. Export to X3D
+4. Check RunThr()
 
 ============= FOR V.2.1 ========
 
index 66b56f6b001d7c57ae8754aa9b91a4179f0d9781..f4f3664ac1e0ed1dc95e52566ffb52fcd152e553 100644 (file)
@@ -186,10 +186,10 @@ void mglCanvasGLUT::Window(int argc, char **argv,int (*draw)(mglBase *gr, void *
        glDeleteLists(1,NumFig);\r
 }\r
 //-----------------------------------------------------------------------------\r
-HMGL mgl_create_graph_glut(int (*draw)(HMGL gr, void *p), const char *title, void *par)\r
+HMGL mgl_create_graph_glut(int (*draw)(HMGL gr, void *p), const char *title, void *par, void (*load)(void *p))\r
 {\r
        mglCanvasGLUT *g = new mglCanvasGLUT;\r
-       g->Window(0,0,draw,title,par);\r
+       g->Window(0,0,draw,title,par, load);\r
        return g;\r
 }\r
 //-----------------------------------------------------------------------------\r
index 70a69fd4383c998ee9401cb12d0dc0e34a85f7b5..61a9e7b4857f4599b4a03499734f7b5baa0ca8dc 100644 (file)
@@ -181,9 +181,11 @@ void *mgl_fltk_tmp(void *)
 //-----------------------------------------------------------------------------\r
 int mgl_fltk_thr()             // NOTE: Qt couldn't be running in non-primary thread\r
 {\r
+#if MGL_HAVE_PTHREAD\r
        static pthread_t thr;\r
        pthread_create(&thr,0,mgl_fltk_tmp,0);\r
        pthread_detach(thr);\r
+#endif\r
        return 0;       // stupid, but I don't want keep result returned by Fl::Run()\r
 }\r
 //-----------------------------------------------------------------------------\r