From: Dimitrios Eftaxiopoulos Date: Mon, 20 May 2013 07:40:00 +0000 (+0300) Subject: Imported Upstream version 2.1.3.1 X-Git-Tag: archive/raspbian/2.5-2+rpi1^2~26^2~18 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=e3751f9409a1b9552ddae45c3cee4c57e4f81bab;p=mathgl.git Imported Upstream version 2.1.3.1 --- diff --git a/ChangeLog.txt b/ChangeLog.txt index 2f14644..9d2da36 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -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 diff --git a/examples/fltk_example.cpp b/examples/fltk_example.cpp index 28abdda..685a10e 100644 --- a/examples/fltk_example.cpp +++ b/examples/fltk_example.cpp @@ -31,8 +31,7 @@ int sample_2(mglGraph *gr); int sample_3(mglGraph *gr); int sample_d(mglGraph *gr); //----------------------------------------------------------------------------- -//#include -mglPoint pnt; // some global variable for changable data +mglPoint pnt; // some global variable for changeable data void *mgl_fltk_tmp(void *) { mgl_fltk_run(); return 0; } //#define PTHREAD_SAMPLE //----------------------------------------------------------------------------- diff --git a/examples/full_test.cpp b/examples/full_test.cpp index d88befc..c050a0b 100644 --- a/examples/full_test.cpp +++ b/examples/full_test.cpp @@ -63,8 +63,11 @@ void mgls_prepare3v(mglData *ex, mglData *ey, mglData *ez); //----------------------------------------------------------------------------- void save(mglGraph *gr,const char *name,const char *suf); void smgl_stfa(mglGraph *gr); // STFA sample +void smgl_text(mglGraph *gr); // text drawing void test(mglGraph *gr) { + smgl_text(gr); return; + mglParse par; par.AllowSetSize(true); setlocale(LC_CTYPE, ""); @@ -200,8 +203,13 @@ void save(mglGraph *gr,const char *name,const char *suf="") snprintf(buf,128,"%s%s.jsonz",name,suf); gr->WriteJSON(buf); break; default:// PNG (no alpha) +#if MGL_HAVE_PNG snprintf(buf,128,"%s%s.png",name,suf); gr->WritePNG(buf,0,false); break; +#else + snprintf(buf,128,"%s%s.bmp",name,suf); + gr->WriteBMP(buf); break; +#endif } } //----------------------------------------------------------------------------- diff --git a/examples/qt_example.cpp b/examples/qt_example.cpp index 2dfbb75..c6f0ef5 100644 --- a/examples/qt_example.cpp +++ b/examples/qt_example.cpp @@ -35,7 +35,7 @@ int sample_d(mglGraph *gr); #ifdef PTHREAD_SAMPLE #include #endif -mglPoint pnt; // some global variable for changable data +mglPoint pnt; // some global variable for changeable data void *mgl_qt_tmp(void *); //----------------------------------------------------------------------------- class Foo : public mglDraw diff --git a/examples/samples.cpp b/examples/samples.cpp index ab3527b..2c64bb6 100644 --- a/examples/samples.cpp +++ b/examples/samples.cpp @@ -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"); diff --git a/include/mgl2/mgl.h b/include/mgl2/mgl.h index e7c8111..713823f 100644 --- a/include/mgl2/mgl.h +++ b/include/mgl2/mgl.h @@ -415,7 +415,7 @@ public: /// Calculate 3D coordinate {x,y,z} for screen point {xs,ys} inline mglPoint CalcXYZ(int xs, int ys) { - double x,y,z; + mreal x,y,z; mgl_calc_xyz(gr,xs,ys,&x,&y,&z); return mglPoint(x,y,z); } diff --git a/include/mgl2/wnd.h b/include/mgl2/wnd.h index 0ab3689..dc0d907 100644 --- a/include/mgl2/wnd.h +++ b/include/mgl2/wnd.h @@ -89,7 +89,7 @@ public: inline void Setup(bool clf_upd=true, bool showpos=false) { mgl_setup_window(gr, clf_upd, showpos); } inline mglPoint LastMousePos() ///< Last mouse position - { double x,y,z; mgl_get_last_mouse_pos(gr,&x,&y,&z); return mglPoint(x,y,z); } + { mreal x,y,z; mgl_get_last_mouse_pos(gr,&x,&y,&z); return mglPoint(x,y,z); } }; //----------------------------------------------------------------------------- #endif diff --git a/src/data_new.cpp b/src/data_new.cpp index 439338c..c552819 100644 --- a/src/data_new.cpp +++ b/src/data_new.cpp @@ -875,7 +875,7 @@ mreal MGL_EXPORT mgl_find_root(mreal (*func)(mreal x, void *par), mreal x0, void } //----------------------------------------------------------------------------- struct MGL_NO_EXPORT mglFuncV { mglFormula *eq; char var; }; -mreal MGL_NO_EXPORT mgl_funcv(double v, void *par) +mreal MGL_NO_EXPORT mgl_funcv(mreal v, void *par) { mglFuncV *f = (mglFuncV *)par; mreal var[MGL_VS]; memset(var,0,('z'-'a')*sizeof(mreal)); diff --git a/src/export.cpp b/src/export.cpp index 8f165d4..69a87ad 100644 --- a/src/export.cpp +++ b/src/export.cpp @@ -20,6 +20,12 @@ #include #include +#if defined(WIN32) || defined(_MSC_VER) || defined(__BORLANDC__) +#include +#else +#include +#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); diff --git a/src/fft.cpp b/src/fft.cpp index 80fe46b..486154d 100644 --- a/src/fft.cpp +++ b/src/fft.cpp @@ -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;ia[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;ia[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;ia[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;ja[i] = x0[i]; @@ -192,6 +192,7 @@ HMDT MGL_EXPORT mgl_ode_solve(void (*func)(const mreal *x, mreal *dx, void *par) func(v,k2,par); for(i=0;ia[i+n*k] = x[i] += (k1[i]+k2[i]+2*k3[i])*dt/6; } + delete []x; delete []k1; delete []k2; delete []k3; delete []v; return res; } //----------------------------------------------------------------------------- @@ -419,7 +420,7 @@ struct mgl_qo3d_ham { dual *hxy, *huv, *hxv, *huy, *a; dual *hx, *hy, *hu, *hv, h0; - double *dmp; + mreal *dmp; mreal *r, dr, dk; mgl_ap *ra; dual (*ham)(mreal u, mreal x, mreal y, mreal z, mreal px, mreal py, mreal pz, void *par); diff --git a/texinfo/json.html b/texinfo/json.html index f1ae163..7f64219 100644 --- a/texinfo/json.html +++ b/texinfo/json.html @@ -109,10 +109,10 @@ Select sample

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.

+ style="border:1px solid #d3d3d3;" onmousemove="mglMouseMove(event)" + onmousedown="mglMouseDown(event)" onmouseup="mglMouseUp(event)" + onmouseout="mglMouseUp(event)" onmousewheel="mglMouseWheel(event)" + ondblclick="mglRestore(event)">

diff --git a/texinfo/mathgl.js b/texinfo/mathgl.js index 2ea0008..0ae9daf 100644 --- a/texinfo/mathgl.js +++ b/texinfo/mathgl.js @@ -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); } diff --git a/todo.txt b/todo.txt index d65b8a3..c5e8bc1 100644 --- 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