From 1fba52225ed96cd2bb0e4b67fea903837f341c17 Mon Sep 17 00:00:00 2001 From: Dimitrios Eftaxiopoulos Date: Sun, 11 Mar 2012 09:16:56 +0200 Subject: [PATCH] Imported Upstream version 2~rc2+svn361 --- examples/full_test.cpp | 68 ++++-- include/mgl/canvas_cf.h | 4 +- include/mgl/mgl.h | 4 +- src/axis.cpp | 10 +- src/crust.cpp | 40 +++- src/export.cpp | 2 +- src/export_2d.cpp | 469 +++++++++++++++++++++++---------------- src/export_3d.cpp | 405 ++++++++++++++++++--------------- texinfo/core_en.texi | 8 +- texinfo/data_en.texi | 1 - texinfo/overview_en.texi | 8 + widgets/glut.cpp | 12 + widgets/qt.cpp | 2 +- 13 files changed, 610 insertions(+), 423 deletions(-) diff --git a/examples/full_test.cpp b/examples/full_test.cpp index 1419ad7..385ee88 100644 --- a/examples/full_test.cpp +++ b/examples/full_test.cpp @@ -49,27 +49,27 @@ void smgl_combined(mglGraph *gr); void save(mglGraph *gr,const char *name,const char *suf); void test(mglGraph *gr) { - mglData a(256,2); a.Fill(-1,1); - gr->SubPlot(2,10,0,NULL,0.2); gr->Dens(a,"kw"); gr->Puts(0.07, 0.92, "kw", "A"); - gr->SubPlot(2,10,1,NULL,0.2); gr->Dens(a,"wk"); gr->Puts(0.57, 0.92, "wk", "A"); - gr->SubPlot(2,10,2,NULL,0.2); gr->Dens(a,"kHCcw"); gr->Puts(0.07, 0.82, "kHCcw", "A"); - gr->SubPlot(2,10,3,NULL,0.2); gr->Dens(a,"kBbcw"); gr->Puts(0.57, 0.82, "kBbcw", "A"); - gr->SubPlot(2,10,4,NULL,0.2); gr->Dens(a,"kRryw"); gr->Puts(0.07, 0.72, "kRryw", "A"); - gr->SubPlot(2,10,5,NULL,0.2); gr->Dens(a,"kGgew"); gr->Puts(0.57, 0.72, "kGgew", "A"); - gr->SubPlot(2,10,6,NULL,0.2); gr->Dens(a,"BbwrR"); gr->Puts(0.07, 0.62, "BbwrR", "A"); - gr->SubPlot(2,10,7,NULL,0.2); gr->Dens(a,"BbwgG"); gr->Puts(0.57, 0.62, "BbwgG", "A"); - gr->SubPlot(2,10,8,NULL,0.2); gr->Dens(a,"GgwmM"); gr->Puts(0.07, 0.52, "GgwmM", "A"); - gr->SubPlot(2,10,9,NULL,0.2); gr->Dens(a,"UuwqR"); gr->Puts(0.57, 0.52, "UuwqR", "A"); - gr->SubPlot(2,10,10,NULL,0.2); gr->Dens(a,"QqwcC"); gr->Puts(0.07, 0.42, "QqwcC", "A"); - gr->SubPlot(2,10,11,NULL,0.2); gr->Dens(a,"CcwyY"); gr->Puts(0.57, 0.42, "CcwyY", "A"); - gr->SubPlot(2,10,12,NULL,0.2); gr->Dens(a,"bcwyr"); gr->Puts(0.07, 0.32, "bcwyr", "A"); - gr->SubPlot(2,10,13,NULL,0.2); gr->Dens(a,"bwr"); gr->Puts(0.57, 0.32, "bwr", "A"); - gr->SubPlot(2,10,14,NULL,0.2); gr->Dens(a,"BbcyrR"); gr->Puts(0.07, 0.22, "BbcyrR", "A"); - gr->SubPlot(2,10,15,NULL,0.2); gr->Dens(a,"UbcyqR"); gr->Puts(0.57, 0.22, "UbcyqR", "A"); - gr->SubPlot(2,10,16,NULL,0.2); gr->Dens(a,"BbcwyrR"); gr->Puts(0.07, 0.12, "BbcwyrR", "A"); - gr->SubPlot(2,10,17,NULL,0.2); gr->Dens(a,"bcyr"); gr->Puts(0.57, 0.12, "bcyr", "A"); - gr->SubPlot(2,10,18,NULL,0.2); gr->Dens(a,"BbcyrR|"); gr->Puts(0.07, 0.02, "BbcyrR|", "A"); - gr->SubPlot(2,10,19,NULL,0.2); gr->Dens(a,"bgr"); gr->Puts(0.57, 0.02, "bgr", "A"); + float q[] = {0,1,2,3, 4,5,6,7, 0,2,4,6, 1,3,5,7, 0,4,1,5, 2,6,3,7}; + float xc[] = {-1,1,-1,1,-1,1,-1,1}, yc[] = {-1,-1,1,1,-1,-1,1,1}, zc[] = {-1,-1,-1,-1,1,1,1,1}; + mglData qq(6,4,q), xx(8,xc), yy(8,yc), zz(8,zc); + gr->Light(true); //gr->Alpha(true); + gr->SubPlot(2,1,0); gr->Title("QuadPlot sample"); gr->Rotate(50,60); + gr->QuadPlot(qq,xx,yy,zz,"yr"); + gr->QuadPlot(qq,xx,yy,zz,"k#"); + + float t[] = {0,1,2, 0,1,3, 0,2,3, 1,2,3}; + float xt[] = {-1,1,0,0}, yt[] = {-1,-1,1,0}, zt[] = {-1,-1,-1,1}; + mglData tt(4,3,t), uu(4,xt), vv(4,yt), ww(4,zt); + gr->SubPlot(2,1,1); gr->Title("TriPlot_sample"); gr->Rotate(50,60); + gr->TriPlot(tt,uu,vv,ww,"b"); + gr->TriPlot(tt,uu,vv,ww,"k#"); + + gr->WriteXYZ("test.xyz"); + gr->WriteSTL("test.stl"); + gr->WriteOFF("test.off"); + gr->WriteTEX("test.tex"); + gr->WriteOBJ("test.obj"); + gr->WriteOBJ("test1.obj","",true); return; mglParse par; @@ -1762,6 +1762,31 @@ void smgl_ternary(mglGraph *gr) // flag # gr->Label('y',"C",1); gr->Label('z',"Z",1); } //----------------------------------------------------------------------------- +const char *mmgl_triplot="list q 0 1 2 3 | 4 5 6 7 | 0 2 4 6 | 1 3 5 7 | 0 4 1 5 | 2 6 3 7\n" +"list xq -1 1 -1 1 -1 1 -1 1\nlist yq -1 -1 1 1 -1 -1 1 1\nlist zq -1 -1 -1 -1 1 1 1 1\nlight on\n" +"subplot 2 1 0:title 'QuadPlot sample':rotate 50 60\n" +"quadplot q xq yq zq 'yr'\nquadplot q xq yq zq '#k'\n" +"list t 0 1 2 | 0 1 3 | 0 2 3 | 1 2 3\n" +"list xq -1 1 0 0\nlist yq -1 -1 1 0\nlist zq -1 -1 -1 1\n" +"subplot 2 1 1:title 'TriPlot sample':rotate 50 60\n" +"triplot t xt yt zt 'b'\ntriplot t xt yt zt '#k'\n"; +void smgl_triplot(mglGraph *gr) +{ + float q[] = {0,1,2,3, 4,5,6,7, 0,2,4,6, 1,3,5,7, 0,4,1,5, 2,6,3,7}; + float xc[] = {-1,1,-1,1,-1,1,-1,1}, yc[] = {-1,-1,1,1,-1,-1,1,1}, zc[] = {-1,-1,-1,-1,1,1,1,1}; + mglData qq(6,4,q), xx(8,xc), yy(8,yc), zz(8,zc); + gr->Light(true); //gr->Alpha(true); + gr->SubPlot(2,1,0); gr->Title("QuadPlot sample"); gr->Rotate(50,60); + gr->QuadPlot(qq,xx,yy,zz,"yr"); + gr->QuadPlot(qq,xx,yy,zz,"k#"); + + float t[] = {0,1,2, 0,1,3, 0,2,3, 1,2,3}; + float xt[] = {-1,1,0,0}, yt[] = {-1,-1,1,0}, zt[] = {-1,-1,-1,1}; + mglData tt(4,3,t), uu(4,xt), vv(4,yt), ww(4,zt); + gr->SubPlot(2,1,1); gr->Title("TriPlot sample"); gr->Rotate(50,60); + gr->TriPlot(tt,uu,vv,ww,"b"); + gr->TriPlot(tt,uu,vv,ww,"k#"); +} //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- @@ -2051,6 +2076,7 @@ mglSample samp[] = { {"tiles", smgl_tiles}, {"torus", smgl_torus}, {"traj", smgl_traj}, + {"triplot", smgl_triplot}, {"tube", smgl_tube}, {"type0", smgl_type0}, {"type1", smgl_type1}, diff --git a/include/mgl/canvas_cf.h b/include/mgl/canvas_cf.h index 50e3159..6f2a6db 100644 --- a/include/mgl/canvas_cf.h +++ b/include/mgl/canvas_cf.h @@ -81,7 +81,7 @@ void mgl_write_svg(HMGL gr, const char *fname,const char *descr); void mgl_write_tex(HMGL gr, const char *fname,const char *descr); 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); +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); @@ -192,7 +192,7 @@ void mgl_start_gif_(uintptr_t *graph, const char *fname,int *ms,int l); void mgl_close_gif_(uintptr_t *graph); void mgl_write_obj_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld); void mgl_write_stl_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld); -void mgl_write_off_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld); +void mgl_write_off_(uintptr_t *graph, const char *fname,const char *descr,int *colored,int lf,int ld); void mgl_write_xyz_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld); void mgl_write_wrl_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld); void mgl_write_x3d_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld); diff --git a/include/mgl/mgl.h b/include/mgl/mgl.h index e013ae2..b6daa42 100644 --- a/include/mgl/mgl.h +++ b/include/mgl/mgl.h @@ -302,8 +302,8 @@ public: inline void WriteSTL(const char *fname,const char *descr="") { mgl_write_stl(gr, fname, descr); } /// Write the frame in file using OFF format - inline void WriteOFF(const char *fname,const char *descr="") - { mgl_write_off(gr, fname, descr); } + 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); } diff --git a/src/axis.cpp b/src/axis.cpp index b0247fb..4e783a8 100644 --- a/src/axis.cpp +++ b/src/axis.cpp @@ -28,12 +28,10 @@ #define islog(a, b) (((a)>0 && (b)>10*(a)) || ((b)<0 && (a)<10*(b))) #define sign(a) ((a)<0 ? -1:1) //----------------------------------------------------------------------------- -/*#ifdef WIN32 // NOTE: this is not thread safe! -inline struct tm* localtime_r (const time_t *clock, struct tm *result) +inline struct tm* mgl_localtime_r (const time_t *clock, struct tm *result) { if (!clock || !result) return NULL; memcpy(result,localtime(clock),sizeof(*result)); return result; } -#endif*/ //----------------------------------------------------------------------------- long mgl_have_color(const char *stl) { @@ -218,8 +216,8 @@ void mglCanvas::SetTickTime(char dir, float d, const char *t) UpdateAxis(); time_t tt; tm t1,t2; - tt=aa.v1; localtime_r(&tt,&t1); - tt=aa.v2; localtime_r(&tt,&t2); + tt=aa.v1; mgl_localtime_r(&tt,&t1); + tt=aa.v2; mgl_localtime_r(&tt,&t2); if(aa.v1AddTexture(sch); gr->SaveState(opt); static int cgid=1; gr->StartGroup("TriPlot",cgid++); - mglPoint p1,p2,p3,q; + mglPoint p1,p2,p3,q=mglPoint(NAN,NAN); register long i,k1,k2,k3; + bool wire = sch && strchr(sch,'#'); long nc = a->GetNx(); if(nc!=n && nc>=m) // colors per triangle { @@ -50,7 +51,7 @@ void mgl_triplot_xyzc(HMGL gr, HCDT nums, HCDT x, HCDT y, HCDT z, HCDT a, const p2 = mglPoint(x->v(k2), y->v(k2), z->v(k2)); k3 = long(nums->v(2,i)+0.5); p3 = mglPoint(x->v(k3), y->v(k3), z->v(k3)); - q = (p2-p1) ^ (p3-p1); + if(!wire) q = (p2-p1) ^ (p3-p1); k1 = gr->AddPnt(p1,gr->GetC(ss,a->v(k1)),q); k2 = gr->AddPnt(p2,gr->GetC(ss,a->v(k2)),q); k3 = gr->AddPnt(p3,gr->GetC(ss,a->v(k3)),q); @@ -68,7 +69,9 @@ void mgl_triplot_xyzc(HMGL gr, HCDT nums, HCDT x, HCDT y, HCDT z, HCDT a, const k1 = long(nums->v(0,i)+0.5); k2 = long(nums->v(1,i)+0.5); k3 = long(nums->v(2,i)+0.5); - q = mglPoint(x->v(k2)-x->v(k1), y->v(k2)-y->v(k1), z->v(k2)-z->v(k1)) ^ mglPoint(x->v(k3)-x->v(k1), y->v(k3)-y->v(k1), z->v(k3)-z->v(k1)); + if(!wire) + q = mglPoint(x->v(k2)-x->v(k1), y->v(k2)-y->v(k1), z->v(k2)-z->v(k1)) ^ + mglPoint(x->v(k3)-x->v(k1), y->v(k3)-y->v(k1), z->v(k3)-z->v(k1)); // try be sure that in the same direction ... but it is so slow :( if(pp[k1]*q<0) q*=-1; pp[k1] += q; if(pp[k2]*q<0) q*=-1; pp[k2] += q; @@ -86,7 +89,12 @@ void mgl_triplot_xyzc(HMGL gr, HCDT nums, HCDT x, HCDT y, HCDT z, HCDT a, const k1 = long(nums->v(0,i)+0.5); k2 = long(nums->v(1,i)+0.5); k3 = long(nums->v(2,i)+0.5); - gr->trig_plot(kk[k1],kk[k2],kk[k3]); + if(wire) + { + gr->line_plot(kk[k1],kk[k2]); gr->line_plot(kk[k1],kk[k3]); + gr->line_plot(kk[k3],kk[k2]); + } + else gr->trig_plot(kk[k1],kk[k2],kk[k3]); } delete []kk; delete []pp; } @@ -132,10 +140,11 @@ void mgl_quadplot_xyzc(HMGL gr, HCDT nums, HCDT x, HCDT y, HCDT z, HCDT a, const long ss=gr->AddTexture(sch); gr->SaveState(opt); static int cgid=1; gr->StartGroup("QuadPlot",cgid++); - mglPoint p1,p2,p3,p4,q; + mglPoint p1,p2,p3,p4,q=mglPoint(NAN,NAN); register long i,k1,k2,k3,k4; long nc = a->GetNx(); + bool wire = sch && strchr(sch,'#'); if(nc!=n && nc>=m) // colors per triangle { gr->Reserve(m*4); @@ -150,7 +159,7 @@ void mgl_quadplot_xyzc(HMGL gr, HCDT nums, HCDT x, HCDT y, HCDT z, HCDT a, const p3 = mglPoint(x->v(k3), y->v(k3), z->v(k3)); k4 = floor(nums->v(3,i)+0.5); p4 = mglPoint(x->v(k4), y->v(k4), z->v(k4)); - q = (p2-p1) ^ (p3-p1); + if(!wire) q = (p2-p1) ^ (p3-p1); k1 = gr->AddPnt(p1,gr->GetC(ss,a->v(k1)),q); k2 = gr->AddPnt(p2,gr->GetC(ss,a->v(k2)),q); k3 = gr->AddPnt(p3,gr->GetC(ss,a->v(k3)),q); @@ -175,10 +184,14 @@ void mgl_quadplot_xyzc(HMGL gr, HCDT nums, HCDT x, HCDT y, HCDT z, HCDT a, const k4 = floor(nums->v(3,i)+0.5); p4 = mglPoint(x->v(k4), y->v(k4), z->v(k4)); - q = (p2-p1) ^ (p3-p1); if(pp[k1]*q<0) q*=-1; pp[k1] += q; - q = (p2-p4) ^ (p3-p4); if(pp[k2]*q<0) q*=-1; pp[k2] += q; - q = (p1-p2) ^ (p4-p2); if(pp[k3]*q<0) q*=-1; pp[k3] += q; - q = (p1-p4) ^ (p4-p3); if(pp[k4]*q<0) q*=-1; pp[k4] += q; + if(wire) pp[k1]=pp[k2]=pp[k3]=pp[k4]=mglPoint(NAN,NAN); + else + { + q = (p2-p1) ^ (p3-p1); if(pp[k1]*q<0) q*=-1; pp[k1] += q; + q = (p2-p4) ^ (p3-p4); if(pp[k2]*q<0) q*=-1; pp[k2] += q; + q = (p1-p2) ^ (p4-p2); if(pp[k3]*q<0) q*=-1; pp[k3] += q; + q = (p1-p4) ^ (p4-p3); if(pp[k4]*q<0) q*=-1; pp[k4] += q; + } } for(i=0;iv(1,i)+0.5); k3 = floor(nums->v(2,i)+0.5); k4 = floor(nums->v(3,i)+0.5); - gr->quad_plot(kk[k1],kk[k2],kk[k3],kk[k4]); + if(wire) + { + gr->line_plot(kk[k1],kk[k2]); gr->line_plot(kk[k1],kk[k3]); + gr->line_plot(kk[k4],kk[k2]); gr->line_plot(kk[k4],kk[k3]); + } + else gr->quad_plot(kk[k1],kk[k2],kk[k3],kk[k4]); } delete []kk; delete []pp; } diff --git a/src/export.cpp b/src/export.cpp index 1e9eac2..c68d9c1 100644 --- a/src/export.cpp +++ b/src/export.cpp @@ -198,7 +198,7 @@ int mgl_bps_save(const char *fname, int w, int h, unsigned char **p) void *fp = gz ? (void*)gzopen(fname,"wt") : (void*)fopen(fname,"wt"); mgl_printf(fp, gz, "%%!PS-Adobe-3.0 EPSF-3.0\n%%%%BoundingBox: 0 0 %d %d\n",w,h); - mgl_printf(fp, gz, "%%%%Creator: MathGL library\n%%%%Title: %s\n", fname); + mgl_printf(fp, gz, "%%%%Created by MathGL library\n%%%%Title: %s\n", fname); mgl_printf(fp, gz, "%%%%CreationDate: %s\n",ctime(&now)); mgl_printf(fp, gz, "%d %d 8 [1 0 0 1 0 0] {currentfile %d string readhexstring pop} false 3 colorimage\n", w,h,1+w*h/40); diff --git a/src/export_2d.cpp b/src/export_2d.cpp index bec579c..f94884c 100644 --- a/src/export_2d.cpp +++ b/src/export_2d.cpp @@ -58,7 +58,7 @@ bool mgl_is_same(HMGL gr, const mglPrim &pr,float wp,mglColor cp,int st) return (cp==c); } //----------------------------------------------------------------------------- -void put_line(HMGL gr, void *fp, bool gz, long i, float wp, mglColor cp,int st, const char *ifmt, const char *nfmt, bool neg) +void put_line(HMGL gr, void *fp, bool gz, long i, float wp, mglColor cp,int st, const char *ifmt, const char *nfmt, bool neg, float fc) { const mglPnt pp = gr->GetPnt(gr->GetPrm(i).n1); float x0=pp.x, y0=pp.y; @@ -92,7 +92,7 @@ void put_line(HMGL gr, void *fp, bool gz, long i, float wp, mglColor cp,int st, mglPrim &q = gr->GetPrm(j); if(q.type==-2) q.type = 1; } - mgl_printf(fp, gz, ifmt,x0,neg?_Gr_->GetHeight()-y0:y0); ok=true; + mgl_printf(fp, gz, ifmt,fc*x0,(neg?_Gr_->GetHeight()-y0:y0)*fc); ok=true; long m=1; while(ok) { @@ -107,14 +107,14 @@ void put_line(HMGL gr, void *fp, bool gz, long i, float wp, mglColor cp,int st, if(p1.x==x0 && p1.y==y0) { k=j; q.type = -1; x0 = p2.x; y0=p2.y; - mgl_printf(fp, gz, nfmt,x0,neg?_Gr_->GetHeight()-y0:y0); + 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++; } else if(p2.x==x0 && p2.y==y0) { k=j; q.type = -1; x0 = p1.x; y0=p1.y; - mgl_printf(fp, gz, nfmt,x0,neg?_Gr_->GetHeight()-y0:y0); + (fp, gz, nfmt,fc*x0,(neg?_Gr_->GetHeight()-y0:y0)*fc); if(m>10) { m=0; mgl_printf(fp, gz, "\n"); } ok=true; m++; } @@ -191,7 +191,7 @@ void mgl_write_eps(HMGL gr, const char *fname,const char *descr) void *fp = gz ? (void*)gzopen(fname,"wt") : (void*)fopen(fname,"wt"); if(!fp) { gr->SetWarn(mglWarnOpen,fname); return; } mgl_printf(fp, gz, "%%!PS-Adobe-3.0 EPSF-3.0\n%%%%BoundingBox: 0 0 %d %d\n", _Gr_->GetWidth(), _Gr_->GetHeight()); - mgl_printf(fp, gz, "%%%%Creator: MathGL library\n%%%%Title: %s\n",descr ? descr : fname); + mgl_printf(fp, gz, "%%%%Created by MathGL library\n%%%%Title: %s\n",descr ? descr : fname); mgl_printf(fp, gz, "%%%%CreationDate: %s\n",ctime(&now)); mgl_printf(fp, gz, "/lw {setlinewidth} def\n/rgb {setrgbcolor} def\n"); mgl_printf(fp, gz, "/np {newpath} def\n/cp {closepath} def\n"); @@ -322,7 +322,7 @@ void mgl_write_eps(HMGL gr, const char *fname,const char *descr) { sprintf(str,"%.2g lw %.2g %.2g %.2g rgb ", q.w>1 ? q.w:1., cp.r,cp.g,cp.b); wp = q.w>1 ? q.w:1; st = q.n3; - put_line(gr,fp,gz,i,wp,cp,st, "np %g %g mt ", "%g %g ll ", false); + put_line(gr,fp,gz,i,wp,cp,st, "np %g %g mt ", "%g %g ll ", false, 1); const char *sd = mgl_get_dash(q.n3,q.w); if(sd && sd[0]) mgl_printf(fp, gz, "%s [%s] %g sd dr\n",str,sd,q.w*q.s); else mgl_printf(fp, gz, "%s d0 dr\n",str); @@ -373,7 +373,7 @@ void mgl_write_svg(HMGL gr, const char *fname,const char *descr) mgl_printf(fp, gz, "\n"); mgl_printf(fp, gz, "\n", _Gr_->GetWidth(), hh); - mgl_printf(fp, gz, "\n"); + mgl_printf(fp, gz, "\n"); mgl_printf(fp, gz, "\n\n\n",descr?descr:fname,ctime(&now)); // write definition for all glyphs @@ -468,7 +468,7 @@ void mgl_write_svg(HMGL gr, const char *fname,const char *descr) } if(q.w>1) mgl_printf(fp, gz, " stroke-width=\"%g\"", q.w); wp = q.w>1 ? q.w:1; st = q.n3; - put_line(gr,fp,gz,i,wp,cp,st, "> \n"); } else if(q.type==4) @@ -510,157 +510,235 @@ void mgl_write_svg_(uintptr_t *gr, const char *fname,const char *descr,int l,int /// Color names easely parsed by LaTeX struct mglSVGName { const char *name; float r,g,b; }; mglSVGName mgl_names[]={{"AliceBlue",.94,.972,1}, -{"AntiqueWhite",.98,.92,.844}, -{"Aqua",0,1,1}, -{"Aquamarine",.498,1,.83}, -{"Azure",.94,1,1}, -{"Beige",.96,.96,.864}, -{"Bisque",1,.894,.77}, -{"Black",0,0,0}, -{"BlanchedAlmond",1,.92,.804}, -{"Blue",0,0,1}, -{"BlueViolet",.54,.17,.888}, -{"Brown,.648",.165,.165}, -{"BurlyWood",.87,.72,.53}, -{"CadetBlue",.372,.62,.628}, -{"Chartreuse",.498,1,0}, -{"Chocolate",.824,.41,.116}, -{"Coral",1,.498,.312}, -{"CornflowerBlue",.392,.585,.93}, -{"Cornsilk",1,.972,.864}, -{"Crimson",.864,.08,.235}, -{"Cyan",0,1,1}, -{"DarkBlue",0,0,.545}, -{"DarkCyan",0,.545,.545}, -{"DarkGoldenrod",.72,.525,.044}, -{"DarkGray",.664,.664,.664}, -{"DarkGreen",0,.392,0}, -{"DarkGrey",.664,.664,.664}, -{"DarkKhaki",.74,.716,.42}, -{"DarkMagenta",.545,0,.545}, -{"DarkOliveGreen",.332,.42,.185}, -{"DarkOrange",1,.55,0}, -{"DarkOrchid",.6,.196,.8}, -{"DarkRed",.545,0,0}, -{"DarkSalmon",.912,.59,.48}, -{"DarkSeaGreen",.56,.736,.56}, -{"DarkSlateBlue",.284,.24,.545}, -{"DarkSlateGray",.185,.31,.31}, -{"DarkSlateGrey",.185,.31,.31}, -{"DarkTurquoise",0,.808,.82}, -{"DarkViolet",.58,0,.828}, -{"DeepPink",1,.08,.576}, -{"DeepSkyBlue",0,.75,1}, -{"DimGray",.41,.41,.41}, -{"DimGrey",.41,.41,.41}, -{"DodgerBlue",.116,.565,1}, -{"FireBrick",.698,.132,.132}, -{"FloralWhite",1,.98,.94}, -{"ForestGreen",.132,.545,.132}, -{"Fuchsia",1,0,1}, -{"Gainsboro",.864,.864,.864}, -{"GhostWhite",.972,.972,1}, -{"Gold",1,.844,0}, -{"Goldenrod",.855,.648,.125}, -{"Gray",.5,.5,.5}, -{"Green",0,.5,0}, -{"GreenYellow",.68,1,.185}, -{"Grey",.5,.5,.5}, -{"Honeydew",.94,1,.94}, -{"HotPink",1,.41,.705}, -{"IndianRed",.804,.36,.36}, -{"Indigo",.294,0,.51}, -{"Ivory",1,1,.94}, -{"Khaki",.94,.9,.55}, -{"Lavender",.9,.9,.98}, -{"LavenderBlush",1,.94,.96}, -{"LawnGreen",.488,.99,0}, -{"LemonChiffon",1,.98,.804}, -{"LightBlue",.68,.848,.9}, -{"LightCoral",.94,.5,.5}, -{"LightCyan",.88,1,1}, -{"LightGoldenrod",.933,.867,.51}, -{"LightGoldenrodYellow",.98,.98,.824}, -{"LightGray",.828,.828,.828}, -{"LightGreen",.565,.932,.565}, -{"LightGrey",.828,.828,.828}, -{"LightPink",1,.712,.756}, -{"LightSalmon",1,.628,.48}, -{"LightSeaGreen",.125,.698,.668}, -{"LightSkyBlue",.53,.808,.98}, -{"LightSlateBlue",.518,.44,1}, -{"LightSlateGray",.468,.532,.6}, -{"LightSlateGrey",.468,.532,.6}, -{"LightSteelBlue",.69,.77,.87}, -{"LightYellow",1,1,.88}, -{"Lime",0,1,0}, -{"LimeGreen",.196,.804,.196}, -{"Linen",.98,.94,.9}, -{"Magenta",1,0,1}, -{"Maroon",.5,0,0}, -{"MediumAquamarine",.4,.804,.668}, -{"MediumBlue",0,0,.804}, -{"MediumOrchid",.73,.332,.828}, -{"MediumPurple",.576,.44,.86}, -{"MediumSeaGreen",.235,.7,.444}, -{"MediumSlateBlue",.484,.408,.932}, -{"MediumSpringGreen",0,.98,.604}, -{"MediumTurquoise",.284,.82,.8}, -{"MediumVioletRed",.78,.084,.52}, -{"MidnightBlue",.098,.098,.44}, -{"MintCream",.96,1,.98}, -{"MistyRose",1,.894,.884}, -{"Moccasin",1,.894,.71}, -{"NavajoWhite",1,.87,.68}, -{"Navy",0,0,.5}, -{"NavyBlue",0,0,.5}, -{"OldLace",.992,.96,.9}, -{"Olive",.5,.5,0}, -{"OliveDrab",.42,.556,.136}, -{"Orange",1,.648,0}, -{"OrangeRed",1,.27,0}, -{"Orchid",.855,.44,.84}, -{"PaleGoldenrod",.932,.91,.668}, -{"PaleGreen",.596,.985,.596}, -{"PaleTurquoise",.688,.932,.932}, -{"PaleVioletRed",.86,.44,.576}, -{"PapayaWhip",1,.936,.835}, -{"PeachPuff",1,.855,.725}, -{"Peru",.804,.52,.248}, -{"Pink",1,.752,.796}, -{"Plum",.868,.628,.868}, -{"PowderBlue",.69,.88,.9}, -{"Purple",.5,0,.5}, -{"Red",1,0,0}, -{"RosyBrown",.736,.56,.56}, -{"RoyalBlue",.255,.41,.884}, -{"SaddleBrown",.545,.27,.075}, -{"Salmon",.98,.5,.448}, -{"SandyBrown",.956,.644,.376}, -{"SeaGreen",.18,.545,.34}, -{"Seashell",1,.96,.932}, -{"Sienna",.628,.32,.176}, -{"Silver",.752,.752,.752}, -{"SkyBlue",.53,.808,.92}, -{"SlateBlue",.415,.352,.804}, -{"SlateGray",.44,.5,.565}, -{"SlateGrey",.44,.5,.565}, -{"Snow",1,.98,.98}, -{"SpringGreen",0,1,.498}, -{"SteelBlue",.275,.51,.705}, -{"Tan",.824,.705,.55}, -{"Teal",0,.5,.5}, -{"Thistle",.848,.75,.848}, -{"Tomato",1,.39,.28}, -{"Turquoise",.25,.88,.815}, -{"Violet",.932,.51,.932}, -{"VioletRed",.816,.125,.565}, -{"Wheat",.96,.87,.7}, -{"White",1,1,1}, -{"WhiteSmoke",.96,.96,.96}, -{"Yellow",1,1,0}, -{"YellowGreen",.604,.804,.196}, +{"Apricot", 0.984, 0.725, 0.51}, +{"Aquamarine", 0, 0.71, 0.745}, +{"Bittersweet", 0.753, 0.31, 0.0902}, +{"Black", 0.133, 0.118, 0.122}, +{"Blue", 0.176, 0.184, 0.573}, +{"BlueGreen", 0, 0.702, 0.722}, +{"BlueViolet", 0.278, 0.224, 0.573}, +{"BrickRed", 0.714, 0.196, 0.11}, +{"Brown", 0.475, 0.145, 0}, +{"BurntOrange", 0.969, 0.573, 0.114}, +{"CadetBlue", 0.455, 0.447, 0.604}, +{"CarnationPink", 0.949, 0.51, 0.706}, +{"Cerulean", 0, 0.635, 0.89}, +{"CornflowerBlue", 0.255, 0.69, 0.894}, +{"Cyan", 0, 0.682, 0.937}, +{"Dandelion", 0.992, 0.737, 0.259}, +{"DarkOrchid", 0.643, 0.325, 0.541}, +{"Emerald", 0, 0.663, 0.616}, +{"ForestGreen", 0, 0.608, 0.333}, +{"Fuchsia", 0.549, 0.212, 0.549}, +{"Goldenrod", 1, 0.875, 0.259}, +{"Gray", 0.58, 0.588, 0.596}, +{"Green", 0, 0.651, 0.31}, +{"GreenYellow", 0.875, 0.902, 0.455}, +{"JungleGreen", 0, 0.663, 0.604}, +{"Lavender", 0.957, 0.62, 0.769}, +{"LimeGreen", 0.553, 0.78, 0.243}, +{"Magenta", 0.925, 0, 0.549}, +{"Mahogany", 0.663, 0.204, 0.122}, +{"Maroon", 0.686, 0.196, 0.208}, +{"Melon", 0.973, 0.62, 0.482}, +{"MidnightBlue", 0, 0.404, 0.584}, +{"Mulberry", 0.663, 0.235, 0.576}, +{"NavyBlue", 0, 0.431, 0.722}, +{"OliveGreen", 0.235, 0.502, 0.192}, +{"Orange", 0.961, 0.506, 0.216}, +{"OrangeRed", 0.929, 0.0745, 0.353}, +{"Orchid", 0.686, 0.447, 0.69}, +{"Peach", 0.969, 0.588, 0.353}, +{"Periwinkle", 0.475, 0.467, 0.722}, +{"PineGreen", 0, 0.545, 0.447}, +{"Plum", 0.573, 0.149, 0.561}, +{"ProcessBlue", 0, 0.69, 0.941}, +{"Purple", 0.6, 0.278, 0.608}, +{"RawSienna", 0.592, 0.251, 0.0235}, +{"Red", 0.929, 0.106, 0.137}, +{"RedOrange", 0.949, 0.376, 0.208}, +{"RedViolet", 0.631, 0.141, 0.42}, +{"Rhodamine", 0.937, 0.333, 0.624}, +{"RoyalBlue", 0, 0.443, 0.737}, +{"RoyalPurple", 0.38, 0.247, 0.6}, +{"RubineRed", 0.929, 0.00392, 0.49}, +{"Salmon", 0.965, 0.573, 0.537}, +{"SeaGreen", 0.247, 0.737, 0.616}, +{"Sepia", 0.404, 0.0941, 0}, +{"SkyBlue", 0.275, 0.773, 0.867}, +{"SpringGreen", 0.776, 0.863, 0.404}, +{"Tan", 0.855, 0.616, 0.463}, +{"TealBlue", 0, 0.682, 0.702}, +{"Thistle", 0.847, 0.514, 0.718}, +{"Turquoise", 0, 0.706, 0.808}, +{"Violet", 0.345, 0.259, 0.608}, +{"VioletRed", 0.937, 0.345, 0.627}, +{"White", 0.6, 0.6, 0.6}, +{"WildStrawberry", 0.933, 0.161, 0.404}, +{"Yellow", 1, 0.949, 0}, +{"YellowGreen", 0.596, 0.8, 0.439}, +{"YellowOrange", 0.98, 0.635, 0.102}, +{"white", 1,1,1}, +{"black", 0,0,0}, +{"red", 1,0,0}, +{"green", 0,1,0}, +{"blue", 0,0,1}, +{"cyan", 0,1,1}, +{"magenta", 1,0,1}, +{"yellow", 1,1,0}, {"",-1,-1,-1}}; +/*mglSVGName mgl_names[]={{"AliceBlue",.94,.972,1}, + * {"AntiqueWhite",.98,.92,.844}, + * {"Aqua",0,1,1}, + * {"Aquamarine",.498,1,.83}, + * {"Azure",.94,1,1}, + * {"Beige",.96,.96,.864}, + * {"Bisque",1,.894,.77}, + * {"Black",0,0,0}, + * {"BlanchedAlmond",1,.92,.804}, + * {"Blue",0,0,1}, + * {"BlueViolet",.54,.17,.888}, + * {"Brown,.648",.165,.165}, + * {"BurlyWood",.87,.72,.53}, + * {"CadetBlue",.372,.62,.628}, + * {"Chartreuse",.498,1,0}, + * {"Chocolate",.824,.41,.116}, + * {"Coral",1,.498,.312}, + * {"CornflowerBlue",.392,.585,.93}, + * {"Cornsilk",1,.972,.864}, + * {"Crimson",.864,.08,.235}, + * {"Cyan",0,1,1}, + * {"DarkBlue",0,0,.545}, + * {"DarkCyan",0,.545,.545}, + * {"DarkGoldenrod",.72,.525,.044}, + * {"DarkGray",.664,.664,.664}, + * {"DarkGreen",0,.392,0}, + * {"DarkGrey",.664,.664,.664}, + * {"DarkKhaki",.74,.716,.42}, + * {"DarkMagenta",.545,0,.545}, + * {"DarkOliveGreen",.332,.42,.185}, + * {"DarkOrange",1,.55,0}, + * {"DarkOrchid",.6,.196,.8}, + * {"DarkRed",.545,0,0}, + * {"DarkSalmon",.912,.59,.48}, + * {"DarkSeaGreen",.56,.736,.56}, + * {"DarkSlateBlue",.284,.24,.545}, + * {"DarkSlateGray",.185,.31,.31}, + * {"DarkSlateGrey",.185,.31,.31}, + * {"DarkTurquoise",0,.808,.82}, + * {"DarkViolet",.58,0,.828}, + * {"DeepPink",1,.08,.576}, + * {"DeepSkyBlue",0,.75,1}, + * {"DimGray",.41,.41,.41}, + * {"DimGrey",.41,.41,.41}, + * {"DodgerBlue",.116,.565,1}, + * {"FireBrick",.698,.132,.132}, + * {"FloralWhite",1,.98,.94}, + * {"ForestGreen",.132,.545,.132}, + * {"Fuchsia",1,0,1}, + * {"Gainsboro",.864,.864,.864}, + * {"GhostWhite",.972,.972,1}, + * {"Gold",1,.844,0}, + * {"Goldenrod",.855,.648,.125}, + * {"Gray",.5,.5,.5}, + * {"Green",0,.5,0}, + * {"GreenYellow",.68,1,.185}, + * {"Grey",.5,.5,.5}, + * {"Honeydew",.94,1,.94}, + * {"HotPink",1,.41,.705}, + * {"IndianRed",.804,.36,.36}, + * {"Indigo",.294,0,.51}, + * {"Ivory",1,1,.94}, + * {"Khaki",.94,.9,.55}, + * {"Lavender",.9,.9,.98}, + * {"LavenderBlush",1,.94,.96}, + * {"LawnGreen",.488,.99,0}, + * {"LemonChiffon",1,.98,.804}, + * {"LightBlue",.68,.848,.9}, + * {"LightCoral",.94,.5,.5}, + * {"LightCyan",.88,1,1}, + * {"LightGoldenrod",.933,.867,.51}, + * {"LightGoldenrodYellow",.98,.98,.824}, + * {"LightGray",.828,.828,.828}, + * {"LightGreen",.565,.932,.565}, + * {"LightGrey",.828,.828,.828}, + * {"LightPink",1,.712,.756}, + * {"LightSalmon",1,.628,.48}, + * {"LightSeaGreen",.125,.698,.668}, + * {"LightSkyBlue",.53,.808,.98}, + * {"LightSlateBlue",.518,.44,1}, + * {"LightSlateGray",.468,.532,.6}, + * {"LightSlateGrey",.468,.532,.6}, + * {"LightSteelBlue",.69,.77,.87}, + * {"LightYellow",1,1,.88}, + * {"Lime",0,1,0}, + * {"LimeGreen",.196,.804,.196}, + * {"Linen",.98,.94,.9}, + * {"Magenta",1,0,1}, + * {"Maroon",.5,0,0}, + * {"MediumAquamarine",.4,.804,.668}, + * {"MediumBlue",0,0,.804}, + * {"MediumOrchid",.73,.332,.828}, + * {"MediumPurple",.576,.44,.86}, + * {"MediumSeaGreen",.235,.7,.444}, + * {"MediumSlateBlue",.484,.408,.932}, + * {"MediumSpringGreen",0,.98,.604}, + * {"MediumTurquoise",.284,.82,.8}, + * {"MediumVioletRed",.78,.084,.52}, + * {"MidnightBlue",.098,.098,.44}, + * {"MintCream",.96,1,.98}, + * {"MistyRose",1,.894,.884}, + * {"Moccasin",1,.894,.71}, + * {"NavajoWhite",1,.87,.68}, + * {"Navy",0,0,.5}, + * {"NavyBlue",0,0,.5}, + * {"OldLace",.992,.96,.9}, + * {"Olive",.5,.5,0}, + * {"OliveDrab",.42,.556,.136}, + * {"Orange",1,.648,0}, + * {"OrangeRed",1,.27,0}, + * {"Orchid",.855,.44,.84}, + * {"PaleGoldenrod",.932,.91,.668}, + * {"PaleGreen",.596,.985,.596}, + * {"PaleTurquoise",.688,.932,.932}, + * {"PaleVioletRed",.86,.44,.576}, + * {"PapayaWhip",1,.936,.835}, + * {"PeachPuff",1,.855,.725}, + * {"Peru",.804,.52,.248}, + * {"Pink",1,.752,.796}, + * {"Plum",.868,.628,.868}, + * {"PowderBlue",.69,.88,.9}, + * {"Purple",.5,0,.5}, + * {"Red",1,0,0}, + * {"RosyBrown",.736,.56,.56}, + * {"RoyalBlue",.255,.41,.884}, + * {"SaddleBrown",.545,.27,.075}, + * {"Salmon",.98,.5,.448}, + * {"SandyBrown",.956,.644,.376}, + * {"SeaGreen",.18,.545,.34}, + * {"Seashell",1,.96,.932}, + * {"Sienna",.628,.32,.176}, + * {"Silver",.752,.752,.752}, + * {"SkyBlue",.53,.808,.92}, + * {"SlateBlue",.415,.352,.804}, + * {"SlateGray",.44,.5,.565}, + * {"SlateGrey",.44,.5,.565}, + * {"Snow",1,.98,.98}, + * {"SpringGreen",0,1,.498}, + * {"SteelBlue",.275,.51,.705}, + * {"Tan",.824,.705,.55}, + * {"Teal",0,.5,.5}, + * {"Thistle",.848,.75,.848}, + * {"Tomato",1,.39,.28}, + * {"Turquoise",.25,.88,.815}, + * {"Violet",.932,.51,.932}, + * {"VioletRed",.816,.125,.565}, + * {"Wheat",.96,.87,.7}, + * {"White",1,1,1}, + * {"WhiteSmoke",.96,.96,.96}, + * {"Yellow",1,1,0}, + * {"YellowGreen",.604,.804,.196}, + * {"",-1,-1,-1}};*/ //----------------------------------------------------------------------------- const char *mglColorName(mglColor c) // return closest SVG color { @@ -679,18 +757,23 @@ void mgl_write_tex(HMGL gr, const char *fname,const char *descr) { if(gr->GetPrmNum()<1) return; _Gr_->Finish(); - FILE *fp = fopen(fname,"wt"); + FILE *fp=fopen("mglcolors.tex","wt"); + register int ii,jj,kk; // save colors which can be required at output + for(ii=0;ii<6;ii++) for(jj=0;jj<6;jj++) for(kk=0;kk<6;kk++) + fprintf(fp,"\\definecolor{mgl_%d}{RGB}{%d,%d,%d}\n",ii+6*(jj+6*kk),51*ii,51*jj,51*kk); + fclose(fp); + fp = fopen(fname,"wt"); if(!fp) { gr->SetWarn(mglWarnOpen,fname); return; } - fprintf(fp, "%% Creator: MathGL library\n%% Title: %s\n\\begin{tikzpicture}\n",descr?descr:fname); - fprintf(fp, "\\providecommand{mgl1}{%g}\n",0.4*gr->mark_size()); - fprintf(fp, "\\providecommand{mgl2}{%g}\n",0.2*gr->mark_size()); + fprintf(fp, "%% Created by MathGL library\n%% Title: %s\n",descr?descr:fname); + fprintf(fp, "\\input{mglcolors.tex}\n\\begin{tikzpicture}\n"); + float ms=0.4*gr->mark_size()/100; // write primitives float wp=-1; register unsigned long i; int st=0; mglColor cp; - const char *cname; + char cname[16]; // add mark definition if present bool m_p=false,m_x=false,m_d=false,m_v=false,m_t=false, @@ -714,34 +797,40 @@ void mgl_write_tex(HMGL gr, const char *fname,const char *descr) } if(m_P) { m_p=true; m_s=true; } if(m_X) { m_x=true; m_s=true; } - if(m_p) fprintf(fp, "\\providecommand{mglp}[3]{\\draw[#3] (#1-\\mgl1, #2) -- (#1+\\mgl1,#2) (#1,#2-\\mgl1) -- (#1,#2+\\mgl1);}\n"); - if(m_x) fprintf(fp, "\\providecommand{mglx}[3]{\\draw[#3] (#1-\\mgl1, #2-\\mgl1) -- (#1+\\mgl1,#2+\\mgl1) (#1+\\mgl1,#2-\\mgl1) -- (#1-\\mgl1,#2+\\mgl1);}\n"); - if(m_s) fprintf(fp, "\\providecommand{mgls}[3]{\\draw[#3] (#1-\\mgl1, #2-\\mgl1) -- (#1+\\mgl1,#2-\\mgl1) -- (#1+\\mgl1,#2+\\mgl1) -- (#1-\\mgl1,#2+\\mgl1) -- cycle;}\n"); - if(m_S) fprintf(fp, "\\providecommand{mglS}[3]{\\fill[#3] (#1-\\mgl1, #2-\\mgl1) -- (#1+\\mgl1,#2-\\mgl1) -- (#1+\\mgl1,#2+\\mgl1) -- (#1-\\mgl1,#2+\\mgl1) -- cycle;}\n"); - if(m_d) fprintf(fp, "\\providecommand{mgld}[3]{\\draw[#3] (#1, #2-\\mgl1) -- (#1+\\mgl1,#2) -- (#1,#2+\\mgl1) -- (#1-\\mgl1,#2) -- cycle;}\n"); - if(m_D) fprintf(fp, "\\providecommand{mglD}[3]{\\fill[#3] (#1, #2-\\mgl1) -- (#1+\\mgl1,#2) -- (#1,#2+\\mgl1) -- (#1-\\mgl1,#2) -- cycle;}\n"); - if(m_v) fprintf(fp, "\\providecommand{mglv}[3]{\\draw[#3] (#1-\\mgl1, #2+\\mgl2) -- (#1+\\mgl1,#2+\\mgl2) -- (#1,#2-\\mgl1) -- cycle;}\n"); - if(m_V) fprintf(fp, "\\providecommand{mglV}[3]{\\fill[#3] (#1-\\mgl1, #2+\\mgl2) -- (#1+\\mgl1,#2+\\mgl2) -- (#1,#2-\\mgl1) -- cycle;}\n"); - if(m_t) fprintf(fp, "\\providecommand{mglt}[3]{\\draw[#3] (#1-\\mgl1, #2-\\mgl2) -- (#1+\\mgl1,#2-\\mgl2) -- (#1,#2+\\mgl1) -- cycle;}\n"); - if(m_T) fprintf(fp, "\\providecommand{mglT}[3]{\\fill[#3] (#1-\\mgl1, #2-\\mgl2) -- (#1+\\mgl1,#2-\\mgl2) -- (#1,#2+\\mgl1) -- cycle;}\n"); - if(m_l) fprintf(fp, "\\providecommand{mgll}[3]{\\draw[#3] (#1+\\mgl2, #2-\\mgl1) -- (#1+\\mgl2,#2+\\mgl1) -- (#1-\\mgl1,#2) -- cycle;}\n"); - if(m_L) fprintf(fp, "\\providecommand{mglL}[3]{\\fill[#3] (#1+\\mgl2, #2-\\mgl1) -- (#1+\\mgl2,#2+\\mgl1) -- (#1-\\mgl1,#2) -- cycle;}\n"); - if(m_r) fprintf(fp, "\\providecommand{mglr}[3]{\\draw[#3] (#1-\\mgl2, #2-\\mgl1) -- (#1-\\mgl2,#2+\\mgl1) -- (#1+\\mgl1,#2) -- cycle;}\n"); - if(m_R) fprintf(fp, "\\providecommand{mglR}[3]{\\fill[#3] (#1-\\mgl2, #2-\\mgl1) -- (#1-\\mgl2,#2+\\mgl1) -- (#1+\\mgl1,#2) -- cycle;}\n"); - if(m_Y) fprintf(fp, "\\providecommand{mglR}[3]{\\draw[#3] (#1, #2-\\mgl1) -- (#1,#2) -- (#1-\\mgl1,#2+\\mgl1) (#1,#2) -- (#1+\\mgl1,#2+\\mgl1);}\n"); - if(m_a) fprintf(fp, "\\providecommand{mgla}[3]{\\draw[#3] (#1-\\mgl1, #2) -- (#1+\\mgl1,#2) (#1-0.6*\\mgl1,#2-0.8*\\mgl1) -- (#1+0.6*\\mgl1,#2+0.8*\\mgl1) (#1-0.6*\\mgl1,#2+0.8*\\mgl1) -- (#1+0.6*\\mgl1,#2-0.8*\\mgl1);}\n"); - if(m_o) fprintf(fp, "\\providecommand{mglo}[3]{\\draw[#3] (#1, #2) circle (\\mgl1);}\n"); - if(m_O) fprintf(fp, "\\providecommand{mglO}[3]{\\fill[#3] (#1, #2) circle (\\mgl1);}\n"); + if(m_p) fprintf(fp, "\\providecommand{\\mglp}[3]{\\draw[#3] (#1-%g, #2) -- (#1+%g,#2) (#1,#2-%g) -- (#1,#2+%g);}\n",ms,ms,ms,ms); + if(m_x) fprintf(fp, "\\providecommand{\\mglx}[3]{\\draw[#3] (#1-%g, #2-%g) -- (#1+%g,#2+%g) (#1+%g,#2-%g) -- (#1-%g,#2+%g);}\n", ms,ms,ms,ms, ms,ms,ms,ms); + if(m_s) fprintf(fp, "\\providecommand{\\mgls}[3]{\\draw[#3] (#1-%g, #2-%g) -- (#1+%g,#2-%g) -- (#1+%g,#2+%g) -- (#1-%g,#2+%g) -- cycle;}\n", ms,ms,ms,ms, ms,ms,ms,ms); + if(m_S) fprintf(fp, "\\providecommand{\\mglS}[3]{\\fill[#3] (#1-%g, #2-%g) -- (#1+%g,#2-%g) -- (#1+%g,#2+%g) -- (#1-%g,#2+%g) -- cycle;}\n", ms,ms,ms,ms, ms,ms,ms,ms); + if(m_d) fprintf(fp, "\\providecommand{\\mgld}[3]{\\draw[#3] (#1, #2-%g) -- (#1+%g,#2) -- (#1,#2+%g) -- (#1-%g,#2) -- cycle;}\n", ms,ms,ms,ms); + if(m_D) fprintf(fp, "\\providecommand{\\mglD}[3]{\\fill[#3] (#1, #2-%g) -- (#1+%g,#2) -- (#1,#2+%g) -- (#1-%g,#2) -- cycle;}\n", ms,ms,ms,ms); + if(m_v) fprintf(fp, "\\providecommand{\\mglv}[3]{\\draw[#3] (#1-%g, #2+%g) -- (#1+%g,#2+%g) -- (#1,#2-%g) -- cycle;}\n", ms,ms/2,ms,ms/2, ms); + if(m_V) fprintf(fp, "\\providecommand{\\mglV}[3]{\\fill[#3] (#1-%g, #2+%g) -- (#1+%g,#2+%g) -- (#1,#2-%g) -- cycle;}\n", ms,ms/2,ms,ms/2, ms); + if(m_t) fprintf(fp, "\\providecommand{\\mglt}[3]{\\draw[#3] (#1-%g, #2-%g) -- (#1+%g,#2-%g) -- (#1,#2+%g) -- cycle;}\n", ms,ms/2,ms,ms/2, ms); + if(m_T) fprintf(fp, "\\providecommand{\\mglT}[3]{\\fill[#3] (#1-%g, #2-%g) -- (#1+%g,#2-%g) -- (#1,#2+%g) -- cycle;}\n", ms,ms/2,ms,ms/2, ms); + if(m_l) fprintf(fp, "\\providecommand{\\mgll}[3]{\\draw[#3] (#1+%g, #2-%g) -- (#1+%g,#2+%g) -- (#1-%g,#2) -- cycle;}\n", ms/2,ms,ms/2,ms, ms); + if(m_L) fprintf(fp, "\\providecommand{\\mglL}[3]{\\fill[#3] (#1+%g, #2-%g) -- (#1+%g,#2+%g) -- (#1-%g,#2) -- cycle;}\n", ms/2,ms,ms/2,ms, ms); + if(m_r) fprintf(fp, "\\providecommand{\\mglr}[3]{\\draw[#3] (#1-%g, #2-%g) -- (#1-%g,#2+%g) -- (#1+%g,#2) -- cycle;}\n", ms/2,ms,ms/2,ms, ms); + if(m_R) fprintf(fp, "\\providecommand{\\mglR}[3]{\\fill[#3] (#1-%g, #2-%g) -- (#1-%g,#2+%g) -- (#1+%g,#2) -- cycle;}\n", ms/2,ms,ms/2,ms, ms); + if(m_Y) fprintf(fp, "\\providecommand{\\mglR}[3]{\\draw[#3] (#1, #2-%g) -- (#1,#2) -- (#1-%g,#2+%g) (#1,#2) -- (#1+%g,#2+%g);}\n", ms,ms,ms,ms, ms); + if(m_a) fprintf(fp, "\\providecommand{\\mgla}[3]{\\draw[#3] (#1-%g, #2) -- (#1+%g,#2) (#1-0.6*%g,#2-0.8*%g) -- (#1+0.6*%g,#2+0.8*%g) (#1-0.6*%g,#2+0.8*%g) -- (#1+0.6*%g,#2-0.8*%g);}\n", ms,ms,ms,ms, ms,ms,ms,ms, ms,ms); + if(m_o) fprintf(fp, "\\providecommand{\\mglo}[3]{\\draw[#3] (#1, #2) circle (%g);}\n", ms); + if(m_O) fprintf(fp, "\\providecommand{\\mglO}[3]{\\fill[#3] (#1, #2) circle (%g);}\n", ms); // dots command is provided in any case - fprintf(fp, "\\providecommand{mglc}[3]{\\draw[#3] (#1, #2) circle (0.1*\\mgl1);}\n\n"); + fprintf(fp, "\\providecommand{\\mglc}[3]{\\draw[#3] (#1, #2) circle (%g);}\n\n", 0.1*ms); for(i=0;iGetPrmNum();i++) { const mglPrim &q = gr->GetPrm(i); if(q.type<0) continue; // q.n1>=0 always - cp = _Gr_->GetColor(q); cname = mglColorName(cp); + cp = _Gr_->GetColor(q); + + ii = (cp.r*255+25)/51; + jj = (cp.g*255+25)/51; + kk = (cp.b*255+25)/51; + sprintf(cname,"mgl_%d",ii+6*(jj+6*kk)); +// cname = mglColorName(cp); const mglPnt p1=gr->GetPnt(q.n1); - float x=p1.x,y=p1.y,s=0.4*gr->FontFactor()*q.s; + float x=p1.x/100,y=p1.y/100,s=0.4*gr->FontFactor()*q.s/100; if(q.type==0) { if(!strchr("xsSoO",q.n4)) s *= 1.1; @@ -778,12 +867,12 @@ void mgl_write_tex(HMGL gr, const char *fname,const char *descr) else if(q.type==2 && cp.a>0) { const mglPnt p2=gr->GetPnt(q.n2), p3=gr->GetPnt(q.n3); - fprintf(fp, "\\fill[%s, fill opacity=%g] (%g,%g) -- (%g,%g) -- (%g,%g) -- cycle;\n", cname,cp.a, x,y, p2.x,p2.y, p3.x,p3.y); + fprintf(fp, "\\fill[%s, fill opacity=%g] (%g,%g) -- (%g,%g) -- (%g,%g) -- cycle;\n", cname,cp.a, x,y, p2.x/100,p2.y/100, p3.x/100,p3.y/100); } else if(q.type==3 && cp.a>0) { const mglPnt p2=gr->GetPnt(q.n2), p3=gr->GetPnt(q.n3), p4=gr->GetPnt(q.n4); - fprintf(fp, "\\fill[%s, fill opacity=%g] (%g,%g) -- (%g,%g) -- (%g,%g) -- (%g,%g) -- cycle;\n", cname,cp.a, x,y, p2.x,p2.y, p3.x,p3.y, p4.x,p4.y); + fprintf(fp, "\\fill[%s, fill opacity=%g] (%g,%g) -- (%g,%g) -- (%g,%g) -- (%g,%g) -- cycle;\n", cname,cp.a, x,y, p2.x/100,p2.y/100, p4.x/100,p4.y/100, p3.x/100,p3.y/100); } else if(q.type==1) // lines { @@ -794,7 +883,7 @@ void mgl_write_tex(HMGL gr, const char *fname,const char *descr) else fprintf(fp,"\\draw[%s,%s] ",cname,w[iw]); // TODO: add line dashing wp = q.w>1 ? q.w:1; st = q.n3; - put_line(gr,fp,false,i,wp,cp,st, "(%g,%g)", " -- (%g,%g)", false); + put_line(gr,fp,false,i,wp,cp,st, "(%g,%g)", " -- (%g,%g)", false, 0.01); fprintf(fp, ";\n"); } else if(q.type==6) // text @@ -806,10 +895,10 @@ void mgl_write_tex(HMGL gr, const char *fname,const char *descr) if((a&3)==2) ss.append(",west"); if((a&3)==0) ss.append(",east"); if(f&MGL_FONT_ITAL) ss.append(",font=\\itshape"); if(f&MGL_FONT_BOLD) ss.append(",font=\\bfshape"); - if(t.text.find('\\')!=std::string::npos) - fprintf(fp,"\\draw[%s] (%g,%g) node[rotate=%.2g] $%ls$;\n", ss.c_str(),x,y, ftet, t.text.c_str()); + if(t.text.find('\\')!=std::string::npos || t.text.find('{')!=std::string::npos || t.text.find('_')!=std::string::npos || t.text.find('^')!=std::string::npos) + fprintf(fp,"\\draw[%s] (%g,%g) node[rotate=%.2g]{$%ls$};\n", ss.c_str(),x,y, ftet, t.text.c_str()); else - fprintf(fp,"\\draw[%s] (%g,%g) node[rotate=%.2g] %ls;\n", ss.c_str(),x,y, ftet, t.text.c_str()); + fprintf(fp,"\\draw[%s] (%g,%g) node[rotate=%.2g]{%ls};\n", ss.c_str(),x,y, ftet, t.text.c_str()); } } fprintf(fp, "\\end{tikzpicture}\n"); diff --git a/src/export_3d.cpp b/src/export_3d.cpp index e81317f..f926814 100644 --- a/src/export_3d.cpp +++ b/src/export_3d.cpp @@ -26,7 +26,7 @@ #define _GR_ ((mglCanvas *)(*gr)) #define _Gr_ ((mglCanvas *)(gr)) int mgl_tga_save(const char *fname, int w, int h, unsigned char **p); -int mgl_png_save(const char *fname, int w, int h, unsigned char **p); +int mgl_pnga_save(const char *fname, int w, int h, unsigned char **p); void mgl_printf(void *fp, bool gz, const char *str, ...); //----------------------------------------------------------------------------- void mglTexture::GetRGBA(unsigned char *f) @@ -40,9 +40,9 @@ void mglTexture::GetRGBA(unsigned char *f) { i0 = 4*(j+256*i); c = c1 + (c2-c1)*(j/255.); - f[i0] = int(255*c.b); + f[i0] = int(255*c.r); f[i0+1] = int(255*c.g); - f[i0+2] = int(255*c.r); + f[i0+2] = int(255*c.b); f[i0+3] = int(255*c.a); } } @@ -51,7 +51,8 @@ void mglTexture::GetRGBA(unsigned char *f) void mgl_obj_prim(const mglPrim &q, const mglPnt &p, FILE *fp, float size) { char type = q.n4; float ss=size*0.35; - register long i=q.n1,j; + register long i=q.n1+1,j; + register long n1=q.n1+1,n2=q.n2+1,n3=q.n3+1,n4=q.n4+1; switch(q.type) { case 0: @@ -60,26 +61,26 @@ void mgl_obj_prim(const mglPrim &q, const mglPnt &p, FILE *fp, float size) else switch(type) { case 'P': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss,p.z); fprintf(fp,"l -4/%ld -3/%ld\n", i,i); fprintf(fp,"l -3/%ld -2/%ld\n", i,i); fprintf(fp,"l -2/%ld -1/%ld\n", i,i); fprintf(fp,"l -1/%ld -4/%ld\n", i,i); case '+': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z); + fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z); fprintf(fp,"l -4/%ld -3/%ld\n", i,i); fprintf(fp,"l -2/%ld -1/%ld\n", i,i); break; case 'X': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss,p.z); fprintf(fp,"l -4/%ld -3/%ld\n", i,i); fprintf(fp,"l -3/%ld -2/%ld\n", i,i); fprintf(fp,"l -2/%ld -1/%ld\n", i,i); @@ -87,127 +88,129 @@ void mgl_obj_prim(const mglPrim &q, const mglPnt &p, FILE *fp, float size) fprintf(fp,"l -1/%ld -3/%ld\n", i,i); fprintf(fp,"l -2/%ld -4/%ld\n", i,i); break; case 'x': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss,p.z); fprintf(fp,"l -1/%ld -3/%ld\n", i,i); fprintf(fp,"l -2/%ld -4/%ld\n", i,i); break; case 'S': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss,p.z); fprintf(fp,"f -4/%ld -3/%ld -2/%ld -1/%ld\n",i,i,i,i); break; case 's': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss,p.z); fprintf(fp,"l -4/%ld -3/%ld\n", i,i); fprintf(fp,"l -3/%ld -2/%ld\n", i,i); fprintf(fp,"l -2/%ld -1/%ld\n", i,i); fprintf(fp,"l -1/%ld -4/%ld\n", i,i); break; case 'D': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z); + fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z); + fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z); fprintf(fp,"f -4/%ld -3/%ld -2/%ld -1/%ld\n",i,i,i,i); break; case 'd': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z); + fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z); + fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z); fprintf(fp,"l -4/%ld -3/%ld\n", i,i); fprintf(fp,"l -3/%ld -2/%ld\n", i,i); fprintf(fp,"l -2/%ld -1/%ld\n", i,i); fprintf(fp,"l -1/%ld -4/%ld\n", i,i); break; case 'Y': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+0.8*ss,p.y+0.6*ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-0.8*ss,p.y+0.6*ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+0.8*ss,p.y+0.6*ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-0.8*ss,p.y+0.6*ss,p.z); fprintf(fp,"l -3/%ld %ld/%ld\n", i,i,i); fprintf(fp,"l -2/%ld %ld/%ld\n", i,i,i); fprintf(fp,"l -1/%ld %ld/%ld\n", i,i,i); break; case '*': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z); fprintf(fp,"l -2/%ld -1/%ld\n", i,i); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+0.6*ss,p.y+0.8*ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-0.6*ss,p.y-0.8*ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+0.6*ss,p.y+0.8*ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-0.6*ss,p.y-0.8*ss,p.z); fprintf(fp,"l -2/%ld -1/%ld\n", i,i); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+0.6*ss,p.y-0.8*ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-0.6*ss,p.y+0.8*ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+0.6*ss,p.y-0.8*ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-0.6*ss,p.y+0.8*ss,p.z); fprintf(fp,"l -2/%ld -1/%ld\n", i,i); break; case 'T': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss/2,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss/2,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss/2,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss/2,p.z); + fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z); fprintf(fp,"f -3/%ld -2/%ld -1/%ld\n", i,i,i); break; case '^': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss/2,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss/2,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss/2,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss/2,p.z); + fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z); fprintf(fp,"l -3/%ld -2/%ld\n", i,i); fprintf(fp,"l -2/%ld -1/%ld\n", i,i); fprintf(fp,"l -1/%ld -3/%ld\n", i,i); break; case 'V': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss/2,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss/2,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss/2,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss/2,p.z); + fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z); fprintf(fp,"f -3/%ld -2/%ld -1/%ld\n", i,i,i); break; case 'v': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss/2,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss/2,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss/2,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss/2,p.z); + fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z); fprintf(fp,"l -3/%ld -2/%ld\n", i,i); fprintf(fp,"l -2/%ld -1/%ld\n", i,i); fprintf(fp,"l -1/%ld -3/%ld\n", i,i); break; case 'L': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss/2,p.y+ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss/2,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss/2,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss/2,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z); fprintf(fp,"f -3/%ld -2/%ld -1/%ld\n", i,i,i); break; case '<': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss/2,p.y+ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss/2,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss/2,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss/2,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z); fprintf(fp,"l -3/%ld -2/%ld\n", i,i); fprintf(fp,"l -2/%ld -1/%ld\n", i,i); fprintf(fp,"l -1/%ld -3/%ld\n", i,i); break; case 'R': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss/2,p.y+ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss/2,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss/2,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss/2,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z); fprintf(fp,"f -3/%ld -2/%ld -1/%ld\n", i,i,i); break; case '>': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss/2,p.y+ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss/2,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss/2,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss/2,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z); fprintf(fp,"l -3/%ld -2/%ld\n", i,i); 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++) - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss*cos(j*M_PI/10),p.y+ss*sin(j*M_PI/10),p.z); + 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++) 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++) - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss*cos(j*M_PI/10),p.y+ss*sin(j*M_PI/10),p.z); + 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++) fprintf(fp,"l %ld/%ld %ld/%ld\n", j-21,i, j-20,i); break; } break; - case 1: fprintf(fp,"l %ld/%ld %ld/%ld\n", q.n1,q.n1, q.n2,q.n2); break; + case 1: fprintf(fp,"l %ld/%ld %ld/%ld\n", n1,n1, n2,n2); break; case 2: fprintf(fp,"f %ld/%ld/%ld %ld/%ld/%ld %ld/%ld/%ld\n", - q.n1,q.n1,q.n1, q.n2,q.n2,q.n2, q.n3,q.n3,q.n3); break; - case 3: fprintf(fp,"f %ld/%ld/%ld %ld/%ld/%ld %ld/%ld/%ld %ld/%ld/%ld\n", - q.n1,q.n1,q.n1, q.n2,q.n2,q.n2, q.n3,q.n3,q.n3, q.n4,q.n4,q.n4); break; + n1,n1,n1, n2,n2,n2, n3,n3,n3); break; + case 3: fprintf(fp,"f %ld/%ld/%ld %ld/%ld/%ld %ld/%ld/%ld\n", + n1,n1,n1, n2,n2,n2, n3,n3,n3); + fprintf(fp,"f %ld/%ld/%ld %ld/%ld/%ld %ld/%ld/%ld\n", + n2,n2,n2, n3,n3,n3, n4,n4,n4);break; case 4: break; // TODO: add glyphs export later } } @@ -233,16 +236,17 @@ void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png) char *tname = new char[len+1]; strcpy(tname,fname); FILE *fp=fopen(fname,"wt"); // vertices definition - fprintf(fp,"# Creator: MathGL library\n# Title: %s\n",descr ? descr : fname); + fprintf(fp,"# Created by MathGL library\n# Title: %s\n",descr ? descr : fname); for(i=0;iGetPntNum();i++) { mglPnt pp = gr->GetPnt(i); - fprintf(fp,"v %.2g %.2g %.2g\n",pp.x,pp.y,pp.z); - fprintf(fp,"vt %.2g %.2g\n",256*pp.t,256*pp.c); - fprintf(fp,"vn %.2g %.2g %.2g\n",pp.u,pp.v,pp.w); + fprintf(fp,"v %g %g %g\n",pp.x,pp.y,pp.z); + fprintf(fp,"vt %g %g\n",256*pp.t,256*pp.c); + if(isnan(pp.u)) fprintf(fp,"vn 0 0 0\n"); + else fprintf(fp,"vn %g %g %g\n",pp.u,pp.v,pp.w); } // primitive definition in groups - tname[len-4]=0; fprintf(fp,"# Primitives Definitions\nusemtl %s\n",tname); + tname[len-4]=0; fprintf(fp,"# Primitives Definitions\nusemtl %s.mtl\n",tname); std::vector p; mglPrim q; for(i=0;iGrp.size();i++) @@ -256,13 +260,13 @@ void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png) gr->Grp[i].p.clear(); // we don't need indexes anymore } // try to save "ungrouped" primitives - fprintf(fp,"g ungrouped\n"); +/* fprintf(fp,"g ungrouped\n"); // I think this can be omitted for(i=0;iGetPrmNum();i++) { const mglPrim q=gr->GetPrm(p[j]); m = q.id-m1; if(m<0 || m>=m2-m1+1) mgl_obj_prim(q, gr->GetPnt(q.n1), fp, q.s*gr->FontFactor()); - } + }*/ fclose(fp); // prepare MTL file tname[len-4]='.'; tname[len-3]='m'; tname[len-2]='t'; tname[len-1]='l'; @@ -280,11 +284,11 @@ void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png) fclose(fp); // prepare texture file (TGA or PNG) j=gr->GetTxtNum(); - unsigned char *buf = new unsigned char[256*256*j]; + unsigned char *buf = new unsigned char[4*256*256*j]; unsigned char **pbuf= (unsigned char **)malloc(256*j*sizeof(unsigned char *)); - for(i=0;i<256*j;i++) pbuf[i] = buf+256*i; - for(i=0;iGetTxt(i).GetRGBA(buf+i*256*256); - if(use_png) mgl_png_save(tname,256,256*j,pbuf); + for(i=0;i<256*j;i++) pbuf[i] = buf+4*256*i; + for(i=0;iGetTxt(i).GetRGBA(buf+i*256*256*4); + if(use_png) mgl_pnga_save(tname,256,256*j,pbuf); else mgl_tga_save(tname,256,256*j,pbuf); free(pbuf); delete []buf; delete []tname; } @@ -298,36 +302,45 @@ void mgl_write_stl(HMGL gr, const char *fname,const char *descr) if(gr->GetPrmNum()<=0) return; // nothing to do FILE *fp = fopen(fname,"wt"); fprintf(fp,"solid %s",descr?descr:"mathgl"); - register long i,j; + register long i; mglPnt pp; for(i=0;iGetPrmNum();i++) { - const mglPrim &q=gr->GetPrm(i); j = q.n1; + const mglPrim &q=gr->GetPrm(i); if(q.type==2) // triangles { - pp = gr->GetPnt(j); + pp = gr->GetPnt(q.n1); fprintf(fp,"facet normal %.2g %.2g %.2g\nouter loop\n",pp.u,pp.v,pp.w); - fprintf(fp,"vertex %.2g %.2g %.2g\n",pp.x,pp.y,pp.z); + fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z); pp = gr->GetPnt(q.n2); - fprintf(fp,"vertex %.2g %.2g %.2g\n",pp.x,pp.y,pp.z); + fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z); pp = gr->GetPnt(q.n3); - fprintf(fp,"vertex %.2g %.2g %.2g\n",pp.x,pp.y,pp.z); + fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z); fprintf(fp,"endloop\nendfacet\n"); } if(q.type==3) // quadrangles { - pp = gr->GetPnt(j); + pp = gr->GetPnt(q.n1); fprintf(fp,"facet normal %.2g %.2g %.2g\nouter loop\n",pp.u,pp.v,pp.w); - fprintf(fp,"vertex %.2g %.2g %.2g\n",pp.x,pp.y,pp.z); + fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z); pp = gr->GetPnt(q.n2); - fprintf(fp,"vertex %.2g %.2g %.2g\n",pp.x,pp.y,pp.z); + fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z); pp = gr->GetPnt(q.n3); - fprintf(fp,"vertex %.2g %.2g %.2g\n",pp.x,pp.y,pp.z); + fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z); + fprintf(fp,"endloop\nendfacet\n"); + pp = gr->GetPnt(q.n1); + fprintf(fp,"facet normal %.2g %.2g %.2g\nouter loop\n",pp.u,pp.v,pp.w); pp = gr->GetPnt(q.n4); - fprintf(fp,"vertex %.2g %.2g %.2g\n",pp.x,pp.y,pp.z); + fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z); + pp = gr->GetPnt(q.n2); + fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z); + pp = gr->GetPnt(q.n3); + fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z); fprintf(fp,"endloop\nendfacet\n"); } } + fprintf(fp,"endsolid %s",descr?descr:"mathgl"); + fclose(fp); } void mgl_write_stl_(uintptr_t *gr, const char *fname,const char *descr,int l,int n) { char *s=new char[l+1]; memcpy(s,fname,l); s[l]=0; @@ -340,12 +353,12 @@ void mgl_write_xyz(HMGL gr, const char *fname,const char *descr) register long i; FILE *fp=fopen(fname,"wt"), *ff; // vertices definition - fprintf(fp,"# Creator: MathGL library\n# Title: %s\n",descr ? descr : fname); + fprintf(fp,"# Created by MathGL library\n# Title: %s\n",descr ? descr : fname); fprintf(fp,"# List of Vertices, with (x,y,z) coordinates.\n"); for(i=0;iGetPntNum();i++) { mglPnt pp = gr->GetPnt(i); - fprintf(fp,"%.2g %.2g %.2g\n",pp.x,pp.y,pp.z); + fprintf(fp,"%g %g %g\n",pp.x,pp.y,pp.z); } fclose(fp); @@ -354,16 +367,16 @@ void mgl_write_xyz(HMGL gr, const char *fname,const char *descr) char *tname = new char[len+2]; strcpy(tname,fname); tname[len+1]=tname[len]=0; tname[len]='l'; fp = fopen(tname,"wt"); tname[len]='f'; ff = fopen(tname,"wt"); - fprintf(fp,"# Creator: MathGL library\n# Title: %s\n",descr ? descr : fname); + fprintf(fp,"# Created by MathGL library\n# Title: %s\n",descr ? descr : fname); fprintf(fp,"# Indices of vertices to connect for lines\n"); - fprintf(ff,"# Creator: MathGL library\n# Title: %s\n",descr ? descr : fname); + fprintf(ff,"# Created by MathGL library\n# Title: %s\n",descr ? descr : fname); fprintf(ff,"# Indices of vertices to connect for faces\n"); for(i=0;iGetPrmNum();i++) { const mglPrim q=gr->GetPrm(i); if(q.type==1) fprintf(fp,"%ld %ld\n",q.n1+1,q.n2+1); if(q.type==2) fprintf(ff,"%ld %ld %ld\n",q.n1+1,q.n2+1,q.n3+1); - if(q.type==3) fprintf(ff,"%ld %ld %ld %ld\n",q.n1+1,q.n2+1,q.n3+1,q.n4+1); + if(q.type==3) fprintf(ff,"%ld %ld %ld\n%ld %ld %ld\n",q.n1+1,q.n2+1,q.n3+1,q.n4+1,q.n2+1,q.n3+1); } fclose(fp); fclose(ff); delete []tname; } @@ -372,7 +385,7 @@ void mgl_write_xyz_(uintptr_t *gr, const char *fname,const char *descr,int l,int char *d=new char[n+1]; memcpy(d,descr,n); d[n]=0; mgl_write_xyz(_GR_,s,d); delete []s; delete []d; } //----------------------------------------------------------------------------- -void mgl_write_off(HMGL gr, const char *fname,const char *descr) +void mgl_write_off(HMGL gr, const char *fname,const char *descr, int colored) { register long i,nf=0; for(i=0;iGetPrmNum();i++) // find number of faces @@ -384,26 +397,50 @@ void mgl_write_off(HMGL gr, const char *fname,const char *descr) FILE *fp=fopen(fname,"wt"); // vertices definition - fprintf(fp,"cOFF\n# Creator: MathGL library\n# Title: %s\n",descr ? descr : fname); + if(colored) + fprintf(fp,"COFF\n# Created by MathGL library\n# Title: %s\n",descr ? descr : fname); + else + fprintf(fp,"OFF\n# Created by MathGL library\n# Title: %s\n",descr ? descr : fname); fprintf(fp,"# List of Vertices, with (x,y,z,r,g,b,a) coordinates.\n"); fprintf(fp,"%ld %ld 0\n",gr->GetPntNum(), nf); for(i=0;iGetPntNum();i++) { mglPnt pp = gr->GetPnt(i); - fprintf(fp,"%.2g %.2g %.2g %.2g %.2g %.2g %.2g\n", pp.x, pp.y, pp.z, pp.r, pp.g, pp.b, pp.a); + if(colored) + fprintf(fp,"%g %g %g %g %g %g %g\n", pp.x, pp.y, pp.z, pp.r, pp.g, pp.b, pp.a); + else fprintf(fp,"%g %g %g\n", pp.x, pp.y, pp.z); } for(i=0;iGetPrmNum();i++) { const mglPrim q=gr->GetPrm(i); - if(q.type==2) fprintf(fp,"3 %ld %ld %ld\n",q.n1,q.n2,q.n3); - if(q.type==3) fprintf(fp,"4 %ld %ld %ld %ld\n",q.n1,q.n2,q.n3,q.n4); + mglPnt p1=gr->GetPnt(q.n1), p2, p3, p4; + if(colored) + { + if(q.type==2) + fprintf(fp,"3 %ld %ld %ld\n",q.n1,q.n2,q.n3); + if(q.type==3) + fprintf(fp,"4 %ld %ld %ld %ld\n",q.n1,q.n2,q.n4,q.n3); + } + else + { + if(q.type==2) + { + p2=gr->GetPnt(q.n2); p3=gr->GetPnt(q.n3); + fprintf(fp,"3 %ld %ld %ld %.2g %.2g %.2g %.2g\n",q.n1,q.n2,q.n3, (p1.r+p2.r+p3.r)/3, (p1.g+p2.g+p3.g)/3, (p1.b+p2.b+p3.b)/3, (p1.a+p2.a+p3.a)/3); + } + if(q.type==3) + { + p2=gr->GetPnt(q.n2); p3=gr->GetPnt(q.n3); p4=gr->GetPnt(q.n4); + fprintf(fp,"4 %ld %ld %ld %ld %.2g %.2g %.2g %.2g\n",q.n1,q.n2,q.n4,q.n3, (p1.r+p2.r+p3.r+p4.r)/4, (p1.g+p2.g+p3.g+p4.g)/4, (p1.b+p2.b+p3.b+p4.b)/4, (p1.a+p2.a+p3.a+p4.a)/4); + } + } } fclose(fp); } -void mgl_write_off_(uintptr_t *gr, const char *fname,const char *descr,int l,int n) +void mgl_write_off_(uintptr_t *gr, const char *fname,const char *descr,int *colored,int l,int n) { char *s=new char[l+1]; memcpy(s,fname,l); s[l]=0; char *d=new char[n+1]; memcpy(d,descr,n); d[n]=0; - mgl_write_off(_GR_,s,d); delete []s; delete []d; } + mgl_write_off(_GR_,s,d,*colored); delete []s; delete []d; } //----------------------------------------------------------------------------- void mgl_write_idtf(HMGL gr, const char *fname,const char *descr) { /*_Gr_->WriteIDTF(fname,descr);*/ } // TODO: Add idtf support later @@ -423,13 +460,13 @@ bool mglCanvas::ExportMGLD(const char *fname, const char *descr) for(i=0;i': - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss/2,p.y+ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss/2,p.y-ss,p.z); - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss/2,p.y+ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x-ss/2,p.y-ss,p.z); + fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z); fprintf(fp,"l -3/%ld -2/%ld\n", i,i); 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++) - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss*cos(j*M_PI/10),p.y+ss*sin(j*M_PI/10),p.z); + 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++) 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++) - fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss*cos(j*M_PI/10),p.y+ss*sin(j*M_PI/10),p.z); + 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++) fprintf(fp,"l %ld/%ld %ld/%ld\n", j-21,i, j-20,i); break; @@ -646,14 +683,14 @@ void mglCanvas::WriteXGL(const char *fname,const char *descr) FILE *fp=fopen(fname,"wt"); if(!fp) return true; fprintf(fp,"\n%s\n", descr?descr:fname); - fprintf(fp,"%.2g, %.2g, %.2g\n", BDef[0]/255., BDef[1]/255., BDef[2]/255.); - fprintf(fp,"\n%.2g, %.2g, %.2g\n",AmbBr, AmbBr, AmbBr); + fprintf(fp,"%g, %g, %g\n", BDef[0]/255., BDef[1]/255., BDef[2]/255.); + fprintf(fp,"\n%g, %g, %g\n",AmbBr, AmbBr, AmbBr); register unsigned long i,j; if(get(MGL_ENABLE_LIGHT)) for(i=0;i<10;i++) if(light[i].n && isnan(light[i].r.x)) { - fprintf(fp, "\n%.2g, %.2g, %.2g\n", light[i].d.x, light[i].d.y, light[i].d.z); - fprintf(fp, "%.2g, %.2g, %.2g\n\n", light[i].c.r, light[i].c.g, light[i].c.b); + fprintf(fp, "\n%g, %g, %g\n", light[i].d.x, light[i].d.y, light[i].d.z); + fprintf(fp, "%g, %g, %g\n\n", light[i].c.r, light[i].c.g, light[i].c.b); } fprintf(fp,""); @@ -689,8 +726,8 @@ void mglCanvas::WriteXGL(const char *fname,const char *descr) for(j=0;j%.2g, %.2g, %.2g

\n",j, s.x, s.y, s.z); - fprintf(fp,"%.2g, %.2g, %.2g\n",j, s.x, s.y, s.z); + fprintf(fp,"

%g, %g, %g

\n",j, s.x, s.y, s.z); + fprintf(fp,"%g, %g, %g\n",j, s.x, s.y, s.z); } // TODO: add line styles for(j=0;ja[0]}). @node Operators, Global functions, Data information, Data processing @section Operators -@anchor{copy} @deftypefn {MGL command} {} copy @sc{dat} dat2 ['eq'=''] @ifclear UDAV @deftypefnx {Method on @code{mglData}} @code{void} operator= (@code{const mglData &}d) diff --git a/texinfo/overview_en.texi b/texinfo/overview_en.texi index 31ff2ad..d896ede 100644 --- a/texinfo/overview_en.texi +++ b/texinfo/overview_en.texi @@ -136,6 +136,14 @@ This is enough for a compilation of console program or with external (non-MathGL * mglGraph class is single plotter class instead of mglGraphZB, mglGraphPS and so on. * Text style and text color positions are swapped. I.e. text style @samp{r:C} give red centered text, but not roman dark cyan text as for v.1.*. * ColumnPlot() indexing is reverted. +* Move most of arguments of plotting functions into the string parameter and/or options. +* ``Bright'' colors (like @{b8@}) can be used in color schemes and line styles. +* Intensively use pthread internally for parallelization of drawing and data processing. +* Add tick labels rotation and skipping. Add ticks in time/date format. +* New kinds of plots (Tape(), Label(), ...). Extend existing plots. New primitives (Circle(), Ellipse(), Rhomb(), ...). +* Improve MGL scripts. Add 'ask' command and allow string concatenation from different lines. +* Export to LaTeX and to 3D formats (OBJ, OFF, STL, X3D). + @c ------------------------------------------------------------------ @node Utilities, Thanks, Changes from v.1, Overview diff --git a/widgets/glut.cpp b/widgets/glut.cpp index 5d72434..888898c 100644 --- a/widgets/glut.cpp +++ b/widgets/glut.cpp @@ -195,3 +195,15 @@ HMGL mgl_create_graph_glut(int (*draw)(HMGL gr, void *p), const char *title, voi //----------------------------------------------------------------------------- mglCanvasGLUT::mglCanvasGLUT() : mglCanvasGL() {} //----------------------------------------------------------------------------- +#ifdef HAVE_FLTK +HMGL mgl_create_graph_fltk(int (*)(HMGL gr, void *p), const char *, void *) +{ return NULL; } +int mgl_fltk_run(){return 0;} +#endif +//----------------------------------------------------------------------------- +#ifdef HAVE_QT +HMGL mgl_create_graph_qt(int (*)(HMGL gr, void *p), const char *, void *) +{ return NULL; } +int mgl_qt_run(){return 0;} +#endif +//----------------------------------------------------------------------------- diff --git a/widgets/qt.cpp b/widgets/qt.cpp index d9580d7..35d405a 100644 --- a/widgets/qt.cpp +++ b/widgets/qt.cpp @@ -400,7 +400,7 @@ void QMathGL::exportOFF(QString fname) else { setlocale(LC_ALL, "C"); - mgl_write_off(gr,setExtension(fname,"svg").toAscii(), appName.toAscii()); + mgl_write_off(gr,setExtension(fname,"svg").toAscii(), appName.toAscii(),0); setlocale(LC_ALL, ""); } } -- 2.30.2