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