mglPnt() { xx=yy=zz=x=y=z=c=t=u=v=w=r=g=b=a=0; }\r
};\r
inline mglPnt operator+(const mglPnt &a, const mglPnt &b)\r
-{ mglPnt c;\r
- c.x=a.x+b.x; c.y=a.y+b.y; c.z=a.z+b.z; c.c=a.c+b.c;\r
- c.t=a.t+b.t; c.u=a.u+b.u; c.v=a.v+b.v; c.w=a.w+b.w;\r
- c.r=a.r+b.r; c.g=a.g+b.g; c.b=a.b+b.b; c.a=a.a+b.a; return c; }\r
+{ mglPnt c=a;\r
+ c.x+=b.x; c.y+=b.y; c.z+=b.z; c.u+=b.u; c.v+=b.v; c.w+=b.w;\r
+ c.r+=b.r; c.g+=b.g; c.b+=b.b; c.a+=b.a; return c; }\r
inline mglPnt operator-(const mglPnt &a, const mglPnt &b)\r
-{ mglPnt c;\r
- c.x=a.x-b.x; c.y=a.y-b.y; c.z=a.z-b.z; c.c=a.c-b.c;\r
- c.t=a.t-b.t; c.u=a.u-b.u; c.v=a.v-b.v; c.w=a.w-b.w;\r
- c.r=a.r-b.r; c.g=a.g-b.g; c.b=a.b-b.b; c.a=a.a-b.a; return c; }\r
+{ mglPnt c=a;\r
+ c.x-=b.x; c.y-=b.y; c.z-=b.z; c.u-=b.u; c.v-=b.v; c.w-=b.w;\r
+ c.r-=b.r; c.g-=b.g; c.b-=b.b; c.a-=b.a; return c; }\r
inline mglPnt operator*(const mglPnt &a, float b)\r
-{ mglPnt c;\r
- c.x=a.x*b; c.y=a.y*b; c.z=a.z*b; c.c=a.c*b;\r
- c.t=a.t*b; c.u=a.u*b; c.v=a.v*b; c.w=a.w*b;\r
- c.r=a.r*b; c.g=a.g*b; c.b=a.b*b; c.a=a.a*b; return c; }\r
+{ mglPnt c=a;\r
+ c.x*=b; c.y*=b; c.z*=b; c.u*=b; c.v*=b; c.w*=b;\r
+ c.r*=b; c.g*=b; c.b*=b; c.a*=b; return c; }\r
inline mglPnt operator*(float b, const mglPnt &a)\r
-{ mglPnt c;\r
- c.x=a.x*b; c.y=a.y*b; c.z=a.z*b; c.c=a.c*b;\r
- c.t=a.t*b; c.u=a.u*b; c.v=a.v*b; c.w=a.w*b;\r
- c.r=a.r*b; c.g=a.g*b; c.b=a.b*b; c.a=a.a*b; return c; }\r
+{ mglPnt c=a;\r
+ c.x*=b; c.y*=b; c.z*=b; c.u*=b; c.v*=b; c.w*=b;\r
+ c.r*=b; c.g*=b; c.b*=b; c.a*=b; return c; }\r
//-----------------------------------------------------------------------------\r
struct mglTexture\r
{\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, 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_write_wgl(HMGL gr, const char *fname,const char *descr);\r
void mgl_write_idtf(HMGL gr, const char *fname,const char *descr);\r
inline void set_flag(int f) { flag = f; }\r
/// Set flags for handling mouse\r
void set_graph(mglCanvas *gr); ///< Set grapher object\r
- inline void set_graph(mglGraph *gr)\r
- { set_graph(dynamic_cast<mglCanvas *>(gr->Self())); }\r
+ inline void set_graph(mglGraph *Gr)\r
+ { set_graph(dynamic_cast<mglCanvas *>(Gr->Self())); }\r
/// Get pointer to grapher\r
inline HMGL get_graph() { return gr; }\r
/// Set drawing functions and its parameter\r
/// Write the frame in file using OFF format\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
- /// Write the frame in file using OFF format\r
+ /// Write the frame in file using X3D format\r
inline void WriteX3D(const char *fname,const char *descr="")\r
{ mgl_write_x3d(gr, fname, descr); }\r
/// Write the frame in file using IDTF format\r
void exportOBJ(QString fname=""); ///< export to OBJ file\r
void exportSTL(QString fname=""); ///< export to STL file\r
void exportOFF(QString fname=""); ///< export to OFF file\r
- void exportWRL(QString fname=""); ///< export to WRL file\r
void exportX3D(QString fname=""); ///< export to XYZ file\r
void exportIDTF(QString fname=""); ///< export to IDTF file\r
void setMGLFont(QString path); ///< restore/load font for graphics\r
lib_LTLIBRARIES = libmgl.la
-libmgl_la_LIBADD = $(PNG_LIBS) $(GL_LIBS) $(LOPENMP)
+libmgl_la_LIBADD = $(PNG_LIBS) $(GL_LIBS)
libmgl_la_LDFLAGS = -no-undefined -version-info $(MGL_CURRENT):$(MGL_REVISION):$(MGL_AGE)
libmgl_la_CXXFLAGS = \
endif
libmgl_la_SOURCES = \
-axis.cpp base_cf.cpp base.cpp canvas_cf.cpp canvas.cpp \
-cont.cpp crust.cpp data.cpp data_io.cpp data_new.cpp \
-data_op.cpp data_png.cpp def_font.cpp export_2d.cpp eval.cpp \
-evalp.cpp exec.cpp export.cpp fit.cpp font.cpp \
-opengl.cpp other.cpp parser.cpp tex_table.cpp pde.cpp \
-pixel.cpp plot.cpp prim.cpp surf.cpp vect.cpp \
-volume.cpp export_3d.cpp
+addon.cpp axis.cpp base_cf.cpp base.cpp canvas_cf.cpp canvas.cpp cont.cpp crust.cpp \
+data.cpp data_io.cpp data_new.cpp data_op.cpp data_png.cpp def_font.cpp export_2d.cpp \
+export_3d.cpp eval.cpp evalp.cpp exec.cpp export.cpp fit.cpp font.cpp other.cpp evalc.cpp \
+parser.cpp pde.cpp pixel.cpp plot.cpp prim.cpp surf.cpp tex_table.cpp vect.cpp volume.cpp \
+opengl.cpp
+
+#if USE_OPENGL
+#libmgl_la_SOURCES += opengl.cpp
+#libmgl_la_LIBADD +=
+#endif
\ No newline at end of file
//-----------------------------------------------------------------------------
long mgl_have_color(const char *stl)
{
- register long i,j;
- if(stl) for(i=j=0;stl[i];i++) if(strchr(MGL_COLORS,stl[i])) j++;
+ register long i,j=0;
+ if(stl) for(i=0;stl[i];i++) if(strchr(MGL_COLORS,stl[i])) j++;
return j;
}
//-----------------------------------------------------------------------------
{ v1 = aa.v1; v0 = v0 - aa.dv*floor((v0-aa.v2)/aa.dv+1e-3); }
if(v0+aa.dv!=v0 && v1+aa.dv!=v1) for(v=v0;v<=v1;v+=aa.dv)
{
- time_t tt = v; tm tp; mgl_localtime_r(&tt,&tp);
+ tt = v; tm tp; mgl_localtime_r(&tt,&tp);
wcsftime(buf,64,aa.t,&tp); aa.AddLabel(buf,v);
}
}
if(c>aa.v1 && c<aa.v2 && i%k!=0) continue;
p = o+d*c; nn = s-o; ScalePoint(p,nn);
mglPnt &qq = Pnt[kk[i]];
- float ax=qq.u*cos(tet) + qq.v*sin(tet), ay=qq.v*cos(tet) - qq.u*sin(tet);
- if(qq.u*nn.x+qq.v*nn.y < ax*nn.x+ay*nn.y)
- { ax=qq.u*cos(tet) - qq.v*sin(tet); ay=qq.v*cos(tet) + qq.u*sin(tet); }
- qq.u = ax; qq.v = ay;
+ float ux=qq.u*cos(tet) + qq.v*sin(tet), uy=qq.v*cos(tet) - qq.u*sin(tet);
+ if(qq.u*nn.x+qq.v*nn.y < ux*nn.x+uy*nn.y)
+ { ux=qq.u*cos(tet) - qq.v*sin(tet); uy=qq.v*cos(tet) + qq.u*sin(tet); }
+ qq.u = ux; qq.v = uy;
if(!get(MGL_ENABLE_RTEXT)) pos[2] = nn.x<0 || (nn.x==0 && nn.y<0) ? 'L':'R';
if(col && strchr(col,'@'))
{
// edge points
- mglPoint p[8]={Min,Min,Min,Min,Max,Max,Max,Max},nan=mglPoint(NAN),o[8];
+ mglPoint p[8]={Min,Min,Min,Min,Max,Max,Max,Max},nan=mglPoint(NAN),oo[8];
p[1].x=Max.x; p[2].y=Max.y; p[3].z=Max.z;
p[4].x=Min.x; p[5].y=Min.y; p[6].z=Min.z;
float zm=1e5; int im=0;
- memcpy(o,p,8*sizeof(mglPoint));
+ memcpy(oo,p,8*sizeof(mglPoint));
for(int i=0;i<8;i++) // find deepest point
{
ScalePoint(p[i],nan,false);
if(p[i].z<zm) { zm=p[i].z; im=i; }
}
// now draw faces
- char clr[5]="{y9}";
+ char color[5]="{y9}";
register int i; // first color used for faces, last one for edges
for(i=0;col[i];i++) if(strchr(MGL_COLORS,col[i]))
{
- if(i>1 && col[i-1]=='{') { clr[1]=col[i]; clr[2]=col[i+1]; break; }
- else { clr[0]=col[i]; clr[1]=0; break; }
+ if(i>1 && col[i-1]=='{') { color[1]=col[i]; color[2]=col[i+1]; break; }
+ else { color[0]=col[i]; color[1]=0; break; }
}
- mgl_facex(this, o[im].x, Min.y, Min.z, Max.y-Min.y, Max.z-Min.z, clr,0,0);
- mgl_facey(this, Min.x, o[im].y, Min.z, Max.x-Min.x, Max.z-Min.z, clr,0,0);
- mgl_facez(this, Min.x, Min.y, o[im].z, Max.x-Min.x, Max.y-Min.y, clr,0,0);
+ mgl_facex(this, oo[im].x, Min.y, Min.z, Max.y-Min.y, Max.z-Min.z, color,0,0);
+ mgl_facey(this, Min.x, oo[im].y, Min.z, Max.x-Min.x, Max.z-Min.z, color,0,0);
+ mgl_facez(this, Min.x, Min.y, oo[im].z, Max.x-Min.x, Max.y-Min.y, color,0,0);
}
}
Org=o; TickLen=tl;
RotateN(ftet,0,0,1);\r
if(strchr(font,'@')) // draw box around text\r
{\r
- long k1,k2,k3,k4; mglPnt pt; mglPoint p;\r
+ long k1,k2,k3,k4; mglPnt pt; mglPoint pp;\r
w = fnt->Width(text,font); h = fnt->Height(font);\r
int align; mglGetStyle(font,0,&align); align = align&3;\r
float d=-w*align/2.-h*0.2; w+=h*0.4;\r
- pt = q; p = mglPoint(d,-h*0.4); PostScale(p);\r
- pt.x=pt.xx=p.x; pt.y=pt.yy=p.y; MGL_PUSH(Pnt,pt,mutexPnt); k1=Pnt.size()-1;\r
- pt = q; p = mglPoint(w+d,-h*0.4); PostScale(p);\r
- pt.x=pt.xx=p.x; pt.y=pt.yy=p.y; MGL_PUSH(Pnt,pt,mutexPnt); k2=Pnt.size()-1;\r
- pt = q; p = mglPoint(d,h*1.2); PostScale(p);\r
- pt.x=pt.xx=p.x; pt.y=pt.yy=p.y; MGL_PUSH(Pnt,pt,mutexPnt); k3=Pnt.size()-1;\r
- pt = q; p = mglPoint(w+d,h*1.2); PostScale(p);\r
- pt.x=pt.xx=p.x; pt.y=pt.yy=p.y; MGL_PUSH(Pnt,pt,mutexPnt); k4=Pnt.size()-1;\r
+ pt = q; pp = mglPoint(d,-h*0.4); PostScale(pp);\r
+ pt.x=pt.xx=pp.x; pt.y=pt.yy=pp.y; MGL_PUSH(Pnt,pt,mutexPnt); k1=Pnt.size()-1;\r
+ pt = q; pp = mglPoint(w+d,-h*0.4); PostScale(pp);\r
+ pt.x=pt.xx=pp.x; pt.y=pt.yy=pp.y; MGL_PUSH(Pnt,pt,mutexPnt); k2=Pnt.size()-1;\r
+ pt = q; pp = mglPoint(d,h*1.2); PostScale(pp);\r
+ pt.x=pt.xx=pp.x; pt.y=pt.yy=pp.y; MGL_PUSH(Pnt,pt,mutexPnt); k3=Pnt.size()-1;\r
+ pt = q; pp = mglPoint(w+d,h*1.2); PostScale(pp);\r
+ pt.x=pt.xx=pp.x; pt.y=pt.yy=pp.y; MGL_PUSH(Pnt,pt,mutexPnt); k4=Pnt.size()-1;\r
line_plot(k1,k2); line_plot(k1,k3); line_plot(k4,k2); line_plot(k4,k3);\r
}\r
fsize *= fnt->Puts(text,font,col)/2;\r
mglSegment(mglPoint q1,mglPoint q2) {p1=q1;p2=q2;next=prev=-1;}\r
};\r
// function for connecting arbitrary line segments\r
-void mgl_connect(HMGL gr, float val, HCDT a, HCDT x, HCDT y, HCDT z, float c, int text,long ak)\r
+/*void mgl_connect(HMGL gr, float val, HCDT a, HCDT x, HCDT y, HCDT z, float c, int text,long ak)\r
{\r
long n=a->GetNx(), m=a->GetNy();\r
if(n<2 || m<2 || x->GetNx()*x->GetNy()!=n*m || y->GetNx()*y->GetNy()!=n*m || z->GetNx()*z->GetNy()!=n*m)\r
if(s2.next<0 && s1.p1==s2.p2) { s1.prev = j; s2.next=i; continue; }\r
// if(s2.prev<0 && s1.p2==s2.p1)\r
// { s1.next = j; s2.prev=i; continue; }\r
+ }\r
}\r
-}\r
-}\r
+}*/\r
//-----------------------------------------------------------------------------\r
// NOTE! returned must be deleted!!!\r
struct mglPnt2 { float x,y; mglPnt2(float xx=0,float yy=0) {x=xx;y=yy;} };\r
//-----------------------------------------------------------------------------\r
void mgl_contf_xy_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *x, uintptr_t *y, uintptr_t *a, const char *sch, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_contf_xy_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(a), s, o);\r
-delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_contf_xy_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(a), s, o);\r
+ delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
void mgl_contf_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *a, const char *sch, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_contf_val(_GR_, _DA_(v), _DA_(a), s, o); delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_contf_val(_GR_, _DA_(v), _DA_(a), s, o); delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
void mgl_contf_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *a, const char *sch, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_contf_xy(_GR_, _DA_(x), _DA_(y), _DA_(a), s, o);\r
-delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_contf_xy(_GR_, _DA_(x), _DA_(y), _DA_(a), s, o);\r
+ delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
void mgl_contf_(uintptr_t *gr, uintptr_t *a, const char *sch, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_contf(_GR_, _DA_(a), s, o); delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_contf(_GR_, _DA_(a), s, o); delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
//\r
// ContD series\r
//-----------------------------------------------------------------------------\r
int mgl_get_ncol(const char *sch, char *res)\r
{\r
- register long i,j;\r
- if(sch) for(i=j=0;sch[i]&&sch[i]!=':';i++) if(strchr(MGL_COLORS,sch[i]))\r
+ register long i,j=0;\r
+ if(sch) for(i=0;sch[i]&&sch[i]!=':';i++) if(strchr(MGL_COLORS,sch[i]))\r
{ if(res) res[j]=sch[i]; j++; }\r
return j?j:strlen(MGL_DEF_PAL);\r
}\r
//-----------------------------------------------------------------------------\r
void mgl_contd_xy_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *x, uintptr_t *y, uintptr_t *a, const char *sch, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_contd_xy_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(a), s, o);\r
-delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_contd_xy_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(a), s, o);\r
+ delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
void mgl_contd_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *a, const char *sch, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_contd_val(_GR_, _DA_(v), _DA_(a), s, o); delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_contd_val(_GR_, _DA_(v), _DA_(a), s, o); delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
void mgl_contd_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *a, const char *sch, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_contd_xy(_GR_, _DA_(x), _DA_(y), _DA_(a), s, o); delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_contd_xy(_GR_, _DA_(x), _DA_(y), _DA_(a), s, o); delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
void mgl_contd_(uintptr_t *gr, uintptr_t *a, const char *sch, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_contd(_GR_, _DA_(a), s, o); delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_contd(_GR_, _DA_(a), s, o); delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
//\r
// ContV series\r
//-----------------------------------------------------------------------------\r
void mgl_contv_xy_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *x, uintptr_t *y, uintptr_t *a, const char *sch, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_contv_xy_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(a), s, o);\r
-delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_contv_xy_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(a), s, o);\r
+ delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
void mgl_contv_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *a, const char *sch, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_contv_val(_GR_, _DA_(v), _DA_(a), s, o); delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_contv_val(_GR_, _DA_(v), _DA_(a), s, o); delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
void mgl_contv_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *a, const char *sch, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_contv_xy(_GR_, _DA_(x), _DA_(y), _DA_(a), s, o); delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_contv_xy(_GR_, _DA_(x), _DA_(y), _DA_(a), s, o); delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
void mgl_contv_(uintptr_t *gr, uintptr_t *a, const char *sch, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_contv(_GR_, _DA_(a), s, o); delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_contv(_GR_, _DA_(a), s, o); delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
//\r
// Cont3 series\r
mgl_cont3_val(gr,&v,a,sch,sVal,0);\r
}\r
//-----------------------------------------------------------------------------\r
-void mgl_cont3_xyz_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo)\r
+void mgl_cont3_xyz_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_cont3_xyz_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o);\r
-delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_cont3_xyz_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o);\r
+ delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
-void mgl_cont3_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo)\r
+void mgl_cont3_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_cont3_val(_GR_, _DA_(v), _DA_(a), s, *sVal, o); delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_cont3_val(_GR_, _DA_(v), _DA_(a), s, *sVal, o); delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
-void mgl_cont3_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo)\r
+void mgl_cont3_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_cont3_xyz(_GR_, _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o);\r
-delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_cont3_xyz(_GR_, _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o);\r
+ delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
-void mgl_cont3_(uintptr_t *gr, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo)\r
+void mgl_cont3_(uintptr_t *gr, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
-char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
-mgl_cont3(_GR_, _DA_(a), s, *sVal, o); delete []o; delete []s; }\r
+ char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
+ mgl_cont3(_GR_, _DA_(a), s, *sVal, o); delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
//\r
// Dens3 series\r
bool both = x->GetNx()*x->GetNy()*x->GetNz()==n*m*l && y->GetNx()*y->GetNy()*y->GetNz()==n*m*l && z->GetNx()*z->GetNy()*z->GetNz()==n*m*l;\r
if(!(both || (x->GetNx()==n && y->GetNx()==m && z->GetNx()==l)))\r
{ gr->SetWarn(mglWarnDim,"Dens3"); return; }\r
+ gr->SaveState(opt);\r
static int cgid=1; gr->StartGroup("Dens3",cgid++);\r
char dir='y';\r
if(sch && strchr(sch,'x')) dir='x';\r
mgl_dens3_xyz(_GR_, _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o);\r
delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
-void mgl_dens3_(uintptr_t *gr, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo)\r
+void mgl_dens3_(uintptr_t *gr, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
mgl_dens3(_GR_, _DA_(a), s, *sVal, o); delete []o; delete []s; }\r
mgl_grid3_xyz(gr,&x,&y,&z,a,sch,sVal,0);\r
}\r
//-----------------------------------------------------------------------------\r
-void mgl_grid3_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo)\r
+void mgl_grid3_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
mgl_grid3_xyz(_GR_, _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o);\r
delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
-void mgl_grid3_(uintptr_t *gr, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo)\r
+void mgl_grid3_(uintptr_t *gr, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
mgl_grid3(_GR_, _DA_(a), s, *sVal, o); delete []o; delete []s; }\r
mgl_contf3_val(gr,&v,a,sch,sVal,0);\r
}\r
//-----------------------------------------------------------------------------\r
-void mgl_contf3_xyz_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo)\r
+void mgl_contf3_xyz_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
mgl_contf3_xyz_val(_GR_, _DA_(v), _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o);\r
delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
-void mgl_contf3_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo)\r
+void mgl_contf3_val_(uintptr_t *gr, uintptr_t *v, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
mgl_contf3_val(_GR_, _DA_(v), _DA_(a), s, *sVal, o);\r
delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
-void mgl_contf3_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo)\r
+void mgl_contf3_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
mgl_contf3_xyz(_GR_, _DA_(x), _DA_(y), _DA_(z), _DA_(a), s, *sVal, o);\r
delete []o; delete []s; }\r
//-----------------------------------------------------------------------------\r
-void mgl_contf3_(uintptr_t *gr, uintptr_t *a, const char *dir, float *sVal, const char *sch, const char *opt,int l,int lo)\r
+void mgl_contf3_(uintptr_t *gr, uintptr_t *a, const char *sch, float *sVal, const char *opt,int l,int lo)\r
{ char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;\r
char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
mgl_contf3(_GR_, _DA_(a), s, *sVal, o);\r
{ char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0;\r
char *o=new char[lo+1]; memcpy(o,opt,lo); o[lo]=0;\r
mgl_torus(_GR_, _DA_(r), _DA_(z), s, o); delete []o; delete []s; }\r
-//-----------------------------------------------------------------------------
\ No newline at end of file
+//-----------------------------------------------------------------------------
const mglData *dd=dynamic_cast<const mglData *>(d);\r
if(dd)\r
{\r
- long nx=dd->nx, ny=dd->ny, nz=dd->nz, d=ny>1?nx:0;\r
+ long nx=dd->nx, ny=dd->ny, nz=dd->nz, dn=ny>1?nx:0;\r
kx = kx<nx-1 ? kx:nx-2; kx = kx>=0 ? kx:0;\r
ky = ky<ny-1 ? ky:ny-2; ky = ky>=0 ? ky:0;\r
kz = kz<nz-1 ? kz:nz-2; kz = kz>=0 ? kz:0;\r
z -= kz; if(nz==1) z=0;\r
\r
const mreal *aa=dd->a+kx+nx*(ky+ny*kz), *bb = aa+(nz>1?nx*ny:0);\r
- b0 = aa[0]*(1-x-y+x*y) + x*(1-y)*aa[1] + y*(1-x)*aa[d] + x*y*aa[1+d];\r
- b1 = bb[0]*(1-x-y+x*y) + x*(1-y)*bb[1] + y*(1-x)*bb[d] + x*y*bb[1+d];\r
+ b0 = aa[0]*(1-x-y+x*y) + x*(1-y)*aa[1] + y*(1-x)*aa[dn] + x*y*aa[1+dn];\r
+ b1 = bb[0]*(1-x-y+x*y) + x*(1-y)*bb[1] + y*(1-x)*bb[dn] + x*y*bb[1+dn];\r
}\r
else\r
{\r
}\r
void mgl_data_modify(HMDT d, const char *eq,long dim)\r
{\r
-mglNumThr=1;\r
long nx=d->nx, ny=d->ny, nz=d->nz, par[3]={nx,ny,nz};\r
mglFormula f(eq);\r
if(dim<0) dim=0;\r
// evaluation of embedded (included) expressions\r
mreal mglFormula::CalcIn(const mreal *a1) const\r
{\r
+ float z2[22] = {3,3,3,3,0,3,3,0,0,0,0,0,NAN,0\r
+#ifndef NO_GSL\r
+ ,3,NAN, 3,NAN, 0,0,3,1\r
+#else\r
+ ,0,0,0,0,0,0,0,0\r
+#endif\r
+ };\r
func_2 f2[22] = {clt,cgt,ceq,cor,cand,add,sub,mul,div,ipw,pow,fmod,llg,arg\r
#ifndef NO_GSL\r
,gsl_sf_bessel_Jnu,gsl_sf_bessel_Ynu,\r
{\r
if(Kod<EQ_SIN)\r
{\r
+ // try to bypass calc b if a==0\r
+ if(a==0 && z2[Kod-EQ_LT]!=3) return z2[Kod-EQ_LT];\r
double b = Right->CalcIn(a1);\r
return !isnan(b) ? f2[Kod-EQ_LT](a,b) : NAN;\r
}\r
#define _GR_ ((mglCanvas *)(*gr))
#define _Gr_ ((mglCanvas *)(gr))
//-----------------------------------------------------------------------------
-void mgl_write_png(HMGL gr, const char *fname,const char *descr)
+void mgl_write_png(HMGL gr, const char *fname,const char *)
{
long w,h; unsigned char *f=0, **p=0;
p =_Gr_->GetRGBLines(w,h,f,true);
char *f=new char[n+1]; memcpy(f,descr,n); f[n]=0;
mgl_write_png(_GR_,s,f); delete []s; delete []f; }
//-----------------------------------------------------------------------------
-void mgl_write_png_solid(HMGL gr, const char *fname,const char *descr)
+void mgl_write_png_solid(HMGL gr, const char *fname,const char *)
{
long w,h; unsigned char *f=0, **p=0;
p =_Gr_->GetRGBLines(w,h,f);
char *f=new char[n+1]; memcpy(f,descr,n); f[n]=0;
mgl_write_jpg(_GR_,s,f); delete []s; delete []f; }
//-----------------------------------------------------------------------------
-void mgl_write_tga(HMGL gr, const char *fname,const char *descr)
+void mgl_write_tga(HMGL gr, const char *fname,const char *)
{
long w,h; unsigned char *f=0, **p=0;
p =_Gr_->GetRGBLines(w,h,f,true);
char *f=new char[n+1]; memcpy(f,descr,n); f[n]=0;
mgl_write_tga(_GR_,s,f); delete []s; delete []f; }
//-----------------------------------------------------------------------------
-void mgl_write_bmp(HMGL gr, const char *fname,const char *descr)
+void mgl_write_bmp(HMGL gr, const char *fname,const char *)
{
long w,h; unsigned char *f=0, **p=0;
p =_Gr_->GetRGBLines(w,h,f);
char *f=new char[n+1]; memcpy(f,descr,n); f[n]=0;
mgl_write_bmp(_GR_,s,f); delete []s; delete []f; }
//-----------------------------------------------------------------------------
-void mgl_write_bps(HMGL gr, const char *fname,const char *descr)
+void mgl_write_bps(HMGL gr, const char *fname,const char *)
{
long w,h; unsigned char *f=0, **p=0;
p =_Gr_->GetRGBLines(w,h,f);
char *f=new char[n+1]; memcpy(f,descr,n); f[n]=0;
mgl_write_bps(_GR_,s,f); delete []s; delete []f; }
//-----------------------------------------------------------------------------
-void mgl_write_gif(HMGL gr, const char *fname,const char *descr)
+void mgl_write_gif(HMGL gr, const char *fname,const char *)
{
long w,h; unsigned char *f=0, **p=0;
p =_Gr_->GetRGBLines(w,h,f);
const mglPnt pp = gr->GetPnt(gr->GetPrm(i).n1);
float x0=pp.x, y0=pp.y;
bool ok=true;
- register unsigned long k = i,j; // first point
+ register long k = i,j; // first point
while(ok)
{
for(ok=false,j=i+1;j<gr->GetPrmNum();j++)
else if(p2.x==x0 && p2.y==y0)
{
k=j; q.type = -1; x0 = p1.x; y0=p1.y;
- (fp, gz, nfmt,fc*x0,(neg?_Gr_->GetHeight()-y0:y0)*fc);
+ mgl_printf(fp, gz, nfmt,fc*x0,(neg?_Gr_->GetHeight()-y0:y0)*fc);
if(m>10) { m=0; mgl_printf(fp, gz, "\n"); }
ok=true; m++;
}
//"np %d %d mt ", "%d %d ll ", "cp dr\n", "} def")
void put_desc(HMGL gr, void *fp, bool gz, const char *pre, const char *ln1, const char *ln2, const char *ln3, const char *suf)
{
- register unsigned long i,j,n;
+ register long i,j,n;
wchar_t *g;
int *s;
for(n=i=0;i<gr->GetPrmNum();i++) if(gr->GetPrm(i).type==4) n++;
m_s=false,m_a=false,m_o=false,m_T=false,
m_V=false,m_S=false,m_D=false,m_Y=false,m_l=false,
m_L=false,m_r=false,m_R=false,m_X=false,m_P=false;
- register unsigned long i;
+ register long i;
// add mark definition if present
for(i=0;i<gr->GetPrmNum();i++)
{
mgl_printf(fp, gz, "<g fill=\"none\" stroke=\"none\" stroke-width=\"0.5\">\n");
// write primitives
float wp=-1;
- register unsigned long i;
+ register long i;
int st=0;
mglColor cp;
// write primitives
float wp=-1;
- register unsigned long i;
+ register long i;
int st=0;
mglColor cp;
char cname[16];
for(i=0;i<gr->GetPrmNum();i++)
{ mglPrim &q=gr->GetPrm(i); if(q.type==-1) q.type = 1; }
fclose(fp);
-}
\ No newline at end of file
+}
}\r
}\r
//-----------------------------------------------------------------------------\r
+// I'm not sure that it is good idea -- a lot of memory used, but gain only for small files
+/*void mgl_rearrange_pnt(HMGL gr, std::vector<size_t> &on, std::vector<size_t> &no, bool coor=false)
+{
+ // on -- for old-to-new index; no -- for new-to-old index
+ on.clear(); on.resize(gr->GetPntNum(),-1); no.clear();
+ register size_t i,j;
+ for(i=0;i<gr->GetPntNum();i++) // collect data for groups
+ // it is rather expensive (extra 4b per primitive) but need for export to 3D
+ {
+ const mglPnt &q = gr->GetPnt(i);
+ if(coor) for(j=0;j<no.size();j++)
+ {
+ const mglPnt &p = gr->GetPnt(no[j]);
+ if(p.x==q.x && p.y==q.y && p.z==q.z) on[i]=j;
+ }
+ else for(j=0;j<no.size();j++)
+ {
+ const mglPnt &p = gr->GetPnt(no[j]);
+ if(p.x==q.x && p.y==q.y && p.z==q.z && p.c==q.c && p.t==q.t) on[i]=j;
+ }
+ if(on[j]<0) { no.push_back(i); on[j]=no.size()-1; }
+ }
+}*/
+//-----------------------------------------------------------------------------\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
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
+ for(j=0;j<=20;j++)\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
+ for(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
+ for(j=0;j<=20;j++)\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
+ for(j=0;j<20;j++)\r
fprintf(fp,"l %ld/%ld %ld/%ld\n", j-21,i, j-20,i);\r
break;\r
}\r
void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png)\r
{\r
if(gr->GetPrmNum()<=0) return; // nothing to do\r
- register unsigned long i,j;\r
+ register size_t i,j;\r
long m1=0,m2=0,m;\r
for(i=0;i<gr->Grp.size();i++) // prepare array of indirect indexing\r
{ m = gr->Grp[i].Id; if(m<m1) m1=m; if(m>m2) m2=m; }\r
long *ng = new long[m2-m1+1];\r
for(i=0;i<gr->Grp.size();i++) ng[gr->Grp[i].Id-m1] = i;\r
- for(i=0;i<gr->GetPrmNum();i++) // collect data for groups\r
+ for(i=0;i<size_t(gr->GetPrmNum());i++) // collect data for groups\r
// it is rather expensive (extra 4b per primitive) but need for export to 3D\r
{\r
m = gr->GetPrm(i).id-m1;\r
FILE *fp=fopen(fname,"wt");\r
// vertices definition\r
fprintf(fp,"# Created by MathGL library\n# Title: %s\n",descr ? descr : fname);\r
- for(i=0;i<gr->GetPntNum();i++)\r
+ for(i=0;i<size_t(gr->GetPrmNum());i++)\r
{\r
mglPnt pp = gr->GetPnt(i);\r
fprintf(fp,"v %g %g %g\n",pp.x,pp.y,pp.z);\r
// primitive definition in groups\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
{\r
fprintf(fp,"g %s\n",gr->Grp[i].Lbl.c_str()); p = gr->Grp[i].p;\r
for(j=0;j<p.size();j++)\r
{\r
- const mglPrim q=gr->GetPrm(p[j]);\r
+ const mglPrim &q=gr->GetPrm(p[j]);\r
mgl_obj_prim(q, gr->GetPnt(q.n1), fp, q.s*gr->FontFactor());\r
}\r
gr->Grp[i].p.clear(); // we don't need indexes anymore\r
if(Pnt.size()<1 || Prm.size()<1) return true;\r
FILE *fp=fopen(fname,"wt");\r
if(!fp) return true;\r
- fprintf(fp,"MGLD %ld %ld\n# %s\n", Pnt.size(), Prm.size(), descr ? descr : fname);\r
- register long i;\r
+ fprintf(fp,"MGLD %lu %lu\n# %s\n", Pnt.size(), Prm.size(), descr ? descr : fname);\r
+ register size_t i;\r
fprintf(fp,"# Vertexes: x y z c t u v w r g b a\n");\r
for(i=0;i<Pnt.size();i++)\r
{\r
FILE *fp=fopen(fname,"rt");\r
if(!fp) return true;\r
char *buf=new char[512];\r
- fgets(buf,512,fp);\r
+ if(!fgets(buf,512,fp)) *buf=0;\r
if(strncmp(buf,"MGLD",4)) { delete []buf; fclose(fp); return true; }\r
- register long i,n,m;\r
- sscanf(buf+5,"%ld%ld",&n,&m);\r
+ register size_t i;
+ size_t n,m;\r
+ sscanf(buf+5,"%lu%lu",&n,&m);\r
if(n<=0 || m<=0) { delete []buf; fclose(fp); return true; }\r
if(!add) { Pnt.clear(); Prm.clear(); }\r
Pnt.reserve(n); Prm.reserve(m);\r
mglPnt p; mglPrim q;\r
for(i=0;i<n;)\r
{\r
- do { fgets(buf,512,fp); mgl_strtrim(buf); } while(*buf=='#');\r
+ do { if(!fgets(buf,512,fp)) *buf=0; mgl_strtrim(buf); } while(*buf=='#');\r
sscanf(buf,"%g%g%g%g%g%g%g%g%g%g%g%g", &p.x, &p.y, &p.z, &p.c, &p.t, &p.u, &p.v, &p.w, &p.r, &p.g, &p.b, &p.a);\r
Pnt.push_back(p); i++;\r
}\r
for(i=0;i<m;)\r
{\r
- do { fgets(buf,512,fp); mgl_strtrim(buf); } while(*buf=='#');\r
+ do { if(!fgets(buf,512,fp)) *buf=0; mgl_strtrim(buf); } while(*buf=='#');\r
sscanf(buf,"%d%ld%ld%ld%ld%d%g%g%g", &q.type, &q.n1, &q.n2, &q.n3, &q.n4, &q.id, &q.s, &q.w, &q.p);\r
Prm.push_back(q); i++;\r
}\r
char *d=new char[n+1]; memcpy(d,descr,n); d[n]=0;\r
mgl_write_x3d(_GR_,s,d); delete []s; delete []d; }\r
//-----------------------------------------------------------------------------\r
-void mgl_write_wrl(HMGL gr, const char *fname,const char *descr)\r
-{\r
- // TODO: Add export to X3D\r
-}\r
-void mgl_write_wrl_(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
-char *d=new char[n+1]; memcpy(d,descr,n); d[n]=0;\r
-mgl_write_wrl(_GR_,s,d); delete []s; delete []d; }\r
-//-----------------------------------------------------------------------------\r
{\r
if(numg==0) return 0;\r
float ww=0,w=0,h = (align&4) ? 500./fact[0] : 0;\r
- unsigned size = wcslen(str)+1,i,num=0;\r
+ size_t size = wcslen(str)+1,i,num=0;\r
if(parse)\r
{\r
unsigned *wcs = new unsigned[size], *buf=wcs;\r
else\r
{\r
int s = (font/MGL_FONT_BOLD)&3;\r
- long i,j;\r
+ long j;\r
h *= fact[0]/fact[s];\r
- for(i=0;i<int(size);i++) // find width\r
+ for(i=0;i<size;i++) // find width\r
{\r
j = str[i]!=' ' ? Internal(str[i]) : Internal('!');\r
if(j==-1) continue;\r
w+= width[s][j]/fact[s];\r
}\r
ww = w; w *= -(align&3)/2.f;\r
- if(gr) for(i=0;i<int(size);i++) // draw it\r
+ if(gr) for(i=0;i<size;i++) // draw it\r
{\r
if(str[i]!=' ')\r
{\r
}\r
else\r
{\r
- long i,j;\r
+ long j;\r
int s = (font/MGL_FONT_BOLD)&3;\r
- for(i=0;i<int(size);i++)\r
+ for(i=0;i<size;i++)\r
{\r
j = str[i]!=' ' ? Internal(str[i]) : Internal('!');\r
if(j==-1) continue;\r
void mglCanvasGL::line_draw(long k1, long k2, mglDrawReg *)\r
{\r
if(k1<0 || k2<0 || PDef==0) return;\r
- mglPnt p1=Pnt[k1], p2=Pnt[k2];\r
/* unsigned long pdef = PDef*0x10001;\r
pdef = pdef << (int(100*pPos+0.5)%16);\r
set_pen(pdef&0xffff,PenWidth);*/\r
#endif
void (*mgl_ask_func)(const wchar_t *, wchar_t *)=0;
void mgl_ask_gets(const wchar_t *quest, wchar_t *res)
-{ printf("%ls\n",quest); fgetws(res,1024,stdin); }
+{ printf("%ls\n",quest); if(!fgetws(res,1024,stdin)) *res=0; }
//-----------------------------------------------------------------------------
mglFunc::mglFunc(long p, const wchar_t *f, mglFunc *prev)
{
//-----------------------------------------------------------------------------\r
void mglCanvas::LightScale()\r
{\r
- register float xx,yy,zz;\r
register long i;\r
for(i=0;i<10;i++)\r
{\r
}\r
//-----------------------------------------------------------------------------\r
#ifndef HAVE_MPI\r
-void mglCanvas::MPI_Send(int id) {} // TODO: add later\r
-void mglCanvas::MPI_Recv(int id) {} // TODO: add later\r
+void mglCanvas::MPI_Send(int /*id*/) {} // TODO: add later\r
+void mglCanvas::MPI_Recv(int /*id*/) {} // TODO: add later\r
#endif\r
//-----------------------------------------------------------------------------\r
void mglCanvas::pnt_plot(long x,long y,float z,const unsigned char ci[4])\r
mglPoint n2 = mglPoint(p2.x-p4.x,p2.y-p4.y,p2.z-p4.z)^mglPoint(p3.x-p4.x,p3.y-p4.y,p3.z-p4.z);\r
mglPoint nr = (n1+n2)*0.5;\r
\r
- register long i,j,g;\r
- register float u,v,s,xx,yy,q;\r
+ register long i,j;\r
+ register float u,v,s,xx,yy,qu,qv;\r
float x0 = p1.x, y0 = p1.y;\r
for(i=x1;i<=x2;i++) for(j=y1;j<=y2;j++)\r
{\r
s = dsx*xx + dsy*yy + (dd+d3.y*xx-d3.x*yy)*(dd+d3.y*xx-d3.x*yy);\r
if(s<0) continue; // no solution\r
s = sqrt(s);\r
- q = d3.x*yy - d3.y*xx + dd + s;\r
- u = q ? 2.f*(d2.y*xx - d2.x*yy)/q : -1.f;\r
- q = d3.y*xx - d3.x*yy + dd + s;\r
- v = q ? 2.f*(d1.x*yy - d1.y*xx)/q : -1.f;\r
- g = u<0.f || u>1.f || v<0.f || v>1.f;\r
- if(g) // first root bad\r
+ qu = d3.x*yy - d3.y*xx + dd + s;\r
+ qv = d3.y*xx - d3.x*yy + dd + s;\r
+ u = v = -1.f;\r
+ if(qu && qv)\r
+ {\r
+ u = 2.f*(d2.y*xx - d2.x*yy)/qu;\r
+ v = 2.f*(d1.x*yy - d1.y*xx)/qv;\r
+ }\r
+ if(u*(1.f-u)<0.f || v*(1.f-v)<0.f) // first root bad\r
{\r
- q = d3.x*yy - d3.y*xx + dd - s;\r
- u = q ? 2.f*(d2.y*xx - d2.x*yy)/q : -1.f;\r
- q = d3.y*xx - d3.x*yy + dd - s;\r
- v = q ? 2.f*(d1.x*yy - d1.y*xx)/q : -1.f;\r
- g = u<0.f || u>1.f || v<0.f || v>1.f;\r
- if(g) continue; // second root bad\r
+ qu = d3.x*yy - d3.y*xx + dd - s;\r
+ qv = d3.y*xx - d3.x*yy + dd - s;\r
+ u = v = -1.f;\r
+ if(qu && qv)\r
+ {\r
+ u = 2.f*(d2.y*xx - d2.x*yy)/qu;\r
+ v = 2.f*(d1.x*yy - d1.y*xx)/qv;\r
+ }\r
+ if(u*(1.f-u)<0.f || v*(1.f-v)<0.f) continue; // second root bad\r
}\r
p = p1+d1*u+d2*v+d3*(u*v);\r
if(isnan(p.u) && !isnan(p.v))\r
float ll, rr = gr->SaveState(opt);\r
if(rr==0 || isnan(rr)) rr = mgl_norm(gr->Max-gr->Min)*gr->BarWidth/25;\r
m = x->GetNy() > y->GetNy() ? x->GetNy() : y->GetNy(); m = z->GetNy() > m ? z->GetNy() : m;\r
- char mk=gr->SetPenPal(pen,&pal); gr->Reserve(4*n*m);\r
+ gr->SetPenPal(pen,&pal); gr->Reserve(4*n*m);\r
mglPoint p1,p2,q1,q2,l,nn,qn=mglPoint(NAN,NAN);\r
long n1=-1,n2=-1,n3=-1,n4=-1, m1=-1,m2=-1,m3=-1,m4=-1;\r
bool sh = pen && strchr(pen,'!'), xo = pen && strchr(pen,'x'), zo = pen && strchr(pen,'z'), wire = pen && strchr(pen,'#');\r
//-----------------------------------------------------------------------------\r
void mgl_labelw_xyz(HMGL gr, HCDT x, HCDT y, HCDT z, const wchar_t *text, const char *fnt, const char *opt)\r
{\r
- long j,m,mx,my,mz,mr,n=y->GetNx();\r
+ long j,m,mx,my,mz,n=y->GetNx();\r
if(x->GetNx()!=n || z->GetNx()!=n)\r
{ gr->SetWarn(mglWarnDim,"Label"); return; }\r
if(n<2) { gr->SetWarn(mglWarnLow,"Label"); return; }\r
bool both = x->GetNx()==n && y->GetNx()==n && x->GetNy()==m && y->GetNy()==m;\r
if(!(both || (x->GetNx()==n && y->GetNx()==m))) { gr->SetWarn(mglWarnDim,"Vect"); return; }\r
\r
+ gr->SaveState(opt);\r
static int cgid=1; gr->StartGroup("Vect",cgid++);\r
bool dot = sch && strchr(sch,'.');\r
bool fix = sch && strchr(sch,'f');\r
bool both = x->GetNx()*x->GetNy()*x->GetNz()==n*m*l && y->GetNx()*y->GetNy()*y->GetNz()==n*m*l && z->GetNx()*z->GetNy()*z->GetNz()==n*m*l;\r
if(!(both || (x->GetNx()==n && y->GetNx()==m && z->GetNx()==l)))\r
{ gr->SetWarn(mglWarnDim,"Vect"); return; }\r
+
+ gr->SaveState(opt);\r
static int cgid=1; gr->StartGroup("Vect3",cgid++);\r
bool dot = sch && strchr(sch,'.');\r
bool fix = sch && strchr(sch,'f');\r
10. Add primitives by mouse at beginning of script + change its size/position by mouse + "attraction" points
11. Drag&drop plot/group between inplots
12. Create default plot dependently of selected row/column/range in data table
-13. Show plot at creation stage (if option is enabled -- can be long process!!!)
+13. Show plot at creation stage (if option is enabled -- can be size_t process!!!)
14. Rotate/perspective/lighting/... of primitive list (without script re-execution)
15. QTreeWidgetItem -- ICON (if,for,once,subplot,...); Cmd text; LINE - POS in group/line. After editing/changing --> put text to editor.
void Fl_MathGL::draw()
{
const unsigned char *g = gr ? gr->GetBits() : 0;
- int i, h=gr->GetHeight(), w=gr->GetWidth();
- if(g) fl_draw_image(g, x(), y(), w, h, 3);
+ int i, hh=gr->GetHeight(), ww=gr->GetWidth();
+ if(g) fl_draw_image(g, x(), y(), ww, hh, 3);
if(flag&4)
{
char str[5]="0.0";
fl_color(192,192,192);
for(i=1;i<10;i++)
{
- str[2] = '0'+10-i; fl_draw(str,30,30+i*h/10);
- fl_line(30,30+i*h/10,30+w,30+i*h/10);
- str[2] = '0'+i; fl_draw(str,30+i*w/10,30+h);
- fl_line(30+i*w/10,30,30+i*w/10,30+h);
+ str[2] = '0'+10-i; fl_draw(str,30,30+i*hh/10);
+ fl_line(30,30+i*hh/10,30+ww,30+i*hh/10);
+ str[2] = '0'+i; fl_draw(str,30+i*ww/10,30+hh);
+ fl_line(30+i*ww/10,30,30+i*ww/10,30+hh);
}
// if(*MouseBuf) fl_draw(MouseBuf,30,50);
}
{ 0,0,0,0,0,0,0,0,0 }
};
//-----------------------------------------------------------------------------
-Fl_MGLView::Fl_MGLView(int x, int y, int w, int h, char *label) : Fl_Window(x,y,w,h,label)
+Fl_MGLView::Fl_MGLView(int xx, int yy, int ww, int hh, char *lbl) : Fl_Window(xx,yy,ww,hh,lbl)
{
alpha = light = sshow = 0; menu = 0;
next = prev = reload = NULL; delay = NULL;
}
}
//-----------------------------------------------------------------------------
-void QMathGL::exportWRL(QString fname)
-{
- if(fname.isEmpty()) fname = gr->PlotId.c_str();
- if(fname.isEmpty()) QMessageBox::critical(this, appName, tr("No filename."),QMessageBox::Ok,0,0);
- else
- {
- setlocale(LC_ALL, "C");
- mgl_write_wrl(gr,setExtension(fname,"svg").toAscii(), appName.toAscii());
- setlocale(LC_ALL, "");
- }
-}
-//-----------------------------------------------------------------------------
void QMathGL::exportX3D(QString fname)
{
if(fname.isEmpty()) fname = gr->PlotId.c_str();
{\r
#ifdef HAVE_PTHREAD\r
((mglDraw *)p)->Calc();\r
-#endif\r
+#endif
+ return 0;\r
}\r
//-----------------------------------------------------------------------------\r
void mgl_draw_thr(void *p)\r