void save(mglGraph *gr,const char *name,const char *suf);\r
void test(mglGraph *gr)\r
{\r
- mglData a(256,2); a.Fill(-1,1);\r
- gr->SubPlot(2,10,0,NULL,0.2); gr->Dens(a,"kw"); gr->Puts(0.07, 0.92, "kw", "A");\r
- gr->SubPlot(2,10,1,NULL,0.2); gr->Dens(a,"wk"); gr->Puts(0.57, 0.92, "wk", "A");\r
- gr->SubPlot(2,10,2,NULL,0.2); gr->Dens(a,"kHCcw"); gr->Puts(0.07, 0.82, "kHCcw", "A");\r
- gr->SubPlot(2,10,3,NULL,0.2); gr->Dens(a,"kBbcw"); gr->Puts(0.57, 0.82, "kBbcw", "A");\r
- gr->SubPlot(2,10,4,NULL,0.2); gr->Dens(a,"kRryw"); gr->Puts(0.07, 0.72, "kRryw", "A");\r
- gr->SubPlot(2,10,5,NULL,0.2); gr->Dens(a,"kGgew"); gr->Puts(0.57, 0.72, "kGgew", "A");\r
- gr->SubPlot(2,10,6,NULL,0.2); gr->Dens(a,"BbwrR"); gr->Puts(0.07, 0.62, "BbwrR", "A");\r
- gr->SubPlot(2,10,7,NULL,0.2); gr->Dens(a,"BbwgG"); gr->Puts(0.57, 0.62, "BbwgG", "A");\r
- gr->SubPlot(2,10,8,NULL,0.2); gr->Dens(a,"GgwmM"); gr->Puts(0.07, 0.52, "GgwmM", "A");\r
- gr->SubPlot(2,10,9,NULL,0.2); gr->Dens(a,"UuwqR"); gr->Puts(0.57, 0.52, "UuwqR", "A");\r
- gr->SubPlot(2,10,10,NULL,0.2); gr->Dens(a,"QqwcC"); gr->Puts(0.07, 0.42, "QqwcC", "A");\r
- gr->SubPlot(2,10,11,NULL,0.2); gr->Dens(a,"CcwyY"); gr->Puts(0.57, 0.42, "CcwyY", "A");\r
- gr->SubPlot(2,10,12,NULL,0.2); gr->Dens(a,"bcwyr"); gr->Puts(0.07, 0.32, "bcwyr", "A");\r
- gr->SubPlot(2,10,13,NULL,0.2); gr->Dens(a,"bwr"); gr->Puts(0.57, 0.32, "bwr", "A");\r
- gr->SubPlot(2,10,14,NULL,0.2); gr->Dens(a,"BbcyrR"); gr->Puts(0.07, 0.22, "BbcyrR", "A");\r
- gr->SubPlot(2,10,15,NULL,0.2); gr->Dens(a,"UbcyqR"); gr->Puts(0.57, 0.22, "UbcyqR", "A");\r
- gr->SubPlot(2,10,16,NULL,0.2); gr->Dens(a,"BbcwyrR"); gr->Puts(0.07, 0.12, "BbcwyrR", "A");\r
- gr->SubPlot(2,10,17,NULL,0.2); gr->Dens(a,"bcyr"); gr->Puts(0.57, 0.12, "bcyr", "A");\r
- gr->SubPlot(2,10,18,NULL,0.2); gr->Dens(a,"BbcyrR|"); gr->Puts(0.07, 0.02, "BbcyrR|", "A");\r
- gr->SubPlot(2,10,19,NULL,0.2); gr->Dens(a,"bgr"); gr->Puts(0.57, 0.02, "bgr", "A");\r
+ 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};\r
+ 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};\r
+ mglData qq(6,4,q), xx(8,xc), yy(8,yc), zz(8,zc);\r
+ gr->Light(true); //gr->Alpha(true);\r
+ gr->SubPlot(2,1,0); gr->Title("QuadPlot sample"); gr->Rotate(50,60);\r
+ gr->QuadPlot(qq,xx,yy,zz,"yr");\r
+ gr->QuadPlot(qq,xx,yy,zz,"k#");\r
+\r
+ float t[] = {0,1,2, 0,1,3, 0,2,3, 1,2,3};\r
+ float xt[] = {-1,1,0,0}, yt[] = {-1,-1,1,0}, zt[] = {-1,-1,-1,1};\r
+ mglData tt(4,3,t), uu(4,xt), vv(4,yt), ww(4,zt);\r
+ gr->SubPlot(2,1,1); gr->Title("TriPlot_sample"); gr->Rotate(50,60);\r
+ gr->TriPlot(tt,uu,vv,ww,"b");\r
+ gr->TriPlot(tt,uu,vv,ww,"k#");\r
+\r
+ gr->WriteXYZ("test.xyz");\r
+ gr->WriteSTL("test.stl");\r
+ gr->WriteOFF("test.off");\r
+ gr->WriteTEX("test.tex");\r
+ gr->WriteOBJ("test.obj");\r
+ gr->WriteOBJ("test1.obj","",true);\r
return;\r
\r
mglParse par;\r
gr->Label('y',"C",1); gr->Label('z',"Z",1);\r
}\r
//-----------------------------------------------------------------------------\r
+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"\r
+"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"\r
+"subplot 2 1 0:title 'QuadPlot sample':rotate 50 60\n"\r
+"quadplot q xq yq zq 'yr'\nquadplot q xq yq zq '#k'\n"\r
+"list t 0 1 2 | 0 1 3 | 0 2 3 | 1 2 3\n"\r
+"list xq -1 1 0 0\nlist yq -1 -1 1 0\nlist zq -1 -1 -1 1\n"\r
+"subplot 2 1 1:title 'TriPlot sample':rotate 50 60\n"\r
+"triplot t xt yt zt 'b'\ntriplot t xt yt zt '#k'\n";\r
+void smgl_triplot(mglGraph *gr)\r
+{\r
+ 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};\r
+ 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};\r
+ mglData qq(6,4,q), xx(8,xc), yy(8,yc), zz(8,zc);\r
+ gr->Light(true); //gr->Alpha(true);\r
+ gr->SubPlot(2,1,0); gr->Title("QuadPlot sample"); gr->Rotate(50,60);\r
+ gr->QuadPlot(qq,xx,yy,zz,"yr");\r
+ gr->QuadPlot(qq,xx,yy,zz,"k#");\r
+\r
+ float t[] = {0,1,2, 0,1,3, 0,2,3, 1,2,3};\r
+ float xt[] = {-1,1,0,0}, yt[] = {-1,-1,1,0}, zt[] = {-1,-1,-1,1};\r
+ mglData tt(4,3,t), uu(4,xt), vv(4,yt), ww(4,zt);\r
+ gr->SubPlot(2,1,1); gr->Title("TriPlot sample"); gr->Rotate(50,60);\r
+ gr->TriPlot(tt,uu,vv,ww,"b");\r
+ gr->TriPlot(tt,uu,vv,ww,"k#");\r
+}\r
//-----------------------------------------------------------------------------\r
//-----------------------------------------------------------------------------\r
//-----------------------------------------------------------------------------\r
{"tiles", smgl_tiles},\r
{"torus", smgl_torus},\r
{"traj", smgl_traj},\r
+ {"triplot", smgl_triplot},\r
{"tube", smgl_tube},\r
{"type0", smgl_type0},\r
{"type1", smgl_type1},\r
void mgl_write_tex(HMGL gr, const char *fname,const char *descr);\r
void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png);\r
void mgl_write_stl(HMGL gr, const char *fname,const char *descr);\r
-void mgl_write_off(HMGL gr, const char *fname,const char *descr);\r
+void mgl_write_off(HMGL gr, const char *fname,const char *descr, int colored);\r
void mgl_write_xyz(HMGL gr, const char *fname,const char *descr);\r
void mgl_write_wrl(HMGL gr, const char *fname,const char *descr);\r
void mgl_write_x3d(HMGL gr, const char *fname,const char *descr);\r
void mgl_close_gif_(uintptr_t *graph);\r
void mgl_write_obj_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld);\r
void mgl_write_stl_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld);\r
-void mgl_write_off_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld);\r
+void mgl_write_off_(uintptr_t *graph, const char *fname,const char *descr,int *colored,int lf,int ld);\r
void mgl_write_xyz_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld);\r
void mgl_write_wrl_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld);\r
void mgl_write_x3d_(uintptr_t *graph, const char *fname,const char *descr,int lf,int ld);\r
inline void WriteSTL(const char *fname,const char *descr="")\r
{ mgl_write_stl(gr, fname, descr); }\r
/// Write the frame in file using OFF format\r
- inline void WriteOFF(const char *fname,const char *descr="")\r
- { mgl_write_off(gr, fname, descr); }\r
+ inline void WriteOFF(const char *fname,const char *descr="", bool colored=false)\r
+ { mgl_write_off(gr, fname, descr,colored); }\r
/// Write the frame in file using STL format (faces only)\r
inline void WriteWRL(const char *fname,const char *descr="")\r
{ mgl_write_wrl(gr, fname, descr); }\r
#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)
{
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.v1<aa.v2) // adjust periodic values
{
if(abs(t1.tm_year-t2.tm_year)==1) t2.tm_yday += 365;
{ v1 = aa.v1; v0 = v0 - aa.dv*floor((v0-aa.v2)/aa.dv+1e-3); }
if(v0+aa.dv!=v0 && v1+aa.dv!=v1) for(v=v0;v<=v1;v+=aa.dv)
{
- time_t tt = v; tm tp; localtime_r(&tt,&tp);
+ time_t tt = v; tm tp; mgl_localtime_r(&tt,&tp);
wcsftime(buf,64,aa.t,&tp); aa.AddLabel(buf,v);
}
}
long ss=gr->AddTexture(sch);\r
gr->SaveState(opt);\r
static int cgid=1; gr->StartGroup("TriPlot",cgid++);\r
- mglPoint p1,p2,p3,q;\r
+ mglPoint p1,p2,p3,q=mglPoint(NAN,NAN);\r
\r
register long i,k1,k2,k3;\r
+ bool wire = sch && strchr(sch,'#');\r
long nc = a->GetNx();\r
if(nc!=n && nc>=m) // colors per triangle\r
{\r
p2 = mglPoint(x->v(k2), y->v(k2), z->v(k2));\r
k3 = long(nums->v(2,i)+0.5);\r
p3 = mglPoint(x->v(k3), y->v(k3), z->v(k3));\r
- q = (p2-p1) ^ (p3-p1);\r
+ if(!wire) q = (p2-p1) ^ (p3-p1);\r
k1 = gr->AddPnt(p1,gr->GetC(ss,a->v(k1)),q);\r
k2 = gr->AddPnt(p2,gr->GetC(ss,a->v(k2)),q);\r
k3 = gr->AddPnt(p3,gr->GetC(ss,a->v(k3)),q);\r
k1 = long(nums->v(0,i)+0.5);\r
k2 = long(nums->v(1,i)+0.5);\r
k3 = long(nums->v(2,i)+0.5);\r
- 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));\r
+ if(!wire)\r
+ q = mglPoint(x->v(k2)-x->v(k1), y->v(k2)-y->v(k1), z->v(k2)-z->v(k1)) ^\r
+ mglPoint(x->v(k3)-x->v(k1), y->v(k3)-y->v(k1), z->v(k3)-z->v(k1));\r
// try be sure that in the same direction ... but it is so slow :(\r
if(pp[k1]*q<0) q*=-1; pp[k1] += q;\r
if(pp[k2]*q<0) q*=-1; pp[k2] += q;\r
k1 = long(nums->v(0,i)+0.5);\r
k2 = long(nums->v(1,i)+0.5);\r
k3 = long(nums->v(2,i)+0.5);\r
- gr->trig_plot(kk[k1],kk[k2],kk[k3]);\r
+ if(wire)\r
+ {\r
+ gr->line_plot(kk[k1],kk[k2]); gr->line_plot(kk[k1],kk[k3]);\r
+ gr->line_plot(kk[k3],kk[k2]);\r
+ }\r
+ else gr->trig_plot(kk[k1],kk[k2],kk[k3]);\r
}\r
delete []kk; delete []pp;\r
}\r
long ss=gr->AddTexture(sch);\r
gr->SaveState(opt);\r
static int cgid=1; gr->StartGroup("QuadPlot",cgid++);\r
- mglPoint p1,p2,p3,p4,q;\r
+ mglPoint p1,p2,p3,p4,q=mglPoint(NAN,NAN);\r
\r
register long i,k1,k2,k3,k4;\r
long nc = a->GetNx();\r
+ bool wire = sch && strchr(sch,'#');\r
if(nc!=n && nc>=m) // colors per triangle\r
{\r
gr->Reserve(m*4);\r
p3 = mglPoint(x->v(k3), y->v(k3), z->v(k3));\r
k4 = floor(nums->v(3,i)+0.5);\r
p4 = mglPoint(x->v(k4), y->v(k4), z->v(k4));\r
- q = (p2-p1) ^ (p3-p1);\r
+ if(!wire) q = (p2-p1) ^ (p3-p1);\r
k1 = gr->AddPnt(p1,gr->GetC(ss,a->v(k1)),q);\r
k2 = gr->AddPnt(p2,gr->GetC(ss,a->v(k2)),q);\r
k3 = gr->AddPnt(p3,gr->GetC(ss,a->v(k3)),q);\r
k4 = floor(nums->v(3,i)+0.5);\r
p4 = mglPoint(x->v(k4), y->v(k4), z->v(k4));\r
\r
- q = (p2-p1) ^ (p3-p1); if(pp[k1]*q<0) q*=-1; pp[k1] += q;\r
- q = (p2-p4) ^ (p3-p4); if(pp[k2]*q<0) q*=-1; pp[k2] += q;\r
- q = (p1-p2) ^ (p4-p2); if(pp[k3]*q<0) q*=-1; pp[k3] += q;\r
- q = (p1-p4) ^ (p4-p3); if(pp[k4]*q<0) q*=-1; pp[k4] += q;\r
+ if(wire) pp[k1]=pp[k2]=pp[k3]=pp[k4]=mglPoint(NAN,NAN);\r
+ else\r
+ {\r
+ q = (p2-p1) ^ (p3-p1); if(pp[k1]*q<0) q*=-1; pp[k1] += q;\r
+ q = (p2-p4) ^ (p3-p4); if(pp[k2]*q<0) q*=-1; pp[k2] += q;\r
+ q = (p1-p2) ^ (p4-p2); if(pp[k3]*q<0) q*=-1; pp[k3] += q;\r
+ q = (p1-p4) ^ (p4-p3); if(pp[k4]*q<0) q*=-1; pp[k4] += q;\r
+ }\r
}\r
for(i=0;i<n;i++) // add points\r
{\r
k2 = floor(nums->v(1,i)+0.5);\r
k3 = floor(nums->v(2,i)+0.5);\r
k4 = floor(nums->v(3,i)+0.5);\r
- gr->quad_plot(kk[k1],kk[k2],kk[k3],kk[k4]);\r
+ if(wire)\r
+ {\r
+ gr->line_plot(kk[k1],kk[k2]); gr->line_plot(kk[k1],kk[k3]);\r
+ gr->line_plot(kk[k4],kk[k2]); gr->line_plot(kk[k4],kk[k3]);\r
+ }\r
+ else gr->quad_plot(kk[k1],kk[k2],kk[k3],kk[k4]);\r
}\r
delete []kk; delete []pp;\r
}\r
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);
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;
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)
{
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++;
}
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");
{
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);
mgl_printf(fp, gz, "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 20000303 Stylable//EN\" \"http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd\">\n");
mgl_printf(fp, gz, "<svg width=\"%d\" height=\"%d\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", _Gr_->GetWidth(), hh);
- mgl_printf(fp, gz, "<!--Creator: MathGL library-->\n");
+ mgl_printf(fp, gz, "<!--Created by MathGL library-->\n");
mgl_printf(fp, gz, "<!--Title: %s-->\n<!--CreationDate: %s-->\n\n",descr?descr:fname,ctime(&now));
// write definition for all glyphs
}
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, "><path d=\" M %g %g", " L %g %g", true);
+ put_line(gr,fp,gz,i,wp,cp,st, "><path d=\" M %g %g", " L %g %g", true, 1);
mgl_printf(fp, gz, "\"/> </g>\n");
}
else if(q.type==4)
/// 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
{
{
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,
}
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;i<gr->GetPrmNum();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;
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
{
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
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");
#define _GR_ ((mglCanvas *)(*gr))\r
#define _Gr_ ((mglCanvas *)(gr))\r
int mgl_tga_save(const char *fname, int w, int h, unsigned char **p);\r
-int mgl_png_save(const char *fname, int w, int h, unsigned char **p);\r
+int mgl_pnga_save(const char *fname, int w, int h, unsigned char **p);\r
void mgl_printf(void *fp, bool gz, const char *str, ...);\r
//-----------------------------------------------------------------------------\r
void mglTexture::GetRGBA(unsigned char *f)\r
{\r
i0 = 4*(j+256*i);\r
c = c1 + (c2-c1)*(j/255.);\r
- f[i0] = int(255*c.b);\r
+ f[i0] = int(255*c.r);\r
f[i0+1] = int(255*c.g);\r
- f[i0+2] = int(255*c.r);\r
+ f[i0+2] = int(255*c.b);\r
f[i0+3] = int(255*c.a);\r
}\r
}\r
void mgl_obj_prim(const mglPrim &q, const mglPnt &p, FILE *fp, float size)\r
{\r
char type = q.n4; float ss=size*0.35;\r
- register long i=q.n1,j;\r
+ register long i=q.n1+1,j;\r
+ register long n1=q.n1+1,n2=q.n2+1,n3=q.n3+1,n4=q.n4+1;\r
switch(q.type)\r
{\r
case 0:\r
else switch(type)\r
{\r
case 'P':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss,p.z);\r
fprintf(fp,"l -4/%ld -3/%ld\n", i,i);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -4/%ld\n", i,i);\r
case '+':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z);\r
fprintf(fp,"l -4/%ld -3/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i); break;\r
case 'X':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss,p.z);\r
fprintf(fp,"l -4/%ld -3/%ld\n", i,i);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -3/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -4/%ld\n", i,i); break;\r
case 'x':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss,p.z);\r
fprintf(fp,"l -1/%ld -3/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -4/%ld\n", i,i); break;\r
case 'S':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss,p.z);\r
fprintf(fp,"f -4/%ld -3/%ld -2/%ld -1/%ld\n",i,i,i,i); break;\r
case 's':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss,p.z);\r
fprintf(fp,"l -4/%ld -3/%ld\n", i,i);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -4/%ld\n", i,i); break;\r
case 'D':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z);\r
fprintf(fp,"f -4/%ld -3/%ld -2/%ld -1/%ld\n",i,i,i,i); break;\r
case 'd':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z);\r
fprintf(fp,"l -4/%ld -3/%ld\n", i,i);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -4/%ld\n", i,i); break;\r
case 'Y':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+0.8*ss,p.y+0.6*ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-0.8*ss,p.y+0.6*ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+0.8*ss,p.y+0.6*ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-0.8*ss,p.y+0.6*ss,p.z);\r
fprintf(fp,"l -3/%ld %ld/%ld\n", i,i,i);\r
fprintf(fp,"l -2/%ld %ld/%ld\n", i,i,i);\r
fprintf(fp,"l -1/%ld %ld/%ld\n", i,i,i); break;\r
case '*':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+0.6*ss,p.y+0.8*ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-0.6*ss,p.y-0.8*ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+0.6*ss,p.y+0.8*ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-0.6*ss,p.y-0.8*ss,p.z);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+0.6*ss,p.y-0.8*ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-0.6*ss,p.y+0.8*ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+0.6*ss,p.y-0.8*ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-0.6*ss,p.y+0.8*ss,p.z);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i); break;\r
case 'T':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z);\r
fprintf(fp,"f -3/%ld -2/%ld -1/%ld\n", i,i,i); break;\r
case '^':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -3/%ld\n", i,i); break;\r
case 'V':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z);\r
fprintf(fp,"f -3/%ld -2/%ld -1/%ld\n", i,i,i); break;\r
case 'v':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -3/%ld\n", i,i); break;\r
case 'L':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss/2,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss/2,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss/2,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss/2,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z);\r
fprintf(fp,"f -3/%ld -2/%ld -1/%ld\n", i,i,i); break;\r
case '<':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss/2,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss/2,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss/2,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss/2,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -3/%ld\n", i,i); break;\r
case 'R':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss/2,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss/2,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss/2,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss/2,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z);\r
fprintf(fp,"f -3/%ld -2/%ld -1/%ld\n", i,i,i); break;\r
case '>':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss/2,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss/2,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss/2,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss/2,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -3/%ld\n", i,i); break;\r
case 'O':\r
for(long j=0;j<=20;j++)\r
- 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);\r
+ 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);\r
for(long j=0;j<20;j++)\r
fprintf(fp,"f %ld/%ld %ld/%ld %ld/%ld\n", j-21,i, j-20,i, i,i);\r
break;\r
case 'C': fprintf(fp,"p %ld\n", i);\r
case 'o':\r
for(long j=0;j<=20;j++)\r
- 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);\r
+ 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);\r
for(long j=0;j<20;j++)\r
fprintf(fp,"l %ld/%ld %ld/%ld\n", j-21,i, j-20,i);\r
break;\r
}\r
break;\r
- case 1: fprintf(fp,"l %ld/%ld %ld/%ld\n", q.n1,q.n1, q.n2,q.n2); break;\r
+ case 1: fprintf(fp,"l %ld/%ld %ld/%ld\n", n1,n1, n2,n2); break;\r
case 2: fprintf(fp,"f %ld/%ld/%ld %ld/%ld/%ld %ld/%ld/%ld\n",\r
- q.n1,q.n1,q.n1, q.n2,q.n2,q.n2, q.n3,q.n3,q.n3); break;\r
- case 3: fprintf(fp,"f %ld/%ld/%ld %ld/%ld/%ld %ld/%ld/%ld %ld/%ld/%ld\n",\r
- 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;\r
+ n1,n1,n1, n2,n2,n2, n3,n3,n3); break;\r
+ case 3: fprintf(fp,"f %ld/%ld/%ld %ld/%ld/%ld %ld/%ld/%ld\n",\r
+ n1,n1,n1, n2,n2,n2, n3,n3,n3);\r
+ fprintf(fp,"f %ld/%ld/%ld %ld/%ld/%ld %ld/%ld/%ld\n",\r
+ n2,n2,n2, n3,n3,n3, n4,n4,n4);break;\r
case 4: break; // TODO: add glyphs export later\r
}\r
}\r
char *tname = new char[len+1]; strcpy(tname,fname);\r
FILE *fp=fopen(fname,"wt");\r
// vertices definition\r
- fprintf(fp,"# Creator: MathGL library\n# Title: %s\n",descr ? descr : fname);\r
+ fprintf(fp,"# Created by MathGL library\n# Title: %s\n",descr ? descr : fname);\r
for(i=0;i<gr->GetPntNum();i++)\r
{\r
mglPnt pp = gr->GetPnt(i);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",pp.x,pp.y,pp.z);\r
- fprintf(fp,"vt %.2g %.2g\n",256*pp.t,256*pp.c);\r
- fprintf(fp,"vn %.2g %.2g %.2g\n",pp.u,pp.v,pp.w);\r
+ fprintf(fp,"v %g %g %g\n",pp.x,pp.y,pp.z);\r
+ fprintf(fp,"vt %g %g\n",256*pp.t,256*pp.c);\r
+ if(isnan(pp.u)) fprintf(fp,"vn 0 0 0\n");\r
+ else fprintf(fp,"vn %g %g %g\n",pp.u,pp.v,pp.w);\r
}\r
// primitive definition in groups\r
- tname[len-4]=0; fprintf(fp,"# Primitives Definitions\nusemtl %s\n",tname);\r
+ tname[len-4]=0; fprintf(fp,"# Primitives Definitions\nusemtl %s.mtl\n",tname);\r
std::vector<long> p;\r
mglPrim q;\r
for(i=0;i<gr->Grp.size();i++)\r
gr->Grp[i].p.clear(); // we don't need indexes anymore\r
}\r
// try to save "ungrouped" primitives\r
- fprintf(fp,"g ungrouped\n");\r
+/* fprintf(fp,"g ungrouped\n"); // I think this can be omitted\r
for(i=0;i<gr->GetPrmNum();i++)\r
{\r
const mglPrim q=gr->GetPrm(p[j]); m = q.id-m1;\r
if(m<0 || m>=m2-m1+1)\r
mgl_obj_prim(q, gr->GetPnt(q.n1), fp, q.s*gr->FontFactor());\r
- }\r
+ }*/\r
fclose(fp);\r
// prepare MTL file\r
tname[len-4]='.'; tname[len-3]='m'; tname[len-2]='t'; tname[len-1]='l';\r
fclose(fp);\r
// prepare texture file (TGA or PNG)\r
j=gr->GetTxtNum();\r
- unsigned char *buf = new unsigned char[256*256*j];\r
+ unsigned char *buf = new unsigned char[4*256*256*j];\r
unsigned char **pbuf= (unsigned char **)malloc(256*j*sizeof(unsigned char *));\r
- for(i=0;i<256*j;i++) pbuf[i] = buf+256*i;\r
- for(i=0;i<j;i++) gr->GetTxt(i).GetRGBA(buf+i*256*256);\r
- if(use_png) mgl_png_save(tname,256,256*j,pbuf);\r
+ for(i=0;i<256*j;i++) pbuf[i] = buf+4*256*i;\r
+ for(i=0;i<j;i++) gr->GetTxt(i).GetRGBA(buf+i*256*256*4);\r
+ if(use_png) mgl_pnga_save(tname,256,256*j,pbuf);\r
else mgl_tga_save(tname,256,256*j,pbuf);\r
free(pbuf); delete []buf; delete []tname;\r
}\r
if(gr->GetPrmNum()<=0) return; // nothing to do\r
FILE *fp = fopen(fname,"wt");\r
fprintf(fp,"solid %s",descr?descr:"mathgl");\r
- register long i,j;\r
+ register long i;\r
mglPnt pp;\r
for(i=0;i<gr->GetPrmNum();i++)\r
{\r
- const mglPrim &q=gr->GetPrm(i); j = q.n1;\r
+ const mglPrim &q=gr->GetPrm(i);\r
if(q.type==2) // triangles\r
{\r
- pp = gr->GetPnt(j);\r
+ pp = gr->GetPnt(q.n1);\r
fprintf(fp,"facet normal %.2g %.2g %.2g\nouter loop\n",pp.u,pp.v,pp.w);\r
- fprintf(fp,"vertex %.2g %.2g %.2g\n",pp.x,pp.y,pp.z);\r
+ fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z);\r
pp = gr->GetPnt(q.n2);\r
- fprintf(fp,"vertex %.2g %.2g %.2g\n",pp.x,pp.y,pp.z);\r
+ fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z);\r
pp = gr->GetPnt(q.n3);\r
- fprintf(fp,"vertex %.2g %.2g %.2g\n",pp.x,pp.y,pp.z);\r
+ fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z);\r
fprintf(fp,"endloop\nendfacet\n");\r
}\r
if(q.type==3) // quadrangles\r
{\r
- pp = gr->GetPnt(j);\r
+ pp = gr->GetPnt(q.n1);\r
fprintf(fp,"facet normal %.2g %.2g %.2g\nouter loop\n",pp.u,pp.v,pp.w);\r
- fprintf(fp,"vertex %.2g %.2g %.2g\n",pp.x,pp.y,pp.z);\r
+ fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z);\r
pp = gr->GetPnt(q.n2);\r
- fprintf(fp,"vertex %.2g %.2g %.2g\n",pp.x,pp.y,pp.z);\r
+ fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z);\r
pp = gr->GetPnt(q.n3);\r
- fprintf(fp,"vertex %.2g %.2g %.2g\n",pp.x,pp.y,pp.z);\r
+ fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z);\r
+ fprintf(fp,"endloop\nendfacet\n");\r
+ pp = gr->GetPnt(q.n1);\r
+ fprintf(fp,"facet normal %.2g %.2g %.2g\nouter loop\n",pp.u,pp.v,pp.w);\r
pp = gr->GetPnt(q.n4);\r
- fprintf(fp,"vertex %.2g %.2g %.2g\n",pp.x,pp.y,pp.z);\r
+ fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z);\r
+ pp = gr->GetPnt(q.n2);\r
+ fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z);\r
+ pp = gr->GetPnt(q.n3);\r
+ fprintf(fp,"vertex %g %g %g\n",pp.x,pp.y,pp.z);\r
fprintf(fp,"endloop\nendfacet\n");\r
}\r
}\r
+ fprintf(fp,"endsolid %s",descr?descr:"mathgl");\r
+ fclose(fp);\r
}\r
void mgl_write_stl_(uintptr_t *gr, const char *fname,const char *descr,int l,int n)\r
{ char *s=new char[l+1]; memcpy(s,fname,l); s[l]=0;\r
\r
register long i;\r
FILE *fp=fopen(fname,"wt"), *ff; // vertices definition\r
- fprintf(fp,"# Creator: MathGL library\n# Title: %s\n",descr ? descr : fname);\r
+ fprintf(fp,"# Created by MathGL library\n# Title: %s\n",descr ? descr : fname);\r
fprintf(fp,"# List of Vertices, with (x,y,z) coordinates.\n");\r
for(i=0;i<gr->GetPntNum();i++)\r
{\r
mglPnt pp = gr->GetPnt(i);\r
- fprintf(fp,"%.2g %.2g %.2g\n",pp.x,pp.y,pp.z);\r
+ fprintf(fp,"%g %g %g\n",pp.x,pp.y,pp.z);\r
}\r
fclose(fp);\r
\r
char *tname = new char[len+2]; strcpy(tname,fname); tname[len+1]=tname[len]=0;\r
tname[len]='l'; fp = fopen(tname,"wt");\r
tname[len]='f'; ff = fopen(tname,"wt");\r
- fprintf(fp,"# Creator: MathGL library\n# Title: %s\n",descr ? descr : fname);\r
+ fprintf(fp,"# Created by MathGL library\n# Title: %s\n",descr ? descr : fname);\r
fprintf(fp,"# Indices of vertices to connect for lines\n");\r
- fprintf(ff,"# Creator: MathGL library\n# Title: %s\n",descr ? descr : fname);\r
+ fprintf(ff,"# Created by MathGL library\n# Title: %s\n",descr ? descr : fname);\r
fprintf(ff,"# Indices of vertices to connect for faces\n");\r
for(i=0;i<gr->GetPrmNum();i++)\r
{\r
const mglPrim q=gr->GetPrm(i);\r
if(q.type==1) fprintf(fp,"%ld %ld\n",q.n1+1,q.n2+1);\r
if(q.type==2) fprintf(ff,"%ld %ld %ld\n",q.n1+1,q.n2+1,q.n3+1);\r
- if(q.type==3) fprintf(ff,"%ld %ld %ld %ld\n",q.n1+1,q.n2+1,q.n3+1,q.n4+1);\r
+ 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);\r
}\r
fclose(fp); fclose(ff); delete []tname;\r
}\r
char *d=new char[n+1]; memcpy(d,descr,n); d[n]=0;\r
mgl_write_xyz(_GR_,s,d); delete []s; delete []d; }\r
//-----------------------------------------------------------------------------\r
-void mgl_write_off(HMGL gr, const char *fname,const char *descr)\r
+void mgl_write_off(HMGL gr, const char *fname,const char *descr, int colored)\r
{\r
register long i,nf=0;\r
for(i=0;i<gr->GetPrmNum();i++) // find number of faces\r
\r
FILE *fp=fopen(fname,"wt");\r
// vertices definition\r
- fprintf(fp,"cOFF\n# Creator: MathGL library\n# Title: %s\n",descr ? descr : fname);\r
+ if(colored)\r
+ fprintf(fp,"COFF\n# Created by MathGL library\n# Title: %s\n",descr ? descr : fname);\r
+ else\r
+ fprintf(fp,"OFF\n# Created by MathGL library\n# Title: %s\n",descr ? descr : fname);\r
fprintf(fp,"# List of Vertices, with (x,y,z,r,g,b,a) coordinates.\n");\r
fprintf(fp,"%ld %ld 0\n",gr->GetPntNum(), nf);\r
for(i=0;i<gr->GetPntNum();i++)\r
{\r
mglPnt pp = gr->GetPnt(i);\r
- fprintf(fp,"%.2g %.2g %.2g %.2g %.2g %.2g %.2g\n", pp.x, pp.y, pp.z, pp.r, pp.g, pp.b, pp.a);\r
+ if(colored)\r
+ fprintf(fp,"%g %g %g %g %g %g %g\n", pp.x, pp.y, pp.z, pp.r, pp.g, pp.b, pp.a);\r
+ else fprintf(fp,"%g %g %g\n", pp.x, pp.y, pp.z);\r
}\r
for(i=0;i<gr->GetPrmNum();i++)\r
{\r
const mglPrim q=gr->GetPrm(i);\r
- if(q.type==2) fprintf(fp,"3 %ld %ld %ld\n",q.n1,q.n2,q.n3);\r
- if(q.type==3) fprintf(fp,"4 %ld %ld %ld %ld\n",q.n1,q.n2,q.n3,q.n4);\r
+ mglPnt p1=gr->GetPnt(q.n1), p2, p3, p4;\r
+ if(colored)\r
+ {\r
+ if(q.type==2)\r
+ fprintf(fp,"3 %ld %ld %ld\n",q.n1,q.n2,q.n3);\r
+ if(q.type==3)\r
+ fprintf(fp,"4 %ld %ld %ld %ld\n",q.n1,q.n2,q.n4,q.n3);\r
+ }\r
+ else\r
+ {\r
+ if(q.type==2)\r
+ {\r
+ p2=gr->GetPnt(q.n2); p3=gr->GetPnt(q.n3);\r
+ 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);\r
+ }\r
+ if(q.type==3)\r
+ {\r
+ p2=gr->GetPnt(q.n2); p3=gr->GetPnt(q.n3); p4=gr->GetPnt(q.n4);\r
+ 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);\r
+ }\r
+ }\r
}\r
fclose(fp);\r
}\r
-void mgl_write_off_(uintptr_t *gr, const char *fname,const char *descr,int l,int n)\r
+void mgl_write_off_(uintptr_t *gr, const char *fname,const char *descr,int *colored,int l,int n)\r
{ char *s=new char[l+1]; memcpy(s,fname,l); s[l]=0;\r
char *d=new char[n+1]; memcpy(d,descr,n); d[n]=0;\r
- mgl_write_off(_GR_,s,d); delete []s; delete []d; }\r
+ mgl_write_off(_GR_,s,d,*colored); delete []s; delete []d; }\r
//-----------------------------------------------------------------------------\r
void mgl_write_idtf(HMGL gr, const char *fname,const char *descr)\r
{ /*_Gr_->WriteIDTF(fname,descr);*/ } // TODO: Add idtf support later\r
for(i=0;i<Pnt.size();i++)\r
{\r
const mglPnt &q=Pnt[i];\r
- fprintf(fp,"%.2g %.2g %.2g %.2g %.2g %.2g %.2g %.2g %.2g %.2g %.2g %.2g\n", q.x, q.y, q.z, q.c, q.t, q.u, q.v, q.w, q.r, q.g, q.b, q.a);\r
+ fprintf(fp,"%g %g %g %g %g %g %g %g %g %g %g %g\n", q.x, q.y, q.z, q.c, q.t, q.u, q.v, q.w, q.r, q.g, q.b, q.a);\r
}\r
fprintf(fp,"# Primitives: type n1 n2 n3 n4 id s w p\n");\r
for(i=0;i<Prm.size();i++)\r
{\r
const mglPrim &q=Prm[i];\r
- fprintf(fp,"%d %ld %ld %ld %ld %d %.2g %.2g %.2g\n", q.type, q.n1, q.n2, q.n3, q.n4, q.id, q.s, q.w, q.p);\r
+ fprintf(fp,"%d %ld %ld %ld %ld %d %g %g %g\n", q.type, q.n1, q.n2, q.n3, q.n4, q.id, q.s, q.w, q.p);\r
}\r
fclose(fp);\r
return false;\r
else switch(type) // TODO: save mark by PATCH\r
{\r
case 'P':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss,p.z);\r
fprintf(fp,"l -4/%ld -3/%ld\n", i,i);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -4/%ld\n", i,i);\r
case '+':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z);\r
fprintf(fp,"l -4/%ld -3/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i); break;\r
case 'X':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss,p.z);\r
fprintf(fp,"l -4/%ld -3/%ld\n", i,i);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -3/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -4/%ld\n", i,i); break;\r
case 'x':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss,p.z);\r
fprintf(fp,"l -1/%ld -3/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -4/%ld\n", i,i); break;\r
case 'S':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss,p.z);\r
fprintf(fp,"f -4/%ld -3/%ld -2/%ld -1/%ld\n",i,i,i,i); break;\r
case 's':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss,p.z);\r
fprintf(fp,"l -4/%ld -3/%ld\n", i,i);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -4/%ld\n", i,i); break;\r
case 'D':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z);\r
fprintf(fp,"f -4/%ld -3/%ld -2/%ld -1/%ld\n",i,i,i,i); break;\r
case 'd':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z);\r
fprintf(fp,"l -4/%ld -3/%ld\n", i,i);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -4/%ld\n", i,i); break;\r
case 'Y':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+0.8*ss,p.y+0.6*ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-0.8*ss,p.y+0.6*ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+0.8*ss,p.y+0.6*ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-0.8*ss,p.y+0.6*ss,p.z);\r
fprintf(fp,"l -3/%ld %ld/%ld\n", i,i,i);\r
fprintf(fp,"l -2/%ld %ld/%ld\n", i,i,i);\r
fprintf(fp,"l -1/%ld %ld/%ld\n", i,i,i); break;\r
case '*':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+0.6*ss,p.y+0.8*ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-0.6*ss,p.y-0.8*ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+0.6*ss,p.y+0.8*ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-0.6*ss,p.y-0.8*ss,p.z);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+0.6*ss,p.y-0.8*ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-0.6*ss,p.y+0.8*ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+0.6*ss,p.y-0.8*ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-0.6*ss,p.y+0.8*ss,p.z);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i); break;\r
case 'T':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z);\r
fprintf(fp,"f -3/%ld -2/%ld -1/%ld\n", i,i,i); break;\r
case '^':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y-ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y-ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y-ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y-ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y+ss,p.z);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -3/%ld\n", i,i); break;\r
case 'V':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z);\r
fprintf(fp,"f -3/%ld -2/%ld -1/%ld\n", i,i,i); break;\r
case 'v':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y+ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y+ss/2,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y+ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y+ss/2,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x,p.y-ss,p.z);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -3/%ld\n", i,i); break;\r
case 'L':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss/2,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss/2,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss/2,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss/2,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z);\r
fprintf(fp,"f -3/%ld -2/%ld -1/%ld\n", i,i,i); break;\r
case '<':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss/2,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss/2,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss/2,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss/2,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss,p.y,p.z);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -3/%ld\n", i,i); break;\r
case 'R':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss/2,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss/2,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss/2,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss/2,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z);\r
fprintf(fp,"f -3/%ld -2/%ld -1/%ld\n", i,i,i); break;\r
case '>':\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss/2,p.y+ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x-ss/2,p.y-ss,p.z);\r
- fprintf(fp,"v %.2g %.2g %.2g\n",p.x+ss,p.y,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss/2,p.y+ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x-ss/2,p.y-ss,p.z);\r
+ fprintf(fp,"v %g %g %g\n",p.x+ss,p.y,p.z);\r
fprintf(fp,"l -3/%ld -2/%ld\n", i,i);\r
fprintf(fp,"l -2/%ld -1/%ld\n", i,i);\r
fprintf(fp,"l -1/%ld -3/%ld\n", i,i); break;\r
case 'O':\r
for(long j=0;j<=20;j++)\r
- 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);\r
+ 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);\r
for(long j=0;j<20;j++)\r
fprintf(fp,"f %ld/%ld %ld/%ld %ld/%ld\n", j-21,i, j-20,i, i,i);\r
break;\r
case 'C': fprintf(fp,"p %ld\n", i);\r
case 'o':\r
for(long j=0;j<=20;j++)\r
- 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);\r
+ 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);\r
for(long j=0;j<20;j++)\r
fprintf(fp,"l %ld/%ld %ld/%ld\n", j-21,i, j-20,i);\r
break;\r
FILE *fp=fopen(fname,"wt");\r
if(!fp) return true;\r
fprintf(fp,"<WORLD>\n<NAME>%s</NAME>\n", descr?descr:fname);\r
- fprintf(fp,"<BACKGROUND><BACKCOLOR>%.2g, %.2g, %.2g</BACKCOLOR></BACKGROUND>\n", BDef[0]/255., BDef[1]/255., BDef[2]/255.);\r
- fprintf(fp,"<LIGHTING>\n<AMBIENT>%.2g, %.2g, %.2g</AMBIENT>\n",AmbBr, AmbBr, AmbBr);\r
+ fprintf(fp,"<BACKGROUND><BACKCOLOR>%g, %g, %g</BACKCOLOR></BACKGROUND>\n", BDef[0]/255., BDef[1]/255., BDef[2]/255.);\r
+ fprintf(fp,"<LIGHTING>\n<AMBIENT>%g, %g, %g</AMBIENT>\n",AmbBr, AmbBr, AmbBr);\r
register unsigned long i,j;\r
if(get(MGL_ENABLE_LIGHT)) for(i=0;i<10;i++)\r
if(light[i].n && isnan(light[i].r.x))\r
{\r
- fprintf(fp, "<DIRECTIONALLIGHT>\n<DIRECTION>%.2g, %.2g, %.2g</DIRECTION>\n", light[i].d.x, light[i].d.y, light[i].d.z);\r
- fprintf(fp, "<SPECULAR>%.2g, %.2g, %.2g</SPECULAR>\n</DIRECTIONALLIGHT>\n", light[i].c.r, light[i].c.g, light[i].c.b);\r
+ fprintf(fp, "<DIRECTIONALLIGHT>\n<DIRECTION>%g, %g, %g</DIRECTION>\n", light[i].d.x, light[i].d.y, light[i].d.z);\r
+ fprintf(fp, "<SPECULAR>%g, %g, %g</SPECULAR>\n</DIRECTIONALLIGHT>\n", light[i].c.r, light[i].c.g, light[i].c.b);\r
}\r
fprintf(fp,"</LIGHTING>");\r
\r
for(j=0;j<GetPntNum();j++) if(pg[j]) // write Pnt for this object\r
{\r
const mglPnt s=Pnt[j];\r
- fprintf(fp,"<P ID=\"%u\">%.2g, %.2g, %.2g</P>\n",j, s.x, s.y, s.z);\r
- fprintf(fp,"<N ID=\"%u\">%.2g, %.2g, %.2g</N>\n",j, s.x, s.y, s.z);\r
+ fprintf(fp,"<P ID=\"%u\">%g, %g, %g</P>\n",j, s.x, s.y, s.z);\r
+ fprintf(fp,"<N ID=\"%u\">%g, %g, %g</N>\n",j, s.x, s.y, s.z);\r
}\r
// TODO: add line styles\r
for(j=0;j<p.size();j++) // now write primitives itself\r
@end deftypefn
@deftypefn {Method on @code{mglGraph}} @code{void} WriteSTL (@code{const char *}fname, @code{const char *}descr=@code{""})
-@deftypefnx {C function} @code{void} mgl_write_obj (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
+@deftypefnx {C function} @code{void} mgl_write_stl (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
Exports current frame to STL file using vector representation (see @url{http://en.wikipedia.org/wiki/STL_(file_format), STL format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name).
@end deftypefn
-@deftypefn {Method on @code{mglGraph}} @code{void} WriteOFF (@code{const char *}fname, @code{const char *}descr=@code{""})
-@deftypefnx {C function} @code{void} mgl_write_obj (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
+@deftypefn {Method on @code{mglGraph}} @code{void} WriteOFF (@code{const char *}fname, @code{const char *}descr=@code{""}, @code{bool} colored=@code{false})
+@deftypefnx {C function} @code{void} mgl_write_off (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr, @code{bool} colored)
Exports current frame to OFF file using vector representation (see @url{http://people.sc.fsu.edu/~jburkardt/data/off/off.html, OFF format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name).
@end deftypefn
@deftypefn {Method on @code{mglGraph}} @code{void} WriteX3D (@code{const char *}fname, @code{const char *}descr=@code{""})
-@deftypefnx {C function} @code{void} mgl_write_obj (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
+@deftypefnx {C function} @code{void} mgl_write_x3d (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
Exports current frame to OBJ/MTL file using vector representation (see @url{http://en.wikipedia.org/wiki/X3d, X3D format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name).
@end deftypefn
@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)
* 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
//-----------------------------------------------------------------------------\r
mglCanvasGLUT::mglCanvasGLUT() : mglCanvasGL() {}\r
//-----------------------------------------------------------------------------\r
+#ifdef HAVE_FLTK\r
+HMGL mgl_create_graph_fltk(int (*)(HMGL gr, void *p), const char *, void *)\r
+{ return NULL; }\r
+int mgl_fltk_run(){return 0;}\r
+#endif\r
+//-----------------------------------------------------------------------------\r
+#ifdef HAVE_QT\r
+HMGL mgl_create_graph_qt(int (*)(HMGL gr, void *p), const char *, void *)\r
+{ return NULL; }\r
+int mgl_qt_run(){return 0;}\r
+#endif\r
+//-----------------------------------------------------------------------------\r
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, "");
}
}