1 /***************************************************************************
2 * base.cpp is part of Math gric 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/font.h"
21 #include "mgl2/base_cf.h"
22 #include "mgl2/base.h"
23 //-----------------------------------------------------------------------------
24 //
25 // C interfaces
26 //
27 //-----------------------------------------------------------------------------
28 bool mglPrintWarn = true;
mgl_suppress_warn(int on)29 void MGL_EXPORT mgl_suppress_warn(int on) { mglPrintWarn = !on; }
mgl_suppress_warn_(int * on)30 void MGL_EXPORT mgl_suppress_warn_(int *on) { mgl_suppress_warn(*on); }
mgl_set_quality(HMGL gr,int qual)31 void MGL_EXPORT mgl_set_quality(HMGL gr, int qual) { gr->SetQuality(qual); }
mgl_set_quality_(uintptr_t * gr,int * qual)32 void MGL_EXPORT mgl_set_quality_(uintptr_t *gr, int *qual) { _GR_->SetQuality(*qual); }
mgl_get_quality(HMGL gr)33 int MGL_EXPORT_PURE mgl_get_quality(HMGL gr) { return gr->GetQuality(); }
mgl_get_quality_(uintptr_t * gr)34 int MGL_EXPORT_PURE mgl_get_quality_(uintptr_t *gr) { return _GR_->GetQuality(); }
mgl_is_frames(HMGL gr)35 int MGL_EXPORT_PURE mgl_is_frames(HMGL gr)
36 { return gr->get(MGL_VECT_FRAME) && !(gr->GetQuality()&MGL_DRAW_LMEM); }
mgl_set_draw_reg(HMGL gr,long nx,long ny,long m)37 void MGL_EXPORT mgl_set_draw_reg(HMGL gr, long nx, long ny, long m) { gr->SetDrawReg(nx,ny,m); }
mgl_set_draw_reg_(uintptr_t * gr,int * nx,int * ny,int * m)38 void MGL_EXPORT mgl_set_draw_reg_(uintptr_t *gr, int *nx, int *ny, int *m) { _GR_->SetDrawReg(*nx,*ny,*m); }
39 //-----------------------------------------------------------------------------
mgl_get_flag(HMGL gr,uint32_t flag)40 int MGL_EXPORT_PURE mgl_get_flag(HMGL gr, uint32_t flag) { return gr->get(flag); }
mgl_get_flag_(uintptr_t * gr,unsigned long * flag)41 int MGL_EXPORT_PURE mgl_get_flag_(uintptr_t *gr, unsigned long *flag) { return _GR_->get(*flag); }
mgl_set_flag(HMGL gr,int val,uint32_t flag)42 void MGL_EXPORT mgl_set_flag(HMGL gr, int val, uint32_t flag) { gr->set(val,flag); }
mgl_set_flag_(uintptr_t * gr,int * val,unsigned long * flag)43 void MGL_EXPORT mgl_set_flag_(uintptr_t *gr, int *val, unsigned long *flag) { _GR_->set(*val,*flag); }
44 //-----------------------------------------------------------------------------
mgl_set_color(char id,double r,double g,double b)45 void MGL_EXPORT mgl_set_color(char id, double r, double g, double b)
46 {
47 for(long i=0;mglColorIds[i].id;i++)
48 if(mglColorIds[i].id==id) mglColorIds[i].col = mglColor(r,g,b);
49 }
mgl_set_color_(char * id,mreal * r,mreal * g,mreal * b,int)50 void MGL_EXPORT mgl_set_color_(char *id, mreal *r, mreal *g, mreal *b, int) { mgl_set_color(*id,*r,*g,*b); }
51 //-----------------------------------------------------------------------------
mgl_set_def_sch(HMGL gr,const char * sch)52 void MGL_EXPORT mgl_set_def_sch(HMGL gr, const char *sch) { gr->SetDefScheme(sch); }
mgl_set_def_sch_(uintptr_t * gr,const char * sch,int l)53 void MGL_EXPORT mgl_set_def_sch_(uintptr_t *gr, const char *sch,int l)
54 { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0;
55 mgl_set_def_sch(_GR_, s); delete []s; }
56 //-----------------------------------------------------------------------------
mgl_set_plotid(HMGL gr,const char * id)57 void MGL_EXPORT mgl_set_plotid(HMGL gr, const char *id) { gr->PlotId = id; }
mgl_set_plotid_(uintptr_t * gr,const char * id,int l)58 void MGL_EXPORT mgl_set_plotid_(uintptr_t *gr, const char *id,int l)
59 { char *s=new char[l+1]; memcpy(s,id,l); s[l]=0;
60 _GR_->PlotId = s; delete []s; }
mgl_get_plotid(HMGL gr)61 MGL_EXPORT_PURE const char *mgl_get_plotid(HMGL gr) { return gr->PlotId.c_str(); }
mgl_get_plotid_(uintptr_t * gr,char * out,int len)62 int MGL_EXPORT mgl_get_plotid_(uintptr_t *gr, char *out, int len)
63 {
64 const char *res = mgl_get_plotid(_GR_);
65 if(out) mgl_strncpy(out,res,len);
66 return strlen(res);
67 }
68 //-----------------------------------------------------------------------------
mgl_get_mess(HMGL gr)69 MGL_EXPORT_PURE const char *mgl_get_mess(HMGL gr) { return gr->Mess.c_str(); }
mgl_get_mess_(uintptr_t * gr,char * out,int len)70 int MGL_EXPORT mgl_get_mess_(uintptr_t *gr, char *out, int len)
71 {
72 const char *res = mgl_get_mess(_GR_);
73 if(out) mgl_strncpy(out,res,len);
74 return strlen(res);
75 }
mgl_get_warn(HMGL gr)76 int MGL_EXPORT_PURE mgl_get_warn(HMGL gr) { return gr->GetWarn(); }
mgl_set_warn(HMGL gr,int code,const char * txt)77 void MGL_EXPORT mgl_set_warn(HMGL gr, int code, const char *txt)
78 { gr->SetWarn(code,txt); }
79 extern bool mglPrintWarn;
80 extern MGL_EXPORT std::string *mglGlobalMess; ///< Buffer for receiving global messages
mgl_set_global_warn(const char * txt)81 void MGL_EXPORT mgl_set_global_warn(const char *txt)
82 {
83 if(txt && *txt)
84 {
85 *mglGlobalMess += txt; *mglGlobalMess += '\n';
86 if(mglPrintWarn) fprintf(stderr,_("Global message - %s\n"),txt);
87 }
88 }
mgl_set_global_warn_(const char * txt,int l)89 void MGL_EXPORT mgl_set_global_warn_(const char *txt, int l)
90 { char *s=new char[l+1]; memcpy(s,txt,l); s[l]=0; mgl_set_global_warn(s); delete []s; }
mgl_clear_global_warn()91 void MGL_EXPORT mgl_clear_global_warn()
92 { *mglGlobalMess = ""; }
mgl_clear_global_warn_()93 void MGL_EXPORT mgl_clear_global_warn_()
94 { mgl_clear_global_warn(); }
mgl_get_global_warn()95 MGL_EXPORT_PURE const char *mgl_get_global_warn()
96 { return mglGlobalMess->empty()?"":mglGlobalMess->c_str(); }
mgl_get_global_warn_(char * out,int len)97 int MGL_EXPORT mgl_get_global_warn_(char *out, int len)
98 {
99 const char *res = mgl_get_global_warn();
100 if(out) mgl_strncpy(out,res,len);
101 return strlen(res);
102 }
103 //-----------------------------------------------------------------------------
mgl_set_origin(HMGL gr,double x0,double y0,double z0)104 void MGL_EXPORT mgl_set_origin(HMGL gr, double x0, double y0, double z0)
105 { gr->SetOrigin(x0,y0,z0); }
mgl_set_palette(HMGL gr,const char * colors)106 void MGL_EXPORT mgl_set_palette(HMGL gr, const char *colors)
107 { gr->SetPalette(colors); }
mgl_set_meshnum(HMGL gr,int num)108 void MGL_EXPORT mgl_set_meshnum(HMGL gr, int num) { gr->SetMeshNum(num); }
mgl_set_facenum(HMGL gr,int num)109 void MGL_EXPORT mgl_set_facenum(HMGL gr, int num) { gr->FaceNum=num; }
mgl_set_alpha_default(HMGL gr,double alpha)110 void MGL_EXPORT mgl_set_alpha_default(HMGL gr, double alpha) { gr->SetAlphaDef(alpha); }
mgl_set_light_dif(HMGL gr,int enable)111 void MGL_EXPORT mgl_set_light_dif(HMGL gr, int enable) { gr->SetDifLight(enable); }
mgl_clear_unused(HMGL gr)112 void MGL_EXPORT mgl_clear_unused(HMGL gr) { gr->ClearUnused(); }
113 //-----------------------------------------------------------------------------
mgl_set_rdc_acc(HMGL gr,int reduce)114 void MGL_EXPORT mgl_set_rdc_acc(HMGL gr, int reduce) { gr->SetReduceAcc(reduce); }
mgl_highlight(HMGL gr,int id)115 void MGL_EXPORT mgl_highlight(HMGL gr, int id) { gr->Highlight(id); }
mgl_set_cut(HMGL gr,int cut)116 void MGL_EXPORT mgl_set_cut(HMGL gr, int cut) { gr->SetCut(cut); }
mgl_set_cut_box(HMGL gr,double x1,double y1,double z1,double x2,double y2,double z2)117 void MGL_EXPORT mgl_set_cut_box(HMGL gr, double x1,double y1,double z1,double x2,double y2,double z2)
118 { gr->SetCutBox(x1,y1,z1,x2,y2,z2); }
mgl_set_cutoff(HMGL gr,const char * EqC)119 void MGL_EXPORT mgl_set_cutoff(HMGL gr, const char *EqC) { gr->CutOff(EqC); }
120 //-----------------------------------------------------------------------------
mgl_set_ternary(HMGL gr,int enable)121 void MGL_EXPORT mgl_set_ternary(HMGL gr, int enable) { gr->Ternary(enable); }
mgl_set_range_val(HMGL gr,char dir,double v1,double v2)122 void MGL_EXPORT mgl_set_range_val(HMGL gr, char dir, double v1,double v2)
123 {
124 if(dir=='c' || dir=='a') gr->CRange(v1,v2);
125 else if(dir=='x') gr->XRange(v1,v2);
126 else if(dir=='y') gr->YRange(v1,v2);
127 else if(dir=='z') gr->ZRange(v1,v2);
128 }
mgl_add_range_val(HMGL gr,char dir,double v1,double v2)129 void MGL_EXPORT mgl_add_range_val(HMGL gr, char dir, double v1,double v2)
130 {
131 if(dir=='c' || dir=='a') gr->CRange(v1,v2,true);
132 else if(dir=='x') gr->XRange(v1,v2,true);
133 else if(dir=='y') gr->YRange(v1,v2,true);
134 else if(dir=='z') gr->ZRange(v1,v2,true);
135 }
mgl_set_range_dat(HMGL gr,char dir,HCDT a,int add)136 void MGL_EXPORT mgl_set_range_dat(HMGL gr, char dir, HCDT a, int add)
137 {
138 if(dir=='c' || dir=='a') gr->CRange(a,add);
139 else if(dir=='x') gr->XRange(a,add);
140 else if(dir=='y') gr->YRange(a,add);
141 else if(dir=='z') gr->ZRange(a,add);
142 }
mgl_set_ranges(HMGL gr,double x1,double x2,double y1,double y2,double z1,double z2)143 void MGL_EXPORT mgl_set_ranges(HMGL gr, double x1, double x2, double y1, double y2, double z1, double z2)
144 { gr->SetRanges(x1,x2,y1,y2,z1,z2); }
mgl_set_auto_ranges(HMGL gr,double x1,double x2,double y1,double y2,double z1,double z2,double c1,double c2)145 void MGL_EXPORT mgl_set_auto_ranges(HMGL gr, double x1, double x2, double y1, double y2, double z1, double z2, double c1, double c2)
146 { gr->SetAutoRanges(x1,x2,y1,y2,z1,z2,c1,c2); }
mgl_set_func(HMGL gr,const char * EqX,const char * EqY,const char * EqZ,const char * EqA)147 void MGL_EXPORT mgl_set_func(HMGL gr, const char *EqX,const char *EqY,const char *EqZ,const char *EqA)
148 { gr->SetFunc(EqX,EqY,EqZ,EqA); }
mgl_set_coor(HMGL gr,int how)149 void MGL_EXPORT mgl_set_coor(HMGL gr, int how) { gr->SetCoor(how); }
150 //-----------------------------------------------------------------------------
mgl_set_bar_width(HMGL gr,double width)151 void MGL_EXPORT mgl_set_bar_width(HMGL gr, double width) { gr->SetBarWidth(width); }
152 //-----------------------------------------------------------------------------
153 //
154 // Fortran interfaces
155 //
156 //-----------------------------------------------------------------------------
mgl_set_rdc_acc_(uintptr_t * gr,int * reduce)157 void MGL_EXPORT mgl_set_rdc_acc_(uintptr_t *gr, int *reduce)
158 { _GR_->SetReduceAcc(*reduce); }
mgl_highlight_(uintptr_t * gr,int * id)159 void MGL_EXPORT mgl_highlight_(uintptr_t *gr, int *id) { _GR_->Highlight(*id); }
mgl_set_origin_(uintptr_t * gr,mreal * x0,mreal * y0,mreal * z0)160 void MGL_EXPORT mgl_set_origin_(uintptr_t *gr, mreal *x0, mreal *y0, mreal *z0)
161 { _GR_->SetOrigin(*x0,*y0,*z0); }
mgl_get_warn_(uintptr_t * gr)162 int MGL_EXPORT_PURE mgl_get_warn_(uintptr_t *gr) { return _GR_->GetWarn(); }
mgl_set_warn_(uintptr_t * gr,int * code,const char * txt,int l)163 void MGL_EXPORT mgl_set_warn_(uintptr_t *gr, int *code, const char *txt, int l)
164 { char *s=new char[l+1]; memcpy(s,txt,l); s[l]=0;
165 _GR_->SetWarn(*code, s); delete []s; }
mgl_set_palette_(uintptr_t * gr,const char * colors,int l)166 void MGL_EXPORT mgl_set_palette_(uintptr_t *gr, const char *colors, int l)
167 { char *s=new char[l+1]; memcpy(s,colors,l); s[l]=0;
168 _GR_->SetPalette(s); delete []s; }
mgl_set_meshnum_(uintptr_t * gr,int * num)169 void MGL_EXPORT mgl_set_meshnum_(uintptr_t *gr, int *num) { _GR_->SetMeshNum(*num); }
mgl_set_facenum_(uintptr_t * gr,int * num)170 void MGL_EXPORT mgl_set_facenum_(uintptr_t *gr, int *num) { _GR_->FaceNum=*num; }
mgl_set_alpha_default_(uintptr_t * gr,mreal * alpha)171 void MGL_EXPORT mgl_set_alpha_default_(uintptr_t *gr, mreal *alpha) { _GR_->SetAlphaDef(*alpha); }
mgl_set_light_dif_(uintptr_t * gr,int * enable)172 void MGL_EXPORT mgl_set_light_dif_(uintptr_t *gr, int *enable) { _GR_->SetDifLight(*enable); }
mgl_clear_unused_(uintptr_t * gr)173 void MGL_EXPORT mgl_clear_unused_(uintptr_t *gr) { _GR_->ClearUnused(); }
174 //-----------------------------------------------------------------------------
mgl_set_cut_box_(uintptr_t * gr,mreal * x1,mreal * y1,mreal * z1,mreal * x2,mreal * y2,mreal * z2)175 void MGL_EXPORT mgl_set_cut_box_(uintptr_t *gr, mreal *x1, mreal *y1, mreal *z1, mreal *x2, mreal *y2, mreal *z2)
176 { _GR_->SetCutBox(*x1,*y1,*z1,*x2,*y2,*z2); }
mgl_set_cut_(uintptr_t * gr,int * cut)177 void MGL_EXPORT mgl_set_cut_(uintptr_t *gr, int *cut) { _GR_->SetCut(*cut); }
mgl_set_cutoff_(uintptr_t * gr,const char * EqC,int l)178 void MGL_EXPORT mgl_set_cutoff_(uintptr_t *gr, const char *EqC, int l)
179 { char *s=new char[l+1]; memcpy(s,EqC,l); s[l]=0;
180 _GR_->CutOff(s); delete []s; }
181 //-----------------------------------------------------------------------------
mgl_set_ternary_(uintptr_t * gr,int * enable)182 void MGL_EXPORT mgl_set_ternary_(uintptr_t *gr, int *enable) { _GR_->Ternary(*enable); }
mgl_set_range_val_(uintptr_t * gr,const char * dir,mreal * v1,mreal * v2,int)183 void MGL_EXPORT mgl_set_range_val_(uintptr_t *gr, const char *dir, mreal *v1, mreal *v2,int)
184 { mgl_set_range_val(_GR_,*dir,*v1,*v2); }
mgl_add_range_val_(uintptr_t * gr,const char * dir,mreal * v1,mreal * v2,int)185 void MGL_EXPORT mgl_add_range_val_(uintptr_t *gr, const char *dir, mreal *v1, mreal *v2,int)
186 { mgl_add_range_val(_GR_,*dir,*v1,*v2); }
mgl_set_range_dat_(uintptr_t * gr,const char * dir,uintptr_t * a,int * add,int)187 void MGL_EXPORT mgl_set_range_dat_(uintptr_t *gr, const char *dir, uintptr_t *a, int *add,int)
188 { mgl_set_range_dat(_GR_,*dir,_DA_(a),*add); }
mgl_set_ranges_(uintptr_t * gr,mreal * x1,mreal * x2,mreal * y1,mreal * y2,mreal * z1,mreal * z2)189 void MGL_EXPORT mgl_set_ranges_(uintptr_t *gr, mreal *x1, mreal *x2, mreal *y1, mreal *y2, mreal *z1, mreal *z2)
190 { _GR_->SetRanges(*x1,*x2,*y1,*y2,*z1,*z2); }
mgl_set_auto_ranges_(uintptr_t * gr,mreal * x1,mreal * x2,mreal * y1,mreal * y2,mreal * z1,mreal * z2,mreal * c1,mreal * c2)191 void MGL_EXPORT mgl_set_auto_ranges_(uintptr_t *gr, mreal *x1, mreal *x2, mreal *y1, mreal *y2, mreal *z1, mreal *z2, mreal *c1, mreal *c2)
192 { _GR_->SetAutoRanges(*x1,*x2,*y1,*y2,*z1,*z2,*c1,*c2); }
mgl_set_func_(uintptr_t * gr,const char * EqX,const char * EqY,const char * EqZ,const char * EqA,int lx,int ly,int lz,int la)193 void MGL_EXPORT mgl_set_func_(uintptr_t *gr, const char *EqX,const char *EqY,const char *EqZ,const char *EqA,int lx,int ly,int lz,int la)
194 {
195 char *sx=new char[lx+1]; memcpy(sx,EqX,lx); sx[lx]=0;
196 char *sy=new char[ly+1]; memcpy(sy,EqY,ly); sy[ly]=0;
197 char *sz=new char[lz+1]; memcpy(sz,EqZ,lz); sz[lz]=0;
198 char *sa=new char[la+1]; memcpy(sa,EqA,la); sa[la]=0;
199 _GR_->SetFunc(sx,sy,sz,sa);
200 delete []sx; delete []sy; delete []sz; delete []sa;
201 }
mgl_set_coor_(uintptr_t * gr,int * how)202 void MGL_EXPORT mgl_set_coor_(uintptr_t *gr, int *how)
203 { _GR_->SetCoor(*how); }
204 //-----------------------------------------------------------------------------
mgl_set_tick_rotate(HMGL gr,int enable)205 void MGL_EXPORT mgl_set_tick_rotate(HMGL gr, int enable){ gr->SetTickRotate(enable); }
mgl_set_tick_skip(HMGL gr,int enable)206 void MGL_EXPORT mgl_set_tick_skip(HMGL gr, int enable) { gr->SetTickSkip(enable); }
mgl_set_tick_rotate_(uintptr_t * gr,int * enable)207 void MGL_EXPORT mgl_set_tick_rotate_(uintptr_t *gr,int *enable){ _GR_->SetTickRotate(*enable); }
mgl_set_tick_skip_(uintptr_t * gr,int * enable)208 void MGL_EXPORT mgl_set_tick_skip_(uintptr_t *gr, int *enable) { _GR_->SetTickSkip(*enable); }
209 //-----------------------------------------------------------------------------
mgl_set_rotated_text(HMGL gr,int enable)210 void MGL_EXPORT mgl_set_rotated_text(HMGL gr, int enable) { gr->SetRotatedText(enable); }
mgl_set_scale_text(HMGL gr,int enable)211 void MGL_EXPORT mgl_set_scale_text(HMGL gr, int enable) { gr->set(!enable, MGL_NO_SCALE_REL); }
mgl_set_mark_size(HMGL gr,double size)212 void MGL_EXPORT mgl_set_mark_size(HMGL gr, double size) { gr->SetMarkSize(size); }
mgl_set_arrow_size(HMGL gr,double size)213 void MGL_EXPORT mgl_set_arrow_size(HMGL gr, double size) { gr->SetArrowSize(size); }
mgl_set_font_size(HMGL gr,double size)214 void MGL_EXPORT mgl_set_font_size(HMGL gr, double size) { gr->SetFontSize(size); }
mgl_set_font_hscale(HMGL gr,double scale)215 void MGL_EXPORT mgl_set_font_hscale(HMGL gr, double scale) { gr->SetFontHscale(scale); }
mgl_set_font_def(HMGL gr,const char * fnt)216 void MGL_EXPORT mgl_set_font_def(HMGL gr, const char *fnt) { gr->SetFontDef(fnt); }
mgl_load_font(HMGL gr,const char * name,const char * path)217 void MGL_EXPORT mgl_load_font(HMGL gr, const char *name, const char *path)
218 { gr->LoadFont(name,path); }
mgl_copy_font(HMGL gr,HMGL gr_from)219 void MGL_EXPORT mgl_copy_font(HMGL gr, HMGL gr_from) { gr->CopyFont(gr_from); }
mgl_restore_font(HMGL gr)220 void MGL_EXPORT mgl_restore_font(HMGL gr) { gr->RestoreFont(); }
mgl_define_symbol(HMGL gr,char id,HCDT x,HCDT y)221 void MGL_EXPORT mgl_define_symbol(HMGL gr, char id, HCDT x, HCDT y) { gr->DefineGlyph(x,y,id); }
222 //-----------------------------------------------------------------------------
mgl_set_bar_width_(uintptr_t * gr,mreal * width)223 void MGL_EXPORT mgl_set_bar_width_(uintptr_t *gr, mreal *width) { _GR_->SetBarWidth(*width); }
mgl_set_rotated_text_(uintptr_t * gr,int * enable)224 void MGL_EXPORT mgl_set_rotated_text_(uintptr_t *gr, int *enable) { _GR_->SetRotatedText(*enable); }
mgl_set_scale_text_(uintptr_t * gr,int * enable)225 void MGL_EXPORT mgl_set_scale_text_(uintptr_t *gr, int *enable) { mgl_set_scale_text(_GR_,*enable); }
mgl_set_mark_size_(uintptr_t * gr,mreal * size)226 void MGL_EXPORT mgl_set_mark_size_(uintptr_t *gr, mreal *size) { _GR_->SetMarkSize(*size); }
mgl_set_arrow_size_(uintptr_t * gr,mreal * size)227 void MGL_EXPORT mgl_set_arrow_size_(uintptr_t *gr, mreal *size) { _GR_->SetArrowSize(*size); }
mgl_set_font_size_(uintptr_t * gr,mreal * size)228 void MGL_EXPORT mgl_set_font_size_(uintptr_t *gr, mreal *size) { _GR_->SetFontSize(*size); }
mgl_set_font_hscale_(uintptr_t * gr,double * scale)229 void MGL_EXPORT mgl_set_font_hscale_(uintptr_t *gr, double *scale) { _GR_->SetFontHscale(*scale); }
mgl_set_font_def_(uintptr_t * gr,const char * name,int l)230 void MGL_EXPORT mgl_set_font_def_(uintptr_t *gr, const char *name, int l)
231 { char *s=new char[l+1]; memcpy(s,name,l); s[l]=0;
232 _GR_->SetFontDef(s); delete []s; }
mgl_load_font_(uintptr_t * gr,char * name,char * path,int l,int n)233 void MGL_EXPORT mgl_load_font_(uintptr_t *gr, char *name, char *path, int l,int n)
234 { char *s=new char[l+1]; memcpy(s,name,l); s[l]=0;
235 char *d=new char[n+1]; memcpy(d,path,n); d[n]=0;
236 _GR_->LoadFont(s,d); delete []s; delete []d; }
mgl_copy_font_(uintptr_t * gr,uintptr_t * gr_from)237 void MGL_EXPORT mgl_copy_font_(uintptr_t *gr, uintptr_t *gr_from)
238 { _GR_->CopyFont((mglBase *)(*gr_from)); }
mgl_restore_font_(uintptr_t * gr)239 void MGL_EXPORT mgl_restore_font_(uintptr_t *gr) { _GR_->RestoreFont(); }
mgl_define_symbol_(uintptr_t * gr,char * id,uintptr_t * x,uintptr_t * y,int)240 void MGL_EXPORT mgl_define_symbol_(uintptr_t *gr, char *id, uintptr_t *x, uintptr_t *y, int)
241 { _GR_->DefineGlyph(_DA_(x),_DA_(y),id?*id:0); }
242 //-----------------------------------------------------------------------------
243 extern mglFont *mglDefFont;
mgl_def_font(const char * name,const char * path)244 void MGL_EXPORT mgl_def_font(const char *name, const char *path)
245 { mglDefFont->Load(name,path); }
mgl_def_font_(const char * name,const char * path,int l,int n)246 void MGL_EXPORT mgl_def_font_(const char *name, const char *path,int l,int n)
247 { char *s=new char[l+1]; memcpy(s,name,l); s[l]=0;
248 char *d=new char[n+1]; memcpy(d,path,n); d[n]=0;
249 mglDefFont->Load(name,path); delete []s; delete []d; }
250 //-----------------------------------------------------------------------------
mgl_check_version(const char * ver)251 int MGL_EXPORT mgl_check_version(const char *ver)
252 { double v=0; int r = sscanf(ver,"2.%lg",&v);
253 return r<1 || v>MGL_VER2; }
mgl_check_version_(const char * ver,int l)254 int MGL_EXPORT mgl_check_version_(const char *ver, int l)
255 { char *s=new char[l+1]; memcpy(s,ver,l); s[l]=0;
256 int r=mgl_check_version(s); delete []s; return r; }
257 //-----------------------------------------------------------------------------
mgl_set_tex_parse(HMGL gr,int val)258 void MGL_EXPORT mgl_set_tex_parse(HMGL gr, int val)
259 { gr->GetFont()->parse=val; }
mgl_set_tex_parse_(uintptr_t * gr,int * val)260 void MGL_EXPORT mgl_set_tex_parse_(uintptr_t *gr, int *val)
261 { _GR_->GetFont()->parse=*val; }
262 //-----------------------------------------------------------------------------
mgl_start_group(HMGL gr,const char * s)263 void MGL_EXPORT mgl_start_group(HMGL gr, const char *s) { gr->StartAutoGroup(s); }
mgl_end_group(HMGL gr)264 void MGL_EXPORT mgl_end_group(HMGL gr) { gr->EndGroup(); }
mgl_start_group_(uintptr_t * gr,const char * name,int l)265 void MGL_EXPORT mgl_start_group_(uintptr_t *gr, const char *name,int l)
266 { char *s=new char[l+1]; memcpy(s,name,l); s[l]=0;
267 _GR_->StartAutoGroup(s); delete []s; }
mgl_end_group_(uintptr_t * gr)268 void MGL_EXPORT mgl_end_group_(uintptr_t *gr) { _GR_->EndGroup(); }
269 //-----------------------------------------------------------------------------
270 #include <stdarg.h>
271 bool mglTestMode=false;
mgl_test_txt(const char * str,...)272 void MGL_EXPORT mgl_test_txt(const char *str, ...)
273 {
274 if(mglTestMode)
275 {
276 char buf[256];
277 va_list lst;
278 va_start(lst,str);
279 vsnprintf(buf,256,str,lst); buf[255]=0;
280 va_end(lst);
281 printf(_("TEST: %s\n"),buf);
282 fflush(stdout);
283 }
284 }
mgl_set_test_mode(int enable)285 void MGL_EXPORT mgl_set_test_mode(int enable) { mglTestMode=enable; }
286 //---------------------------------------------------------------------------
mgl_use_graph(HMGL gr,int inc)287 long MGL_EXPORT mgl_use_graph(HMGL gr, int inc)
288 { if(!gr) return 0; gr->InUse+=inc; return gr->InUse; }
mgl_use_graph_(uintptr_t * gr,int * inc)289 long MGL_EXPORT mgl_use_graph_(uintptr_t *gr, int *inc)
290 { return mgl_use_graph(_GR_,*inc); }
291 //---------------------------------------------------------------------------
mgl_set_ambbr(HMGL gr,double i)292 void MGL_EXPORT mgl_set_ambbr(HMGL gr, double i) { gr->SetAmbient(i); }
mgl_set_ambbr_(uintptr_t * gr,mreal * i)293 void MGL_EXPORT mgl_set_ambbr_(uintptr_t *gr, mreal *i){ _GR_->SetAmbient(*i); }
294 //---------------------------------------------------------------------------
mgl_set_difbr(HMGL gr,double i)295 void MGL_EXPORT mgl_set_difbr(HMGL gr, double i) { gr->SetDiffuse(i); }
mgl_set_difbr_(uintptr_t * gr,mreal * i)296 void MGL_EXPORT mgl_set_difbr_(uintptr_t *gr, mreal *i){ _GR_->SetDiffuse(*i); }
297 //---------------------------------------------------------------------------
mgl_zoom_axis(HMGL gr,double x1,double y1,double z1,double c1,double x2,double y2,double z2,double c2)298 void MGL_EXPORT mgl_zoom_axis(HMGL gr, double x1,double y1,double z1,double c1,double x2,double y2,double z2,double c2)
299 { gr->ZoomAxis(mglPoint(x1,y1,z1,c1), mglPoint(x2,y2,z2,c2)); }
mgl_zoom_axis_(uintptr_t * gr,mreal * x1,mreal * y1,mreal * z1,mreal * c1,mreal * x2,mreal * y2,mreal * z2,mreal * c2)300 void MGL_EXPORT mgl_zoom_axis_(uintptr_t *gr, mreal *x1, mreal *y1, mreal *z1, mreal *c1, mreal *x2, mreal *y2, mreal *z2, mreal *c2)
301 { _GR_->ZoomAxis(mglPoint(*x1,*y1,*z1,*c1), mglPoint(*x2,*y2,*z2,*c2)); }
302 //---------------------------------------------------------------------------
303 extern uint64_t mgl_mask_def[16];
mgl_set_mask(char id,const char * mask)304 void MGL_EXPORT mgl_set_mask(char id, const char *mask)
305 {
306 const char *msk = MGL_MASK_ID, *s = mglchr(msk, id);
307 if(s)
308 {
309 uint64_t val = (mask && *mask) ? strtoull(mask,NULL,16) : mgl_mask_def[s-msk];
310 mgl_mask_val[s-msk] = val;
311 }
312 }
mgl_set_mask_(const char * id,const char * mask,int,int l)313 void MGL_EXPORT mgl_set_mask_(const char *id, const char *mask,int,int l)
314 { char *s=new char[l+1]; memcpy(s,mask,l); s[l]=0; mgl_set_mask(*id,s); delete []s; }
315 //---------------------------------------------------------------------------
mgl_set_mask_val(char id,uint64_t mask)316 void MGL_EXPORT mgl_set_mask_val(char id, uint64_t mask)
317 {
318 const char *msk = MGL_MASK_ID, *s = mglchr(msk, id);
319 if(s) mgl_mask_val[s-msk]=mask;
320 }
mgl_set_mask_val_(const char * id,uint64_t * mask,int)321 void MGL_EXPORT mgl_set_mask_val_(const char *id, uint64_t *mask,int)
322 { mgl_set_mask_val(*id,*mask); }
323 //---------------------------------------------------------------------------
mgl_set_mask_angle(HMGL gr,int angle)324 void MGL_EXPORT mgl_set_mask_angle(HMGL gr, int angle) { gr->SetMaskAngle(angle); }
mgl_set_mask_angle_(uintptr_t * gr,int * angle)325 void MGL_EXPORT mgl_set_mask_angle_(uintptr_t *gr, int *angle) { _GR_->SetMaskAngle(*angle); }
326 //---------------------------------------------------------------------------
mgl_ask_stop(HMGL gr,int stop)327 void MGL_EXPORT mgl_ask_stop(HMGL gr, int stop) { gr->AskStop(stop); }
mgl_ask_stop_(uintptr_t * gr,int * stop)328 void MGL_EXPORT mgl_ask_stop_(uintptr_t *gr, int *stop){ _GR_->AskStop(*stop); }
mgl_need_stop(HMGL gr)329 int MGL_EXPORT mgl_need_stop(HMGL gr) { return gr->NeedStop(); }
mgl_need_stop_(uintptr_t * gr)330 int MGL_EXPORT mgl_need_stop_(uintptr_t *gr) { return _GR_->NeedStop();}
mgl_set_event_func(HMGL gr,void (* func)(void *),void * par)331 void MGL_EXPORT mgl_set_event_func(HMGL gr, void (*func)(void *), void *par)
332 { gr->SetEventFunc(func,par); }
333 //---------------------------------------------------------------------------
334