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