From b0bd12ff536f8289c8e17a0dc5ed7027fcc187fb Mon Sep 17 00:00:00 2001 From: Dimitrios Eftaxiopoulos Date: Tue, 13 Mar 2012 14:41:04 +0200 Subject: [PATCH] Imported Upstream version 2~rc2+svn362 --- include/mgl/base.h | 28 +++++----- include/mgl/canvas_cf.h | 1 - include/mgl/fltk.h | 4 +- include/mgl/mgl.h | 5 +- include/mgl/qt.h | 1 - src/Makefile.am | 19 ++++--- src/axis.cpp | 30 +++++------ src/canvas.cpp | 18 +++---- src/cont.cpp | 111 ++++++++++++++++++++-------------------- src/data.cpp | 6 +-- src/data_io.cpp | 1 - src/eval.cpp | 9 ++++ src/export.cpp | 12 ++--- src/export_2d.cpp | 14 ++--- src/export_3d.cpp | 65 ++++++++++++++--------- src/font.cpp | 12 ++--- src/opengl.cpp | 1 - src/parser.cpp | 2 +- src/pixel.cpp | 39 ++++++++------ src/plot.cpp | 2 +- src/prim.cpp | 2 +- src/vect.cpp | 3 ++ todo.txt | 2 +- widgets/fltk.cpp | 14 ++--- widgets/qt.cpp | 12 ----- widgets/window.cpp | 3 +- 26 files changed, 215 insertions(+), 201 deletions(-) diff --git a/include/mgl/base.h b/include/mgl/base.h index 6104428..1aaef53 100644 --- a/include/mgl/base.h +++ b/include/mgl/base.h @@ -115,25 +115,21 @@ struct mglPnt mglPnt() { xx=yy=zz=x=y=z=c=t=u=v=w=r=g=b=a=0; } }; inline mglPnt operator+(const mglPnt &a, const mglPnt &b) -{ mglPnt c; - c.x=a.x+b.x; c.y=a.y+b.y; c.z=a.z+b.z; c.c=a.c+b.c; - c.t=a.t+b.t; c.u=a.u+b.u; c.v=a.v+b.v; c.w=a.w+b.w; - c.r=a.r+b.r; c.g=a.g+b.g; c.b=a.b+b.b; c.a=a.a+b.a; return c; } +{ mglPnt c=a; + c.x+=b.x; c.y+=b.y; c.z+=b.z; c.u+=b.u; c.v+=b.v; c.w+=b.w; + c.r+=b.r; c.g+=b.g; c.b+=b.b; c.a+=b.a; return c; } inline mglPnt operator-(const mglPnt &a, const mglPnt &b) -{ mglPnt c; - c.x=a.x-b.x; c.y=a.y-b.y; c.z=a.z-b.z; c.c=a.c-b.c; - c.t=a.t-b.t; c.u=a.u-b.u; c.v=a.v-b.v; c.w=a.w-b.w; - c.r=a.r-b.r; c.g=a.g-b.g; c.b=a.b-b.b; c.a=a.a-b.a; return c; } +{ mglPnt c=a; + c.x-=b.x; c.y-=b.y; c.z-=b.z; c.u-=b.u; c.v-=b.v; c.w-=b.w; + c.r-=b.r; c.g-=b.g; c.b-=b.b; c.a-=b.a; return c; } inline mglPnt operator*(const mglPnt &a, float b) -{ mglPnt c; - c.x=a.x*b; c.y=a.y*b; c.z=a.z*b; c.c=a.c*b; - c.t=a.t*b; c.u=a.u*b; c.v=a.v*b; c.w=a.w*b; - c.r=a.r*b; c.g=a.g*b; c.b=a.b*b; c.a=a.a*b; return c; } +{ mglPnt c=a; + c.x*=b; c.y*=b; c.z*=b; c.u*=b; c.v*=b; c.w*=b; + c.r*=b; c.g*=b; c.b*=b; c.a*=b; return c; } inline mglPnt operator*(float b, const mglPnt &a) -{ mglPnt c; - c.x=a.x*b; c.y=a.y*b; c.z=a.z*b; c.c=a.c*b; - c.t=a.t*b; c.u=a.u*b; c.v=a.v*b; c.w=a.w*b; - c.r=a.r*b; c.g=a.g*b; c.b=a.b*b; c.a=a.a*b; return c; } +{ mglPnt c=a; + c.x*=b; c.y*=b; c.z*=b; c.u*=b; c.v*=b; c.w*=b; + c.r*=b; c.g*=b; c.b*=b; c.a*=b; return c; } //----------------------------------------------------------------------------- struct mglTexture { diff --git a/include/mgl/canvas_cf.h b/include/mgl/canvas_cf.h index 6f2a6db..e268075 100644 --- a/include/mgl/canvas_cf.h +++ b/include/mgl/canvas_cf.h @@ -83,7 +83,6 @@ void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png); void mgl_write_stl(HMGL gr, const char *fname,const char *descr); void mgl_write_off(HMGL gr, const char *fname,const char *descr, int colored); void mgl_write_xyz(HMGL gr, const char *fname,const char *descr); -void mgl_write_wrl(HMGL gr, const char *fname,const char *descr); void mgl_write_x3d(HMGL gr, const char *fname,const char *descr); void mgl_write_wgl(HMGL gr, const char *fname,const char *descr); void mgl_write_idtf(HMGL gr, const char *fname,const char *descr); diff --git a/include/mgl/fltk.h b/include/mgl/fltk.h index fb13a71..84441f7 100644 --- a/include/mgl/fltk.h +++ b/include/mgl/fltk.h @@ -53,8 +53,8 @@ public: inline void set_flag(int f) { flag = f; } /// Set flags for handling mouse void set_graph(mglCanvas *gr); ///< Set grapher object - inline void set_graph(mglGraph *gr) - { set_graph(dynamic_cast(gr->Self())); } + inline void set_graph(mglGraph *Gr) + { set_graph(dynamic_cast(Gr->Self())); } /// Get pointer to grapher inline HMGL get_graph() { return gr; } /// Set drawing functions and its parameter diff --git a/include/mgl/mgl.h b/include/mgl/mgl.h index b6daa42..847ac52 100644 --- a/include/mgl/mgl.h +++ b/include/mgl/mgl.h @@ -304,10 +304,7 @@ public: /// Write the frame in file using OFF format inline void WriteOFF(const char *fname,const char *descr="", bool colored=false) { mgl_write_off(gr, fname, descr,colored); } - /// Write the frame in file using STL format (faces only) - inline void WriteWRL(const char *fname,const char *descr="") - { mgl_write_wrl(gr, fname, descr); } - /// Write the frame in file using OFF format + /// Write the frame in file using X3D format inline void WriteX3D(const char *fname,const char *descr="") { mgl_write_x3d(gr, fname, descr); } /// Write the frame in file using IDTF format diff --git a/include/mgl/qt.h b/include/mgl/qt.h index b54d574..ceb976a 100644 --- a/include/mgl/qt.h +++ b/include/mgl/qt.h @@ -107,7 +107,6 @@ public slots: void exportOBJ(QString fname=""); ///< export to OBJ file void exportSTL(QString fname=""); ///< export to STL file void exportOFF(QString fname=""); ///< export to OFF file - void exportWRL(QString fname=""); ///< export to WRL file void exportX3D(QString fname=""); ///< export to XYZ file void exportIDTF(QString fname=""); ///< export to IDTF file void setMGLFont(QString path); ///< restore/load font for graphics diff --git a/src/Makefile.am b/src/Makefile.am index 8a75374..f64eeda 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -3,7 +3,7 @@ AM_CXXFLAGS += -I$(top_srcdir)/include -I$(top_builddir)/include lib_LTLIBRARIES = libmgl.la -libmgl_la_LIBADD = $(PNG_LIBS) $(GL_LIBS) $(LOPENMP) +libmgl_la_LIBADD = $(PNG_LIBS) $(GL_LIBS) libmgl_la_LDFLAGS = -no-undefined -version-info $(MGL_CURRENT):$(MGL_REVISION):$(MGL_AGE) libmgl_la_CXXFLAGS = \ @@ -35,10 +35,13 @@ libmgl_la_LIBADD += $(U3D_LIBS) endif libmgl_la_SOURCES = \ -axis.cpp base_cf.cpp base.cpp canvas_cf.cpp canvas.cpp \ -cont.cpp crust.cpp data.cpp data_io.cpp data_new.cpp \ -data_op.cpp data_png.cpp def_font.cpp export_2d.cpp eval.cpp \ -evalp.cpp exec.cpp export.cpp fit.cpp font.cpp \ -opengl.cpp other.cpp parser.cpp tex_table.cpp pde.cpp \ -pixel.cpp plot.cpp prim.cpp surf.cpp vect.cpp \ -volume.cpp export_3d.cpp +addon.cpp axis.cpp base_cf.cpp base.cpp canvas_cf.cpp canvas.cpp cont.cpp crust.cpp \ +data.cpp data_io.cpp data_new.cpp data_op.cpp data_png.cpp def_font.cpp export_2d.cpp \ +export_3d.cpp eval.cpp evalp.cpp exec.cpp export.cpp fit.cpp font.cpp other.cpp evalc.cpp \ +parser.cpp pde.cpp pixel.cpp plot.cpp prim.cpp surf.cpp tex_table.cpp vect.cpp volume.cpp \ +opengl.cpp + +#if USE_OPENGL +#libmgl_la_SOURCES += opengl.cpp +#libmgl_la_LIBADD += +#endif \ No newline at end of file diff --git a/src/axis.cpp b/src/axis.cpp index 4e783a8..a0e2d82 100644 --- a/src/axis.cpp +++ b/src/axis.cpp @@ -35,8 +35,8 @@ inline struct tm* mgl_localtime_r (const time_t *clock, struct tm *result) //----------------------------------------------------------------------------- long mgl_have_color(const char *stl) { - register long i,j; - if(stl) for(i=j=0;stl[i];i++) if(strchr(MGL_COLORS,stl[i])) j++; + register long i,j=0; + if(stl) for(i=0;stl[i];i++) if(strchr(MGL_COLORS,stl[i])) j++; return j; } //----------------------------------------------------------------------------- @@ -273,7 +273,7 @@ void mglCanvas::SetTickTime(char dir, float d, const char *t) { v1 = aa.v1; v0 = v0 - aa.dv*floor((v0-aa.v2)/aa.dv+1e-3); } if(v0+aa.dv!=v0 && v1+aa.dv!=v1) for(v=v0;v<=v1;v+=aa.dv) { - time_t tt = v; tm tp; mgl_localtime_r(&tt,&tp); + tt = v; tm tp; mgl_localtime_r(&tt,&tp); wcsftime(buf,64,aa.t,&tp); aa.AddLabel(buf,v); } } @@ -561,10 +561,10 @@ void mglCanvas::DrawLabels(mglAxis &aa) if(c>aa.v1 && c1 && col[i-1]=='{') { clr[1]=col[i]; clr[2]=col[i+1]; break; } - else { clr[0]=col[i]; clr[1]=0; break; } + if(i>1 && col[i-1]=='{') { color[1]=col[i]; color[2]=col[i+1]; break; } + else { color[0]=col[i]; color[1]=0; break; } } - mgl_facex(this, o[im].x, Min.y, Min.z, Max.y-Min.y, Max.z-Min.z, clr,0,0); - mgl_facey(this, Min.x, o[im].y, Min.z, Max.x-Min.x, Max.z-Min.z, clr,0,0); - mgl_facez(this, Min.x, Min.y, o[im].z, Max.x-Min.x, Max.y-Min.y, clr,0,0); + mgl_facex(this, oo[im].x, Min.y, Min.z, Max.y-Min.y, Max.z-Min.z, color,0,0); + mgl_facey(this, Min.x, oo[im].y, Min.z, Max.x-Min.x, Max.z-Min.z, color,0,0); + mgl_facez(this, Min.x, Min.y, oo[im].z, Max.x-Min.x, Max.y-Min.y, color,0,0); } } Org=o; TickLen=tl; diff --git a/src/canvas.cpp b/src/canvas.cpp index b5121aa..28c0e45 100644 --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -339,18 +339,18 @@ float mglCanvas::text_plot(long p,const wchar_t *text,const char *font,float siz RotateN(ftet,0,0,1); if(strchr(font,'@')) // draw box around text { - long k1,k2,k3,k4; mglPnt pt; mglPoint p; + long k1,k2,k3,k4; mglPnt pt; mglPoint pp; w = fnt->Width(text,font); h = fnt->Height(font); int align; mglGetStyle(font,0,&align); align = align&3; float d=-w*align/2.-h*0.2; w+=h*0.4; - pt = q; p = mglPoint(d,-h*0.4); PostScale(p); - pt.x=pt.xx=p.x; pt.y=pt.yy=p.y; MGL_PUSH(Pnt,pt,mutexPnt); k1=Pnt.size()-1; - pt = q; p = mglPoint(w+d,-h*0.4); PostScale(p); - pt.x=pt.xx=p.x; pt.y=pt.yy=p.y; MGL_PUSH(Pnt,pt,mutexPnt); k2=Pnt.size()-1; - pt = q; p = mglPoint(d,h*1.2); PostScale(p); - pt.x=pt.xx=p.x; pt.y=pt.yy=p.y; MGL_PUSH(Pnt,pt,mutexPnt); k3=Pnt.size()-1; - pt = q; p = mglPoint(w+d,h*1.2); PostScale(p); - pt.x=pt.xx=p.x; pt.y=pt.yy=p.y; MGL_PUSH(Pnt,pt,mutexPnt); k4=Pnt.size()-1; + pt = q; pp = mglPoint(d,-h*0.4); PostScale(pp); + pt.x=pt.xx=pp.x; pt.y=pt.yy=pp.y; MGL_PUSH(Pnt,pt,mutexPnt); k1=Pnt.size()-1; + pt = q; pp = mglPoint(w+d,-h*0.4); PostScale(pp); + pt.x=pt.xx=pp.x; pt.y=pt.yy=pp.y; MGL_PUSH(Pnt,pt,mutexPnt); k2=Pnt.size()-1; + pt = q; pp = mglPoint(d,h*1.2); PostScale(pp); + pt.x=pt.xx=pp.x; pt.y=pt.yy=pp.y; MGL_PUSH(Pnt,pt,mutexPnt); k3=Pnt.size()-1; + pt = q; pp = mglPoint(w+d,h*1.2); PostScale(pp); + pt.x=pt.xx=pp.x; pt.y=pt.yy=pp.y; MGL_PUSH(Pnt,pt,mutexPnt); k4=Pnt.size()-1; line_plot(k1,k2); line_plot(k1,k3); line_plot(k4,k2); line_plot(k4,k3); } fsize *= fnt->Puts(text,font,col)/2; diff --git a/src/cont.cpp b/src/cont.cpp index d9ce5fe..0835732 100644 --- a/src/cont.cpp +++ b/src/cont.cpp @@ -207,7 +207,7 @@ struct mglSegment mglSegment(mglPoint q1,mglPoint q2) {p1=q1;p2=q2;next=prev=-1;} }; // function for connecting arbitrary line segments -void mgl_connect(HMGL gr, float val, HCDT a, HCDT x, HCDT y, HCDT z, float c, int text,long ak) +/*void mgl_connect(HMGL gr, float val, HCDT a, HCDT x, HCDT y, HCDT z, float c, int text,long ak) { long n=a->GetNx(), m=a->GetNy(); if(n<2 || m<2 || x->GetNx()*x->GetNy()!=n*m || y->GetNx()*y->GetNy()!=n*m || z->GetNx()*z->GetNy()!=n*m) @@ -250,9 +250,9 @@ void mgl_connect(HMGL gr, float val, HCDT a, HCDT x, HCDT y, HCDT z, float c, in if(s2.next<0 && s1.p1==s2.p2) { s1.prev = j; s2.next=i; continue; } // if(s2.prev<0 && s1.p2==s2.p1) // { s1.next = j; s2.prev=i; continue; } + } } -} -} +}*/ //----------------------------------------------------------------------------- // NOTE! returned must be deleted!!! struct mglPnt2 { float x,y; mglPnt2(float xx=0,float yy=0) {x=xx;y=yy;} }; @@ -650,25 +650,25 @@ void mgl_contf(HMGL gr, HCDT z, const char *sch, const char *opt) //----------------------------------------------------------------------------- void mgl_contf_xy_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *x, uintptr_t *y, uintptr_t *a, const char *sch, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_contf_xy_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(a), s, o); -delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_contf_xy_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(a), s, o); + delete []o; delete []s; } //----------------------------------------------------------------------------- void mgl_contf_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *a, const char *sch, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_contf_val(_GR_, _DA_(v), _DA_(a), s, o); delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_contf_val(_GR_, _DA_(v), _DA_(a), s, o); delete []o; delete []s; } //----------------------------------------------------------------------------- void mgl_contf_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *a, const char *sch, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_contf_xy(_GR_, _DA_(x), _DA_(y), _DA_(a), s, o); -delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_contf_xy(_GR_, _DA_(x), _DA_(y), _DA_(a), s, o); + delete []o; delete []s; } //----------------------------------------------------------------------------- void mgl_contf_(uintptr_t *gr, uintptr_t *a, const char *sch, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_contf(_GR_, _DA_(a), s, o); delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_contf(_GR_, _DA_(a), s, o); delete []o; delete []s; } //----------------------------------------------------------------------------- // // ContD series @@ -676,8 +676,8 @@ mgl_contf(_GR_, _DA_(a), s, o); delete []o; delete []s; } //----------------------------------------------------------------------------- int mgl_get_ncol(const char *sch, char *res) { - register long i,j; - if(sch) for(i=j=0;sch[i]&&sch[i]!=':';i++) if(strchr(MGL_COLORS,sch[i])) + register long i,j=0; + if(sch) for(i=0;sch[i]&&sch[i]!=':';i++) if(strchr(MGL_COLORS,sch[i])) { if(res) res[j]=sch[i]; j++; } return j?j:strlen(MGL_DEF_PAL); } @@ -748,24 +748,24 @@ void mgl_contd(HMGL gr, HCDT z, const char *sch, const char *opt) //----------------------------------------------------------------------------- void mgl_contd_xy_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *x, uintptr_t *y, uintptr_t *a, const char *sch, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_contd_xy_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(a), s, o); -delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_contd_xy_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(a), s, o); + delete []o; delete []s; } //----------------------------------------------------------------------------- void mgl_contd_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *a, const char *sch, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_contd_val(_GR_, _DA_(v), _DA_(a), s, o); delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_contd_val(_GR_, _DA_(v), _DA_(a), s, o); delete []o; delete []s; } //----------------------------------------------------------------------------- void mgl_contd_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *a, const char *sch, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_contd_xy(_GR_, _DA_(x), _DA_(y), _DA_(a), s, o); delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_contd_xy(_GR_, _DA_(x), _DA_(y), _DA_(a), s, o); delete []o; delete []s; } //----------------------------------------------------------------------------- void mgl_contd_(uintptr_t *gr, uintptr_t *a, const char *sch, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_contd(_GR_, _DA_(a), s, o); delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_contd(_GR_, _DA_(a), s, o); delete []o; delete []s; } //----------------------------------------------------------------------------- // // ContV series @@ -869,24 +869,24 @@ void mgl_contv(HMGL gr, HCDT z, const char *sch, const char *opt) //----------------------------------------------------------------------------- void mgl_contv_xy_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *x, uintptr_t *y, uintptr_t *a, const char *sch, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_contv_xy_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(a), s, o); -delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_contv_xy_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(a), s, o); + delete []o; delete []s; } //----------------------------------------------------------------------------- void mgl_contv_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *a, const char *sch, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_contv_val(_GR_, _DA_(v), _DA_(a), s, o); delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_contv_val(_GR_, _DA_(v), _DA_(a), s, o); delete []o; delete []s; } //----------------------------------------------------------------------------- void mgl_contv_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *a, const char *sch, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_contv_xy(_GR_, _DA_(x), _DA_(y), _DA_(a), s, o); delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_contv_xy(_GR_, _DA_(x), _DA_(y), _DA_(a), s, o); delete []o; delete []s; } //----------------------------------------------------------------------------- void mgl_contv_(uintptr_t *gr, uintptr_t *a, const char *sch, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_contv(_GR_, _DA_(a), s, o); delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_contv(_GR_, _DA_(a), s, o); delete []o; delete []s; } //----------------------------------------------------------------------------- // // Cont3 series @@ -1030,27 +1030,27 @@ void mgl_cont3(HMGL gr, HCDT a, const char *sch, float sVal, const char *opt) mgl_cont3_val(gr,&v,a,sch,sVal,0); } //----------------------------------------------------------------------------- -void mgl_cont3_xyz_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo) +void mgl_cont3_xyz_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_cont3_xyz_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o); -delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_cont3_xyz_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o); + delete []o; delete []s; } //----------------------------------------------------------------------------- -void mgl_cont3_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo) +void mgl_cont3_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_cont3_val(_GR_, _DA_(v), _DA_(a), s, *sVal, o); delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_cont3_val(_GR_, _DA_(v), _DA_(a), s, *sVal, o); delete []o; delete []s; } //----------------------------------------------------------------------------- -void mgl_cont3_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo) +void mgl_cont3_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_cont3_xyz(_GR_, _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o); -delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_cont3_xyz(_GR_, _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o); + delete []o; delete []s; } //----------------------------------------------------------------------------- -void mgl_cont3_(uintptr_t *gr, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo) +void mgl_cont3_(uintptr_t *gr, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; -char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; -mgl_cont3(_GR_, _DA_(a), s, *sVal, o); delete []o; delete []s; } + char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; + mgl_cont3(_GR_, _DA_(a), s, *sVal, o); delete []o; delete []s; } //----------------------------------------------------------------------------- // // Dens3 series @@ -1063,6 +1063,7 @@ void mgl_dens3_xyz(HMGL gr, HCDT x, HCDT y, HCDT z, HCDT a, const char *sch, flo bool both = x->GetNx()*x->GetNy()*x->GetNz()==n*m*l && y->GetNx()*y->GetNy()*y->GetNz()==n*m*l && z->GetNx()*z->GetNy()*z->GetNz()==n*m*l; if(!(both || (x->GetNx()==n && y->GetNx()==m && z->GetNx()==l))) { gr->SetWarn(mglWarnDim,"Dens3"); return; } + gr->SaveState(opt); static int cgid=1; gr->StartGroup("Dens3",cgid++); char dir='y'; if(sch && strchr(sch,'x')) dir='x'; @@ -1091,7 +1092,7 @@ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; mgl_dens3_xyz(_GR_, _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o); delete []o; delete []s; } //----------------------------------------------------------------------------- -void mgl_dens3_(uintptr_t *gr, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo) +void mgl_dens3_(uintptr_t *gr, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; mgl_dens3(_GR_, _DA_(a), s, *sVal, o); delete []o; delete []s; } @@ -1130,13 +1131,13 @@ void mgl_grid3(HMGL gr, HCDT a, const char *sch, float sVal, const char *opt) mgl_grid3_xyz(gr,&x,&y,&z,a,sch,sVal,0); } //----------------------------------------------------------------------------- -void mgl_grid3_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo) +void mgl_grid3_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; mgl_grid3_xyz(_GR_, _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o); delete []o; delete []s; } //----------------------------------------------------------------------------- -void mgl_grid3_(uintptr_t *gr, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo) +void mgl_grid3_(uintptr_t *gr, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; mgl_grid3(_GR_, _DA_(a), s, *sVal, o); delete []o; delete []s; } @@ -1199,25 +1200,25 @@ void mgl_contf3(HMGL gr, HCDT a, const char *sch, float sVal, const char *opt) mgl_contf3_val(gr,&v,a,sch,sVal,0); } //----------------------------------------------------------------------------- -void mgl_contf3_xyz_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo) +void mgl_contf3_xyz_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; mgl_contf3_xyz_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o); delete []o; delete []s; } //----------------------------------------------------------------------------- -void mgl_contf3_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo) +void mgl_contf3_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; mgl_contf3_val(_GR_, _DA_(v), _DA_(a), s, *sVal, o); delete []o; delete []s; } //----------------------------------------------------------------------------- -void mgl_contf3_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo) +void mgl_contf3_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; mgl_contf3_xyz(_GR_, _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o); delete []o; delete []s; } //----------------------------------------------------------------------------- -void mgl_contf3_(uintptr_t *gr, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo) +void mgl_contf3_(uintptr_t *gr, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; mgl_contf3(_GR_, _DA_(a), s, *sVal, o); @@ -1479,4 +1480,4 @@ void mgl_torus_(uintptr_t *gr, uintptr_t *r, uintptr_t *z, const char *pen, cons { char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0; char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0; mgl_torus(_GR_, _DA_(r), _DA_(z), s, o); delete []o; delete []s; } -//----------------------------------------------------------------------------- \ No newline at end of file +//----------------------------------------------------------------------------- diff --git a/src/data.cpp b/src/data.cpp index fa1dd40..2c673b5 100644 --- a/src/data.cpp +++ b/src/data.cpp @@ -574,7 +574,7 @@ float mgl_data_linear(HCDT d, float x,float y,float z) const mglData *dd=dynamic_cast(d); if(dd) { - long nx=dd->nx, ny=dd->ny, nz=dd->nz, d=ny>1?nx:0; + long nx=dd->nx, ny=dd->ny, nz=dd->nz, dn=ny>1?nx:0; kx = kx=0 ? kx:0; ky = ky=0 ? ky:0; kz = kz=0 ? kz:0; @@ -583,8 +583,8 @@ float mgl_data_linear(HCDT d, float x,float y,float z) z -= kz; if(nz==1) z=0; const mreal *aa=dd->a+kx+nx*(ky+ny*kz), *bb = aa+(nz>1?nx*ny:0); - b0 = aa[0]*(1-x-y+x*y) + x*(1-y)*aa[1] + y*(1-x)*aa[d] + x*y*aa[1+d]; - b1 = bb[0]*(1-x-y+x*y) + x*(1-y)*bb[1] + y*(1-x)*bb[d] + x*y*bb[1+d]; + b0 = aa[0]*(1-x-y+x*y) + x*(1-y)*aa[1] + y*(1-x)*aa[dn] + x*y*aa[1+dn]; + b1 = bb[0]*(1-x-y+x*y) + x*(1-y)*bb[1] + y*(1-x)*bb[dn] + x*y*bb[1+dn]; } else { diff --git a/src/data_io.cpp b/src/data_io.cpp index 58ad464..1e6d55e 100644 --- a/src/data_io.cpp +++ b/src/data_io.cpp @@ -732,7 +732,6 @@ void *mgl_modify(void *par) } void mgl_data_modify(HMDT d, const char *eq,long dim) { -mglNumThr=1; long nx=d->nx, ny=d->ny, nz=d->nz, par[3]={nx,ny,nz}; mglFormula f(eq); if(dim<0) dim=0; diff --git a/src/eval.cpp b/src/eval.cpp index 1e1a422..2f5964f 100644 --- a/src/eval.cpp +++ b/src/eval.cpp @@ -503,6 +503,13 @@ typedef double (*func_2)(double, double); // evaluation of embedded (included) expressions mreal mglFormula::CalcIn(const mreal *a1) const { + float z2[22] = {3,3,3,3,0,3,3,0,0,0,0,0,NAN,0 +#ifndef NO_GSL + ,3,NAN, 3,NAN, 0,0,3,1 +#else + ,0,0,0,0,0,0,0,0 +#endif + }; func_2 f2[22] = {clt,cgt,ceq,cor,cand,add,sub,mul,div,ipw,pow,fmod,llg,arg #ifndef NO_GSL ,gsl_sf_bessel_Jnu,gsl_sf_bessel_Ynu, @@ -536,6 +543,8 @@ mreal mglFormula::CalcIn(const mreal *a1) const { if(KodCalcIn(a1); return !isnan(b) ? f2[Kod-EQ_LT](a,b) : NAN; } diff --git a/src/export.cpp b/src/export.cpp index c68d9c1..c28e321 100644 --- a/src/export.cpp +++ b/src/export.cpp @@ -340,7 +340,7 @@ void mglCanvas::EndFrame() #define _GR_ ((mglCanvas *)(*gr)) #define _Gr_ ((mglCanvas *)(gr)) //----------------------------------------------------------------------------- -void mgl_write_png(HMGL gr, const char *fname,const char *descr) +void mgl_write_png(HMGL gr, const char *fname,const char *) { long w,h; unsigned char *f=0, **p=0; p =_Gr_->GetRGBLines(w,h,f,true); @@ -357,7 +357,7 @@ void mgl_write_png_(uintptr_t *gr, const char *fname,const char *descr,int l,int char *f=new char[n+1]; memcpy(f,descr,n); f[n]=0; mgl_write_png(_GR_,s,f); delete []s; delete []f; } //----------------------------------------------------------------------------- -void mgl_write_png_solid(HMGL gr, const char *fname,const char *descr) +void mgl_write_png_solid(HMGL gr, const char *fname,const char *) { long w,h; unsigned char *f=0, **p=0; p =_Gr_->GetRGBLines(w,h,f); @@ -391,7 +391,7 @@ void mgl_write_jpg_(uintptr_t *gr, const char *fname,const char *descr,int l,int char *f=new char[n+1]; memcpy(f,descr,n); f[n]=0; mgl_write_jpg(_GR_,s,f); delete []s; delete []f; } //----------------------------------------------------------------------------- -void mgl_write_tga(HMGL gr, const char *fname,const char *descr) +void mgl_write_tga(HMGL gr, const char *fname,const char *) { long w,h; unsigned char *f=0, **p=0; p =_Gr_->GetRGBLines(w,h,f,true); @@ -408,7 +408,7 @@ void mgl_write_tga_(uintptr_t *gr, const char *fname,const char *descr,int l,int char *f=new char[n+1]; memcpy(f,descr,n); f[n]=0; mgl_write_tga(_GR_,s,f); delete []s; delete []f; } //----------------------------------------------------------------------------- -void mgl_write_bmp(HMGL gr, const char *fname,const char *descr) +void mgl_write_bmp(HMGL gr, const char *fname,const char *) { long w,h; unsigned char *f=0, **p=0; p =_Gr_->GetRGBLines(w,h,f); @@ -425,7 +425,7 @@ void mgl_write_bmp_(uintptr_t *gr, const char *fname,const char *descr,int l,int char *f=new char[n+1]; memcpy(f,descr,n); f[n]=0; mgl_write_bmp(_GR_,s,f); delete []s; delete []f; } //----------------------------------------------------------------------------- -void mgl_write_bps(HMGL gr, const char *fname,const char *descr) +void mgl_write_bps(HMGL gr, const char *fname,const char *) { long w,h; unsigned char *f=0, **p=0; p =_Gr_->GetRGBLines(w,h,f); @@ -442,7 +442,7 @@ void mgl_write_bps_(uintptr_t *gr, const char *fname,const char *descr,int l,int char *f=new char[n+1]; memcpy(f,descr,n); f[n]=0; mgl_write_bps(_GR_,s,f); delete []s; delete []f; } //----------------------------------------------------------------------------- -void mgl_write_gif(HMGL gr, const char *fname,const char *descr) +void mgl_write_gif(HMGL gr, const char *fname,const char *) { long w,h; unsigned char *f=0, **p=0; p =_Gr_->GetRGBLines(w,h,f); diff --git a/src/export_2d.cpp b/src/export_2d.cpp index f94884c..e761fbd 100644 --- a/src/export_2d.cpp +++ b/src/export_2d.cpp @@ -63,7 +63,7 @@ void put_line(HMGL gr, void *fp, bool gz, long i, float wp, mglColor cp,int st, const mglPnt pp = gr->GetPnt(gr->GetPrm(i).n1); float x0=pp.x, y0=pp.y; bool ok=true; - register unsigned long k = i,j; // first point + register long k = i,j; // first point while(ok) { for(ok=false,j=i+1;jGetPrmNum();j++) @@ -114,7 +114,7 @@ void put_line(HMGL gr, void *fp, bool gz, long i, float wp, mglColor cp,int st, else if(p2.x==x0 && p2.y==y0) { k=j; q.type = -1; x0 = p1.x; y0=p1.y; - (fp, gz, nfmt,fc*x0,(neg?_Gr_->GetHeight()-y0:y0)*fc); + mgl_printf(fp, gz, nfmt,fc*x0,(neg?_Gr_->GetHeight()-y0:y0)*fc); if(m>10) { m=0; mgl_printf(fp, gz, "\n"); } ok=true; m++; } @@ -127,7 +127,7 @@ void put_line(HMGL gr, void *fp, bool gz, long i, float wp, mglColor cp,int st, //"np %d %d mt ", "%d %d ll ", "cp dr\n", "} def") void put_desc(HMGL gr, void *fp, bool gz, const char *pre, const char *ln1, const char *ln2, const char *ln3, const char *suf) { - register unsigned long i,j,n; + register long i,j,n; wchar_t *g; int *s; for(n=i=0;iGetPrmNum();i++) if(gr->GetPrm(i).type==4) n++; @@ -207,7 +207,7 @@ void mgl_write_eps(HMGL gr, const char *fname,const char *descr) m_s=false,m_a=false,m_o=false,m_T=false, m_V=false,m_S=false,m_D=false,m_Y=false,m_l=false, m_L=false,m_r=false,m_R=false,m_X=false,m_P=false; - register unsigned long i; + register long i; // add mark definition if present for(i=0;iGetPrmNum();i++) { @@ -383,7 +383,7 @@ void mgl_write_svg(HMGL gr, const char *fname,const char *descr) mgl_printf(fp, gz, "\n"); // write primitives float wp=-1; - register unsigned long i; + register long i; int st=0; mglColor cp; @@ -770,7 +770,7 @@ void mgl_write_tex(HMGL gr, const char *fname,const char *descr) // write primitives float wp=-1; - register unsigned long i; + register long i; int st=0; mglColor cp; char cname[16]; @@ -905,4 +905,4 @@ void mgl_write_tex(HMGL gr, const char *fname,const char *descr) for(i=0;iGetPrmNum();i++) { mglPrim &q=gr->GetPrm(i); if(q.type==-1) q.type = 1; } fclose(fp); -} \ No newline at end of file +} diff --git a/src/export_3d.cpp b/src/export_3d.cpp index f926814..dbf38aa 100644 --- a/src/export_3d.cpp +++ b/src/export_3d.cpp @@ -48,6 +48,30 @@ void mglTexture::GetRGBA(unsigned char *f) } } //----------------------------------------------------------------------------- +// I'm not sure that it is good idea -- a lot of memory used, but gain only for small files +/*void mgl_rearrange_pnt(HMGL gr, std::vector &on, std::vector &no, bool coor=false) +{ + // on -- for old-to-new index; no -- for new-to-old index + on.clear(); on.resize(gr->GetPntNum(),-1); no.clear(); + register size_t i,j; + for(i=0;iGetPntNum();i++) // collect data for groups + // it is rather expensive (extra 4b per primitive) but need for export to 3D + { + const mglPnt &q = gr->GetPnt(i); + if(coor) for(j=0;jGetPnt(no[j]); + if(p.x==q.x && p.y==q.y && p.z==q.z) on[i]=j; + } + else for(j=0;jGetPnt(no[j]); + if(p.x==q.x && p.y==q.y && p.z==q.z && p.c==q.c && p.t==q.t) on[i]=j; + } + if(on[j]<0) { no.push_back(i); on[j]=no.size()-1; } + } +}*/ +//----------------------------------------------------------------------------- void mgl_obj_prim(const mglPrim &q, const mglPnt &p, FILE *fp, float size) { char type = q.n4; float ss=size*0.35; @@ -190,16 +214,16 @@ void mgl_obj_prim(const mglPrim &q, const mglPnt &p, FILE *fp, float size) fprintf(fp,"l -2/%ld -1/%ld\n", i,i); fprintf(fp,"l -1/%ld -3/%ld\n", i,i); break; case 'O': - for(long j=0;j<=20;j++) + for(j=0;j<=20;j++) fprintf(fp,"v %g %g %g\n",p.x+ss*cos(j*M_PI/10),p.y+ss*sin(j*M_PI/10),p.z); - for(long j=0;j<20;j++) + for(j=0;j<20;j++) fprintf(fp,"f %ld/%ld %ld/%ld %ld/%ld\n", j-21,i, j-20,i, i,i); break; case 'C': fprintf(fp,"p %ld\n", i); case 'o': - for(long j=0;j<=20;j++) + for(j=0;j<=20;j++) fprintf(fp,"v %g %g %g\n",p.x+ss*cos(j*M_PI/10),p.y+ss*sin(j*M_PI/10),p.z); - for(long j=0;j<20;j++) + for(j=0;j<20;j++) fprintf(fp,"l %ld/%ld %ld/%ld\n", j-21,i, j-20,i); break; } @@ -218,13 +242,13 @@ void mgl_obj_prim(const mglPrim &q, const mglPnt &p, FILE *fp, float size) void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png) { if(gr->GetPrmNum()<=0) return; // nothing to do - register unsigned long i,j; + register size_t i,j; long m1=0,m2=0,m; for(i=0;iGrp.size();i++) // prepare array of indirect indexing { m = gr->Grp[i].Id; if(mm2) m2=m; } long *ng = new long[m2-m1+1]; for(i=0;iGrp.size();i++) ng[gr->Grp[i].Id-m1] = i; - for(i=0;iGetPrmNum();i++) // collect data for groups + for(i=0;iGetPrmNum());i++) // collect data for groups // it is rather expensive (extra 4b per primitive) but need for export to 3D { m = gr->GetPrm(i).id-m1; @@ -237,7 +261,7 @@ void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png) FILE *fp=fopen(fname,"wt"); // vertices definition fprintf(fp,"# Created by MathGL library\n# Title: %s\n",descr ? descr : fname); - for(i=0;iGetPntNum();i++) + for(i=0;iGetPrmNum());i++) { mglPnt pp = gr->GetPnt(i); fprintf(fp,"v %g %g %g\n",pp.x,pp.y,pp.z); @@ -248,13 +272,12 @@ void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png) // primitive definition in groups tname[len-4]=0; fprintf(fp,"# Primitives Definitions\nusemtl %s.mtl\n",tname); std::vector p; - mglPrim q; for(i=0;iGrp.size();i++) { fprintf(fp,"g %s\n",gr->Grp[i].Lbl.c_str()); p = gr->Grp[i].p; for(j=0;jGetPrm(p[j]); + const mglPrim &q=gr->GetPrm(p[j]); mgl_obj_prim(q, gr->GetPnt(q.n1), fp, q.s*gr->FontFactor()); } gr->Grp[i].p.clear(); // we don't need indexes anymore @@ -454,8 +477,8 @@ bool mglCanvas::ExportMGLD(const char *fname, const char *descr) if(Pnt.size()<1 || Prm.size()<1) return true; FILE *fp=fopen(fname,"wt"); if(!fp) return true; - fprintf(fp,"MGLD %ld %ld\n# %s\n", Pnt.size(), Prm.size(), descr ? descr : fname); - register long i; + fprintf(fp,"MGLD %lu %lu\n# %s\n", Pnt.size(), Prm.size(), descr ? descr : fname); + register size_t i; fprintf(fp,"# Vertexes: x y z c t u v w r g b a\n"); for(i=0;i1.f || v<0.f || v>1.f; - if(g) // first root bad + qu = d3.x*yy - d3.y*xx + dd + s; + qv = d3.y*xx - d3.x*yy + dd + s; + u = v = -1.f; + if(qu && qv) + { + u = 2.f*(d2.y*xx - d2.x*yy)/qu; + v = 2.f*(d1.x*yy - d1.y*xx)/qv; + } + if(u*(1.f-u)<0.f || v*(1.f-v)<0.f) // first root bad { - q = d3.x*yy - d3.y*xx + dd - s; - u = q ? 2.f*(d2.y*xx - d2.x*yy)/q : -1.f; - q = d3.y*xx - d3.x*yy + dd - s; - v = q ? 2.f*(d1.x*yy - d1.y*xx)/q : -1.f; - g = u<0.f || u>1.f || v<0.f || v>1.f; - if(g) continue; // second root bad + qu = d3.x*yy - d3.y*xx + dd - s; + qv = d3.y*xx - d3.x*yy + dd - s; + u = v = -1.f; + if(qu && qv) + { + u = 2.f*(d2.y*xx - d2.x*yy)/qu; + v = 2.f*(d1.x*yy - d1.y*xx)/qv; + } + if(u*(1.f-u)<0.f || v*(1.f-v)<0.f) continue; // second root bad } p = p1+d1*u+d2*v+d3*(u*v); if(isnan(p.u) && !isnan(p.v)) diff --git a/src/plot.cpp b/src/plot.cpp index 3af4c9c..a22d8ed 100644 --- a/src/plot.cpp +++ b/src/plot.cpp @@ -1617,7 +1617,7 @@ void mgl_tape_xyz(HMGL gr, HCDT x, HCDT y, HCDT z, const char *pen, const char * float ll, rr = gr->SaveState(opt); if(rr==0 || isnan(rr)) rr = mgl_norm(gr->Max-gr->Min)*gr->BarWidth/25; m = x->GetNy() > y->GetNy() ? x->GetNy() : y->GetNy(); m = z->GetNy() > m ? z->GetNy() : m; - char mk=gr->SetPenPal(pen,&pal); gr->Reserve(4*n*m); + gr->SetPenPal(pen,&pal); gr->Reserve(4*n*m); mglPoint p1,p2,q1,q2,l,nn,qn=mglPoint(NAN,NAN); long n1=-1,n2=-1,n3=-1,n4=-1, m1=-1,m2=-1,m3=-1,m4=-1; bool sh = pen && strchr(pen,'!'), xo = pen && strchr(pen,'x'), zo = pen && strchr(pen,'z'), wire = pen && strchr(pen,'#'); diff --git a/src/prim.cpp b/src/prim.cpp index 6eb8878..cf082e8 100644 --- a/src/prim.cpp +++ b/src/prim.cpp @@ -686,7 +686,7 @@ void mgl_puts_fit_(uintptr_t* gr, mreal *x, mreal *y, mreal *z, const char *pref //----------------------------------------------------------------------------- void mgl_labelw_xyz(HMGL gr, HCDT x, HCDT y, HCDT z, const wchar_t *text, const char *fnt, const char *opt) { - long j,m,mx,my,mz,mr,n=y->GetNx(); + long j,m,mx,my,mz,n=y->GetNx(); if(x->GetNx()!=n || z->GetNx()!=n) { gr->SetWarn(mglWarnDim,"Label"); return; } if(n<2) { gr->SetWarn(mglWarnLow,"Label"); return; } diff --git a/src/vect.cpp b/src/vect.cpp index 8260c91..70c387f 100644 --- a/src/vect.cpp +++ b/src/vect.cpp @@ -111,6 +111,7 @@ void mgl_vect_xy(HMGL gr, HCDT x, HCDT y, HCDT ax, HCDT ay, const char *sch, con bool both = x->GetNx()==n && y->GetNx()==n && x->GetNy()==m && y->GetNy()==m; if(!(both || (x->GetNx()==n && y->GetNx()==m))) { gr->SetWarn(mglWarnDim,"Vect"); return; } + gr->SaveState(opt); static int cgid=1; gr->StartGroup("Vect",cgid++); bool dot = sch && strchr(sch,'.'); bool fix = sch && strchr(sch,'f'); @@ -197,6 +198,8 @@ void mgl_vect_xyz(HMGL gr, HCDT x, HCDT y, HCDT z, HCDT ax, HCDT ay, HCDT az, co bool both = x->GetNx()*x->GetNy()*x->GetNz()==n*m*l && y->GetNx()*y->GetNy()*y->GetNz()==n*m*l && z->GetNx()*z->GetNy()*z->GetNz()==n*m*l; if(!(both || (x->GetNx()==n && y->GetNx()==m && z->GetNx()==l))) { gr->SetWarn(mglWarnDim,"Vect"); return; } + + gr->SaveState(opt); static int cgid=1; gr->StartGroup("Vect3",cgid++); bool dot = sch && strchr(sch,'.'); bool fix = sch && strchr(sch,'f'); diff --git a/todo.txt b/todo.txt index 680c09c..0d43264 100644 --- a/todo.txt +++ b/todo.txt @@ -66,7 +66,7 @@ Remove other setting if data name is changed. 10. Add primitives by mouse at beginning of script + change its size/position by mouse + "attraction" points 11. Drag&drop plot/group between inplots 12. Create default plot dependently of selected row/column/range in data table -13. Show plot at creation stage (if option is enabled -- can be long process!!!) +13. Show plot at creation stage (if option is enabled -- can be size_t process!!!) 14. Rotate/perspective/lighting/... of primitive list (without script re-execution) 15. QTreeWidgetItem -- ICON (if,for,once,subplot,...); Cmd text; LINE - POS in group/line. After editing/changing --> put text to editor. diff --git a/widgets/fltk.cpp b/widgets/fltk.cpp index 2dd43e1..b71c10b 100644 --- a/widgets/fltk.cpp +++ b/widgets/fltk.cpp @@ -96,18 +96,18 @@ void Fl_MathGL::set_graph(mglCanvas *GR) void Fl_MathGL::draw() { const unsigned char *g = gr ? gr->GetBits() : 0; - int i, h=gr->GetHeight(), w=gr->GetWidth(); - if(g) fl_draw_image(g, x(), y(), w, h, 3); + int i, hh=gr->GetHeight(), ww=gr->GetWidth(); + if(g) fl_draw_image(g, x(), y(), ww, hh, 3); if(flag&4) { char str[5]="0.0"; fl_color(192,192,192); for(i=1;i<10;i++) { - str[2] = '0'+10-i; fl_draw(str,30,30+i*h/10); - fl_line(30,30+i*h/10,30+w,30+i*h/10); - str[2] = '0'+i; fl_draw(str,30+i*w/10,30+h); - fl_line(30+i*w/10,30,30+i*w/10,30+h); + str[2] = '0'+10-i; fl_draw(str,30,30+i*hh/10); + fl_line(30,30+i*hh/10,30+ww,30+i*hh/10); + str[2] = '0'+i; fl_draw(str,30+i*ww/10,30+hh); + fl_line(30+i*ww/10,30,30+i*ww/10,30+hh); } // if(*MouseBuf) fl_draw(MouseBuf,30,50); } @@ -506,7 +506,7 @@ Fl_Menu_Item mgl_menuitems[] = { { 0,0,0,0,0,0,0,0,0 } }; //----------------------------------------------------------------------------- -Fl_MGLView::Fl_MGLView(int x, int y, int w, int h, char *label) : Fl_Window(x,y,w,h,label) +Fl_MGLView::Fl_MGLView(int xx, int yy, int ww, int hh, char *lbl) : Fl_Window(xx,yy,ww,hh,lbl) { alpha = light = sshow = 0; menu = 0; next = prev = reload = NULL; delay = NULL; diff --git a/widgets/qt.cpp b/widgets/qt.cpp index 35d405a..803f100 100644 --- a/widgets/qt.cpp +++ b/widgets/qt.cpp @@ -429,18 +429,6 @@ void QMathGL::exportSTL(QString fname) } } //----------------------------------------------------------------------------- -void QMathGL::exportWRL(QString fname) -{ - if(fname.isEmpty()) fname = gr->PlotId.c_str(); - if(fname.isEmpty()) QMessageBox::critical(this, appName, tr("No filename."),QMessageBox::Ok,0,0); - else - { - setlocale(LC_ALL, "C"); - mgl_write_wrl(gr,setExtension(fname,"svg").toAscii(), appName.toAscii()); - setlocale(LC_ALL, ""); - } -} -//----------------------------------------------------------------------------- void QMathGL::exportX3D(QString fname) { if(fname.isEmpty()) fname = gr->PlotId.c_str(); diff --git a/widgets/window.cpp b/widgets/window.cpp index 6efc66f..3e83409 100644 --- a/widgets/window.cpp +++ b/widgets/window.cpp @@ -196,7 +196,8 @@ void *mgl_draw_calc(void *p) { #ifdef HAVE_PTHREAD ((mglDraw *)p)->Calc(); -#endif +#endif + return 0; } //----------------------------------------------------------------------------- void mgl_draw_thr(void *p) -- 2.30.2