1 /***************************************************************************
2 * canvas_cf.cpp is part of Math Graphic Library
3 * Copyright (C) 2007-2016 Alexey Balakin <mathgl.abalakin@gmail.ru> *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU Lesser General Public License as *
7 * published by the Free Software Foundation; either version 3 of the *
8 * License, or (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU Lesser General Public *
16 * License along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
20 #include "mgl2/canvas.h"
21 #include "mgl2/canvas_cf.h"
22 #include "mgl2/eval.h"
23 #include "mgl2/evalc.h"
24 #include "mgl2/font.h"
25 //-----------------------------------------------------------------------------
26 #undef _GR_
27 #define _GR_ ((mglCanvas *)(*gr))
28 //-----------------------------------------------------------------------------
29 MGL_EXPORT std::string *mglGlobalMess; ///< Buffer for receiving global messages
30 MGL_EXPORT mglCanvas *mglDefaultGr=NULL; ///< Default HMGL object
31 extern mglFont *mglDefFont;
32 #if MGL_HAVE_PTHREAD
33 pthread_mutex_t mutexRnd;
34 #endif
35 //-----------------------------------------------------------------------------
36 float MGL_EXPORT mgl_cos[360];
mgl_init()37 void MGL_EXPORT MGL_FUNC_INIT mgl_init() // TODO try to add ld option: "-init mgl_init"
38 {
39 static bool ini=true;
40 if(ini)
41 {
42 ini = false;
43 mglGlobalMess = new std::string;
44 mgl_textdomain(NULL,"");
45 #if MGL_HAVE_PTHREAD
46 pthread_mutex_init(&mutexRnd,0);
47 #endif
48 #ifndef WIN32 // win32 don't initialized threads before main()
49 #pragma omp parallel for
50 #endif
51 for(long i=0;i<360;i++) mgl_cos[i] = cos(i*M_PI/180.);
52 if(!mglDefFont) mglDefFont = new mglFont(MGL_DEF_FONT_NAME);
53 if(!mglDefaultGr) mglDefaultGr = new mglCanvas(600,400);
54 }
55 }
mgl_fini()56 void MGL_EXPORT MGL_FUNC_FINI mgl_fini() // TODO try to add ld option: "-fini mgl_fini"
57 {
58 if(mglDefaultGr) { delete mglDefaultGr;mglDefaultGr=NULL; }
59 if(mglDefFont) { delete mglDefFont; mglDefFont=NULL; }
60 }
61 //-----------------------------------------------------------------------------
mgl_get_rgb(HMGL gr)62 MGL_EXPORT const unsigned char *mgl_get_rgb(HMGL gr)
63 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); return g?g->GetBits():0; }
mgl_get_rgba(HMGL gr)64 MGL_EXPORT const unsigned char *mgl_get_rgba(HMGL gr)
65 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); return g?g->GetRGBA():0; }
mgl_get_background(HMGL gr)66 MGL_EXPORT_PURE const unsigned char* mgl_get_background(HMGL gr)
67 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); return g?g->GetBackground():0; }
mgl_get_width(HMGL gr)68 int MGL_EXPORT mgl_get_width(HMGL gr)
69 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); return g?g->GetWidth():0; }
mgl_get_height(HMGL gr)70 int MGL_EXPORT mgl_get_height(HMGL gr)
71 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); return g?g->GetHeight():0; }
mgl_calc_xyz(HMGL gr,int xs,int ys,mreal * x,mreal * y,mreal * z)72 void MGL_EXPORT mgl_calc_xyz(HMGL gr, int xs, int ys, mreal *x, mreal *y, mreal *z)
73 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr);
74 mglPoint p = g?g->CalcXYZ(xs,ys):mglPoint(NAN,NAN,NAN);
75 *x = p.x; *y = p.y; *z = p.z; }
mgl_calc_scr(HMGL gr,double x,double y,double z,int * xs,int * ys)76 void MGL_EXPORT mgl_calc_scr(HMGL gr, double x, double y, double z, int *xs, int *ys)
77 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->CalcScr(mglPoint(x,y,z),xs,ys); }
mgl_set_obj_id(HMGL gr,int id)78 void MGL_EXPORT mgl_set_obj_id(HMGL gr, int id)
79 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetObjId(id); }
mgl_get_obj_id(HMGL gr,int x,int y)80 int MGL_EXPORT_PURE mgl_get_obj_id(HMGL gr, int x, int y)
81 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); return g?g->GetObjId(x,y):-1; }
mgl_get_spl_id(HMGL gr,int x,int y)82 int MGL_EXPORT_PURE mgl_get_spl_id(HMGL gr, int x, int y)
83 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); return g?g->GetSplId(x,y):-1; }
84 //-----------------------------------------------------------------------------
mgl_is_active(HMGL gr,int xs,int ys,int d)85 long MGL_EXPORT_PURE mgl_is_active(HMGL gr, int xs, int ys, int d)
86 {
87 if(d<=0) d=1;
88 for(size_t i=0;i<gr->Act.size();i++)
89 {
90 const mglActivePos &p = gr->Act[i];
91 if(abs(xs-p.x)<d && abs(ys-p.y)<d) return i;
92 }
93 return -1;
94 }
mgl_is_active_(uintptr_t * gr,int * xs,int * ys,int * d)95 long MGL_EXPORT_PURE mgl_is_active_(uintptr_t *gr, int *xs, int *ys, int *d)
96 { return mgl_is_active(_GR_, *xs, *ys, *d); }
97 //-----------------------------------------------------------------------------
mgl_new_frame(HMGL gr)98 int MGL_EXPORT mgl_new_frame(HMGL gr)
99 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); return g?g->NewFrame():-1; }
mgl_end_frame(HMGL gr)100 void MGL_EXPORT mgl_end_frame(HMGL gr)
101 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->EndFrame(); }
mgl_get_num_frame(HMGL gr)102 int MGL_EXPORT_PURE mgl_get_num_frame(HMGL gr)
103 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); return g?g->GetNumFrame():0; }
mgl_reset_frames(HMGL gr)104 void MGL_EXPORT mgl_reset_frames(HMGL gr)
105 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->ResetFrames(); }
mgl_get_frame(HMGL gr,int i)106 void MGL_EXPORT mgl_get_frame(HMGL gr, int i)
107 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->GetFrame(i); }
mgl_set_frame(HMGL gr,int i)108 void MGL_EXPORT mgl_set_frame(HMGL gr, int i)
109 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetFrame(i); }
mgl_show_frame(HMGL gr,int i)110 void MGL_EXPORT mgl_show_frame(HMGL gr, int i)
111 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->ShowFrame(i); }
mgl_del_frame(HMGL gr,int i)112 void MGL_EXPORT mgl_del_frame(HMGL gr, int i)
113 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->DelFrame(i); }
mgl_clear_frame(HMGL gr)114 void MGL_EXPORT mgl_clear_frame(HMGL gr)
115 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->ClearFrame(); }
116 //-----------------------------------------------------------------------------
mgl_set_transp_type(HMGL gr,int type)117 void MGL_EXPORT mgl_set_transp_type(HMGL gr, int type)
118 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetTranspType(type); }
mgl_set_alpha(HMGL gr,int enable)119 void MGL_EXPORT mgl_set_alpha(HMGL gr, int enable) { gr->Alpha(enable); }
mgl_set_gray(HMGL gr,int enable)120 void MGL_EXPORT mgl_set_gray(HMGL gr, int enable) { gr->set(enable, MGL_GRAY_MODE); }
mgl_set_fog(HMGL gr,double d,double dz)121 void MGL_EXPORT mgl_set_fog(HMGL gr, double d, double dz)
122 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Fog(d,dz); }
mgl_set_light(HMGL gr,int enable)123 void MGL_EXPORT mgl_set_light(HMGL gr, int enable) { gr->Light(enable); }
mgl_set_attach_light(HMGL gr,int enable)124 void MGL_EXPORT mgl_set_attach_light(HMGL gr, int enable) { gr->AttachLight(enable); }
mgl_set_light_n(HMGL gr,int n,int enable)125 void MGL_EXPORT mgl_set_light_n(HMGL gr, int n, int enable)
126 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Light(n, enable); }
mgl_add_light_ext(HMGL gr,int n,double x,double y,double z,char c,double br,double ap)127 void MGL_EXPORT mgl_add_light_ext(HMGL gr, int n, double x, double y, double z, char c, double br, double ap)
128 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->AddLight(n,mglPoint(x,y,z),c,br,ap); }
mgl_add_light_loc(HMGL gr,int n,double x,double y,double z,double dx,double dy,double dz,char c,double br,double ap)129 void MGL_EXPORT mgl_add_light_loc(HMGL gr, int n, double x, double y, double z, double dx, double dy, double dz, char c, double br, double ap)
130 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->AddLight(n,mglPoint(x,y,z),mglPoint(dx,dy,dz),c,br,ap); }
mgl_add_light(HMGL gr,int n,double x,double y,double z)131 void MGL_EXPORT mgl_add_light(HMGL gr, int n, double x, double y, double z)
132 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->AddLight(n,mglPoint(x,y,z)); }
133 //-----------------------------------------------------------------------------
mgl_mat_push(HMGL gr)134 void MGL_EXPORT mgl_mat_push(HMGL gr)
135 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Push(); }
mgl_mat_pop(HMGL gr)136 void MGL_EXPORT mgl_mat_pop(HMGL gr)
137 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Pop(); }
mgl_clf(HMGL gr)138 void MGL_EXPORT mgl_clf(HMGL gr)
139 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Clf(); }
mgl_clf_chr(HMGL gr,char ch)140 void MGL_EXPORT mgl_clf_chr(HMGL gr, char ch)
141 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Clf(mglColor(ch)); }
mgl_clf_rgb(HMGL gr,double r,double g,double b)142 void MGL_EXPORT mgl_clf_rgb(HMGL gr, double r, double g, double b)
143 { mglCanvas *gg = dynamic_cast<mglCanvas *>(gr); if(gg) gg->Clf(mglColor(r,g,b)); }
mgl_clf_str(HMGL gr,const char * col)144 void MGL_EXPORT mgl_clf_str(HMGL gr, const char *col)
145 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Clf(col); }
mgl_load_background(HMGL gr,const char * fn,double alpha)146 void MGL_EXPORT mgl_load_background(HMGL gr, const char *fn, double alpha)
147 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->LoadBackground(fn,alpha); }
mgl_load_background_ext(HMGL gr,const char * fn,const char * how,double alpha)148 void MGL_EXPORT mgl_load_background_ext(HMGL gr, const char *fn, const char *how, double alpha)
149 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->LoadBackground(fn,how,alpha); }
mgl_fill_background(HMGL gr,double r,double g,double b)150 void MGL_EXPORT mgl_fill_background(HMGL gr, double r, double g, double b)
151 { mglCanvas *gg = dynamic_cast<mglCanvas *>(gr); if(gg) gg->FillBackground(mglColor(r,g,b)); }
152 //-----------------------------------------------------------------------------
mgl_subplot_d(HMGL gr,int nx,int ny,int m,const char * style,double dx,double dy)153 void MGL_EXPORT mgl_subplot_d(HMGL gr, int nx,int ny,int m,const char *style,double dx,double dy)
154 {
155 double x1,x2,y1,y2;
156 int mx = m%nx, my = m/nx;
157 if(gr->get(MGL_AUTO_FACTOR)) { dx /= 1.55; dy /= 1.55; }
158 else { dx /= 2; dy /= 2; }
159 x1 = (mx+dx)/nx; x2 = (mx+1+dx)/nx;
160 y2 = 1.f-(my+dy)/ny; y1 = 1.f-(my+1+dy)/ny;
161 mglCanvas *g = dynamic_cast<mglCanvas *>(gr);
162 if(g) g->InPlot(x1,x2,y1,y2,style);
163 }
mgl_subplot(HMGL gr,int nx,int ny,int m,const char * style)164 void MGL_EXPORT mgl_subplot(HMGL gr, int nx,int ny,int m,const char *style)
165 { mgl_subplot_d(gr,nx,ny,m,style,0,0); }
166 //-----------------------------------------------------------------------------
mgl_multiplot_d(HMGL gr,int nx,int ny,int m,int dx,int dy,const char * style,double sx,double sy)167 void MGL_EXPORT mgl_multiplot_d(HMGL gr, int nx,int ny,int m,int dx,int dy,const char *style,double sx,double sy)
168 {
169 double x1,x2,y1,y2;
170 int mx = m%nx, my = m/nx;
171 if(gr->get(MGL_AUTO_FACTOR)) { sx /= 1.55; sy /= 1.55; }
172 else { sx /= 2; sy /= 2; }
173 dx = (dx<1 || dx+mx>nx) ? 1 : dx;
174 dy = (dy<1 || dy+my>ny) ? 1 : dy;
175 x1 = double(mx+sx)/nx; x2 = double(mx+dx+sx)/nx;
176 y2 = 1-double(my+sy)/ny; y1 = 1-double(my+dy+sy)/ny;
177 mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->InPlot(x1,x2,y1,y2,style);
178 }
mgl_multiplot(HMGL gr,int nx,int ny,int m,int dx,int dy,const char * style)179 void MGL_EXPORT mgl_multiplot(HMGL gr, int nx,int ny,int m,int dx,int dy,const char *style)
180 { mgl_multiplot_d(gr,nx,ny,m,dx,dy,style,0,0); }
181 //-----------------------------------------------------------------------------
182 //-----------------------------------------------------------------------------
mgl_inplot(HMGL gr,double x1,double x2,double y1,double y2)183 void MGL_EXPORT mgl_inplot(HMGL gr, double x1,double x2,double y1,double y2)
184 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->InPlot(x1,x2,y1,y2,false); }
mgl_relplot(HMGL gr,double x1,double x2,double y1,double y2)185 void MGL_EXPORT mgl_relplot(HMGL gr, double x1,double x2,double y1,double y2)
186 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->InPlot(x1,x2,y1,y2,true); }
187 //-----------------------------------------------------------------------------
mgl_columnplot(HMGL gr,int num,int i,double dd)188 void MGL_EXPORT mgl_columnplot(HMGL gr, int num, int i, double dd)
189 {
190 double w = 1./num;
191 mglCanvas *g = dynamic_cast<mglCanvas *>(gr);
192 if(g) g->InPlot(0,1,1-w*(i+1-dd/2),1-(i+dd/2)*w,true);
193 }
194 //-----------------------------------------------------------------------------
mgl_gridplot(HMGL gr,int nx,int ny,int i,double dd)195 void MGL_EXPORT mgl_gridplot(HMGL gr, int nx, int ny, int i, double dd)
196 {
197 int ix=i%nx, iy=i/nx;
198 double wx = 1./nx, wy = 1./ny;
199 mglCanvas *g = dynamic_cast<mglCanvas *>(gr);
200 if(g) g->InPlot((ix+dd/2)*wx,wx*(ix+1-dd/2),1-wy*(iy+1-dd/2),1-(iy+dd/2)*wy,true);
201 }
202 //-----------------------------------------------------------------------------
mgl_stickplot(HMGL gr,int num,int i,double tet,double phi)203 void MGL_EXPORT mgl_stickplot(HMGL gr, int num, int i, double tet, double phi)
204 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->StickPlot(num, i, tet, phi); }
mgl_shearplot(HMGL gr,int num,int i,double sx,double sy,double xd,double yd)205 void MGL_EXPORT mgl_shearplot(HMGL gr, int num, int i, double sx, double sy, double xd, double yd)
206 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->ShearPlot(num, i, sx, sy, xd, yd); }
207 //-----------------------------------------------------------------------------
mgl_aspect(HMGL gr,double Ax,double Ay,double Az)208 void MGL_EXPORT mgl_aspect(HMGL gr, double Ax,double Ay,double Az)
209 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Aspect(Ax,Ay,Az); }
mgl_shear(HMGL gr,double Sx,double Sy)210 void MGL_EXPORT mgl_shear(HMGL gr, double Sx,double Sy)
211 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Shear(Sx,Sy); }
mgl_rotate(HMGL gr,double TetX,double TetZ,double TetY)212 void MGL_EXPORT mgl_rotate(HMGL gr, double TetX,double TetZ,double TetY)
213 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Rotate(TetX,TetZ,TetY); }
mgl_view(HMGL gr,double TetX,double TetZ,double TetY)214 void MGL_EXPORT mgl_view(HMGL gr, double TetX,double TetZ,double TetY)
215 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->View(TetX,TetZ,TetY); }
mgl_zoom(HMGL gr,double x1,double y1,double x2,double y2)216 void MGL_EXPORT mgl_zoom(HMGL gr, double x1, double y1, double x2, double y2)
217 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Zoom(x1,y1,x2,y2); }
mgl_rotate_vector(HMGL gr,double Tet,double x,double y,double z)218 void MGL_EXPORT mgl_rotate_vector(HMGL gr, double Tet,double x,double y,double z)
219 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->RotateN(Tet,x,y,z); }
mgl_perspective(HMGL gr,double val)220 void MGL_EXPORT mgl_perspective(HMGL gr, double val)
221 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Perspective(val); }
mgl_ask_perspective(HMGL gr,double val)222 void MGL_EXPORT mgl_ask_perspective(HMGL gr, double val)
223 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Perspective(val,false); }
mgl_title(HMGL gr,const char * title,const char * stl,double size)224 void MGL_EXPORT mgl_title(HMGL gr, const char *title, const char *stl, double size)
225 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Title(title,stl,size); }
mgl_titlew(HMGL gr,const wchar_t * title,const char * stl,double size)226 void MGL_EXPORT mgl_titlew(HMGL gr, const wchar_t *title, const char *stl, double size)
227 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Title(title,stl,size); }
228 //-----------------------------------------------------------------------------
mgl_new_frame_(uintptr_t * gr)229 int MGL_EXPORT mgl_new_frame_(uintptr_t *gr) { return _GR_->NewFrame(); }
mgl_end_frame_(uintptr_t * gr)230 void MGL_EXPORT mgl_end_frame_(uintptr_t *gr) { _GR_->EndFrame(); }
mgl_get_num_frame_(uintptr_t * gr)231 int MGL_EXPORT_PURE mgl_get_num_frame_(uintptr_t *gr) { return _GR_->GetNumFrame(); }
mgl_reset_frames_(uintptr_t * gr)232 void MGL_EXPORT mgl_reset_frames_(uintptr_t *gr) { _GR_->ResetFrames(); }
mgl_get_frame_(uintptr_t * gr,int * i)233 void MGL_EXPORT mgl_get_frame_(uintptr_t *gr, int *i) { _GR_->GetFrame(*i); }
mgl_set_frame_(uintptr_t * gr,int * i)234 void MGL_EXPORT mgl_set_frame_(uintptr_t *gr, int *i) { _GR_->SetFrame(*i); }
mgl_show_frame_(uintptr_t * gr,int * i)235 void MGL_EXPORT mgl_show_frame_(uintptr_t *gr, int *i) { _GR_->ShowFrame(*i);}
mgl_del_frame_(uintptr_t * gr,int * i)236 void MGL_EXPORT mgl_del_frame_(uintptr_t *gr, int *i) { _GR_->DelFrame(*i); }
mgl_clear_frame_(uintptr_t * gr)237 void MGL_EXPORT mgl_clear_frame_(uintptr_t *gr) { _GR_->ClearFrame(); }
238 //-----------------------------------------------------------------------------
mgl_set_transp_type_(uintptr_t * gr,int * type)239 void MGL_EXPORT mgl_set_transp_type_(uintptr_t *gr, int *type) { _GR_->SetTranspType(*type); }
mgl_set_alpha_(uintptr_t * gr,int * enable)240 void MGL_EXPORT mgl_set_alpha_(uintptr_t *gr, int *enable) { _GR_->Alpha(*enable); }
mgl_set_gray_(uintptr_t * gr,int * enable)241 void MGL_EXPORT mgl_set_gray_(uintptr_t *gr, int *enable) { _GR_->set(*enable, MGL_GRAY_MODE); }
mgl_set_fog_(uintptr_t * gr,mreal * d,mreal * dz)242 void MGL_EXPORT mgl_set_fog_(uintptr_t *gr, mreal *d, mreal *dz) { _GR_->Fog(*d, *dz); }
mgl_set_light_(uintptr_t * gr,int * enable)243 void MGL_EXPORT mgl_set_light_(uintptr_t *gr, int *enable) { _GR_->Light(*enable); }
mgl_set_attach_light_(uintptr_t * gr,int * enable)244 void MGL_EXPORT mgl_set_attach_light_(uintptr_t *gr, int *enable) { _GR_->AttachLight(*enable); }
mgl_set_light_n_(uintptr_t * gr,int * n,int * enable)245 void MGL_EXPORT mgl_set_light_n_(uintptr_t *gr, int *n, int *enable)
246 { _GR_->Light(*n, *enable); }
mgl_add_light_(uintptr_t * gr,int * n,mreal * x,mreal * y,mreal * z)247 void MGL_EXPORT mgl_add_light_(uintptr_t *gr, int *n, mreal *x, mreal *y, mreal *z)
248 { _GR_->AddLight(*n,mglPoint(*x,*y,*z)); }
mgl_add_light_ext_(uintptr_t * gr,int * n,mreal * x,mreal * y,mreal * z,char * c,mreal * br,mreal * ap,int)249 void MGL_EXPORT mgl_add_light_ext_(uintptr_t *gr, int *n, mreal *x, mreal *y, mreal *z, char *c, mreal *br, mreal *ap, int)
250 { _GR_->AddLight(*n,mglPoint(*x,*y,*z),*c,*br,*ap); }
mgl_add_light_loc_(uintptr_t * gr,int * n,mreal * x,mreal * y,mreal * z,mreal * dx,mreal * dy,mreal * dz,char * c,mreal * br,mreal * ap,int)251 void MGL_EXPORT mgl_add_light_loc_(uintptr_t *gr, int *n, mreal *x, mreal *y, mreal *z, mreal *dx, mreal *dy, mreal *dz, char *c, mreal *br, mreal *ap, int)
252 { _GR_->AddLight(*n,mglPoint(*x,*y,*z),mglPoint(*dx,*dy,*dz),*c,*br,*ap); }
253 //-----------------------------------------------------------------------------
mgl_mat_push_(uintptr_t * gr)254 void MGL_EXPORT mgl_mat_push_(uintptr_t *gr) { _GR_->Push(); }
mgl_mat_pop_(uintptr_t * gr)255 void MGL_EXPORT mgl_mat_pop_(uintptr_t *gr) { _GR_->Pop(); }
mgl_clf_(uintptr_t * gr)256 void MGL_EXPORT mgl_clf_(uintptr_t *gr) { _GR_->Clf(); }
mgl_clf_chr_(uintptr_t * gr,const char * ch,int)257 void MGL_EXPORT mgl_clf_chr_(uintptr_t *gr, const char *ch, int)
258 { _GR_->Clf(mglColor(*ch)); }
mgl_clf_rgb_(uintptr_t * gr,mreal * r,mreal * g,mreal * b)259 void MGL_EXPORT mgl_clf_rgb_(uintptr_t *gr, mreal *r, mreal *g, mreal *b)
260 { _GR_->Clf(mglColor(*r,*g,*b)); }
mgl_clf_str_(uintptr_t * gr,const char * col,int l)261 void MGL_EXPORT mgl_clf_str_(uintptr_t *gr, const char *col, int l)
262 { char *s=new char[l+1]; memcpy(s,col,l); s[l]=0;
263 mgl_clf_str(_GR_,s); delete []s; }
mgl_load_background_(uintptr_t * gr,const char * fn,mreal * a,int l)264 void MGL_EXPORT mgl_load_background_(uintptr_t *gr, const char *fn, mreal *a, int l)
265 { char *s=new char[l+1]; memcpy(s,fn,l); s[l]=0;
266 mgl_load_background(_GR_,s,*a); delete []s; }
mgl_load_background_ext_(uintptr_t * gr,const char * fn,const char * how,mreal * a,int l,int m)267 void MGL_EXPORT mgl_load_background_ext_(uintptr_t *gr, const char *fn, const char *how, mreal *a, int l,int m)
268 { char *s=new char[l+1]; memcpy(s,fn,l); s[l]=0;
269 char *h=new char[m+1]; memcpy(h,how,l); h[m]=0;
270 mgl_load_background_ext(_GR_,s,h,*a); delete []s; delete []h; }
mgl_fill_background_(uintptr_t * gr,double * r,double * g,double * b)271 void MGL_EXPORT mgl_fill_background_(uintptr_t *gr, double *r, double *g, double *b)
272 { mgl_fill_background(_GR_,*r,*g,*b); }
273 //-----------------------------------------------------------------------------
mgl_subplot_d_(uintptr_t * gr,int * nx,int * ny,int * m,const char * st,mreal * dx,mreal * dy,int l)274 void MGL_EXPORT mgl_subplot_d_(uintptr_t *gr, int *nx,int *ny,int *m,const char *st, mreal *dx, mreal *dy,int l)
275 { char *s=new char[l+1]; memcpy(s,st,l); s[l]=0;
276 mgl_subplot_d(_GR_,*nx,*ny,*m,s,*dx,*dy); delete []s; }
mgl_subplot_(uintptr_t * gr,int * nx,int * ny,int * m,const char * st,int l)277 void MGL_EXPORT mgl_subplot_(uintptr_t *gr, int *nx,int *ny,int *m,const char *st,int l)
278 { char *s=new char[l+1]; memcpy(s,st,l); s[l]=0;
279 mgl_subplot(_GR_,*nx,*ny,*m,s); delete []s; }
mgl_multiplot_(uintptr_t * gr,int * nx,int * ny,int * m,int * dx,int * dy,const char * st,int l)280 void MGL_EXPORT mgl_multiplot_(uintptr_t *gr, int *nx,int *ny,int *m,int *dx,int *dy,const char *st,int l)
281 { char *s=new char[l+1]; memcpy(s,st,l); s[l]=0;
282 mgl_multiplot(_GR_,*nx,*ny,*m,*dx,*dy,s); delete []s; }
mgl_multiplot_d_(uintptr_t * gr,int * nx,int * ny,int * m,int * dx,int * dy,const char * st,mreal * sx,mreal * sy,int l)283 void MGL_EXPORT mgl_multiplot_d_(uintptr_t *gr, int *nx,int *ny,int *m,int *dx,int *dy,const char *st, mreal *sx, mreal *sy,int l)
284 { char *s=new char[l+1]; memcpy(s,st,l); s[l]=0;
285 mgl_multiplot_d(_GR_,*nx,*ny,*m,*dx,*dy,s, *sx, *sy); delete []s; }
mgl_inplot_(uintptr_t * gr,mreal * x1,mreal * x2,mreal * y1,mreal * y2)286 void MGL_EXPORT mgl_inplot_(uintptr_t *gr, mreal *x1, mreal *x2, mreal *y1, mreal *y2)
287 { _GR_->InPlot(*x1,*x2,*y1,*y2,false); }
mgl_relplot_(uintptr_t * gr,mreal * x1,mreal * x2,mreal * y1,mreal * y2)288 void MGL_EXPORT mgl_relplot_(uintptr_t *gr, mreal *x1, mreal *x2, mreal *y1, mreal *y2)
289 { _GR_->InPlot(*x1,*x2,*y1,*y2,true); }
mgl_columnplot_(uintptr_t * gr,int * num,int * i,mreal * d)290 void MGL_EXPORT mgl_columnplot_(uintptr_t *gr, int *num, int *i, mreal *d)
291 { mgl_columnplot(_GR_,*num,*i,*d); }
mgl_gridplot_(uintptr_t * gr,int * nx,int * ny,int * i,mreal * d)292 void MGL_EXPORT mgl_gridplot_(uintptr_t *gr, int *nx, int *ny, int *i, mreal *d)
293 { mgl_gridplot(_GR_,*nx,*ny,*i,*d); }
mgl_stickplot_(uintptr_t * gr,int * num,int * i,mreal * tet,mreal * phi)294 void MGL_EXPORT mgl_stickplot_(uintptr_t *gr, int *num, int *i, mreal *tet, mreal *phi)
295 { _GR_->StickPlot(*num, *i, *tet, *phi); }
mgl_shearplot_(uintptr_t * gr,int * num,int * i,mreal * sy,mreal * sx,mreal * xd,mreal * yd)296 void MGL_EXPORT mgl_shearplot_(uintptr_t *gr, int *num, int *i, mreal *sy, mreal *sx, mreal *xd, mreal *yd)
297 { _GR_->ShearPlot(*num,*i,*sx,*sy,*xd,*yd); }
298
mgl_title_(uintptr_t * gr,const char * title,const char * stl,mreal * size,int l,int m)299 void MGL_EXPORT mgl_title_(uintptr_t *gr, const char *title, const char *stl, mreal *size, int l,int m)
300 { char *t=new char[l+1]; memcpy(t,title,l); t[l]=0;
301 char *s=new char[m+1]; memcpy(s,stl,m); s[m]=0;
302 _GR_->Title(t,s,*size); delete []s; delete []t; }
mgl_aspect_(uintptr_t * gr,mreal * Ax,mreal * Ay,mreal * Az)303 void MGL_EXPORT mgl_aspect_(uintptr_t *gr, mreal *Ax, mreal *Ay, mreal *Az)
304 { _GR_->Aspect(*Ax,*Ay,*Az); }
mgl_shear_(uintptr_t * gr,mreal * Sx,mreal * Sy)305 void MGL_EXPORT mgl_shear_(uintptr_t *gr, mreal *Sx, mreal *Sy)
306 { _GR_->Shear(*Sx,*Sy); }
mgl_rotate_(uintptr_t * gr,mreal * TetX,mreal * TetZ,mreal * TetY)307 void MGL_EXPORT mgl_rotate_(uintptr_t *gr, mreal *TetX, mreal *TetZ, mreal *TetY)
308 { _GR_->Rotate(*TetX,*TetZ,*TetY); }
mgl_view_(uintptr_t * gr,mreal * TetX,mreal * TetZ,mreal * TetY)309 void MGL_EXPORT mgl_view_(uintptr_t *gr, mreal *TetX, mreal *TetZ, mreal *TetY)
310 { _GR_->View(*TetX,*TetZ,*TetY); }
mgl_zoom_(uintptr_t * gr,mreal * x1,mreal * y1,mreal * x2,mreal * y2)311 void MGL_EXPORT mgl_zoom_(uintptr_t *gr, mreal *x1, mreal *y1, mreal *x2, mreal *y2)
312 { _GR_->Zoom(*x1,*y1,*x2,*y2); }
mgl_rotate_vector_(uintptr_t * gr,mreal * Tet,mreal * x,mreal * y,mreal * z)313 void MGL_EXPORT mgl_rotate_vector_(uintptr_t *gr, mreal *Tet, mreal *x, mreal *y, mreal *z)
314 { _GR_->RotateN(*Tet,*x,*y,*z); }
mgl_perspective_(uintptr_t * gr,mreal * val)315 void MGL_EXPORT mgl_perspective_(uintptr_t *gr, mreal *val)
316 { _GR_->Perspective(*val); }
mgl_ask_perspective_(uintptr_t * gr,mreal * val)317 void MGL_EXPORT mgl_ask_perspective_(uintptr_t *gr, mreal *val)
318 { mgl_ask_perspective(_GR_,*val); }
319 //-----------------------------------------------------------------------------
mgl_get_rgb_(uintptr_t * gr)320 MGL_EXPORT const unsigned char *mgl_get_rgb_(uintptr_t *gr) { return gr ? _GR_->GetBits():0; }
mgl_get_rgba_(uintptr_t * gr)321 MGL_EXPORT const unsigned char *mgl_get_rgba_(uintptr_t *gr){ return gr ? _GR_->GetRGBA():0; }
mgl_get_background_(uintptr_t * gr)322 MGL_EXPORT_PURE const unsigned char* mgl_get_background_(uintptr_t* gr) { return gr ? _GR_->GetBackground():0; }
mgl_get_width_(uintptr_t * gr)323 int MGL_EXPORT mgl_get_width_(uintptr_t *gr) { return gr ? _GR_->GetWidth():0; }
mgl_get_height_(uintptr_t * gr)324 int MGL_EXPORT mgl_get_height_(uintptr_t *gr) { return gr ? _GR_->GetHeight():0;}
mgl_calc_xyz_(uintptr_t * gr,int * xs,int * ys,mreal * x,mreal * y,mreal * z)325 void MGL_EXPORT mgl_calc_xyz_(uintptr_t *gr, int *xs, int *ys, mreal *x, mreal *y, mreal *z)
326 { mglPoint p = _GR_->CalcXYZ(*xs,*ys); *x = p.x; *y = p.y; *z = p.z; }
mgl_calc_scr_(uintptr_t * gr,mreal * x,mreal * y,mreal * z,int * xs,int * ys)327 void MGL_EXPORT mgl_calc_scr_(uintptr_t *gr, mreal *x, mreal *y, mreal *z, int *xs, int *ys)
328 { _GR_->CalcScr(mglPoint(*x,*y,*z),xs,ys); }
mgl_set_obj_id_(uintptr_t * gr,int * id)329 void MGL_EXPORT mgl_set_obj_id_(uintptr_t *gr, int *id) { _GR_->SetObjId(*id); }
mgl_get_obj_id_(uintptr_t * gr,int * x,int * y)330 int MGL_EXPORT_PURE mgl_get_obj_id_(uintptr_t *gr, int *x, int *y) { return _GR_->GetObjId(*x,*y); }
mgl_get_spl_id_(uintptr_t * gr,int * x,int * y)331 int MGL_EXPORT_PURE mgl_get_spl_id_(uintptr_t *gr, int *x, int *y) { return _GR_->GetSplId(*x,*y); }
332 //-----------------------------------------------------------------------------
333 double mgl_size_scl = 1;
mgl_create_graph(int width,int height)334 HMGL MGL_EXPORT mgl_create_graph(int width, int height)
335 { return new mglCanvas(width,height); }
mgl_delete_graph(HMGL gr)336 void MGL_EXPORT mgl_delete_graph(HMGL gr) { if(gr) delete gr; }
mgl_default_graph()337 HMGL MGL_EXPORT mgl_default_graph()
338 {
339 if(!mglDefaultGr)
340 mglDefaultGr = new mglCanvas(600,400);
341 return mglDefaultGr;
342 }
mgl_set_size_scl(double scl)343 void MGL_EXPORT mgl_set_size_scl(double scl){ if(scl>0) mgl_size_scl = scl; }
mgl_set_size(HMGL gr,int width,int height)344 void MGL_EXPORT mgl_set_size(HMGL gr, int width, int height)
345 {
346 mglCanvas *g = dynamic_cast<mglCanvas *>(gr);
347 width = int(mgl_size_scl*width); height = int(mgl_size_scl*height);
348 if(g) g->SetSize(width, height);
349 }
mgl_scale_size(HMGL gr,int width,int height)350 void MGL_EXPORT mgl_scale_size(HMGL gr, int width, int height)
351 {
352 mglCanvas *g = dynamic_cast<mglCanvas *>(gr);
353 width = int(mgl_size_scl*width); height = int(mgl_size_scl*height);
354 if(g) g->SetSize(width, height, false);
355 }
mgl_set_def_param(HMGL gr)356 void MGL_EXPORT mgl_set_def_param(HMGL gr)
357 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->DefaultPlotParam(); }
mgl_combine_gr(HMGL gr,HMGL in)358 void MGL_EXPORT mgl_combine_gr(HMGL gr, HMGL in)
359 { const mglCanvas *gg = dynamic_cast<const mglCanvas *>(in);
360 mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g && gg) g->Combine(gg); }
mgl_set_bbox(HMGL gr,int x1,int y1,int x2,int y2)361 void MGL_EXPORT mgl_set_bbox(HMGL gr, int x1, int y1, int x2, int y2)
362 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetBBox(x1,y1,x2,y2); }
363 //-----------------------------------------------------------------------------
mgl_set_tick_len(HMGL gr,double len,double stt)364 void MGL_EXPORT mgl_set_tick_len(HMGL gr, double len, double stt)
365 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetTickLen(len,stt); }
mgl_set_axis_stl(HMGL gr,const char * stl,const char * tck,const char * sub)366 void MGL_EXPORT mgl_set_axis_stl(HMGL gr, const char *stl, const char *tck, const char *sub)
367 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetAxisStl(stl,tck,sub); }
mgl_tune_ticks(HMGL gr,int tune,double pos)368 void MGL_EXPORT mgl_tune_ticks(HMGL gr, int tune, double pos)
369 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetTuneTicks(tune,pos); }
mgl_adjust_ticks(HMGL gr,const char * dir)370 void MGL_EXPORT mgl_adjust_ticks(HMGL gr, const char *dir)
371 { mgl_adjust_ticks_ext(gr,dir,""); }
mgl_adjust_ticks_ext(HMGL gr,const char * dir,const char * stl)372 void MGL_EXPORT mgl_adjust_ticks_ext(HMGL gr, const char *dir, const char *stl)
373 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->AdjustTicks(dir,true,stl); }
mgl_set_ticks(HMGL gr,char dir,double d,int ns,double org)374 void MGL_EXPORT mgl_set_ticks(HMGL gr, char dir, double d, int ns, double org)
375 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetTicks(dir,d,ns,org); }
mgl_set_ticks_factw(HMGL gr,char dir,double d,int ns,double org,const wchar_t * fact)376 void MGL_EXPORT mgl_set_ticks_factw(HMGL gr, char dir, double d, int ns, double org, const wchar_t *fact)
377 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetTicks(dir,d,ns,org,fact); }
mgl_set_ticks_fact(HMGL gr,char dir,double d,int ns,double org,const char * fact)378 void MGL_EXPORT mgl_set_ticks_fact(HMGL gr, char dir, double d, int ns, double org, const char *fact)
379 { MGL_TO_WCS(fact,mgl_set_ticks_factw(gr,dir,d,ns,org,wcs)); }
mgl_set_ticks_str(HMGL gr,char dir,const char * lbl,int add)380 void MGL_EXPORT mgl_set_ticks_str(HMGL gr, char dir, const char *lbl, int add)
381 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetTicksVal(dir,lbl,add); }
mgl_set_ticks_wcs(HMGL gr,char dir,const wchar_t * lbl,int add)382 void MGL_EXPORT mgl_set_ticks_wcs(HMGL gr, char dir, const wchar_t *lbl, int add)
383 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetTicksVal(dir,lbl,add); }
mgl_set_ticks_val(HMGL gr,char dir,HCDT val,const char * lbl,int add)384 void MGL_EXPORT mgl_set_ticks_val(HMGL gr, char dir, HCDT val, const char *lbl, int add)
385 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetTicksVal(dir,val,lbl,add); }
mgl_set_ticks_valw(HMGL gr,char dir,HCDT val,const wchar_t * lbl,int add)386 void MGL_EXPORT mgl_set_ticks_valw(HMGL gr, char dir, HCDT val, const wchar_t *lbl, int add)
387 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetTicksVal(dir,val,lbl,add); }
mgl_add_tick(HMGL gr,char dir,double val,const char * lbl)388 void MGL_EXPORT mgl_add_tick(HMGL gr, char dir, double val, const char *lbl)
389 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->AddTick(dir,val,lbl); }
mgl_add_tickw(HMGL gr,char dir,double val,const wchar_t * lbl)390 void MGL_EXPORT mgl_add_tickw(HMGL gr, char dir, double val, const wchar_t *lbl)
391 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->AddTick(dir,val,lbl); }
mgl_set_tick_templ(HMGL gr,char dir,const char * templ)392 void MGL_EXPORT mgl_set_tick_templ(HMGL gr, char dir, const char *templ)
393 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetTickTempl(dir,templ); }
mgl_set_tick_templw(HMGL gr,char dir,const wchar_t * templ)394 void MGL_EXPORT mgl_set_tick_templw(HMGL gr, char dir, const wchar_t *templ)
395 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetTickTempl(dir,templ); }
mgl_set_ticks_time(HMGL gr,char dir,double d,const char * t)396 void MGL_EXPORT mgl_set_ticks_time(HMGL gr, char dir, double d, const char *t)
397 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetTickTime(dir,d,t); }
398 //-----------------------------------------------------------------------------
mgl_box(HMGL gr)399 void MGL_EXPORT mgl_box(HMGL gr)
400 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Box(); }
mgl_box_str(HMGL gr,const char * col,int ticks)401 void MGL_EXPORT mgl_box_str(HMGL gr, const char *col, int ticks)
402 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Box(col,ticks); }
mgl_axis(HMGL gr,const char * dir,const char * stl,const char * opt)403 void MGL_EXPORT mgl_axis(HMGL gr, const char *dir, const char *stl, const char *opt)
404 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Axis(dir,stl,opt); }
mgl_axis_grid(HMGL gr,const char * dir,const char * pen,const char * opt)405 void MGL_EXPORT mgl_axis_grid(HMGL gr, const char *dir,const char *pen, const char *opt)
406 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Grid(dir,pen,opt); }
mgl_label(HMGL gr,char dir,const char * text,double pos,const char * opt)407 void MGL_EXPORT mgl_label(HMGL gr, char dir, const char *text, double pos, const char *opt)
408 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Label(dir,text,pos,opt); }
mgl_labelw(HMGL gr,char dir,const wchar_t * text,double pos,const char * opt)409 void MGL_EXPORT mgl_labelw(HMGL gr, char dir, const wchar_t *text, double pos, const char *opt)
410 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Labelw(dir,text,pos,opt); }
411 //-----------------------------------------------------------------------------
mgl_colorbar(HMGL gr,const char * sch)412 void MGL_EXPORT mgl_colorbar(HMGL gr, const char *sch)
413 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Colorbar(sch); }
mgl_colorbar_ext(HMGL gr,const char * sch,double x,double y,double w,double h)414 void MGL_EXPORT mgl_colorbar_ext(HMGL gr, const char *sch, double x, double y, double w, double h)
415 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Colorbar(sch,x,y,w,h); }
mgl_colorbar_val(HMGL gr,HCDT dat,const char * sch)416 void MGL_EXPORT mgl_colorbar_val(HMGL gr, HCDT dat, const char *sch)
417 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Colorbar(dat,sch); }
mgl_colorbar_val_ext(HMGL gr,HCDT dat,const char * sch,double x,double y,double w,double h)418 void MGL_EXPORT mgl_colorbar_val_ext(HMGL gr, HCDT dat, const char *sch,double x, double y, double w, double h)
419 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Colorbar(dat,sch,x,y,w,h); }
420 //-----------------------------------------------------------------------------
mgl_add_legend(HMGL gr,const char * text,const char * style)421 void MGL_EXPORT mgl_add_legend(HMGL gr, const char *text,const char *style)
422 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->AddLegend(text,style); }
mgl_add_legendw(HMGL gr,const wchar_t * text,const char * style)423 void MGL_EXPORT mgl_add_legendw(HMGL gr, const wchar_t *text,const char *style)
424 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->AddLegend(text,style); }
mgl_clear_legend(HMGL gr)425 void MGL_EXPORT mgl_clear_legend(HMGL gr)
426 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->ClearLegend(); }
mgl_legend_pos(HMGL gr,double x,double y,const char * font,const char * opt)427 void MGL_EXPORT mgl_legend_pos(HMGL gr, double x, double y, const char *font, const char *opt)
428 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Legend(x,y,font,opt); }
mgl_legend(HMGL gr,int where,const char * font,const char * opt)429 void MGL_EXPORT mgl_legend(HMGL gr, int where, const char *font, const char *opt)
430 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Legend(where,font,opt); }
mgl_set_legend_marks(HMGL gr,int num)431 void MGL_EXPORT mgl_set_legend_marks(HMGL gr, int num)
432 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetLegendMarks(num); }
433 //-----------------------------------------------------------------------------
mgl_create_graph_(int * width,int * height)434 uintptr_t MGL_EXPORT mgl_create_graph_(int *width, int *height)
435 { return uintptr_t(new mglCanvas(*width,*height)); }
mgl_delete_graph_(uintptr_t * gr)436 void MGL_EXPORT mgl_delete_graph_(uintptr_t *gr) { delete _GR_; }
mgl_default_graph_()437 uintptr_t MGL_EXPORT mgl_default_graph_() { return uintptr_t(&mglDefaultGr); }
mgl_set_size_scl_(double * scl)438 void MGL_EXPORT mgl_set_size_scl_(double *scl) { mgl_set_size_scl(*scl); }
mgl_set_size_(uintptr_t * gr,int * width,int * height)439 void MGL_EXPORT mgl_set_size_(uintptr_t *gr, int *width, int *height)
440 { mgl_set_size(_GR_,*width,*height); }
mgl_scale_size_(uintptr_t * gr,int * width,int * height)441 void MGL_EXPORT mgl_scale_size_(uintptr_t *gr, int *width, int *height)
442 { mgl_scale_size(_GR_,*width,*height); }
mgl_set_def_param_(uintptr_t * gr)443 void MGL_EXPORT mgl_set_def_param_(uintptr_t *gr) { _GR_->DefaultPlotParam(); }
mgl_combine_gr_(uintptr_t * gr,uintptr_t * in)444 void MGL_EXPORT mgl_combine_gr_(uintptr_t *gr, uintptr_t *in)
445 { _GR_->Combine((mglCanvas *)in); }
mgl_set_bbox_(uintptr_t * gr,int * x1,int * y1,int * x2,int * y2)446 void MGL_EXPORT mgl_set_bbox_(uintptr_t *gr, int *x1, int *y1, int *x2, int *y2)
447 { _GR_->SetBBox(*x1,*y1,*x2,*y2); }
448 //-----------------------------------------------------------------------------
mgl_set_ticks_fact_(uintptr_t * gr,char * dir,double * d,int * ns,double * org,const char * fact,int,int l)449 void MGL_EXPORT mgl_set_ticks_fact_(uintptr_t *gr, char *dir, double *d, int *ns, double *org, const char *fact,int,int l)
450 { char *s=new char[l+1]; memcpy(s,fact,l); s[l]=0;
451 mgl_set_ticks_fact(_GR_,*dir,*d,*ns,*org,s); delete []s; }
mgl_set_tick_len_(uintptr_t * gr,mreal * len,mreal * stt)452 void MGL_EXPORT mgl_set_tick_len_(uintptr_t *gr, mreal *len, mreal *stt)
453 { _GR_->SetTickLen(*len, *stt); }
mgl_set_axis_stl_(uintptr_t * gr,const char * stl,const char * tck,const char * sub,int l,int m,int n)454 void MGL_EXPORT mgl_set_axis_stl_(uintptr_t *gr, const char *stl, const char *tck, const char *sub, int l,int m,int n)
455 { char *a=new char[l+1]; memcpy(a,stl,l); a[l]=0;
456 char *t=new char[m+1]; memcpy(t,tck,m); t[m]=0;
457 char *s=new char[n+1]; memcpy(s,sub,n); s[n]=0;
458 _GR_->SetAxisStl(a,t,s); delete []a; delete []s; delete []t; }
mgl_adjust_ticks_(uintptr_t * gr,const char * dir,int l)459 void MGL_EXPORT mgl_adjust_ticks_(uintptr_t *gr, const char *dir, int l)
460 { char *s=new char[l+1]; memcpy(s,dir,l); s[l]=0;
461 _GR_->AdjustTicks(s,true); delete []s; }
mgl_adjust_ticks_ext_(uintptr_t * gr,const char * dir,const char * stl,int l,int m)462 void MGL_EXPORT mgl_adjust_ticks_ext_(uintptr_t *gr, const char *dir, const char *stl, int l, int m)
463 { char *s=new char[l+1]; memcpy(s,dir,l); s[l]=0;
464 char *f=new char[m+1]; memcpy(f,stl,m); f[m]=0;
465 _GR_->AdjustTicks(s,true,f); delete []s; delete []f; }
mgl_set_ticks_(uintptr_t * gr,char * dir,mreal * d,int * ns,mreal * org,int)466 void MGL_EXPORT mgl_set_ticks_(uintptr_t *gr, char *dir, mreal *d, int *ns, mreal *org, int)
467 { _GR_->SetTicks(*dir, *d, *ns, *org); }
mgl_set_ticks_str_(uintptr_t * gr,const char * dir,const char * lbl,int * add,int,int l)468 void MGL_EXPORT mgl_set_ticks_str_(uintptr_t *gr, const char *dir, const char *lbl, int *add,int,int l)
469 { char *s=new char[l+1]; memcpy(s,lbl,l); s[l]=0;
470 _GR_->SetTicksVal(*dir,s,*add); delete []s; }
mgl_set_ticks_val_(uintptr_t * gr,const char * dir,uintptr_t * val,const char * lbl,int * add,int,int l)471 void MGL_EXPORT mgl_set_ticks_val_(uintptr_t *gr, const char *dir, uintptr_t *val, const char *lbl, int *add,int,int l)
472 { char *s=new char[l+1]; memcpy(s,lbl,l); s[l]=0;
473 _GR_->SetTicksVal(*dir,_DA_(val),s,*add); delete []s; }
mgl_add_tick_(uintptr_t * gr,const char * dir,mreal * val,const char * lbl,int,int l)474 void MGL_EXPORT mgl_add_tick_(uintptr_t *gr, const char *dir, mreal *val, const char *lbl, int,int l)
475 { char *s=new char[l+1]; memcpy(s,lbl,l); s[l]=0;
476 mgl_add_tick(_GR_,*dir,*val,s); delete []s; }
mgl_tune_ticks_(uintptr_t * gr,int * tune,mreal * fact_pos)477 void MGL_EXPORT mgl_tune_ticks_(uintptr_t *gr, int *tune, mreal *fact_pos)
478 { _GR_->SetTuneTicks(*tune, *fact_pos); }
mgl_set_tick_templ_(uintptr_t * gr,const char * dir,const char * templ,int,int l)479 void MGL_EXPORT mgl_set_tick_templ_(uintptr_t *gr, const char *dir, const char *templ,int,int l)
480 { char *s=new char[l+1]; memcpy(s,templ,l); s[l]=0;
481 _GR_->SetTickTempl(*dir,s); delete []s; }
mgl_set_ticks_time_(uintptr_t * gr,const char * dir,mreal * d,const char * t,int,int l)482 void MGL_EXPORT mgl_set_ticks_time_(uintptr_t *gr, const char *dir, mreal *d, const char *t,int,int l)
483 { char *s=new char[l+1]; memcpy(s,t,l); s[l]=0;
484 _GR_->SetTickTime(*dir,*d,s); delete []s; }
485 //-----------------------------------------------------------------------------
mgl_box_(uintptr_t * gr)486 void MGL_EXPORT mgl_box_(uintptr_t *gr) { _GR_->Box(); }
mgl_box_str_(uintptr_t * gr,const char * col,int * ticks,int l)487 void MGL_EXPORT mgl_box_str_(uintptr_t *gr, const char *col, int *ticks, int l)
488 { char *s=new char[l+1]; memcpy(s,col,l); s[l]=0;
489 _GR_->Box(s,*ticks); delete []s; }
mgl_axis_(uintptr_t * gr,const char * dir,const char * stl,const char * opt,int l,int n,int m)490 void MGL_EXPORT mgl_axis_(uintptr_t *gr, const char *dir, const char *stl, const char *opt,int l,int n,int m)
491 { char *s=new char[l+1]; memcpy(s,dir,l); s[l]=0;
492 char *p=new char[n+1]; memcpy(p,stl,l); p[n]=0;
493 char *o=new char[m+1]; memcpy(o,opt,m); o[m]=0;
494 _GR_->Axis(s,p,o); delete []s; delete []p; delete []o; }
mgl_axis_grid_(uintptr_t * gr,const char * dir,const char * pen,const char * opt,int l,int n,int m)495 void MGL_EXPORT mgl_axis_grid_(uintptr_t *gr, const char *dir,const char *pen, const char *opt,int l,int n,int m)
496 { char *s=new char[l+1]; memcpy(s,dir,l); s[l]=0;
497 char *p=new char[n+1]; memcpy(p,pen,n); p[n]=0;
498 char *o=new char[m+1]; memcpy(o,opt,m); o[m]=0;
499 _GR_->Grid(s,p,o); delete []s; delete []p; delete []o; }
mgl_label_(uintptr_t * gr,const char * dir,const char * text,mreal * pos,const char * opt,int,int l,int m)500 void MGL_EXPORT mgl_label_(uintptr_t *gr, const char *dir, const char *text, mreal *pos, const char *opt,int,int l,int m)
501 { char *s=new char[l+1]; memcpy(s,text,l); s[l]=0;
502 char *o=new char[m+1]; memcpy(o,opt,m); o[m]=0;
503 _GR_->Label(*dir, s, *pos, o); delete []s; delete []o; }
504 //-----------------------------------------------------------------------------
mgl_colorbar_(uintptr_t * gr,const char * sch,int l)505 void MGL_EXPORT mgl_colorbar_(uintptr_t *gr, const char *sch, int l)
506 { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;
507 _GR_->Colorbar(s); delete []s; }
mgl_colorbar_ext_(uintptr_t * gr,const char * sch,mreal * x,mreal * y,mreal * w,mreal * h,int l)508 void MGL_EXPORT mgl_colorbar_ext_(uintptr_t *gr, const char *sch, mreal *x, mreal *y, mreal *w, mreal *h, int l)
509 { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;
510 _GR_->Colorbar(s,*x,*y,*w,*h); delete []s; }
mgl_colorbar_val_(uintptr_t * gr,uintptr_t * dat,const char * sch,int l)511 void MGL_EXPORT mgl_colorbar_val_(uintptr_t *gr, uintptr_t *dat, const char *sch, int l)
512 { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;
513 _GR_->Colorbar(_DA_(dat), s); delete []s; }
mgl_colorbar_val_ext_(uintptr_t * gr,uintptr_t * dat,const char * sch,mreal * x,mreal * y,mreal * w,mreal * h,int l)514 void MGL_EXPORT mgl_colorbar_val_ext_(uintptr_t *gr, uintptr_t *dat, const char *sch, mreal *x, mreal *y, mreal *w, mreal *h, int l)
515 { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;
516 _GR_->Colorbar(_DA_(dat),s,*x,*y,*w,*h); delete []s; }
517 //-----------------------------------------------------------------------------
mgl_add_legend_(uintptr_t * gr,const char * text,const char * style,int l,int n)518 void MGL_EXPORT mgl_add_legend_(uintptr_t *gr, const char *text,const char *style,int l,int n)
519 { char *s=new char[l+1]; memcpy(s,text,l); s[l]=0;
520 char *f=new char[n+1]; memcpy(f,style,n); f[n]=0;
521 _GR_->AddLegend(s,f); delete []s; delete []f; }
mgl_clear_legend_(uintptr_t * gr)522 void MGL_EXPORT mgl_clear_legend_(uintptr_t *gr) { if(gr) _GR_->ClearLegend(); }
mgl_legend_pos_(uintptr_t * gr,mreal * x,mreal * y,const char * font,const char * opt,int l,int m)523 void MGL_EXPORT mgl_legend_pos_(uintptr_t *gr, mreal *x, mreal *y, const char *font, const char *opt,int l,int m)
524 { char *s=new char[l+1]; memcpy(s,font,l); s[l]=0;
525 char *o=new char[m+1]; memcpy(o,opt,m); o[m]=0;
526 _GR_->Legend(*x, *y, s, o); delete []s; delete []o; }
mgl_legend_(uintptr_t * gr,int * where,const char * font,const char * opt,int l,int m)527 void MGL_EXPORT mgl_legend_(uintptr_t *gr, int *where, const char *font, const char *opt,int l,int m)
528 { char *s=new char[l+1]; memcpy(s,font,l); s[l]=0;
529 char *o=new char[m+1]; memcpy(o,opt,m); o[m]=0;
530 _GR_->Legend(*where, s, o); delete []s; delete []o; }
mgl_set_legend_marks_(uintptr_t * gr,int * num)531 void MGL_EXPORT mgl_set_legend_marks_(uintptr_t *gr, int *num)
532 { _GR_->SetLegendMarks(*num); }
533 //-----------------------------------------------------------------------------
mgl_set_plotfactor(HMGL gr,double val)534 void MGL_EXPORT mgl_set_plotfactor(HMGL gr, double val)
535 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetPlotFactor(val); }
mgl_set_plotfactor_(uintptr_t * gr,mreal * val)536 void MGL_EXPORT mgl_set_plotfactor_(uintptr_t *gr, mreal *val)
537 { _GR_->SetPlotFactor(*val); }
538 //-----------------------------------------------------------------------------
mgl_set_tick_shift(HMGL gr,double sx,double sy,double sz,double sc)539 void MGL_EXPORT mgl_set_tick_shift(HMGL gr, double sx, double sy, double sz, double sc)
540 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetTickShift(mglPoint(sx,sy,sz,sc)); }
mgl_set_tick_shift_(uintptr_t * gr,mreal * sx,mreal * sy,mreal * sz,mreal * sc)541 void MGL_EXPORT mgl_set_tick_shift_(uintptr_t *gr, mreal *sx, mreal *sy, mreal *sz, mreal *sc)
542 { _GR_->SetTickShift(mglPoint(*sx,*sy,*sz,*sc)); }
543 //-----------------------------------------------------------------------------
544 #if !MGL_HAVE_PNG
mgl_write_prc(HMGL gr,const char * fname,const char * descr,int make_pdf)545 void MGL_EXPORT mgl_write_prc(HMGL gr, const char *fname,const char *descr, int make_pdf)
546 { mgl_set_global_warn(_("PNG support was disabled. Please, enable it and rebuild MathGL.")); }
mgl_write_prc_(uintptr_t * graph,const char * fname,const char * descr,int * make_pdf,int lf,int ld)547 void MGL_EXPORT mgl_write_prc_(uintptr_t *graph, const char *fname,const char *descr, int *make_pdf,int lf,int ld)
548 { mgl_set_global_warn(_("PNG support was disabled. Please, enable it and rebuild MathGL.")); }
549 #endif
550 //-----------------------------------------------------------------------------
mgl_finish(HMGL gr)551 void MGL_EXPORT mgl_finish(HMGL gr)
552 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Finish(); }
mgl_finish_(uintptr_t * gr)553 void MGL_EXPORT mgl_finish_(uintptr_t *gr) { _GR_->Finish(); }
554 //-----------------------------------------------------------------------------
mgl_rasterize(HMGL gr)555 void MGL_EXPORT mgl_rasterize(HMGL gr)
556 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Rasterize(); }
mgl_rasterize_(uintptr_t * gr)557 void MGL_EXPORT mgl_rasterize_(uintptr_t *gr) { _GR_->Rasterize(); }
558 //-----------------------------------------------------------------------------
mgl_pen_delta(HMGL gr,double d)559 void MGL_EXPORT mgl_pen_delta(HMGL gr, double d)
560 { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->SetPenDelta(d); }
mgl_pen_delta_(uintptr_t * gr,double * d)561 void MGL_EXPORT mgl_pen_delta_(uintptr_t *gr, double *d) { _GR_->SetPenDelta(*d); }
562 //-----------------------------------------------------------------------------
563