Imported Upstream version 2.1.3.1
authorDimitrios Eftaxiopoulos <eftaxi12@otenet.gr>
Mon, 20 May 2013 07:40:00 +0000 (10:40 +0300)
committerDimitrios Eftaxiopoulos <eftaxi12@otenet.gr>
Mon, 20 May 2013 07:40:00 +0000 (10:40 +0300)
15 files changed:
ChangeLog.txt
examples/fltk_example.cpp
examples/full_test.cpp
examples/qt_example.cpp
examples/samples.cpp
include/mgl2/mgl.h
include/mgl2/wnd.h
src/data_new.cpp
src/export.cpp
src/fft.cpp
src/font.cpp
src/pde.cpp
texinfo/json.html
texinfo/mathgl.js
todo.txt

index 2f146443238fbe0b7ce77e530e79fa3d0808bd9b..9d2da36c2d576dedfba8f10dbc42cd62a9b29773 100644 (file)
@@ -1,3 +1,9 @@
+2.1.3.1 Released 8 May 2013
+
+* Compatibility changes for MS VS.
+* Bugfixes for cmake options enable-double=OFF, enable-zlib=OFF.
+* Enable mouse actions for Firefox in JS sample.
+
 2.1.3 Released 2 May 2013
 
 * Functions SinFFT, CosFFT, Hankel and so on, become multi-threaded
index 28abdda7d19b9a309d78accedd4936456e71b480..685a10e198dc6a59420f75adc53ade12eb908286 100644 (file)
@@ -31,8 +31,7 @@ int sample_2(mglGraph *gr);
 int sample_3(mglGraph *gr);\r
 int sample_d(mglGraph *gr);\r
 //-----------------------------------------------------------------------------\r
-//#include <unistd.h>\r
-mglPoint pnt;  // some global variable for changable data\r
+mglPoint pnt;  // some global variable for changeable data\r
 void *mgl_fltk_tmp(void *)     {       mgl_fltk_run(); return 0;       }\r
 //#define PTHREAD_SAMPLE\r
 //-----------------------------------------------------------------------------\r
index d88befcd4ba6c7c749a30851ac1e84d606220962..c050a0bf8e9ab840b007994da239c24587c04529 100644 (file)
@@ -63,8 +63,11 @@ void mgls_prepare3v(mglData *ex, mglData *ey, mglData *ez);
 //-----------------------------------------------------------------------------\r
 void save(mglGraph *gr,const char *name,const char *suf);\r
 void smgl_stfa(mglGraph *gr);  // STFA sample\r
+void smgl_text(mglGraph *gr);  // text drawing\r
 void test(mglGraph *gr)\r
 {\r
+       smgl_text(gr);  return;\r
+       \r
        mglParse par;\r
        par.AllowSetSize(true);\r
        setlocale(LC_CTYPE, "");\r
@@ -200,8 +203,13 @@ void save(mglGraph *gr,const char *name,const char *suf="")
                        snprintf(buf,128,"%s%s.jsonz",name,suf);\r
                        gr->WriteJSON(buf);     break;\r
                default:// PNG (no alpha)\r
+#if MGL_HAVE_PNG\r
                        snprintf(buf,128,"%s%s.png",name,suf);\r
                        gr->WritePNG(buf,0,false);      break;\r
+#else\r
+                       snprintf(buf,128,"%s%s.bmp",name,suf);\r
+                       gr->WriteBMP(buf);      break;\r
+#endif\r
        }\r
 }\r
 //-----------------------------------------------------------------------------\r
index 2dfbb75002fe94aa3cf1396b8f65954809512681..c6f0ef5fd3740edeffa51c0f7b70c9b195c2b84a 100644 (file)
@@ -35,7 +35,7 @@ int sample_d(mglGraph *gr);
 #ifdef PTHREAD_SAMPLE\r
 #include <pthread.h>\r
 #endif\r
-mglPoint pnt;  // some global variable for changable data\r
+mglPoint pnt;  // some global variable for changeable data\r
 void *mgl_qt_tmp(void *);\r
 //-----------------------------------------------------------------------------\r
 class Foo : public mglDraw\r
index ab3527b797702f63896a674814ec9d107e6147a8..2c64bb6e659b241d61f49d5cbd2cda6f06b91920 100644 (file)
@@ -60,7 +60,7 @@ new ez 10 10 10 '0.2*(z-0.3)/$1-0.2*(z+0.3)/$2'\nreturn\n";
 //-----------------------------------------------------------------------------
 const char *mmgl_fexport="";
 #define splot1(b) {(b).Norm(-1,1,true);gr->Rotate(70,60);gr->Box();gr->Surf3(b);}
-void smgl_fexport(mglGraph *gr)        // surface triangulation
+void smgl_fexport(mglGraph *gr)        // test file export
 {
        gr->SubPlot(3,2,0);
        double d,x1,x2,x0,y=0.95;
@@ -233,7 +233,7 @@ const char *mmgl_data1="new a 40 50 60 'exp(-x^2-4*y^2-16*z^2)'\n"
 "title 'max=',b.max:norm b -1 1 on:rotate 70 60:box:surf3 b\n"
 "return\n";
 #define splot1(b) {(b).Norm(-1,1,true);gr->Rotate(70,60);gr->Box();gr->Surf3(b);}
-void smgl_data1(mglGraph *gr)  // surface triangulation
+void smgl_data1(mglGraph *gr)  // basic data operations
 {
        mglData a(40,50,60),b;  gr->Fill(a,"exp(-x^2-4*y^2-16*z^2)");
        gr->Light(true);                gr->Alpha(true);
@@ -275,7 +275,7 @@ const char *mmgl_data2="new a 40 50 60 'exp(-x^2-4*y^2-16*z^2)'\n"
 "title 'max=',b.max:norm b -1 1 on:rotate 70 60:box\n"
 "surf3 b 0.5:surf3 b -0.5\nreturn\n";
 #define splot2(b) {(b).Norm(-1,1,true);gr->Rotate(70,60);gr->Box();gr->Surf3(0.5,b);gr->Surf3(-0.5,b);}
-void smgl_data2(mglGraph *gr)  // surface triangulation
+void smgl_data2(mglGraph *gr)  // data transforms
 {
        mglData a(40,50,60),b;  gr->Fill(a,"exp(-x^2-4*y^2-16*z^2)");
        gr->Light(true);                gr->Alpha(true);
@@ -310,7 +310,7 @@ const char *mmgl_param1="new x 100 'sin(pi*x)'\nnew y 100 'cos(pi*x)'\n"
 "subplot 4 3 9:rotate 40 60:box:step x y z\n"
 "subplot 4 3 10:rotate 40 60:box:torus x z 'z';light on\n"
 "subplot 4 3 11:rotate 40 60:box:label x y z '%z'\n";
-void smgl_param1(mglGraph *gr) // surface triangulation
+void smgl_param1(mglGraph *gr) // 1d parametric plots
 {
        mglData x(100), y(100), z(100), c(100);
        gr->Fill(x,"sin(pi*x)");        gr->Fill(y,"cos(pi*x)");
@@ -350,7 +350,7 @@ const char *mmgl_param2="new x 100 100 'sin(pi*(x+y)/2)*cos(pi*y/2)'\n"
 "subplot 4 4 13:rotate 40 60:box:boxs x y z '';meshnum 10;light on\n"
 "subplot 4 4 14:rotate 40 60:box:boxs x y z '#';meshnum 10;light on\n"
 "subplot 4 4 15:rotate 40 60:box:boxs x y z '@';meshnum 10;light on\n";
-void smgl_param2(mglGraph *gr) // surface triangulation
+void smgl_param2(mglGraph *gr) // 2d parametric plots
 {
        mglData x(100,100), y(100,100), z(100,100), c(100,100);
        gr->Fill(x,"sin(pi*(x+y)/2)*cos(pi*y/2)");      gr->Fill(y,"cos(pi*(x+y)/2)*cos(pi*y/2)");
@@ -391,7 +391,7 @@ const char *mmgl_param3="new x 50 50 50 '(x+2)/3*sin(pi*y/2)'\n"
 "subplot 4 3 8:rotate 40 60:box:densx c '' 0:densy c '' 0:densz c '' 0\n"
 "subplot 4 3 9:rotate 40 60:box:contx c '' 0:conty c '' 0:contz c '' 0\n"
 "subplot 4 3 10:rotate 40 60:box:contfx c '' 0:contfy c '' 0:contfz c '' 0\n";
-void smgl_param3(mglGraph *gr) // surface triangulation
+void smgl_param3(mglGraph *gr) // 3d parametric plots
 {
        mglData x(50,50,50), y(50,50,50), z(50,50,50), c(50,50,50), d(50,50,50);
        gr->Fill(x,"(x+2)/3*sin(pi*y/2)");      gr->Fill(y,"(x+2)/3*cos(pi*y/2)");      gr->Fill(z,"z");
@@ -427,7 +427,7 @@ const char *mmgl_paramv="new x 20 20 20 '(x+2)/3*sin(pi*y/2)'\n"
 "grid3 x y z z '{r9}':grid3 x y z z '{g9}x':grid3 x y z z '{b9}z'\n"
 "subplot 3 3 6:rotate 40 60:box:flow x y z ex ey ez\n"
 "subplot 3 3 7:rotate 40 60:box:pipe x y z ex ey ez\n";
-void smgl_paramv(mglGraph *gr) // surface triangulation
+void smgl_paramv(mglGraph *gr) // parametric plots for vector field
 {
        mglData x(20,20,20), y(20,20,20), z(20,20,20), ex(20,20,20), ey(20,20,20), ez(20,20,20);
        gr->Fill(x,"(x+2)/3*sin(pi*y/2)");      gr->Fill(y,"(x+2)/3*cos(pi*y/2)");      gr->Fill(z,"x+z");
index e7c81119f6b274c76d933a09f10c6d3444d22030..713823fbf13a1d674ce6021d5664e7e561171961 100644 (file)
@@ -415,7 +415,7 @@ public:
        /// Calculate 3D coordinate {x,y,z} for screen point {xs,ys}\r
        inline mglPoint CalcXYZ(int xs, int ys)\r
        {\r
-               double x,y,z;\r
+               mreal x,y,z;\r
                mgl_calc_xyz(gr,xs,ys,&x,&y,&z);\r
                return mglPoint(x,y,z);\r
        }\r
index 0ab3689c034f24da6114dc1cab489d7a785b7c7d..dc0d907786f29302a11f8b33a4ae4c6e00cb811d 100644 (file)
@@ -89,7 +89,7 @@ public:
        inline void Setup(bool clf_upd=true, bool showpos=false)\r
        {       mgl_setup_window(gr, clf_upd, showpos); }\r
        inline mglPoint LastMousePos()          ///< Last mouse position\r
-       {       double x,y,z;   mgl_get_last_mouse_pos(gr,&x,&y,&z);    return mglPoint(x,y,z); }\r
+       {       mreal x,y,z;    mgl_get_last_mouse_pos(gr,&x,&y,&z);    return mglPoint(x,y,z); }\r
 };\r
 //-----------------------------------------------------------------------------\r
 #endif\r
index 439338c51290e66f14d8edf4653c12aec40d3452..c5528194817eb736fb1c4033a93266fdb8732ff9 100644 (file)
@@ -875,7 +875,7 @@ mreal MGL_EXPORT mgl_find_root(mreal (*func)(mreal x, void *par), mreal x0, void
 }\r
 //-----------------------------------------------------------------------------\r
 struct MGL_NO_EXPORT mglFuncV  {       mglFormula *eq; char var;       };\r
-mreal MGL_NO_EXPORT mgl_funcv(double v, void *par)\r
+mreal MGL_NO_EXPORT mgl_funcv(mreal v, void *par)\r
 {\r
        mglFuncV *f = (mglFuncV *)par;\r
        mreal var[MGL_VS];      memset(var,0,('z'-'a')*sizeof(mreal));\r
index 8f165d4611cbdfbfd48a2b9691740ee2ec97a88e..69a87ad9b84d25bd965aff3405c4b03fdbf4c6ed 100644 (file)
 #include <time.h>
 #include <stdarg.h>
 
+#if defined(WIN32) || defined(_MSC_VER) || defined(__BORLANDC__)
+#include <windows.h>
+#else
+#include <unistd.h>
+#endif
+
 #include "mgl2/canvas.h"
 #include "mgl2/canvas_cf.h"
 
@@ -576,7 +582,7 @@ void MGL_EXPORT mgl_show_image(HMGL gr, const char *viewer, int keep)
                {
                        snprintf(cmd,128,"%s %s &", viewer,fname);
                        if(system(cmd)==-1)     printf("Error to call external viewer\n");
-                       //              sleep(2);
+                       Sleep(2000);
                        snprintf(cmd,128,"del %s", fname);
                }
                else    snprintf(cmd,128,"%s %s; del %s", viewer,fname,fname);
index 80fe46bcf06c8f764ef5c22e43108498afacb7ca..486154d29eed18eb202ffbca1f82de84673c5e8b 100644 (file)
@@ -134,7 +134,7 @@ void MGL_EXPORT mgl_datac_fft(HADT d, const char *dir)
        if(!dir || *dir==0)     return;
        long nx = d->nx, ny = d->ny, nz = d->nz;
        if(mglNumThr<1) mgl_set_num_thr(0);     // manually set number of threads
-       void *wt=0, *ws[mglNumThr];
+       void *wt=0, **ws=new void*[mglNumThr];
        long par[4]={nx,ny,nz,strchr(dir,'i')!=0}, i;
 #if MGL_USE_DOUBLE
        double *a = (double *)(d->a);
@@ -159,6 +159,7 @@ void MGL_EXPORT mgl_datac_fft(HADT d, const char *dir)
                mglStartThreadT(mgl_fftz,nx*ny,0,a,wt,ws,par);
        }
        if(wt)  mgl_fft_free(wt,ws,mglNumThr);
+       delete []ws;
 #if !MGL_USE_DOUBLE
        for(i=0;i<nx*ny*nz;i++) d->a[i] = dual(a[2*i], a[2*i+1]);
        delete []a;
@@ -171,7 +172,7 @@ void MGL_EXPORT mgl_data_fourier(HMDT re, HMDT im, const char *dir)
        long nx = re->nx, ny = re->ny, nz = re->nz;
        if(nx*ny*nz != im->nx*im->ny*im->nz || !dir || dir[0]==0)       return;
        if(mglNumThr<1) mgl_set_num_thr(0);     // manually set number of threads
-       void *wt=0, *ws[mglNumThr];
+       void *wt=0, **ws=new void*[mglNumThr];
        long par[4]={nx,ny,nz,strchr(dir,'i')!=0}, i;
        double *a = new double[2*nx*ny*nz];
        for(i=0;i<nx*ny*nz;i++)
@@ -194,7 +195,7 @@ void MGL_EXPORT mgl_data_fourier(HMDT re, HMDT im, const char *dir)
        if(wt)  mgl_fft_free(wt,ws,mglNumThr);
        for(i=0;i<nx*ny*nz;i++)
        {       re->a[i] = a[2*i];      im->a[i] = a[2*i+1];    }
-       delete []a;
+       delete []ws;    delete []a;
 }
 //-----------------------------------------------------------------------------
 MGL_NO_EXPORT void* mgl_envx(void *par)
@@ -253,7 +254,7 @@ void MGL_EXPORT mgl_data_envelop(HMDT d, char dir)
        register long i;
        long nx=d->nx,ny=d->ny,nz=d->nz,par[3]={nx,ny,nz};
        if(mglNumThr<1) mgl_set_num_thr(0);     // manually set number of threads
-       void *wt=0, *ws[mglNumThr];
+       void *wt=0, **ws=new void*[mglNumThr];
        double *b = 0;
        if(dir=='x' && nx>1)
        {
@@ -275,6 +276,7 @@ void MGL_EXPORT mgl_data_envelop(HMDT d, char dir)
        }
        for(i=0;i<nx*ny*nz;i++) d->a[i] = hypot(b[2*i], b[2*i+1]);
        if(b)   {       mgl_fft_free(wt,ws,mglNumThr);  delete []b;     }
+       delete []ws;
 }
 //-----------------------------------------------------------------------------
 MGL_NO_EXPORT void* mgl_stfa1(void *par)
@@ -347,7 +349,7 @@ HMDT MGL_EXPORT mgl_data_stfa(HCDT re, HCDT im, long dn, char dir)
        register long i,j,k,i0,dd=dn/2;
        if(mglNumThr<1) mgl_set_num_thr(0);     // manually set number of threads
        double *a = new double[4*dn*mglNumThr],ff;
-       void *ws[mglNumThr], *wt = mgl_fft_alloc(2*dn,ws,mglNumThr);
+       void **ws=new void*[mglNumThr], *wt = mgl_fft_alloc(2*dn,ws,mglNumThr);
        long mx,my,mz;
        if(dir=='y')
        {
@@ -363,8 +365,8 @@ HMDT MGL_EXPORT mgl_data_stfa(HCDT re, HCDT im, long dn, char dir)
                long par[5]={mx,my,mz,dn,nx};
                mglStartThreadT(mgl_stfa2,my*mz,d->a,a,wt,ws,par,re,im);
        }
-       delete []a;
        mgl_fft_free(wt,ws,mglNumThr);
+       delete []ws;    delete []a;
        return d;
 }
 //-----------------------------------------------------------------------------
@@ -436,7 +438,7 @@ void MGL_EXPORT mgl_data_sinfft(HMDT d, const char *dir)    // use DST-1
        if(!dir || *dir==0)     return;
        double *b = 0;
        if(mglNumThr<1) mgl_set_num_thr(0);     // manually set number of threads
-       void *wt=0, *ws[mglNumThr];
+       void *wt=0, **ws=new void*[mglNumThr];
        long nx=d->nx, ny=d->ny, nz=d->nz;
        long par[3]={nx,ny,nz}, i;
        if(strchr(dir,'x') && nx>1)
@@ -458,6 +460,7 @@ void MGL_EXPORT mgl_data_sinfft(HMDT d, const char *dir)    // use DST-1
                mglStartThreadT(mgl_sinz,nx*ny,d->a,b,wt,ws,par);
        }
        if(b)   {       mgl_fft_free(wt,ws,mglNumThr);  delete []b;     }
+       delete []ws;
 }
 //-----------------------------------------------------------------------------
 MGL_NO_EXPORT void* mgl_cosx(void *par)
@@ -550,7 +553,7 @@ void MGL_EXPORT mgl_data_cosfft(HMDT d, const char *dir)
        if(!dir || *dir==0)     return;
        double *b = 0;
        if(mglNumThr<1) mgl_set_num_thr(0);     // manually set number of threads
-       void *wt=0, *ws[mglNumThr];
+       void *wt=0, **ws=new void*[mglNumThr];
        long nx=d->nx, ny=d->ny, nz=d->nz;
        long par[3]={nx,ny,nz}, i;
        if(strchr(dir,'x') && nx>1)
@@ -572,6 +575,7 @@ void MGL_EXPORT mgl_data_cosfft(HMDT d, const char *dir)
                mglStartThreadT(mgl_cosz,nx*ny,d->a,b,wt,ws,par);
        }
        if(b)   {       mgl_fft_free(wt,ws,mglNumThr);  delete []b;     }
+       delete []ws;
 }
 //-----------------------------------------------------------------------------
 HMDT MGL_EXPORT mgl_transform_a(HCDT am, HCDT ph, const char *tr)
@@ -675,7 +679,7 @@ MGL_NO_EXPORT void* mgl_chnkx(void *par)
                gsl_dht_apply(dht,b,b+nx);
                for(j=0;j<nx;j++)       b[j] = imag(a[j+nx*i]);
                gsl_dht_apply(dht,b,b+2*nx);
-               for(j=0;j<nx;j++)       a[j+nx*i] = dual(b[j+nx],b[j+2*nx])*mm;
+               for(j=0;j<nx;j++)       a[j+nx*i] = dual(b[j+nx],b[j+2*nx])*mreal(mm);
        }
        return 0;
 }
@@ -695,7 +699,7 @@ MGL_NO_EXPORT void* mgl_chnky(void *par)
                gsl_dht_apply(dht,b,b+ny);
                for(j=0;j<ny;j++)       b[j] = imag(a[i+nx*(j+ny*k)]);
                gsl_dht_apply(dht,b,b+2*ny);
-               for(j=0;j<ny;j++)       a[i+nx*(j+ny*k)] = dual(b[j+ny],b[j+2*ny])*mm;
+               for(j=0;j<ny;j++)       a[i+nx*(j+ny*k)] = dual(b[j+ny],b[j+2*ny])*mreal(mm);
        }
        return 0;
 }
@@ -714,7 +718,7 @@ MGL_NO_EXPORT void* mgl_chnkz(void *par)
                gsl_dht_apply(dht,b,b+nz);
                for(j=0;j<nz;j++)       b[j] = imag(a[i+j*k]);
                gsl_dht_apply(dht,b,b+2*nz);
-               for(j=0;j<nz;j++)       a[i+j*k] = dual(b[j+nz],b[j+2*nz])*mm;
+               for(j=0;j<nz;j++)       a[i+j*k] = dual(b[j+nz],b[j+2*nz])*mreal(mm);
        }
        return 0;
 }
@@ -767,7 +771,7 @@ MGL_NO_EXPORT void* mgl_hnkx(void *par)
        {
                for(j=0;j<nx;j++)       b[j] = a[j+nx*i];
                gsl_dht_apply(dht,b,b+nx);
-               for(j=0;j<nx;j++)       a[j+nx*i] = b[j+nx]*mm;
+               for(j=0;j<nx;j++)       a[j+nx*i] = b[j+nx]*mreal(mm);
        }
        return 0;
 }
@@ -785,7 +789,7 @@ MGL_NO_EXPORT void* mgl_hnky(void *par)
                i = ii%nx;      k = ii/nx;
                for(j=0;j<ny;j++)       b[j] = a[i+nx*(j+ny*k)];
                gsl_dht_apply(dht,b,b+ny);
-               for(j=0;j<ny;j++)a[i+nx*(j+ny*k)] = b[j+ny]*mm;
+               for(j=0;j<ny;j++)a[i+nx*(j+ny*k)] = b[j+ny]*mreal(mm);
        }
        return 0;
 }
@@ -802,7 +806,7 @@ MGL_NO_EXPORT void* mgl_hnkz(void *par)
        {
                for(j=0;j<nz;j++)       b[j] = a[i+j*k];
                gsl_dht_apply(dht,b,b+nz);
-               for(j=0;j<nz;j++)       a[i+j*k] = b[j+nz]*mm;
+               for(j=0;j<nz;j++)       a[i+j*k] = b[j+nz]*mreal(mm);
        }
        return 0;
 }
index 76cafe27b9c38a3470b927acd917469759179dd2..3d1a9c48843797d52e37dbdfed17ec7d8ebd2cd7 100644 (file)
@@ -619,7 +619,7 @@ bool mglFont::read_data(const char *fname, float *ff, short *wdt, short *lnum,
        register long i,j,ch,retVal;\r
        fp = gzopen(fname,"r"); if(!fp) return false;   // false if no file\r
        // first string is comment (not used), second string have information\r
-       if(!gzgets(fp,str,256) || !gzgets(fp,str,256))\r
+       if(!gzgets(fp,str,256) || strncmp(str,"# font",6) || !gzgets(fp,str,256))\r
        {       gzclose(fp);    return false;   }\r
        retVal = sscanf(str, "%d%f%d", &n, ff, &s);\r
        //Check sscanf read all data  (3 items)\r
@@ -657,11 +657,11 @@ bool mglFont::read_main(const char *fname, unsigned &cur)
 \r
        fp = gzopen(fname,"r"); if(!fp) return false;   // this font must be in any case\r
        // first string is comment (not used), second string have information\r
-       if(!gzgets(fp,str,256) || !gzgets(fp,str,256))\r
+       if(!gzgets(fp,str,256) || strncmp(str,"# font",6) || !gzgets(fp,str,256))\r
        {       gzclose(fp);    return false;   }\r
        sscanf(str, "%u%f%u", &numg, fact, &s);\r
        fact[1] = fact[2] = fact[3] = fact[0];  // copy default factor for other font styles;\r
-       Buf = (short *)malloc(s*sizeof(short)); // prealocate buffer\r
+       Buf = (short *)malloc(s*sizeof(short)); // preallocate buffer\r
        memset(Buf,0,s*sizeof(short));\r
        if(!Buf)        {       gzclose(fp);    numg=0; return false;   }\r
        // now allocate memory for all fonts\r
index 9fb7a6cc7248a85ad86fbddeef16df3ad9e7f0a0..7d4c39163807cfe67a43cd1ee769a9e0b1671360 100644 (file)
@@ -176,7 +176,7 @@ HMDT MGL_EXPORT mgl_ode_solve(void (*func)(const mreal *x, mreal *dx, void *par)
        if(tmax<dt)     return res;     // nothing to do\r
        int nt = int(tmax/dt)+1;\r
        mgl_data_create(res,n,nt,1);\r
-       mreal x[n], k1[n], k2[n], k3[n], v[n], hh=dt/2;\r
+       mreal *x=new mreal[n], *k1=new mreal[n], *k2=new mreal[n], *k3=new mreal[n], *v=new mreal[n], hh=dt/2;\r
        register long i,k;\r
        // initial conditions\r
        for(i=0;i<n;i++)        x[i] = res->a[i] = x0[i];\r
@@ -192,6 +192,7 @@ HMDT MGL_EXPORT mgl_ode_solve(void (*func)(const mreal *x, mreal *dx, void *par)
                func(v,k2,par);\r
                for(i=0;i<n;i++)        res->a[i+n*k] = x[i] += (k1[i]+k2[i]+2*k3[i])*dt/6;\r
        }\r
+       delete []x;     delete []k1;    delete []k2;    delete []k3;    delete []v;\r
        return res;\r
 }\r
 //-----------------------------------------------------------------------------\r
@@ -419,7 +420,7 @@ struct mgl_qo3d_ham
 {\r
        dual *hxy, *huv, *hxv, *huy, *a;\r
        dual *hx, *hy, *hu, *hv, h0;\r
-       double *dmp;\r
+       mreal *dmp;\r
        mreal *r, dr, dk;\r
        mgl_ap *ra;\r
        dual (*ham)(mreal u, mreal x, mreal y, mreal z, mreal px, mreal py, mreal pz, void *par);\r
index f1ae1634943a07ee9b0a11f14bd7c2676e1b9289..7f6421974624addef185f76459ab65a54cbae8ab 100644 (file)
@@ -109,10 +109,10 @@ Select sample
 <p>You can use mouse with pressed left button for rotation; with pressed middle button for shift; mouse wheel for zoom in/out. Double click will restore original view.</p>
 <center>
 <canvas id="canvas" width="800" height="600"
-       style="border:1px solid #d3d3d3;" onmousemove="mglMouseMove()"
-       onmousedown="mglMouseDown()" onmouseup="mglMouseUp()"
-       onmouseout="mglMouseUp()" onmousewheel="mglMouseWheel()"
-       ondblclick="mglRestore()"></canvas>
+       style="border:1px solid #d3d3d3;" onmousemove="mglMouseMove(event)"
+       onmousedown="mglMouseDown(event)" onmouseup="mglMouseUp(event)"
+       onmouseout="mglMouseUp(event)" onmousewheel="mglMouseWheel(event)"
+       ondblclick="mglRestore(event)"></canvas>
 </center>
 
 <p id="time"></p>
index 2ea0008acdee6551aa1d50c41d904ff846c97e1c..0ae9daf9abd6dd673622cc5a078cc5d439cb8de5 100644 (file)
@@ -52,17 +52,17 @@ var mglMouseUp = function()
 {      obj.button = 0; obj.good = 0;
        ctx.clearRect(0,0,obj.width,obj.height);
        mgl_draw_good(obj, ctx);        }
-var mglMouseDown = function()
+var mglMouseDown = function(event)
 {
        obj.good = 1;
-       obj.mouseX = window.event.clientX;
-       obj.mouseY = window.event.clientY;
-       obj.button = window.event.button+1;
+       obj.mouseX = event.clientX;
+       obj.mouseY = event.clientY;
+       obj.button = event.button+1;
 }
-var mglMouseMove = function()
+var mglMouseMove = function(event)
 {
-       var x = window.event.clientX-obj.mouseX;
-       var y = window.event.clientY-obj.mouseY;
+       var x = event.clientX-obj.mouseX;
+       var y = event.clientY-obj.mouseY;
        switch(obj.button)
        {
        case 1: // rotate
@@ -80,16 +80,10 @@ var mglMouseMove = function()
                mgl_draw(obj, ctx);
        }
 }
-var mglMouseWheel = function()
+var mglMouseWheel = function(event)
 {
-       var e = window.event;
-       var d = e.wheelDelta? e.wheelDelta:e.detail*(-120);
-
-/*     var x = window.event.clientX;
-       var y = obj.height-window.event.clientY;
-       mgl_shift_down(obj, -y/obj.height);
-       mgl_shift_right(obj, x/obj.width);*/
-
+//     var e = window.event;
+       var d = event.wheelDelta? event.wheelDelta:event.detail*(-120);
        mgl_zoom_in(obj, Math.pow(1.002,d));
        mgl_draw(obj, ctx);
 }
index d65b8a34a41098d69b10e4bc9db0a6cc5e578a31..c5e8bc1ee9de4bee8a53254f9c0c70c3eb7a8b55 100644 (file)
--- a/todo.txt
+++ b/todo.txt
@@ -34,6 +34,7 @@ A. Paper about MathGL!!!
 
 15. Check samples: colorbar
 16. Add samples about data handling (data1, data2, data2)
+17. Add "Triangulation sample"
 
 20. JS rotation in Firefox
 23. check if all "value" options are described