From 47979c704285b468112b571c36632df0e799a358 Mon Sep 17 00:00:00 2001 From: Dimitrios Eftaxiopoulos Date: Sun, 1 Apr 2012 05:59:38 +0300 Subject: [PATCH] Imported Upstream version 2~rc2+svn400 --- examples/fltk_example.cpp | 14 +- examples/full_test.cpp | 14 +- examples/qt_example.cpp | 18 +- include/mgl/base.h | 58 +- include/mgl/canvas.h | 61 +- include/mgl/canvas_cf.h | 11 +- include/mgl/canvas_wnd.h | 12 +- include/mgl/data.h | 2 +- include/mgl/fltk.h | 4 + include/mgl/font.h | 54 +- include/mgl/mgl.h | 13 +- include/mgl/opengl.h | 2 +- include/mgl/qt.h | 6 +- include/mgl/window.h | 6 + lang/CMakeLists.txt | 6 +- lang/{mgl.i => mgl.i.in} | 4 +- lang/{numpy.i => numpy.i.in} | 0 src/axis.cpp | 6 +- src/base.cpp | 21 +- src/canvas.cpp | 69 +- src/canvas_cf.cpp | 13 +- src/exec.cpp | 14 +- src/export_3d.cpp | 36 +- src/font.cpp | 28 +- src/opengl.cpp | 4 +- src/pixel.cpp | 26 +- texinfo/core_en.texi | 57 +- texinfo/core_ru.texi | 1786 +++++++++++++++++----------------- texinfo/example_en.texi | 14 +- texinfo/widget_en.texi | 16 +- todo.txt | 4 +- udav/udav_wnd.cpp | 4 +- widgets/fltk.cpp | 16 +- widgets/qt.cpp | 8 +- widgets/window.cpp | 16 +- 35 files changed, 1246 insertions(+), 1177 deletions(-) rename lang/{mgl.i => mgl.i.in} (98%) rename lang/{numpy.i => numpy.i.in} (100%) diff --git a/examples/fltk_example.cpp b/examples/fltk_example.cpp index 0a34df0..1f9d66a 100644 --- a/examples/fltk_example.cpp +++ b/examples/fltk_example.cpp @@ -38,17 +38,21 @@ int main(int argc,char **argv) #ifdef PTHREAD_SAMPLE mglWindow gr("test"); gr.RunThr(); - for(int i=0;i<10;i++) // do calculation + for(int i=0;i<10;i++) // do calculation { - sleep(1); // which can be very long +#ifdef WIN32 + Sleep(1000); +#else + sleep(1); // which can be very long +#endif pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1); - gr.Clf(); // make new drawing + gr.Clf(); // make new drawing gr.Line(mglPoint(),pnt,"Ar2"); char str[10] = "i=0"; str[3] = '0'+i; gr.Puts(mglPoint(),""); - gr.Update(); // update window + gr.Update(); // update window } - return 0; // finish calculations and close the window + return 0; // finish calculations and close the window #else mglWindow *gr; char key = 0; diff --git a/examples/full_test.cpp b/examples/full_test.cpp index 5fec454..b632fab 100644 --- a/examples/full_test.cpp +++ b/examples/full_test.cpp @@ -1317,7 +1317,7 @@ void smgl_vect(mglGraph *gr) //----------------------------------------------------------------------------- const char *mmgl_flow="subplot 2 2 0 '':title 'Flow plot (default)':box:flow a b\n" "subplot 2 2 1 '':title '\\\'v\\\' style':box:flow a b 'v'\n" -"subplot 2 2 2 '':title 'from edges only':box:flow a b; value -5\n" +"subplot 2 2 2 '':title 'from edges only':box:flow a b '#'\n" "subplot 2 2 3:title '3d variant':rotate 50 60:box:flow ex ey ez\n"; void smgl_flow(mglGraph *gr) { @@ -1326,7 +1326,7 @@ void smgl_flow(mglGraph *gr) gr->Box(); gr->Flow(a,b); if(mini) return; gr->SubPlot(2,2,1,""); gr->Title("'v' style"); gr->Box(); gr->Flow(a,b,"v"); - gr->SubPlot(2,2,2,""); gr->Title("from edges only"); gr->Box(); gr->Flow(a,b,"","value -5"); + gr->SubPlot(2,2,2,""); gr->Title("'\\#' style"); gr->Box(); gr->Flow(a,b,"#"); mglData ex,ey,ez; mgls_prepare3v(&ex,&ey,&ez); gr->SubPlot(2,2,3); gr->Title("3d variant"); gr->Rotate(50,60); gr->Box(); gr->Flow(ex,ey,ez); @@ -1334,16 +1334,16 @@ void smgl_flow(mglGraph *gr) //----------------------------------------------------------------------------- const char *mmgl_pipe="subplot 2 2 0 '':title 'Pipe plot (default)':light on:box:pipe a b\n" "subplot 2 2 1 '':title '\\\'i\\\' style':box:pipe a b 'i'\n" -"subplot 2 2 2 '':title 'from edges only':box:pipe a b; value -5\n" +"subplot 2 2 2 '':title 'from edges only':box:pipe a b '#'\n" "subplot 2 2 3:title '3d variant':rotate 50 60:box:pipe ex ey ez '' 0.1\n"; void smgl_pipe(mglGraph *gr) { mglData a,b; mgls_prepare2v(&a,&b); - if(!mini) {gr->SubPlot(2,2,0,""); gr->Title("Flow plot (default)");} + if(!mini) {gr->SubPlot(2,2,0,""); gr->Title("Pipe plot (default)");} gr->Light(true); gr->Box(); gr->Pipe(a,b); if(mini) return; gr->SubPlot(2,2,1,""); gr->Title("'i' style"); gr->Box(); gr->Pipe(a,b,"i"); - gr->SubPlot(2,2,2,""); gr->Title("from edges only"); gr->Box(); gr->Pipe(a,b,"",0.05,"value -5"); + gr->SubPlot(2,2,2,""); gr->Title("'\\#' style"); gr->Box(); gr->Pipe(a,b,"#"); mglData ex,ey,ez; mgls_prepare3v(&ex,&ey,&ez); gr->SubPlot(2,2,3); gr->Title("3d variant"); gr->Rotate(50,60); gr->Box(); gr->Pipe(ex,ey,ez,"",0.1); @@ -1560,9 +1560,9 @@ void smgl_stereo(mglGraph *gr) { mglData a; mgls_prepare2d(&a); gr->Light(true); - gr->SubPlot(2,1,0); gr->Rotate(50,60+3); + gr->SubPlot(2,1,0); gr->Rotate(50,60+1); gr->Box(); gr->Surf(a); - gr->SubPlot(2,1,1); gr->Rotate(50,60-3); + gr->SubPlot(2,1,1); gr->Rotate(50,60-1); gr->Box(); gr->Surf(a); } //----------------------------------------------------------------------------- diff --git a/examples/qt_example.cpp b/examples/qt_example.cpp index bae2696..84abfb7 100644 --- a/examples/qt_example.cpp +++ b/examples/qt_example.cpp @@ -44,11 +44,15 @@ public: void Foo::Calc() { for(int i=0;i<30;i++) // do calculation - { - sleep(1); // which can be very long - pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1); - Gr->Update(); // update window - } + { +#ifdef WIN32 + Sleep(1000); +#else + sleep(1); // which can be very long +#endif + pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1); + Gr->Update(); // update window + } } //----------------------------------------------------- int Foo::Draw(mglGraph *gr) @@ -75,9 +79,9 @@ int main(int argc,char **argv) case '1': gr = new mglWindow(sample_1,"1D plots",1); break; case '2': gr = new mglWindow(sample_2,"2D plots",1); break; case '3': gr = new mglWindow(sample_3,"3D plots",1); break; - case 'd': gr = new mglWindow(sample_d,"Dual plots",1); break; + case 'd': gr = new mglWindow(sample_d,"Dual plots",1);break; case 't': gr = new mglWindow(test_wnd,"Testing",1); break; - default: gr = new mglWindow(&foo,"Drop and waves",1); break; + default: gr = new mglWindow(sample,"Drop and waves",1); break; } gr->Run(); return 0; #endif diff --git a/include/mgl/base.h b/include/mgl/base.h index eb59298..d7fb9f7 100644 --- a/include/mgl/base.h +++ b/include/mgl/base.h @@ -109,7 +109,7 @@ struct mglPnt { float xx,yy,zz; // original coordinates float x,y,z; // coordinates - float c,t; // index in color scheme + float c,t,ta; // index in color scheme float u,v,w; // normales float r,g,b,a; // RGBA color mglPnt() { xx=yy=zz=x=y=z=c=t=u=v=w=r=g=b=a=0; } @@ -145,9 +145,9 @@ struct mglTexture { n=0; Set(cols,smooth,alpha); } void Clear() { n=0; } void Set(const char *cols, int smooth=0,float alpha=1); - void GetC(float u,float v,mglPnt &p); - bool IsSame(mglTexture &t); - void GetRGBA(unsigned char *f); // Write as BGRA for fastest export to TGA + void GetC(float u,float v,mglPnt &p) const; + bool IsSame(mglTexture &t) const; + void GetRGBA(unsigned char *f) const; // Write as BGRA for fastest export to TGA }; //----------------------------------------------------------------------------- const mglColor NC(-1,-1,-1); @@ -188,7 +188,7 @@ public: long InUse; ///< Smart pointer (number of users) long Flag; ///< Flags for controlling drawing - inline bool get(long fl) { return Flag&fl; } + inline bool get(long fl) const { return Flag&fl; } inline void set(long fl) { Flag |= fl; } inline void clr(long fl) { Flag &=~fl; } inline void set(bool v,long fl) { Flag = v ? Flag|fl : Flag&(~fl); } @@ -250,7 +250,7 @@ public: /// Set default palette inline void SetPalette(const char *colors) { Txt[0].Set(mgl_have_color(colors)?colors:MGL_DEF_PAL,-1); } - inline long GetNumPal(long id) { return Txt[abs(id)/256].n; } + inline long GetNumPal(long id) const { return Txt[abs(id)/256].n; } /// Set default color scheme inline void SetDefScheme(const char *colors) { Txt[1].Set(mgl_have_color(colors)?colors:"BbcyrR"); } @@ -266,7 +266,7 @@ public: /// Set warning code ant fill Message void SetWarn(int code, const char *who=""); - int inline GetWarn() { return WarnCode; } + int inline GetWarn() const { return WarnCode; } virtual void StartAutoGroup (const char *)=0; void StartGroup(const char *name, int id); @@ -293,13 +293,13 @@ public: inline void CopyFont(mglBase *gr) { fnt->Copy(gr->GetFont()); } /// Set default font size inline void SetFontSize(float val) { FontSize=val>0 ? val:FontSize*val; } - inline float GetFontSize() { return FontSize; }; - inline float TextWidth(const wchar_t *text, const char *font, float size) + inline float GetFontSize() const { return FontSize; }; + inline float TextWidth(const wchar_t *text, const char *font, float size) const { return (size<0?-size*FontSize:size)*font_factor*fnt->Width(text,(font&&*font)?font:FontDef)/8; } - inline float TextHeight(const char *font, float size) + inline float TextHeight(const char *font, float size) const { return (size<0?-size*FontSize:size)*font_factor*fnt->Height(font?font:FontDef)/8; } - inline float FontFactor() { return font_factor; } - virtual float GetRatio(); + inline float FontFactor() const { return font_factor; } + virtual float GetRatio() const; /// Set to use or not text rotation inline void SetRotatedText(bool val) { set(val,MGL_ENABLE_RTEXT); } /// Set default font style and color @@ -317,7 +317,7 @@ public: /// Set plot quality virtual void SetQuality(int qual=MGL_DRAW_NORM) { Quality=qual; } - inline int GetQuality() { return Quality; } + inline int GetQuality() const { return Quality; } // ~~~~~~~~~~~~~~~~~~~~~~ Developer functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// Add point to the pntN and return its position @@ -329,29 +329,29 @@ public: inline void SetReduceAcc(bool val) { set(val, MGL_REDUCEACC); } // inline long GetPos() { return Pnt.size()-1; } - inline mglPoint GetPntP(long i) + inline mglPoint GetPntP(long i) const { const mglPnt &p=Pnt[i]; return mglPoint(p.x,p.y,p.z); } - inline float GetClrC(long i) { return Pnt[i].c; } - inline long GetPntNum() { return Pnt.size(); } - inline mglPnt &GetPnt(long i) { return Pnt[i]; } - inline mglPrim &GetPrm(long i) { return Prm[i]; } - inline long GetPrmNum() { return Prm.size(); } - inline mglText &GetPtx(long i) { return Ptx[i]; } - inline long GetPtxNum() { return Ptx.size(); } - inline mglTexture &GetTxt(long i){ return Txt[i]; } - inline long GetTxtNum() { return Txt.size(); } + inline float GetClrC(long i) const { return Pnt[i].c; } + inline const mglPnt &GetPnt(long i) const { return Pnt[i]; } + inline long GetPntNum() const { return Pnt.size(); } + inline mglPrim &GetPrm(long i) { return Prm[i]; } + inline long GetPrmNum() const { return Prm.size(); } + inline const mglText &GetPtx(long i) const { return Ptx[i]; } + inline long GetPtxNum() const { return Ptx.size(); } + inline const mglTexture &GetTxt(long i) const { return Txt[i]; } + inline long GetTxtNum() const { return Txt.size(); } /// Scale coordinates and cut off some points - virtual bool ScalePoint(mglPoint &p, mglPoint &n, bool use_nan=true); + virtual bool ScalePoint(mglPoint &p, mglPoint &n, bool use_nan=true) const; - virtual float GetOrgX(char dir)=0; ///< Get Org.x (parse NAN value) - virtual float GetOrgY(char dir)=0; ///< Get Org.y (parse NAN value) - virtual float GetOrgZ(char dir)=0; ///< Get Org.z (parse NAN value) + virtual float GetOrgX(char dir) const=0; ///< Get Org.x (parse NAN value) + virtual float GetOrgY(char dir) const=0; ///< Get Org.y (parse NAN value) + virtual float GetOrgZ(char dir) const=0; ///< Get Org.z (parse NAN value) /// Get color depending on single variable z, which should be scaled if scale=true - inline float GetC(long s,float z,bool scale = true) + inline float GetC(long s,float z,bool scale = true) const { return s+(scale?GetA(z):(z>0?z/MGL_FLT_EPS:0)); } /// Get alpha value depending on single variable \a a - float GetA(float a); + float GetA(float a) const; /// Set pen/palette char SetPenPal(const char *stl, long *id=0); /// Add texture (like color scheme) and return the position of first color diff --git a/include/mgl/canvas.h b/include/mgl/canvas.h index f435c4f..165c8b4 100644 --- a/include/mgl/canvas.h +++ b/include/mgl/canvas.h @@ -37,7 +37,7 @@ struct mglMatrix float b[9]; float x,y,z,pf; mglMatrix() { clear(); } - inline void clear() { x=y=z=pf=0; memset(b,0,9*sizeof(float)); b[0]=b[4]=b[8]=1; } + inline void clear() { x=y=z=0; memset(b,0,9*sizeof(float)); b[0]=b[4]=b[8]=1; } inline mglMatrix &operator=(mglMatrix &a) { x=a.x; y=a.y; z=a.z; pf=a.pf; memcpy(b,a.b,9*sizeof(float)); return *this; } }; @@ -112,7 +112,6 @@ class mglCanvas : public mglBase friend struct mglPrim; public: using mglBase::Light; - mglPoint LastMousePos; ///< Last mouse position mglCanvas(int w=800, int h=600); virtual ~mglCanvas(); @@ -161,7 +160,7 @@ using mglBase::Light; /// Set size of frame in pixels. Normally this function is called internaly. virtual void SetSize(int w,int h); /// Get ratio (float width)/(float height). - float GetRatio(); + float GetRatio() const; /// Get bitmap data prepared for saving to file virtual unsigned char **GetRGBLines(long &w, long &h, unsigned char *&f, bool alpha=false); /// Get RGB bitmap of current state image. @@ -169,36 +168,36 @@ using mglBase::Light; /// Get RGBA bitmap of current state image. const unsigned char *GetRGBA() { Finish(); return G4; } /// Get width of the image - int GetWidth() { return Width; } + int GetWidth() const { return Width; } /// Get height of the image - int GetHeight() { return Height; } + int GetHeight() const { return Height; } /// Combine plots from 2 canvases. Result will be saved into this. void Combine(const mglCanvas *gr); /// Send graphical information to node id using MPI void MPI_Send(int id); /// Receive graphical information from node id using MPI void MPI_Recv(int id); - inline float GetDelay() { return Delay; } + inline float GetDelay() const { return Delay; } inline void SetDelay(float d) { Delay=d; } /// Calculate 3D coordinate {x,y,z} for screen point {xs,ys} - mglPoint CalcXYZ(int xs, int ys); + mglPoint CalcXYZ(int xs, int ys) const; /// Calculate screen point {xs,ys} for 3D coordinate {x,y,z} - void CalcScr(mglPoint p, int *xs, int *ys); - mglPoint CalcScr(mglPoint p); + void CalcScr(mglPoint p, int *xs, int *ys) const; + mglPoint CalcScr(mglPoint p) const; /// Set object/subplot id inline void SetObjId(long id) { ObjId = id; } /// Get object id - inline int GetObjId(long x,long y) { return OI[x+Width*y]; } + inline int GetObjId(long x,long y) const { return OI[x+Width*y]; } /// Get subplot id - int GetSplId(long x,long y); + int GetSplId(long x,long y) const; /// Create new frame. virtual int NewFrame(); /// Finish frame drawing virtual void EndFrame(); /// Get the number of created frames - inline int GetNumFrame() { return CurFrameId; } + inline int GetNumFrame() const { return CurFrameId; } /// Reset frames counter (start it from zero) inline void ResetFrames() { CurFrameId=0; DrwDat.clear(); } @@ -345,7 +344,7 @@ protected: /// Clear ZBuffer only void ClfZB(); /// Scale coordinates and cut off some points - bool ScalePoint(mglPoint &p, mglPoint &n, bool use_nan=true); + bool ScalePoint(mglPoint &p, mglPoint &n, bool use_nan=true) const; void LightScale(); ///< Additionally scale positions of light sources /// Push drawing data (for frames only). NOTE: can be VERY large @@ -353,9 +352,9 @@ protected: /// Get drawing data for i-th frame. void GetDrwDat(long i); - float GetOrgX(char dir); ///< Get Org.x (parse NAN value) - float GetOrgY(char dir); ///< Get Org.y (parse NAN value) - float GetOrgZ(char dir); ///< Get Org.z (parse NAN value) + float GetOrgX(char dir) const; ///< Get Org.x (parse NAN value) + float GetOrgY(char dir) const; ///< Get Org.y (parse NAN value) + float GetOrgZ(char dir) const; ///< Get Org.z (parse NAN value) void mark_plot(long p, char type, float size=1); // position in pntC void arrow_plot(long p1, long p2, char st); // position in pntC @@ -375,6 +374,19 @@ protected: void glyph_draw(const mglPrim *P, mglDrawReg *d); bool IsSame(const mglPrim &pr,float wp,mglColor cp,int st); + // functions for multi-threading + void PreparePrim(bool fast); + void pxl_combine(unsigned long id, unsigned long n, const void *); + void pxl_memcpy(unsigned long id, unsigned long n, const void *); + void pxl_backgr(unsigned long id, unsigned long n, const void *); + void pxl_primdr(unsigned long id, unsigned long n, const void *); + void pxl_transform(unsigned long id, unsigned long n, const void *); + void pxl_setz(unsigned long id, unsigned long n, const void *); + void pxl_setz_adv(unsigned long id, unsigned long n, const void *); + void pxl_other(unsigned long id, unsigned long n, const void *p); + /// Put drawing from other mglCanvas (for multithreading, like subplots) + void PutDrawReg(mglDrawReg *d, const mglCanvas *gr); + private: // float _tetx,_tety,_tetz; // extra angles std::vector stack; ///< stack for transformation matrixes @@ -390,7 +402,7 @@ private: void tick_draw(mglPoint o, mglPoint d1, mglPoint d2, int f, const char *stl); /// Plot point \a p with color \a c void pnt_plot(long x,long y,float z,const unsigned char c[4]); - float FindOptOrg(char dir, int ind); + float FindOptOrg(char dir, int ind) const; /// Transform float color and alpha to bits format unsigned char* col2int(const mglPnt &p, unsigned char *r); /// Combine colors in 2 plane. @@ -399,26 +411,15 @@ private: void fast_draw(long p1, long p2, mglDrawReg *d); /// Additionally scale points \a p for positioning in image - void PostScale(mglPoint &p); + void PostScale(mglPoint &p) const; /// Scale points \a p for projection to the face number \a nface in image long ProjScale(int nface, long p); - inline void PostScale(mglPoint *p,long n) { for(long i=0;iid=0; d->link=true; delete d; } + { if(d) {memcpy((void*)this,(void*)d,sizeof(mglData)); d->id=0; d->link=true; delete d; } else { a=0; Create(1); } } /// Initiate by flat array inline mglData(int size, const float *d) { a=0; Set(d,size); } diff --git a/include/mgl/fltk.h b/include/mgl/fltk.h index 72abf46..d503ab3 100644 --- a/include/mgl/fltk.h +++ b/include/mgl/fltk.h @@ -23,6 +23,7 @@ /*****************************************************************************/ #ifdef __cplusplus #include "mgl/canvas_wnd.h" +#if MGL_HAVE_FLTK //----------------------------------------------------------------------------- #ifdef __MWERKS__ # define FL_DLL @@ -165,5 +166,8 @@ using mglCanvasWnd::Window; //----------------------------------------------------------------------------- void mgl_ask_fltk(const wchar_t *quest, wchar_t *res); //----------------------------------------------------------------------------- +#else +#error "Please enable FLTK support" +#endif #endif #endif diff --git a/include/mgl/font.h b/include/mgl/font.h index 7ad612a..0335616 100644 --- a/include/mgl/font.h +++ b/include/mgl/font.h @@ -44,8 +44,8 @@ #define MGL_DEF_FONT_NAME "STIX" #endif //----------------------------------------------------------------------------- -struct mglTeXsymb { unsigned kod; const wchar_t *tex; }; -/// Get font color, style and align for internal parser +struct mglTeXsymb { unsigned kod; const wchar_t *tex; }; +/// Get font color, style and align for internal parser char mglGetStyle(const char *how, int *font, int *align=0); class mglBase; //----------------------------------------------------------------------------- @@ -61,35 +61,35 @@ public: /// Load font data to memory. Normally used by constructor. bool Load(const char *base, const char *path=0); /// Free memory - void Clear(); + void Clear(); /// Copy data from other font void Copy(mglFont *); /// Restore default font void Restore(); /// Return true if font is loaded - inline bool Ready() { return numg!=0; }; + inline bool Ready() const { return numg!=0; }; /// Get height of text - float Height(int font); + float Height(int font) const; /// Get height of text - float Height(const char *how); + float Height(const char *how) const; /// Print text string for font specified by string - float Puts(const char *str,const char *how,float col); + float Puts(const char *str,const char *how,float col) const; /// Get width of text string for font specified by string - float Width(const char *str,const char *how); + float Width(const char *str,const char *how) const; /// Print text string for font specified by string - float Puts(const wchar_t *str,const char *how,float col); + float Puts(const wchar_t *str,const char *how,float col) const; /// Get width of text string for font specified by string - float Width(const wchar_t *str,const char *how); + float Width(const wchar_t *str,const char *how) const; /// Return number of glyphs - inline unsigned GetNumGlyph() { return numg; }; + inline unsigned GetNumGlyph() const { return numg; }; /// Return some of pointers - inline const short *GetTr(int s, long j) { return Buf+tr[s][j]; }; - inline const short *GetLn(int s, long j) { return Buf+ln[s][j]; }; - inline int GetNt(int s, long j) { return numt[s][j]; }; - inline int GetNl(int s, long j) { return numl[s][j]; }; - inline float GetFact(int s) { return fact[s]; }; + inline const short *GetTr(int s, long j) const { return Buf+tr[s][j]; }; + inline const short *GetLn(int s, long j) const { return Buf+ln[s][j]; }; + inline int GetNt(int s, long j) const { return numt[s][j]; }; + inline int GetNl(int s, long j) const { return numl[s][j]; }; + inline float GetFact(int s) const { return fact[s]; }; protected: wchar_t *id; ///< Unicode ID for glyph unsigned *tr[4]; ///< Shift of glyph description by triangles (for solid font) @@ -101,32 +101,32 @@ protected: unsigned numg; ///< Number of glyphs short *Buf; ///< Buffer for glyph descriptions long numb; ///< Buffer size - + /// Print text string for font specified by integer constant - float Puts(const wchar_t *str,int font,int align, float col); + float Puts(const wchar_t *str,int font,int align, float col) const; /// Get width of text string for font specified by integer constant - float Width(const wchar_t *str,int font=0); + float Width(const wchar_t *str,int font=0) const; /// Replace TeX symbols by its UTF code and add font styles - void Convert(const wchar_t *str, unsigned *res); - + void Convert(const wchar_t *str, unsigned *res) const; + /// Draw string recursively /* x,y - position, f - factor, style: 0x1 - italic, 0x2 - bold, 0x4 - overline, 0x8 - underline, 0x10 - empty (not draw) */ - float Puts(const unsigned *str, float x,float y,float f,int style,float col); + float Puts(const unsigned *str, float x,float y,float f,int style,float col) const; /// Parse LaTeX command - unsigned Parse(const wchar_t *s); + unsigned Parse(const wchar_t *s) const; /// Get internal code for symbol - long Internal(unsigned s); + long Internal(unsigned s) const; /// Get symbol for character \a ch with given \a font style - unsigned Symbol(char ch); + unsigned Symbol(char ch) const; private: - float get_ptr(long &i,unsigned *str, unsigned **b1, unsigned **b2,float &w1,float &w2, float f1, float f2, int st); + float get_ptr(long &i,unsigned *str, unsigned **b1, unsigned **b2,float &w1,float &w2, float f1, float f2, int st) const; bool read_data(const char *fname, float *ff, short *wdt, short *numl, unsigned *posl, short *numt, unsigned *post, unsigned &cur); void main_copy(); bool read_main(const char *fname, unsigned &cur); void mem_alloc(); bool read_def(unsigned &cur); - void draw_ouline(int st, float x, float y, float f, float g, float ww, float ccol); + void draw_ouline(int st, float x, float y, float f, float g, float ww, float ccol) const; }; //----------------------------------------------------------------------------- #endif diff --git a/include/mgl/mgl.h b/include/mgl/mgl.h index 5c89e93..2bd12d3 100644 --- a/include/mgl/mgl.h +++ b/include/mgl/mgl.h @@ -221,6 +221,14 @@ public: inline void StickPlot(int num, int i, float tet, float phi) { mgl_stickplot(gr,num,i,tet,phi); } + /// Set PlotFactor + inline void SetPlotFactor(float val) + { mgl_set_plotfactor(gr,val); } + /// Push transformation matrix into stack + inline void Push() { mgl_mat_push(gr); } + /// Pop transformation matrix from stack + inline void Pop() { mgl_mat_pop(gr); } + /// Add title for current subplot/inplot inline void Title(const char *title,const char *stl="",float size=-2) { mgl_title(gr,title,stl,size); } @@ -453,11 +461,6 @@ public: { mgl_putsw_dir(gr, p.x, p.y, p.z, d.x, d.y, d.z, text, font, size); } inline void Puts(mglPoint p, mglPoint d, const char *text, const char *font=":L", float size=-1) { mgl_puts_dir(gr, p.x, p.y, p.z, d.x, d.y, d.z, text, font, size); } - /// Print the label \a text at arbitrary position {x,y} of plot. - void Label(double x, double y, const char *text, const char *fnt=0) - { mgl_label_pos(gr,x,y,text,fnt); } - void Label(double x, double y, const wchar_t *text, const char *fnt=0) - { mgl_labelw_pos(gr,x,y,text,fnt); } /// Print text along the curve inline void Text(const mglDataA &x, const mglDataA &y, const mglDataA &z, const char *text, const char *font="", const char *opt="") diff --git a/include/mgl/opengl.h b/include/mgl/opengl.h index 2245a36..241c6c9 100644 --- a/include/mgl/opengl.h +++ b/include/mgl/opengl.h @@ -30,7 +30,7 @@ public: ~mglCanvasGL(); void SetQuality(int =0) { Quality=2; } - void Finish(); + void Finish(bool fast=true); void SetSize(int ,int ) {} void View(float tetX,float tetY,float tetZ); int NewFrame(); diff --git a/include/mgl/qt.h b/include/mgl/qt.h index 17e906e..e1f590d 100644 --- a/include/mgl/qt.h +++ b/include/mgl/qt.h @@ -23,6 +23,7 @@ #ifdef __cplusplus //----------------------------------------------------------------------------- #include "mgl/canvas_wnd.h" +#if MGL_HAVE_QT #include #include //----------------------------------------------------------------------------- @@ -107,7 +108,7 @@ public slots: void exportOBJ(QString fname=""); ///< export to OBJ file void exportSTL(QString fname=""); ///< export to STL file void exportOFF(QString fname=""); ///< export to OFF file - void exportX3D(QString fname=""); ///< export to XYZ file +// void exportX3D(QString fname=""); ///< export to XYZ file void exportIDTF(QString fname=""); ///< export to IDTF file void setMGLFont(QString path); ///< restore/load font for graphics @@ -214,5 +215,8 @@ QMenu *mglMakeMenu(QMainWindow *Wnd, QMathGL *QMGL, QSpinBox *tet, QSpinBox *phi //----------------------------------------------------------------------------- void mgl_ask_qt(const wchar_t *quest, wchar_t *res); //----------------------------------------------------------------------------- +#else +#error "Please enable Qt support" +#endif #endif #endif diff --git a/include/mgl/window.h b/include/mgl/window.h index e46497f..ba1d3f9 100644 --- a/include/mgl/window.h +++ b/include/mgl/window.h @@ -29,6 +29,7 @@ struct mglDraw { virtual int Draw(mglGraph *)=0; ///< Function for drawing virtual void Reload() {} ///< Function for reloading data + virtual void Click() {} ///< Callback function on mouse click #if MGL_HAVE_PTHREAD pthread_t thr; bool running; @@ -42,6 +43,7 @@ typedef int (*draw_func)(mglGraph *gr); int mgl_draw_graph(mglBase *gr, void *p); // NOTE: mgl_draw_class() and mgl_draw_load() use mglWindow* only. Don't use it with inherited classes int mgl_draw_class(mglBase *gr, void *p); +void mgl_click_class(void *p); void mgl_reload_class(void *p); //----------------------------------------------------------------------------- #if MGL_HAVE_QT @@ -53,6 +55,7 @@ void mgl_reload_class(void *p); class mglWindow : public mglGraph { friend int mgl_draw_class(mglBase *gr, void *p); +friend void mgl_click_class(void *p); friend void mgl_reload_class(void *p); protected: mglDraw *dr; @@ -80,6 +83,7 @@ public: wnd=kind; dr=draw; if(wnd==1) gr = mgl_create_graph_qt(mgl_draw_class,title,this,mgl_reload_class); else gr = mgl_create_graph_fltk(mgl_draw_class,title,this,mgl_reload_class); + mgl_set_click_func(gr, mgl_click_class); } inline int Run() ///< Run main loop for event handling { return (wnd==1)? mgl_qt_run() : mgl_fltk_run(); } @@ -107,6 +111,8 @@ public: { mgl_wnd_prev_frame(gr); } inline void Animation() ///< Run slideshow (animation) of frames { mgl_wnd_animation(gr); } + void SetClickFunc(void (*func)(void *p)) + { if(!dr) mgl_set_click_func(gr,func); } inline void SetDelay(float dt) ///< Delay for animation in seconds { mgl_wnd_set_delay(gr, dt); } diff --git a/lang/CMakeLists.txt b/lang/CMakeLists.txt index 0db2473..6b0617b 100644 --- a/lang/CMakeLists.txt +++ b/lang/CMakeLists.txt @@ -1,6 +1,6 @@ if(MGL_HAVE_PYTHON) - configure_file(${MathGL_SOURCE_DIR}/lang/mgl.i ${MathGL_BINARY_DIR}/lang/mgl.i COPYONLY) - configure_file(${MathGL_SOURCE_DIR}/lang/numpy.i ${MathGL_BINARY_DIR}/lang/numpy.i COPYONLY) + configure_file(${MathGL_SOURCE_DIR}/lang/mgl.i.in ${MathGL_BINARY_DIR}/lang/mgl.i COPYONLY) + configure_file(${MathGL_SOURCE_DIR}/lang/numpy.i.in ${MathGL_BINARY_DIR}/lang/numpy.i COPYONLY) SET(dep_libs mgl) # if(MGL_HAVE_FLTK) get_property(path_to_mglwnd TARGET mgl-wnd PROPERTY LOCATION) @@ -36,5 +36,5 @@ if(MGL_HAVE_PYTHON) ) add_custom_target(mgl_python_module ALL DEPENDS _mathgl.so mathgl.py) install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/lang/setup.py install --prefix=${CMAKE_INSTALL_PREFIX} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/lang )") - set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "mgl.i;numpy.i;setup.py;mgl_wrap.cpp;build;mathgl.pyc") + set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "setup.py;mgl_wrap.cpp;build;mathgl.pyc") endif(MGL_HAVE_PYTHON) diff --git a/lang/mgl.i b/lang/mgl.i.in similarity index 98% rename from lang/mgl.i rename to lang/mgl.i.in index 3e1e112..f7dd192 100644 --- a/lang/mgl.i +++ b/lang/mgl.i.in @@ -36,7 +36,7 @@ %{ #define SWIG_FILE_WITH_INIT -#include "mgl/config.h" +//#include "mgl/config.h" #include "mgl/type.h" #include "mgl/data.h" #include "mgl/mgl.h" @@ -88,7 +88,7 @@ import_array(); %apply (int DIM1, int DIM2, int DIM3, double* IN_ARRAY3) {(int rows, int cols, int slc, const double* d)}; #endif -%include "mgl/config.h" +//%include "mgl/config.h" %include "mgl/type.h" %include "mgl/data.h" %include "mgl/mgl.h" diff --git a/lang/numpy.i b/lang/numpy.i.in similarity index 100% rename from lang/numpy.i rename to lang/numpy.i.in diff --git a/src/axis.cpp b/src/axis.cpp index 35f070a..1738163 100644 --- a/src/axis.cpp +++ b/src/axis.cpp @@ -484,7 +484,8 @@ void mglCanvas::DrawAxis(mglAxis &aa, bool text, char arr,const char *stl) register long i,j,k1,k2; SetPenPal(mgl_have_color(stl) ? stl:AxisStl); - + static int cgid=1; StartGroup("Axis",cgid++); + p = o + d*aa.v1; k1 = AddPnt(p,CDef,q,-1,3); for(i=1;i<31;i++) // axis itself { @@ -517,6 +518,7 @@ void mglCanvas::DrawAxis(mglAxis &aa, bool text, char arr,const char *stl) for(v=v0;v0) q.a=a; // bypass palette for enabling alpha in Error() if(!get(MGL_ENABLE_LIGHT) && !(scl&4)) q.u=q.v=NAN; MGL_PUSH(Pnt,q,mutexPnt); return Pnt.size()-1; @@ -245,7 +246,7 @@ void mglBase::SetFBord(float x,float y,float z) } } //----------------------------------------------------------------------------- -bool mglBase::ScalePoint(mglPoint &p, mglPoint &n, bool use_nan) +bool mglBase::ScalePoint(mglPoint &p, mglPoint &n, bool use_nan) const { float &x=p.x, &y=p.y, &z=p.z; if(isnan(x) || isnan(y) || isnan(z)) { x=NAN; return false; } @@ -622,18 +623,18 @@ void mglTexture::Set(const char *s, int smooth, float alpha) delete []c; } //----------------------------------------------------------------------------- -void mglTexture::GetC(float u,float v,mglPnt &p) +void mglTexture::GetC(float u,float v,mglPnt &p) const { u -= long(u); register long i=long(256*u); u = u*256-i; - mglColor *s=col+2*i; + const mglColor *s=col+2*i; p.r = (s[0].r*(1-u)+s[2].r*u)*(1-v) + (s[1].r*(1-u)+s[3].r*u)*v; p.g = (s[0].g*(1-u)+s[2].g*u)*(1-v) + (s[1].g*(1-u)+s[3].g*u)*v; p.b = (s[0].b*(1-u)+s[2].b*u)*(1-v) + (s[1].b*(1-u)+s[3].b*u)*v; p.a = (s[0].a*(1-u)+s[2].a*u)*v + (s[1].a*(1-u)+s[3].a*u)*(1-v); // for alpha use inverted } //----------------------------------------------------------------------------- -bool mglTexture::IsSame(mglTexture &t) +bool mglTexture::IsSame(mglTexture &t) const { return n==t.n && !memcmp(col,t.col,514*sizeof(mglColor)); } //----------------------------------------------------------------------------- long mglBase::AddTexture(const char *cols, int smooth) @@ -754,9 +755,9 @@ char mglBase::SetPenPal(const char *p, long *Id) return mk; } //----------------------------------------------------------------------------- -float mglBase::GetA(float a) +float mglBase::GetA(float a) const { - if(fa) a = fa->Calc(0,0,0,a); + if(fa) a = fa->Calc(0,0,0,a); a = (a-FMin.c)/(FMax.c-FMin.c); a = (a<1?(a>0?a:0):1)/MGL_FLT_EPS; // for texture a must be <1 always!!! return a; diff --git a/src/canvas.cpp b/src/canvas.cpp index 1aaf876..0960ee4 100644 --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -66,7 +66,7 @@ void mglCanvas::GetDrwDat(long i) //----------------------------------------------------------------------------- const unsigned char *mglCanvas::GetBits() { Finish(); return G; } //----------------------------------------------------------------------------- -float mglCanvas::GetRatio() { return inW/inH; } +float mglCanvas::GetRatio() const { return inW/inH; } //----------------------------------------------------------------------------- void mglCanvas::add_prim(mglPrim &a) { @@ -81,7 +81,6 @@ void mglCanvas::DefaultPlotParam() std::vector Txt; ///< Pointer to textures char *Message; ///< Buffer for receiving messages long InUse; ///< Smart pointer (number of users) -mglPoint LastMousePos; ///< Last mouse position mglFont *fnt; ///< Class for printing vector text int Quality; ///< Quality of plot (0x0-pure, 0x1-fast; 0x2-fine; 0x4 - low memory) int Width; ///< Width of the image @@ -114,7 +113,7 @@ GifFileType *gif;*/ //----------------------------------------------------------------------------- // Optimal axis position //----------------------------------------------------------------------------- -float mglCanvas::FindOptOrg(char dir, int ind) +float mglCanvas::FindOptOrg(char dir, int ind) const { static mglPoint px, py, pz, m1, m2; static mglMatrix bb; bb.b[0]=1e30; @@ -179,7 +178,7 @@ float mglCanvas::FindOptOrg(char dir, int ind) return res; } //----------------------------------------------------------------------------- -float mglCanvas::GetOrgX(char dir) +float mglCanvas::GetOrgX(char dir) const { float res = Org.x; if(isnan(res)) @@ -191,7 +190,7 @@ float mglCanvas::GetOrgX(char dir) return res; } //----------------------------------------------------------------------------- -float mglCanvas::GetOrgY(char dir) +float mglCanvas::GetOrgY(char dir) const { float res = Org.y; if(isnan(res)) @@ -203,7 +202,7 @@ float mglCanvas::GetOrgY(char dir) return res; } //----------------------------------------------------------------------------- -float mglCanvas::GetOrgZ(char dir) +float mglCanvas::GetOrgZ(char dir) const { float res = Org.z; if(isnan(res)) @@ -539,7 +538,7 @@ void mglCanvas::Zoom(float x1, float y1, float x2, float y2) Bp.x=(x1+x2)/2/Bp.b[0]; Bp.y=(y1+y2)/2/Bp.b[4]; } //----------------------------------------------------------------------------- -int mglCanvas::GetSplId(long x,long y) +int mglCanvas::GetSplId(long x,long y) const { register long i,id=-1; for(i=Sub.size()-1;i>=0;i--) @@ -591,6 +590,8 @@ void mglCanvas::arrow_plot(long n1, long n2,char st) ll = hypot(lx,ly)/(PenWidth*ArrowSize*0.35*font_factor); if(ll==0) return; lx /= ll; ly /= ll; kx = ly; ky = -lx; + float lz = (p2.z-p1.z)/ll; + Reserve(6); long k1,k2,k3,k4; @@ -601,43 +602,43 @@ void mglCanvas::arrow_plot(long n1, long n2,char st) q2.xx=q2.x=p1.x-kx; q2.yy=q2.y=p1.y-ky; k2=Pnt.size(); MGL_PUSH(Pnt,q2,mutexPnt); line_plot(k1,k2); break; case 'D': - q1.xx=q1.x=p1.x+kx; q1.yy=q1.y=p1.y+ky; k1=Pnt.size(); MGL_PUSH(Pnt,q1,mutexPnt); - q2.xx=q2.x=p1.x+lx; q2.yy=q2.y=p1.y+ly; k2=Pnt.size(); MGL_PUSH(Pnt,q2,mutexPnt); - q3.xx=q3.x=p1.x-kx; q3.yy=q3.y=p1.y-ky; k3=Pnt.size(); MGL_PUSH(Pnt,q3,mutexPnt); - q4.xx=q4.x=p1.x-lx; q4.yy=q4.y=p1.y-ly; k4=Pnt.size(); MGL_PUSH(Pnt,q4,mutexPnt); + q1.xx=q1.x=p1.x+kx; q1.yy=q1.y=p1.y+ky; k1=Pnt.size(); MGL_PUSH(Pnt,q1,mutexPnt); + q2.xx=q2.x=p1.x+lx; q2.yy=q2.y=p1.y+ly; q2.zz=q2.z=p1.z+lz; k2=Pnt.size(); MGL_PUSH(Pnt,q2,mutexPnt); + q3.xx=q3.x=p1.x-kx; q3.yy=q3.y=p1.y-ky; k3=Pnt.size(); MGL_PUSH(Pnt,q3,mutexPnt); + q4.xx=q4.x=p1.x-lx; q4.yy=q4.y=p1.y-ly; q4.zz=q4.z=p1.z-lz; k4=Pnt.size(); MGL_PUSH(Pnt,q4,mutexPnt); quad_plot(k1,k2,k4,k3); break; case 'S': - q1.xx=q1.x=p1.x+kx-lx; q1.yy=q1.y=p1.y+ky-ly; k1=Pnt.size(); MGL_PUSH(Pnt,q1,mutexPnt); - q2.xx=q2.x=p1.x-kx-lx; q2.yy=q2.y=p1.y-ky-ly; k2=Pnt.size(); MGL_PUSH(Pnt,q2,mutexPnt); - q3.xx=q3.x=p1.x-kx+lx; q3.yy=q3.y=p1.y-ky+ly; k3=Pnt.size(); MGL_PUSH(Pnt,q3,mutexPnt); - q4.xx=q4.x=p1.x+kx+lx; q4.yy=q4.y=p1.y+ky+ly; k4=Pnt.size(); MGL_PUSH(Pnt,q4,mutexPnt); + q1.xx=q1.x=p1.x+kx-lx; q1.yy=q1.y=p1.y+ky-ly; q1.zz=q1.z=p1.z-lz; k1=Pnt.size(); MGL_PUSH(Pnt,q1,mutexPnt); + q2.xx=q2.x=p1.x-kx-lx; q2.yy=q2.y=p1.y-ky-ly; q2.zz=q2.z=p1.z-lz; k2=Pnt.size(); MGL_PUSH(Pnt,q2,mutexPnt); + q3.xx=q3.x=p1.x-kx+lx; q3.yy=q3.y=p1.y-ky+ly; q3.zz=q3.z=p1.z+lz; k3=Pnt.size(); MGL_PUSH(Pnt,q3,mutexPnt); + q4.xx=q4.x=p1.x+kx+lx; q4.yy=q4.y=p1.y+ky+ly; q4.zz=q4.z=p1.z+lz; k4=Pnt.size(); MGL_PUSH(Pnt,q4,mutexPnt); quad_plot(k1,k2,k4,k3); break; case 'T': - q1.xx=q1.x=p1.x+kx-lx; q1.yy=q1.y=p1.y+ky-ly; k1=Pnt.size(); MGL_PUSH(Pnt,q1,mutexPnt); - q2.xx=q2.x=p1.x-kx-lx; q2.yy=q2.y=p1.y-ky-ly; k2=Pnt.size(); MGL_PUSH(Pnt,q2,mutexPnt); - q3.xx=q3.x=p1.x+lx; q3.yy=q3.y=p1.y+ly; k3=Pnt.size(); MGL_PUSH(Pnt,q3,mutexPnt); + q1.xx=q1.x=p1.x+kx-lx; q1.yy=q1.y=p1.y+ky-ly; q1.zz=q1.z=p1.z-lz; k1=Pnt.size(); MGL_PUSH(Pnt,q1,mutexPnt); + q2.xx=q2.x=p1.x-kx-lx; q2.yy=q2.y=p1.y-ky-ly; q2.zz=q2.z=p1.z-lz; k2=Pnt.size(); MGL_PUSH(Pnt,q2,mutexPnt); + q3.xx=q3.x=p1.x+lx; q3.yy=q3.y=p1.y+ly; q3.zz=q3.z=p1.z+lz; k3=Pnt.size(); MGL_PUSH(Pnt,q3,mutexPnt); trig_plot(k1,k2,k3); break; case 'A': // q1.xx=q1.x=p1.x; q1.yy=q1.y=p1.y; k1=Pnt.size(); MGL_PUSH(Pnt,q1,mutexPnt); - q2.xx=q2.x=p1.x-kx-2*lx; q2.yy=q2.y=p1.y-ky-2*ly; k2=Pnt.size(); MGL_PUSH(Pnt,q2,mutexPnt); - q3.xx=q3.x=p1.x-1.5*lx; q3.yy=q3.y=p1.y-1.5*ly; k3=Pnt.size(); MGL_PUSH(Pnt,q3,mutexPnt); - q4.xx=q4.x=p1.x+kx-2*lx; q4.yy=q4.y=p1.y+ky-2*ly; k4=Pnt.size(); MGL_PUSH(Pnt,q4,mutexPnt); - trig_plot(n1,k2,k3); trig_plot(n1,k4,k3); break; + q2.xx=q2.x=p1.x-kx-2*lx; q2.yy=q2.y=p1.y-ky-2*ly; q2.zz=q2.z=p1.z-2*lz; k2=Pnt.size(); MGL_PUSH(Pnt,q2,mutexPnt); + q3.xx=q3.x=p1.x-1.5*lx; q3.yy=q3.y=p1.y-1.5*ly; q3.zz=q3.z=p1.z-1.5*lz; k3=Pnt.size(); MGL_PUSH(Pnt,q3,mutexPnt); + q4.xx=q4.x=p1.x+kx-2*lx; q4.yy=q4.y=p1.y+ky-2*ly; q4.zz=q4.z=p1.z-2*lz; k4=Pnt.size(); MGL_PUSH(Pnt,q4,mutexPnt); + trig_plot(n1,k2,k3); trig_plot(n1,k3,k4); break; case 'K': // q1.xx=q1.x=p1.x; q1.yy=q1.y=p1.y; k1=Pnt.size(); MGL_PUSH(Pnt,q1,mutexPnt); - q2.xx=q2.x=p1.x-kx-2*lx; q2.yy=q2.y=p1.y-ky-2*ly; k2=Pnt.size(); MGL_PUSH(Pnt,q2,mutexPnt); - q3.xx=q3.x=p1.x-1.5*lx; q3.yy=q3.y=p1.y-1.5*ly; k3=Pnt.size(); MGL_PUSH(Pnt,q3,mutexPnt); - q4.xx=q4.x=p1.x+kx-2*lx; q4.yy=q4.y=p1.y+ky-2*ly; k4=Pnt.size(); MGL_PUSH(Pnt,q4,mutexPnt); - trig_plot(n1,k2,k3); trig_plot(n1,k4,k3); + q2.xx=q2.x=p1.x-kx-2*lx; q2.yy=q2.y=p1.y-ky-2*ly; q2.zz=q2.z=p1.z-2*lz; k2=Pnt.size(); MGL_PUSH(Pnt,q2,mutexPnt); + q3.xx=q3.x=p1.x-1.5*lx; q3.yy=q3.y=p1.y-1.5*ly; q3.zz=q3.z=p1.z-1.5*lz; k3=Pnt.size(); MGL_PUSH(Pnt,q3,mutexPnt); + q4.xx=q4.x=p1.x+kx-2*lx; q4.yy=q4.y=p1.y+ky-2*ly; q4.zz=q4.z=p1.z-2*lz; k4=Pnt.size(); MGL_PUSH(Pnt,q4,mutexPnt); + trig_plot(n1,k2,k3); trig_plot(n1,k3,k4); q1.xx=q1.x=p1.x+kx; q1.yy=q1.y=p1.y+ky; k1=Pnt.size(); MGL_PUSH(Pnt,q1,mutexPnt); q2.xx=q2.x=p1.x-kx; q2.yy=q2.y=p1.y-ky; k2=Pnt.size(); MGL_PUSH(Pnt,q2,mutexPnt); line_plot(k1,k2); break; case 'V': // q1.xx=q1.x=p1.x; q1.yy=q1.y=p1.y; k1=Pnt.size(); MGL_PUSH(Pnt,q1,mutexPnt); - q2.xx=q2.x=p1.x-kx+2*lx; q2.yy=q2.y=p1.y-ky+2*ly; k2=Pnt.size(); MGL_PUSH(Pnt,q2,mutexPnt); - q3.xx=q3.x=p1.x+1.5*lx; q3.yy=q3.y=p1.y+1.5*ly; k3=Pnt.size(); MGL_PUSH(Pnt,q3,mutexPnt); - q4.xx=q4.x=p1.x+kx+2*lx; q4.yy=q4.y=p1.y+ky+2*ly; k4=Pnt.size(); MGL_PUSH(Pnt,q4,mutexPnt); - trig_plot(n1,k2,k3); trig_plot(n1,k4,k3); break; + q2.xx=q2.x=p1.x-kx+2*lx; q2.yy=q2.y=p1.y-ky+2*ly; q2.zz=q2.z=p1.z-2*lz; k2=Pnt.size(); MGL_PUSH(Pnt,q2,mutexPnt); + q3.xx=q3.x=p1.x+1.5*lx; q3.yy=q3.y=p1.y+1.5*ly; q3.zz=q3.z=p1.z-1.5*lz; k3=Pnt.size(); MGL_PUSH(Pnt,q3,mutexPnt); + q4.xx=q4.x=p1.x+kx+2*lx; q4.yy=q4.y=p1.y+ky+2*ly; q4.zz=q4.z=p1.z-2*lz; k4=Pnt.size(); MGL_PUSH(Pnt,q4,mutexPnt); + trig_plot(n1,k2,k3); trig_plot(n1,k3,k4); break; case 'O': { q1.xx=q1.x=p1.x; q1.yy=q1.y=p1.y; k1=Pnt.size(); MGL_PUSH(Pnt,q1,mutexPnt); @@ -645,10 +646,10 @@ void mglCanvas::arrow_plot(long n1, long n2,char st) for(int i=0;i<16;i++) { t = M_PI*i/8.; s=sin(t); c=cos(t); - q2.xx=q2.x=p1.x+kx*s+lx*c; q2.yy=q2.y=p1.y+ky*s+ly*c; + q2.xx=q2.x=p1.x+kx*s+lx*c; q2.yy=q2.y=p1.y+ky*s+ly*c; q2.zz=q2.z=p1.z+c*lz; k2=Pnt.size(); MGL_PUSH(Pnt,q2,mutexPnt); t = M_PI*(i+1)/8.; s=sin(t); c=cos(t); - q3.xx=q3.x=p1.x+kx*s+lx*c; q3.yy=q3.y=p1.y+ky*s+ly*c; + q3.xx=q3.x=p1.x+kx*s+lx*c; q3.yy=q3.y=p1.y+ky*s+ly*c; q3.zz=q2.z=p1.z+c*lz; k3=Pnt.size(); MGL_PUSH(Pnt,q3,mutexPnt); trig_plot(k1,k2,k3); } @@ -699,7 +700,7 @@ void mglCanvas::Legend(const std::vector &leg, float x, float y, const if(k4==2) k2=0; if(k4==1) k1=k2=0; float c1=AddTexture(char(k1?k1:'w')), c2=AddTexture(char(k2?k2:'k')); - if((Flag&3)==2) { float cc=c1; c2=c2; c2=cc; }; + if((Flag&3)==2) { float cc=c1; c2=c1; c2=cc; }; if(strchr(ff,'#')) // draw bounding box { @@ -755,7 +756,7 @@ void mglCanvas::Title(const wchar_t *title,const char *stl,float size) if(box) // draw boungind box { float c1=AddTexture('w'), c2=AddTexture('k'); - if((Flag&3)==2) { float cc=c1; c2=c2; c2=cc; }; + if((Flag&3)==2) { float cc=c1; c2=c1; c2=cc; }; long k1,k2,k3,k4; k1=AddPnt(mglPoint(x,y,Depth),c1,q,-1,0); k2=AddPnt(mglPoint(x+inW,y,Depth),c1,q,-1,0); diff --git a/src/canvas_cf.cpp b/src/canvas_cf.cpp index 9150eb6..6e8b393 100644 --- a/src/canvas_cf.cpp +++ b/src/canvas_cf.cpp @@ -243,10 +243,6 @@ void mgl_label_ext(HMGL gr, char dir, const char *text, float pos, float shift) { _Gr_->Label(dir,text,pos,shift); } void mgl_labelw_ext(HMGL gr, char dir, const wchar_t *text, float pos, float shift) { _Gr_->Labelw(dir,text,pos,shift); } -void mgl_label_pos(HMGL gr, float x, float y, const char *text, const char *fnt) -{ _Gr_->Label(x,y,text,fnt); } -void mgl_labelw_pos(HMGL gr, float x, float y, const wchar_t *text, const char *fnt) -{ _Gr_->Labelw(x,y,text,fnt); } //----------------------------------------------------------------------------- void mgl_colorbar(HMGL gr, const char *sch) { _Gr_->Colorbar(sch); } @@ -324,10 +320,6 @@ void mgl_label_(uintptr_t *gr, const char *dir, const char *text,int,int l) void mgl_label_ext_(uintptr_t *gr, const char *dir, const char *text, float *pos, float *shift,int,int l) { char *s=new char[l+1]; memcpy(s,text,l); s[l]=0; _GR_->Label(*dir, s, *pos, *shift); delete []s; } -void mgl_label_pos_(uintptr_t *gr, float *x, float *y, const char *txt, const char *fnt,int l,int n) -{ char *s=new char[l+1]; memcpy(s,txt,l); s[l]=0; - char *p=new char[n+1]; memcpy(p,fnt,n); p[n]=0; - _GR_->Label(*x,*y,s,p); delete []s; delete []p; } //----------------------------------------------------------------------------- void mgl_colorbar_(uintptr_t *gr, const char *sch,int l) { char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; @@ -393,3 +385,8 @@ float mgl_eval_expr_(uintptr_t *ex, float *x, float *y,float *z) float mgl_diff_expr_(uintptr_t *ex, const char *dir, float *x, float *y,float *z, int) { return mgl_expr_diff((HMEX) ex, *dir,*x,*y,*z); } //----------------------------------------------------------------------------- +void mgl_set_plotfactor(HMGL gr, float val) +{ _Gr_->SetPlotFactor(val); } +void mgl_set_plotfactor_(uintptr_t *gr, float *val) +{ _GR_->SetPlotFactor(*val); } +//----------------------------------------------------------------------------- diff --git a/src/exec.cpp b/src/exec.cpp index a80102c..865413c 100644 --- a/src/exec.cpp +++ b/src/exec.cpp @@ -2471,9 +2471,7 @@ void mglc_tlabel(wchar_t out[1024], long , mglArg *a, int k[10], const char *) //----------------------------------------------------------------------------- int mgls_label(mglGraph *gr, long , mglArg *a, int k[10], const char *opt) { - if(k[0]==3 && k[1]==3 && k[2]==2) - gr->Label(a[0].v, a[1].v, a[2].w.c_str(), k[3]==2?a[3].s.c_str():""); - else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==2) + if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==2) gr->Label(*(a[0].d), *(a[1].d), *(a[2].d), a[3].w.c_str(), k[4]==2?a[4].s.c_str():"", opt); else if(k[0]==1 && k[1]==1 && k[2]==2) gr->Label(*(a[0].d), *(a[1].d), a[2].w.c_str(), k[3]==2?a[3].s.c_str():"", opt); @@ -2484,9 +2482,7 @@ int mgls_label(mglGraph *gr, long , mglArg *a, int k[10], const char *opt) } void mglc_label(wchar_t out[1024], long , mglArg *a, int k[10], const char *opt) { - if(k[0]==3 && k[1]==3 && k[2]==2) - mglprintf(out,1024,L"gr->Label(%g, %g, \"%ls\", \"%s\");", a[0].v, a[1].v, a[2].w.c_str(), k[3]==2?a[3].s.c_str():""); - else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==2) + if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==2) mglprintf(out,1024,L"gr->Label(%s, %s, %s, \"%ls\", \"%s\", \"%s\");", a[0].s.c_str(), a[1].s.c_str(), a[2].s.c_str(), a[3].w.c_str(), k[4]==2?a[4].s.c_str():"", opt); else if(k[0]==1 && k[1]==1 && k[2]==2) mglprintf(out,1024,L"gr->Label(%s, %s, \"%ls\", \"%s\", \"%s\");", a[0].s.c_str(), a[1].s.c_str(), a[2].w.c_str(), k[3]==2?a[3].s.c_str():"", opt); @@ -3226,14 +3222,12 @@ void mglc_export(wchar_t out[1024], long , mglArg *a, int k[10], const char *) //----------------------------------------------------------------------------- int mgls_write(mglGraph *gr, long , mglArg *a, int k[10], const char *) { - if(k[0]==2) gr->WriteFrame(a[0].s.c_str(), "MathGL"); - else return 1; + gr->WriteFrame(k[0]==2?a[0].s.c_str():"", "MathGL"); return 0; } void mglc_write(wchar_t out[1024], long , mglArg *a, int k[10], const char *) { - if(k[0]==2) - mglprintf(out,1024,L"gr->WriteFrame(\"%s\", \"MathGL\");", a[0].s.c_str()); + mglprintf(out,1024,L"gr->WriteFrame(\"%s\", \"MathGL\");", k[0]==2?a[0].s.c_str():""); } //----------------------------------------------------------------------------- int mgls_region(mglGraph *gr, long , mglArg *a, int k[10], const char *opt) diff --git a/src/export_3d.cpp b/src/export_3d.cpp index c56d94e..23dc428 100644 --- a/src/export_3d.cpp +++ b/src/export_3d.cpp @@ -29,7 +29,7 @@ int mgl_tga_save(const char *fname, int w, int h, unsigned char **p); int mgl_pnga_save(const char *fname, int w, int h, unsigned char **p); void mgl_printf(void *fp, bool gz, const char *str, ...); //----------------------------------------------------------------------------- -void mglTexture::GetRGBA(unsigned char *f) +void mglTexture::GetRGBA(unsigned char *f) const { register long i,j,i0; mglColor c1,c2,c; @@ -256,7 +256,7 @@ void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png) delete []ng; unsigned len=strlen(fname),ntxt=gr->GetTxtNum(); - char *tname = new char[len+1]; strcpy(tname,fname); + char *tname = new char[len+5]; strcpy(tname,fname); FILE *fp=fopen(fname,"wt"); // vertices definition fprintf(fp,"# Created by MathGL library\n# Title: %s\n",(descr && *descr) ? descr : fname); @@ -264,7 +264,7 @@ void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png) { mglPnt pp = gr->GetPnt(i); fprintf(fp,"v %g %g %g\n",pp.x,pp.y,pp.z); - fprintf(fp,"vt %g %g\n",pp.t,pp.c/ntxt); + fprintf(fp,"vt %g %g\n",1-pp.ta,pp.c/ntxt); // if(isnan(pp.u)) fprintf(fp,"vn 0 0 0\n"); // else fprintf(fp,"vn %g %g %g\n",pp.u,pp.v,pp.w); } @@ -298,10 +298,10 @@ void mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png) fprintf(fp,"Kd 1.000 1.000 1.000\n"); fprintf(fp,"Ks 0.000 0.000 0.000\n"); fprintf(fp,"d 1.0\nillum 2\n"); - if(use_png) - { tname[len-4]='.'; tname[len-3]='p'; tname[len-2]='n'; tname[len-1]='g'; } - else - { tname[len-4]='.'; tname[len-3]='t'; tname[len-2]='g'; tname[len-1]='a'; } + if(use_png) strcat(tname,"_txt.png"); +// { tname[len-4]='.'; tname[len-3]='p'; tname[len-2]='n'; tname[len-1]='g'; } + else strcat(tname,"_txt.tga"); +// { tname[len-4]='.'; tname[len-3]='t'; tname[len-2]='g'; tname[len-1]='a'; } fprintf(fp,"map_Ka %s\nmap_Kd %s\nmap_Ks %s\n",tname,tname,tname); fclose(fp); // prepare texture file (TGA or PNG) @@ -490,12 +490,12 @@ bool mglCanvas::ExportMGLD(const char *fname, const char *descr) if(!fp) return true; // NOTE: I'll save Ptx. So prim type=6 is useless,and no LaTeX fprintf(fp,"MGLD %lu %lu %lu\n# %s\n", Pnt.size(), Prm.size(), Txt.size(), (descr && *descr) ? descr : fname); - register size_t i,j; - fprintf(fp,"# Vertexes: x y z c t u v w r g b a\n"); + register size_t i; + fprintf(fp,"# Vertexes: x y z c t ta u v w r g b a\n"); for(i=0;i4) continue; - Prm.push_back(q); + q.n1 = q.n1>=0?q.n1+npnt:-1; + q.n2 = q.n2>=0?q.n2+npnt:-1; + if(q.type==2 || q.type==3) + { + q.n3 = q.n3>=0?q.n3+npnt:-1; + q.n4 = q.n4>=0?q.n4+npnt:-1; + } + if(q.type<5) Prm.push_back(q); } mglTexture t; for(i=0;iw2 ? w1 : w2; } //----------------------------------------------------------------------------- -void mglFont::draw_ouline(int st, float x, float y, float f, float g, float ww, float ccol) +void mglFont::draw_ouline(int st, float x, float y, float f, float g, float ww, float ccol) const { if(st&MGL_FONT_OLINE) gr->Glyph(x,y+499*f/g, ww*g, (st&MGL_FONT_WIRE)?12:8, 0, ccol); @@ -367,7 +367,7 @@ void mglFont::draw_ouline(int st, float x, float y, float f, float g, float ww, } //----------------------------------------------------------------------------- #define MGL_CLEAR_STYLE {st = style; yy = y; ff = f; ccol=col; a = (st/MGL_FONT_BOLD)&3;} -float mglFont::Puts(const unsigned *text, float x,float y,float f,int style,float col) +float mglFont::Puts(const unsigned *text, float x,float y,float f,int style,float col) const { if(numg==0) return 0; register long j,k; diff --git a/src/opengl.cpp b/src/opengl.cpp index 851e14b..d6c7e92 100644 --- a/src/opengl.cpp +++ b/src/opengl.cpp @@ -20,11 +20,11 @@ mglCanvasGL::mglCanvasGL() : mglCanvas(1,1) {} //----------------------------------------------------------------------------- mglCanvasGL::~mglCanvasGL(){} //----------------------------------------------------------------------------- -void mglCanvasGL::Finish() +void mglCanvasGL::Finish(bool fast) { if(Prm.size()>0) { - std::sort(Prm.begin(), Prm.end()); + PreparePrim(fast); glVertexPointer(3, GL_FLOAT, sizeof(mglPnt), &(Pnt[0].x)); glNormalPointer(GL_FLOAT, sizeof(mglPnt), &(Pnt[0].u)); glColorPointer(4, GL_FLOAT, sizeof(mglPnt), &(Pnt[0].r)); diff --git a/src/pixel.cpp b/src/pixel.cpp index 3156d71..44530bb 100644 --- a/src/pixel.cpp +++ b/src/pixel.cpp @@ -56,7 +56,7 @@ void mglCanvas::PutDrawReg(mglDrawReg *d, const mglCanvas *gr) } } //----------------------------------------------------------------------------- -void mglCanvas::PostScale(mglPoint &p) +void mglCanvas::PostScale(mglPoint &p) const { mglPoint q=p/(2*B.pf); p.x = B.x + q.x*B.b[0] + q.y*B.b[1] + q.z*B.b[2]; @@ -70,7 +70,7 @@ void mglCanvas::PostScale(mglPoint &p) }*/ } //----------------------------------------------------------------------------- -bool mglCanvas::ScalePoint(mglPoint &p, mglPoint &n, bool use_nan) +bool mglCanvas::ScalePoint(mglPoint &p, mglPoint &n, bool use_nan) const { bool res = get(MGL_DISABLE_SCALE) || mglBase::ScalePoint(p,n,use_nan); if(TernAxis&4) return res; @@ -167,7 +167,7 @@ void mglCanvas::LightScale() } //----------------------------------------------------------------------------- // NOTE: Perspective, transformation formulas and lists are not support just now !!! Also it use LAST InPlot parameters!!! -mglPoint mglCanvas::CalcXYZ(int xs, int ys) +mglPoint mglCanvas::CalcXYZ(int xs, int ys) const { float s3 = 2*B.pf, x, y, z; // TODO: Take into account z-value of z-buffer ys = Height - ys; @@ -191,13 +191,12 @@ mglPoint mglCanvas::CalcXYZ(int xs, int ys) x = s3*(B.b[5]*xx-B.b[2]*yy)/d3; z = s3*(B.b[0]*yy-B.b[3]*xx)/d3; } - LastMousePos = mglPoint(Min.x + (Max.x-Min.x)*(x+1)/2, + return mglPoint(Min.x + (Max.x-Min.x)*(x+1)/2, Min.y + (Max.y-Min.y)*(y+1)/2, Min.z + (Max.z-Min.z)*(z+1)/2); - return LastMousePos; } //----------------------------------------------------------------------------- -void mglCanvas::CalcScr(mglPoint p, int *xs, int *ys) +void mglCanvas::CalcScr(mglPoint p, int *xs, int *ys) const { mglPoint n; ScalePoint(p,n); @@ -205,7 +204,7 @@ void mglCanvas::CalcScr(mglPoint p, int *xs, int *ys) if(ys) *ys=int(p.y); } //----------------------------------------------------------------------------- -mglPoint mglCanvas::CalcScr(mglPoint p) +mglPoint mglCanvas::CalcScr(mglPoint p) const { int x,y; CalcScr(p,&x,&y); return mglPoint(x,y); } //----------------------------------------------------------------------------- //mglCanvas *mgl_tmp_gr; @@ -344,6 +343,14 @@ void mglCanvas::pxl_setz(unsigned long id, unsigned long n, const void *) { mglPrim &q=Prm[i]; q.z = Pnt[q.n1].z; } } //----------------------------------------------------------------------------- +void mglCanvas::PreparePrim(bool fast) +{ + mglStartThread(&mglCanvas::pxl_transform,this,Pnt.size()); + if(fast) mglStartThread(&mglCanvas::pxl_setz,this,Prm.size()); + else mglStartThread(&mglCanvas::pxl_setz_adv,this,Prm.size()); + std::sort(Prm.begin(), Prm.end()); +} +//----------------------------------------------------------------------------- void mglCanvas::Finish(bool fast) { static mglMatrix bp; @@ -352,10 +359,7 @@ void mglCanvas::Finish(bool fast) if(get(MGL_FINISHED)) return; // nothing to do if(!(Quality&4) && Prm.size()>0) { - mglStartThread(&mglCanvas::pxl_transform,this,Pnt.size()); - if(fast) mglStartThread(&mglCanvas::pxl_setz,this,Prm.size()); - else mglStartThread(&mglCanvas::pxl_setz_adv,this,Prm.size()); - std::sort(Prm.begin(), Prm.end()); bp=Bp; + PreparePrim(fast); bp=Bp; // mglStartThread(&mglCanvas::pxl_primdr,this,Prm.size()); // TODO: check conflicts in pthreads pxl_primdr(-1,Prm.size(),NULL); } diff --git a/texinfo/core_en.texi b/texinfo/core_en.texi index 099eba0..22c6f36 100644 --- a/texinfo/core_en.texi +++ b/texinfo/core_en.texi @@ -391,7 +391,7 @@ Sets the palette as selected colors. Default value is @code{"Hbgrcmyhlnqeup"} th @cindex SetWarn @cindex GetWarn -Normally user should set it to zero by @code{SetWarn(0);} before plotting and check if @var{GetWarn} return non zero after plotting. Only last warning will be saved. All warnings/errors produced by MathGL is not critical -- the plot just will not be drawn. +Normally user should set it to zero by @code{SetWarn(0);} before plotting and check if @code{GetWarnCode()} or @code{Message()} return non zero after plotting. Only last warning will be saved. All warnings/errors produced by MathGL is not critical -- the plot just will not be drawn. @deftypefn {Method on @code{mglGraph}} @code{void} SetWarn (@code{int} code, @code{const char *}info=@code{""}) @deftypefnx {C function} @code{void} mgl_set_warn (@code{HMGL} gr, @code{int} code, @code{const char *}info) @@ -400,7 +400,7 @@ Set warning code. Normally you should call this function only for clearing the w @deftypefn {Method on @code{mglGraph}} @code{const char *}Message () @deftypefnx {C function} @code{const char *}mgl_get_mess (@code{HMGL} gr) -Set buffer for writing messages about matters why some plot are not drawn. Set to NULL to disable messages. The buffer length must be at least 1024. If @var{buf}[0]==0 then there are no messages. +Return messages about matters why some plot are not drawn. If returned string is empty then there are no messages. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{int} GetWarnCode () @@ -541,7 +541,7 @@ Sets center of axis cross section. If one of values is NAN then MathGL try to se @deftypefnx {Method on @code{mglGraph}} @code{void} SetFunc (@code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ=@code{""}, @code{const char *}EqA=@code{""}) @deftypefnx {C function} @code{void} mgl_set_func (@code{HMGL} gr, @code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ, @code{const char *}EqA) @end ifclear -Sets transformation formulas for curvilinear coordinate. Each string should contain mathematical expression for real coordinate depending on internal coordinates @samp{x}, @samp{y}, @samp{z} and @samp{a} or @samp{c} for colorbar. For example, the cylindrical coordinates are introduced as @code{Axis("x*cos(y)", "x*sin(y)", "z");}. For removing of formulas the corresponding parameter should be empty or @code{NULL}. Using transformation formulas will slightly slowing the program. Parameter @var{EqA} set the similar transformation formula for color scheme. @xref{Textual formulas}. +Sets transformation formulas for curvilinear coordinate. Each string should contain mathematical expression for real coordinate depending on internal coordinates @samp{x}, @samp{y}, @samp{z} and @samp{a} or @samp{c} for colorbar. For example, the cylindrical coordinates are introduced as @code{SetFunc("x*cos(y)", "x*sin(y)", "z");}. For removing of formulas the corresponding parameter should be empty or @code{NULL}. Using transformation formulas will slightly slowing the program. Parameter @var{EqA} set the similar transformation formula for color scheme. @xref{Textual formulas}. @end deftypefn @deftypefn {MGL command} {} axis @code{how} @@ -646,8 +646,10 @@ Set time labels with step @var{val} and template @var{templ} for x-,y-,z-axis ti @end deftypefn @deftypefn {MGL command} {} tuneticks @code{val} [@code{pos=1.15}] +@ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} SetTuneTicks (@code{int} tune, @code{float} pos=@code{1.15}) @deftypefnx {C function} @code{void} mgl_tune_ticks (@code{HMGL} gr, @code{int} tune, @code{float} pos) +@end ifclear Switch on/off ticks enhancing by factoring common multiplier (for small, like from 0.001 to 0.002, or large, like from 1000 to 2000, coordinate values -- enabled if @var{tune}&1 is nonzero) or common component (for narrow range, like from 0.999 to 1.000 -- enabled if @var{tune}&2 is nonzero). Also set the position @var{pos} of common multiplier/component on the axis: =0 at minimal axis value, =1 at maximal axis value. Default value is 1.15. @end deftypefn @@ -843,6 +845,11 @@ Push transformation matrix into stack. Later you can restore its current state b Pop (restore last 'pushed') transformation matrix into stack. @end deftypefn +@deftypefn {Method on @code{mglGraph}} @code{void} SetPlotFactor (@code{float} val) +@deftypefnx {C function} @code{void} mgl_set_plotfactor (@code{HMGL} gr, @code{float} val) +Sets the factor of plot size. It is not recommended to set it lower then 1.5. This is some analogue of function Zoom() but applied not to overall image but for each InPlot. Use negative value or zero to enable automatic selection. +@end deftypefn + There are 2 functions @code{View()} and @code{Zoom()} which transform whole image. I.e. they act as secondary transformation matrix. They were introduced for rotating/zooming the whole plot by mouse. @deftypefn {Method on @code{mglGraph}} @code{void} View (@code{float} TetX, @code{float} TetZ, @code{float} TetY=@code{0}) @@ -924,10 +931,10 @@ Ends group definition. @cindex ShowImage @end ifclear -These functions export current view to a graphic file. The filename @var{fname} should have appropriate extension. Parameter @var{descr} gives the short description of the picture. Just now the transparency is supported in PNG and SVG files. +These functions export current view to a graphic file. The filename @var{fname} should have appropriate extension. Parameter @var{descr} gives the short description of the picture. Just now the transparency is supported in PNG, SVG, OBJ and IDTF files. @anchor{write} -@deftypefn {MGL command} {} write 'fname' +@deftypefn {MGL command} {} write ['fname'=''] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} WriteFrame (@code{const char *}fname=@code{""}, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_frame (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) @@ -996,7 +1003,7 @@ Exports current frame to XYZ/XYZL/XYZF files using vector representation (see @u @deftypefn {Method on @code{mglGraph}} @code{void} WriteSTL (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_stl (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) -Exports current frame to STL file using vector representation (see @url{http://en.wikipedia.org/wiki/STL_(file_format), STL format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). +Exports current frame to STL file using vector representation (see @url{http://en.wikipedia.org/wiki/STL_(file_format), STL format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name. @end deftypefn @deftypefn {Method on @code{mglGraph}} @code{void} WriteOFF (@code{const char *}fname, @code{const char *}descr=@code{""}, @code{bool} colored=@code{false}) @@ -1006,7 +1013,7 @@ Exports current frame to OFF file using vector representation (see @url{http://p @c @deftypefn {Method on @code{mglGraph}} @code{void} WriteX3D (@code{const char *}fname, @code{const char *}descr=@code{""}) @c @deftypefnx {C function} @code{void} mgl_write_x3d (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) -@c Exports current frame to OBJ/MTL file using vector representation (see @url{http://en.wikipedia.org/wiki/X3d, X3D format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). +@c Exports current frame to X3D file using vector representation (see @url{http://en.wikipedia.org/wiki/X3d, X3D format} for details). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). @c @end deftypefn @@ -1026,9 +1033,9 @@ Displays the current picture using external program @var{viewer} for viewing. Th Exports points and primitives in file using MGLD format. Later this file can be used for faster loading and viewing by @code{mglview} utility. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{void} ImportMGLD (@code{const char *}fname, @code{const char *}descr=@code{""}) -@deftypefnx {C function} @code{void} mgl_import_mgld (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) -Imports points and primitives in file using MGLD format. Later this file can be used for faster loading and viewing by @code{mglview} utility. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). +@deftypefn {Method on @code{mglGraph}} @code{void} ImportMGLD (@code{const char *}fname, @code{bool} add=@code{false}) +@deftypefnx {C function} @code{void} mgl_import_mgld (@code{HMGL} gr, @code{const char *}fname, @code{int} add) +Imports points and primitives in file using MGLD format. Later this file can be used for faster loading and viewing by @code{mglview} utility. Parameter @var{fname} specifies the file name, @var{add} sets to append or replace primitives to existed ones. @end deftypefn @end ifclear @@ -1295,7 +1302,7 @@ Draw the sphere with radius @var{r} and center at point @var{p}=@{@var{x0}, @var @deftypefn {MGL command} {} drop @code{x0 y0 dx dy r} ['col'='r' @code{sh=1 asp=1}] @deftypefnx {MGL command} {} drop @code{x0 y0 z0 dx dy dz r} ['col'='r' @code{sh=1 asp=1}] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Drop (@code{mglPoint} p, @code{mglPoint} d, @code{float} r, @code{const char *}stl=@code{"r"}, @code{float} shift=@code{1}, @code{float} ap=@code{1}) +@deftypefnx {Method on @code{mglGraph}} @code{void} Drop (@code{mglPoint} p, @code{mglPoint} d, @code{float} r, @code{const char *}col=@code{"r"}, @code{float} shift=@code{1}, @code{float} ap=@code{1}) @deftypefnx {C function} @code{void} mgl_drop (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} dx, @code{float} dy, @code{float} dz, @code{float} r, @code{const char *}col, @code{float} shift, @code{float} ap) @end ifclear Draw the drop with radius @var{r} at point @var{p} elongated in direction @var{d} and with color @var{col}. Parameter @var{shift} set the degree of drop oblongness: @samp{0} is sphere, @samp{1} is maximally oblongness drop. Parameter @var{ap} set relative width of the drop (this is analogue of ``ellipticity'' for the sphere). @@ -1374,7 +1381,7 @@ colors for filling and boundary (second one if style @samp{@@} is used, black co @cindex Label @cindex fgets -These functions draw the text. There are functions for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. MathGL can use arbitrary font-faces and parse many TeX commands (for more details see @ref{Font styles}). All these functions have 2 variant: for printing 8-bit text (@code{char *}) and for printing Unicode text (@code{wchar_t *}). In first case the conversion in current locale is used. So sometimes you need to specify it by @code{setlocale()} function. The size argument control the size of text: if positive it give the value, if negative it give the value relative to @var{FontSize}. The font type (STIX, arial, courier, times and so on) can be selected by function LoadFont(). @xref{Font settings}. +These functions draw the text. There are functions for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. MathGL can use arbitrary font-faces and parse many TeX commands (for more details see @ref{Font styles}). All these functions have 2 variant: for printing 8-bit text (@code{char *}) and for printing Unicode text (@code{wchar_t *}). In first case the conversion into the current locale is used. So sometimes you need to specify it by @code{setlocale()} function. The size argument control the size of text: if positive it give the value, if negative it give the value relative to @var{SetFontSize()}. The font type (STIX, arial, courier, times and so on) can be selected by function LoadFont(). @xref{Font settings}. The font parameters are described by string. This string may set the text color @samp{wkrgbcymhRGBCYMHW} (see @ref{Color styles}). Also, after delimiter symbol @samp{:}, it can contain characters of font type (@samp{rbiwou}) and/or align (@samp{LRC}) specification. The font types are: @samp{r} -- roman (or regular) font, @samp{i} -- italic style, @samp{b} -- bold style, @samp{w} -- wired style, @samp{o} -- over-lined text, @samp{u} -- underlined text. By default roman font is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. For example, string @samp{b:iC} correspond to italic font style for centered text which printed by blue color. @@ -1413,16 +1420,6 @@ The function plots the string @var{text} at position @var{p} along direction @va Draws unrotated @var{n}-th line of file @var{fname} at position @{@var{x},@var{y},@var{z}@} with specified @var{size}. By default parameters from @ref{font} command are used. @end deftypefn -@deftypefn {MGL command} {} label @code{x y} 'text' ['fnt'=''] -@ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{float} x, @code{float} y, @code{const char *}text, @code{const char *}fnt=@code{""}) -@deftypefnx {Method on @code{mglGraph}} @code{void} Labelw (@code{float} x, @code{float} y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}) -@deftypefnx {C function} @code{void} mgl_label_pos (@code{HMGL} gr, @code{float} x, @code{float} y, @code{const char *}text, @code{const char *}fnt) -@deftypefnx {C function} @code{void} mgl_labelw_pos (@code{HMGL} gr, @code{float} x, @code{float} y, @code{const wchar_t *}text, @code{const char *}fnt) -@end ifclear -The function draws the string @var{text} at position @{@var{x}, @var{y}@} with fonts specifying by @var{fnt}. Coordinates @code{x, y} are supposed to be in range [0,1]. -@end deftypefn - @deftypefn {MGL command} {} text ydat 'text' ['fnt'=''] @deftypefnx {MGL command} {} text xdat ydat 'text' ['fnt'=''] @@ -1584,7 +1581,7 @@ colors for background (first one) and border (second one) of legend. Note, that @deftypefnx {Method on @code{mglGraph}} @code{void} Legend (@code{int} pos=@code{0x3}, @code{const char *}fnt=@code{"#"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1}) @deftypefnx {C function} @code{void} mgl_legend (@code{HMGL} gr, @code{int} pos, @code{const char *}fnt, @code{float} size, @code{float} llen) @end ifclear -Draws legend of accumulated legend entries by font @var{fnt} with @var{size}. Parameter @var{pos} sets the position of the legend: @samp{0} is bottom left corner, @samp{1} is bottom right corner, @samp{2} is top left corner, @samp{3} is top right corner (is default). Paramater font can contain colors for face (1st one), for border (2nd one) and for text (last one). If less than 3 colors are specified then the color for border is black (for 2 and less colors), and the color for face is white (for 1 or none colors). If string @var{fnt} contain @samp{#} then border around the legend is drawn. +Draws legend of accumulated legend entries by font @var{fnt} with @var{size}. Parameter @var{pos} sets the position of the legend: @samp{0} is bottom left corner, @samp{1} is bottom right corner, @samp{2} is top left corner, @samp{3} is top right corner (is default). Parameter @var{fnt} can contain colors for face (1st one), for border (2nd one) and for text (last one). If less than 3 colors are specified then the color for border is black (for 2 and less colors), and the color for face is white (for 1 or none colors). If string @var{fnt} contain @samp{#} then border around the legend is drawn. @end deftypefn @deftypefn {MGL command} {} legend @code{x y} ['fnt'='#' @code{size=-1 llen=0.1}] @@ -1673,7 +1670,7 @@ These functions draw continuous lines between points @{@var{x}[i], @var{y}[i], @ @deftypefnx {Method on @code{mglGraph}} @code{void} Radar (@code{const mglData &}a, @code{const char *}pen=@code{""}, @code{const char *}opt=@code{""}) @deftypefnx {C function} @code{void} mgl_radar (@code{HMGL} gr, @code{HCDT} a, @code{const char *}pen, @code{const char *}opt) @end ifclear -This functions draws radar chart which is continuous lines between points located on an radial lines (like plot in Polar coordinates). Parameter @var{value} in options @var{opt} set the additional shift of data (i.e. the data @var{a}+@var{value} is used instead of @var{a}). If @code{value<0} then @code{r=max(0, -min(value)}. If @var{pen} containt @samp{#} symbol then "grid" (radial lines and circle for @var{r}) is drawn See also @ref{plot}. @sref{Radar sample} +This functions draws radar chart which is continuous lines between points located on an radial lines (like plot in Polar coordinates). Parameter @var{value} in options @var{opt} set the additional shift of data (i.e. the data @var{a}+@var{value} is used instead of @var{a}). If @code{value<0} then @code{r=max(0, -min(value)}. If @var{pen} containt @samp{#} symbol then "grid" (radial lines and circle for @var{r}) is drawn. See also @ref{plot}. @sref{Radar sample} @end deftypefn @anchor{step} @@ -1703,7 +1700,7 @@ These functions draw continuous stairs for points to axis plane. See also @ref{p @deftypefnx {C function} @code{void} mgl_tens_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_tens_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt) @end ifclear -These functions draw continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} with color defined by the special array @var{c}[i] (look like tension plot). String @var{pen} specifies the color scheme (see @ref{Color scheme}) and style and/or width of line (see @ref{Line styles}). By default (@code{pen=""}) solid line with current color scheme is used. See also @ref{plot}, @ref{mesh}, @ref{fall}. @sref{Tens sample} +These functions draw continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} with color defined by the special array @var{c}[i] (look like tension plot). String @var{pen} specifies the color scheme (see @ref{Color scheme}) and style and/or width of line (see @ref{Line styles}). See also @ref{plot}, @ref{mesh}, @ref{fall}. @sref{Tens sample} @end deftypefn @anchor{tape} @@ -1775,7 +1772,7 @@ These functions draw vertical lines from points to axis plane. See also @ref{are @deftypefnx {C function} @code{void} mgl_bars_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_bars_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt) @end ifclear -These functions draw vertical bars from points to axis plane. If string contain symbol @samp{a} then lines are drawn one above another (like summation). If string contain symbol @samp{f} then waterfall chart is drawn for determining the cumulative effect of sequentially introduced positive or negative values. You can give different colors for positive and negative values if number of specified colors is equal to 2*number of curves. See also @ref{barh}, @ref{cones}, @ref{area}, @ref{stem}, @ref{chart}, @ref{barwidth}. @sref{Bars sample} +These functions draw vertical bars from points to axis plane. If string @var{pen} contain symbol @samp{a} then lines are drawn one above another (like summation). If string contain symbol @samp{f} then waterfall chart is drawn for determining the cumulative effect of sequentially introduced positive or negative values. You can give different colors for positive and negative values if number of specified colors is equal to 2*number of curves. See also @ref{barh}, @ref{cones}, @ref{area}, @ref{stem}, @ref{chart}, @ref{barwidth}. @sref{Bars sample} @end deftypefn @anchor{barh} @@ -2073,7 +2070,7 @@ The function draws density plot for surface specified parametrically @{@var{x}[i @deftypefnx {C function} @code{void} mgl_cont__val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_cont_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear -The function draws contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k] or at @var{z} = @var{Min}.z if @var{sch} contain symbol @samp{_}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. If string @var{sch} have symbol @samp{#} then grid lines are drawn. If string @var{sch} have symbol @samp{t} or @samp{T} then contour labels @var{v}[k] will be drawn below (or above) the contours. See also @ref{dens}, @ref{contf}, @ref{contd}, @ref{axial}, @code{cont[xyz]}. @sref{Cont sample} +The function draws contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k] or at @var{z} = @var{Min}.z if @var{sch} contain symbol @samp{_}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. If string @var{sch} have symbol @samp{t} or @samp{T} then contour labels @var{v}[k] will be drawn below (or above) the contours. See also @ref{dens}, @ref{contf}, @ref{contd}, @ref{axial}, @code{cont[xyz]}. @sref{Cont sample} @end deftypefn @deftypefn {MGL command} {} cont zdat ['sch'=''] @@ -2096,7 +2093,7 @@ The same as previous with vector @var{v} of @var{num}-th elements equidistantly @deftypefnx {C function} @code{void} mgl_contf_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_contf_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear -The function draws solid (or filled) contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k] or at @var{z} = @var{Min}.z if @var{sch} contain symbol @samp{_}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v} (must be @code{v.nx>2}). If string @var{sch} have symbol @samp{#} then grid lines are drawn. See also @ref{dens}, @ref{cont}, @ref{contd}, @code{contf[xyz]}. @sref{ContF sample} +The function draws solid (or filled) contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k] or at @var{z} = @var{Min}.z if @var{sch} contain symbol @samp{_}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v} (must be @code{v.nx>2}). See also @ref{dens}, @ref{cont}, @ref{contd}, @code{contf[xyz]}. @sref{ContF sample} @end deftypefn @deftypefn {MGL command} {} contf zdat ['sch'=''] @@ -2142,7 +2139,7 @@ The same as previous with vector @var{v} of @var{num}-th elements equidistantly @deftypefnx {C function} @code{void} mgl_contv_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_contv_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear -The function draws vertical cylinder at contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k] or at @var{z} = @var{Min}.z if @var{sch} contain symbol @samp{_}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. If string @var{sch} have symbol @samp{#} then grid lines are drawn. If string @var{sch} have symbol @samp{t} or @samp{T} then contour labels @var{v}[k] will be drawn below (or above) the contours. See also @ref{cont}, @ref{contf}. @sref{ContV sample} +The function draws vertical cylinder at contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z}=@var{v}[k] or at @var{z} = @var{Min}.z if @var{sch} contain symbol @samp{_}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. See also @ref{cont}, @ref{contf}. @sref{ContV sample} @end deftypefn @deftypefn {MGL command} {} contv zdat ['sch'=''] @@ -2188,7 +2185,7 @@ The same as previous with vector @var{v} of @var{num}-th elements equidistantly @deftypefnx {C function} @code{void} mgl_grid (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @deftypefnx {C function} @code{void} mgl_grid_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) @end ifclear -The function draws grid lines for density plot of surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal}. String @var{sch} sets the color scheme. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Grid is plotted for each z slice of the data. See also @ref{dens}, @ref{cont}, @ref{contf}, @ref{meshnum}. +The function draws grid lines for density plot of surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{Min}.z. See also @ref{dens}, @ref{cont}, @ref{contf}, @ref{meshnum}. @end deftypefn diff --git a/texinfo/core_ru.texi b/texinfo/core_ru.texi index b3ff1a5..ea75cb6 100644 --- a/texinfo/core_ru.texi +++ b/texinfo/core_ru.texi @@ -2,17 +2,21 @@ @chapter Ядро MathGL @cindex mglGraph +@ifset UDAV +Эта глава посвящена описанию множества команд построения графиков для 1D, 2D и 3D массивов данных. Сюда включены также команды настройки графика, вывода текста и примитивов, рисования осей координат и др. Дополнительную информацию о цвете, шрифтах, стилях линий и формулах можно найти в @ref{General concepts}. +@end ifset + @ifclear UDAV -Основным классом MathGL является класс @strong{mglGraph}, определенный в @code{#include }. Он включает в себя множество функций для построения графиков от 1D, 2D и 3D массивов. Он также содержит функции вывода текста и построения осей координат. Есть возможность построения в произвольной системе координат, которая задается строковыми формулами. Все графические функции используют класс mglData (@pxref{Data processing}) для хранения массивов данных. Это позволяет легко контролировать размеры, работу с памятью и производить обработку данных. Дополнительная информация о цветах, шрифтах, вычисления формул может быть найдена в @ref{Other classes}. +Основным классом MathGL является класс @strong{mglGraph}, определённый в @code{#include }. Он включает в себя множество функций для построения графиков от 1D, 2D и 3D массивов. Он также содержит функции вывода текста и построения осей координат. Есть возможность построения в произвольной системе координат, которая задается строковыми формулами. Все графические функции используют класс mglData (см. @ref{Data processing}) для хранения массивов данных. Это позволяет легко контролировать размеры, работу с памятью и производить обработку данных. Дополнительная информация о цветах, шрифтах, вычисления формул может быть найдена в @ref{General concepts} и @ref{Other classes}. @end ifclear @menu * Constructor:: * Graphics setup:: * Axis settings:: -* Transformation matrix:: +* Subplots and rotation:: * Export picture:: -* Primitives drawing:: +* Primitives:: * Text printing:: * Axis and Colorbar:: * Legend:: @@ -23,7 +27,7 @@ * Vector fields:: * Other plotting:: * Nonlinear fitting:: -* Data distributions:: +* Data manipulation:: * IDTF functions:: @end menu @@ -35,17 +39,17 @@ @deftypefn {Constructor on @code{mglGraph}} {} mglGraph (@code{int} kind=@code{0}, @code{int} width=@code{600}, @code{int} height=@code{400}) @deftypefnx {Constructor on @code{mglGraph}} {} mglGraph (@code{const mglGraph &}gr) @deftypefnx {Constructor on @code{mglGraph}} {} mglGraph (@code{HMGL} gr) -@deftypefnx {C function} @code{HMGL} mgl_create_graph (@code{int} width, @code{int} height) -@deftypefnx {C function} @code{HMGL} mgl_create_graph_gl () -Создает (или использует созданный) экземпляр класса, производного от @code{mglBase} (тип @code{HMGL}) с указанными размерами @var{width} и @var{height}. Параметр @var{type} может иметь следующие значения: @samp{0} -- использовать рисование по умолчанию, @samp{1} -- использовать рисование в OpenGL. +@deftypefnx {Функция С} @code{HMGL} mgl_create_graph (@code{int} width, @code{int} height) +@deftypefnx {Функция С} @code{HMGL} mgl_create_graph_gl () +Создает (или использует созданный) экземпляр класса, производного от @code{mglBase} (тип @code{HMGL}) с указанными размерами @var{width} и @var{height}. Параметр @var{kind} может иметь следующие значения: @samp{0} -- использовать рисование по умолчанию, @samp{1} -- использовать рисование в OpenGL. @end deftypefn @deftypefnx {Destructor on @code{mglGraph}} {} ~mglGraph () -@deftypefnx {C function} @code{HMGL} mgl_delete_graph (@code{HMGL} gr) +@deftypefnx {Функция С} @code{HMGL} mgl_delete_graph (@code{HMGL} gr) Удаляет экземпляр класса mglGraph. @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{HMGL} Self () +@deftypefn {Метод класса @code{mglGraph}} @code{HMGL} Self () Возвращает указатель на используемый объект типа @code{HMGL}. @end deftypefn @end ifclear @@ -67,8 +71,9 @@ MGL не требует создания данного типа объекто Устанавливает все настройки по умолчанию. @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{void} SetPlotId (@code{const char *}id) -Задает имя графика для сохранения в файл (например, в окне GLUT). +@deftypefn {Метод класса @code{mglGraph}} @code{void} SetPlotId (@code{const char *}id) +@deftypefnx {Функция С} @code{void} mgl_set_plotid (@code{HMGL} gr, @code{const char *}id) +Задает имя графика для сохранения в файл (например, в окне FLTK). @end deftypefn @end ifclear @@ -94,13 +99,13 @@ MGL не требует создания данного типа объекто @cindex AlphaDef @cindex TranspType -Эти функции и переменные настраивают тип и степень прозрачности поверхностей. Главной является функция @code{Alpha()}, которая включает/выключает прозрачность для всех графиков, созданных после вызова @code{Alpha()} (за исключением mglGraphGL). Функция @code{SetAlphaDef} устанавливает величину alpha-канала по умолчанию. Прозрачность можно выключить для отдельного графика с помощью @code{SetTransparent}. Наконец, функция @code{SetTranspType} задает тип прозрачности. @sref{Transparent surface sample} +Эти функции и переменные настраивают тип и степень прозрачности поверхностей. Главной является функция @code{Alpha()}, которая включает/выключает прозрачность для всех графиков, созданных после вызова @code{Alpha()} (за исключением mglGraphGL). Функция @code{SetAlphaDef} устанавливает величину alpha-канала по умолчанию. Прозрачность можно выключить для отдельного графика с помощью @code{SetTransparent}. Наконец, функция @code{SetTranspType} задает тип прозрачности. @sref{Transparency and lighting} @anchor{alpha} @deftypefn {MGL command} {} alpha @code{[val=on]} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Alpha (@code{bool} enable) -@deftypefnx {C function} @code{void} mgl_set_alpha (@code{HMGL} gr, @code{int} enable) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Alpha (@code{bool} enable) +@deftypefnx {Функция С} @code{void} mgl_set_alpha (@code{HMGL} gr, @code{int} enable) @end ifclear Включает/выключает прозрачность и возвращает свое предыдущее состояние. По умолчанию прозрачность выключена. Функция включает прозрачность для @emph{всего} рисунка. @end deftypefn @@ -108,8 +113,8 @@ MGL не требует создания данного типа объекто @anchor{alphadef} @deftypefn {MGL command} {} alphadef @code{val} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetAlphaDef (@code{float} val) -@deftypefnx {C function} @code{void} mgl_set_alpha_default (@code{HMGL} gr, @code{float} alpha) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetAlphaDef (@code{float} val) +@deftypefnx {Функция С} @code{void} mgl_set_alpha_default (@code{HMGL} gr, @code{float} alpha) @end ifclear Задает значение прозрачности по умолчанию для всех графиков. Значение по умолчанию 0.5. @end deftypefn @@ -117,10 +122,10 @@ MGL не требует создания данного типа объекто @anchor{transptype} @deftypefn {MGL command} {} transptype @code{val} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetTranspType (@code{int} type) -@deftypefnx {C function} @code{void} mgl_set_transp_type (@code{HMGL} gr, @code{int} enable) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetTranspType (@code{int} type) +@deftypefnx {Функция С} @code{void} mgl_set_transp_type (@code{HMGL} gr, @code{int} type) @end ifclear -Задает тип прозрачности. Обычная прозрачность (@samp{0}) -- "закрытые" объекты видны меньше чем закрывающие. Этот режим некорректно отображается в OpenGL (mglGraphGL) для нескольких перекрывающихся поверхностей. "Стеклянная" прозрачность (@samp{1}) -- закрытые и закрывающие объекты единообразно ослабляют интенсивность света (по RGB каналам). "Ламповая" прозрачность (@samp{2}) -- закрытые и закрывающие объекты являются источниками дополнительного освещения (рекомендую установить @code{SetAlphaDef(0.3)} или меньше в этом случае). @xref{Normal transparency}, @ref{Glass-like transparency}, @ref{Lamp-like transparency}. +Задает тип прозрачности. Обычная прозрачность (@samp{0}) -- "закрытые" объекты видны меньше чем закрывающие. Этот режим некорректно отображается в OpenGL (mglGraphGL) для нескольких перекрывающихся поверхностей. "Стеклянная" прозрачность (@samp{1}) -- закрытые и закрывающие объекты единообразно ослабляют интенсивность света (по RGB каналам). "Ламповая" прозрачность (@samp{2}) -- закрытые и закрывающие объекты являются источниками дополнительного освещения (рекомендую установить @code{SetAlphaDef(0.3)} или меньше в этом случае). @sref{Types of transparency} @end deftypefn @c ================================================================== @@ -138,28 +143,39 @@ MGL не требует создания данного типа объекто @anchor{light} @deftypefn {MGL command} {} light @code{[val=on]} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{bool} Light (@code{bool} enable) -@deftypefnx {C function} @code{void} mgl_set_light (@code{HMGL} gr, @code{int} enable) +@deftypefnx {Метод класса @code{mglGraph}} @code{bool} Light (@code{bool} enable) +@deftypefnx {Функция С} @code{void} mgl_set_light (@code{HMGL} gr, @code{int} enable) @end ifclear Включает/выключает освещение графика и возвращает предыдущее состояние. По умолчанию освещение выключено. @end deftypefn @deftypefn {MGL command} {} light @code{num} @code{val} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Light (@code{int} n, @code{bool} enable) -@deftypefnx {C function} @code{void} mgl_set_light_n (@code{HMGL} gr, @code{int} n, @code{int} enable) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Light (@code{int} n, @code{bool} enable) +@deftypefnx {Функция С} @code{void} mgl_set_light_n (@code{HMGL} gr, @code{int} n, @code{int} enable) @end ifclear Включает/выключает @var{n}-ый источник света. @end deftypefn -@deftypefn {MGL command} {} light @code{num xpos ypos zpos} ['col'='w' @code{br=0.5}] +@deftypefn {MGL command} {} light @code{num xdir ydir zdir} ['col'='w' @code{br=0.5}] +@deftypefnx {MGL command} {} light @code{num xdir ydir zdir xpos ypos zpos} ['col'='w' @code{br=0.5}] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} AddLight (@code{int} n, @code{mglPoint} p, @code{char} c=@code{'w'}, @code{float} bright=@code{0.5}, @code{bool} infty=@code{true}, @code{float} ap=@code{0}) -@deftypefnx {C function} @code{void} mgl_add_light (@code{HMGL} gr, @code{int} n, @code{float} x, @code{float} y, @code{float} z, @code{char} c) -@deftypefnx {C function} @code{void} mgl_add_light_ext (@code{HMGL} gr, @code{int} n, @code{float} x, @code{float} y, @code{float} z, @code{char} c, @code{float} bright, @code{int} infty, @code{float} ap) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} AddLight (@code{int} n, @code{mglPoint} d, @code{char} c=@code{'w'}, @code{float} bright=@code{0.5}, @code{float} ap=@code{0}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} AddLight (@code{int} n, @code{mglPoint} r, @code{mglPoint} d, @code{char} c=@code{'w'}, @code{float} bright=@code{0.5}, @code{float} ap=@code{0}) +@deftypefnx {Функция С} @code{void} mgl_add_light (@code{HMGL} gr, @code{int} n, @code{float} dx, @code{float} dy, @code{float} dz) +@deftypefnx {Функция С} @code{void} mgl_add_light_ext (@code{HMGL} gr, @code{int} n, @code{float} dx, @code{float} dy, @code{float} dz, @code{char} c, @code{float} bright, @code{float} ap) +@deftypefnx {Функция С} @code{void} mgl_add_light_loc (@code{HMGL} gr, @code{int} n, @code{float} rx, @code{float} ry, @code{float} rz, @code{float} dx, @code{float} dy, @code{float} dz, @code{char} c, @code{float} bright, @code{float} ap) @end ifclear -Добавляет источник света с номером @var{n} в положение @var{p} с цветом @var{c} и яркостью @var{bright}, которая должна быть в диапазоне [0,1]. Флаг @var{infty}=@code{true} делает источник бесконечно удаленным (для более быстрого рисования). +Добавляет источник света с номером @var{n} в положение @var{p} с цветом @var{c} и яркостью @var{bright}, которая должна быть в диапазоне [0,1]. Если указано положение источника @var{r} и оно не NAN, то источник считается локальным, иначе источник полагается бесконечно удалённым (для более быстрого рисования). +@end deftypefn + +@anchor{diffuse} +@ifclear UDAV +@deftypefn {Метод класса @code{mglGraph}} @code{void} SetDifLight (@code{bool} enable) +@deftypefnx {Функция С} @code{void} mgl_set_light_dif (@code{HMGL} gr, @code{int} enable) +Задает использование диффузного освещения (только для локальных источников света). @end deftypefn +@end ifclear @anchor{ambient} @deftypefn {MGL command} {} ambient @code{val} @@ -178,10 +194,10 @@ MGL не требует создания данного типа объекто @anchor{fog} @deftypefn {MGL command} {} fog @code{val [dz=0.25]} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Fog (@code{float} d, @code{float} dz=@code{0.25}) -@deftypefnx {C function} @code{void} mgl_set_fog (@code{HMGL} gr, @code{float} d, @code{float} dz) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Fog (@code{float} d, @code{float} dz=@code{0.25}) +@deftypefnx {Функция С} @code{void} mgl_set_fog (@code{HMGL} gr, @code{float} d, @code{float} dz) @end ifclear -Имитирует туман на графике. Туман начинается на относительном расстоянии @var{dz} от точки обзора и его плотность растет экспоненциально вглубь по закону ~@math{1-exp(-d*z)}. Здесь @emph{z} -- нормализованная на 1 глубина графика. Если @var{d}=@code{0} то туман отсутствует. @sref{Surface in fog sample} +Имитирует туман на графике. Туман начинается на относительном расстоянии @var{dz} от точки обзора и его плотность растет экспоненциально вглубь по закону ~@math{1-exp(-d*z)}. Здесь @emph{z} -- нормализованная на 1 глубина графика. Если @var{d}=@code{0} то туман отсутствует. @sref{Adding fog} @end deftypefn @c ================================================================== @@ -204,17 +220,17 @@ MGL не требует создания данного типа объекто @anchor{barwidth} @deftypefn {MGL command} {} barwidth @code{val} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetBarWidth ( @code{float} val) -@deftypefnx {C function} @code{void} mgl_set_bar_width (@code{HMGL} gr, @code{float} val) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetBarWidth ( @code{float} val) +@deftypefnx {Функция С} @code{void} mgl_set_bar_width (@code{HMGL} gr, @code{float} val) @end ifclear -Задает относительный размер прямоугольников в Bars, Barh, BoxPlot (@pxref{Bars}). Значение по умолчанию @code{0.7}. +Задает относительный размер прямоугольников в Bars, Barh, BoxPlot (см. @ref{Bars}). Значение по умолчанию @code{0.7}. @end deftypefn @anchor{marksize} @deftypefn {MGL command} {} marksize @code{val} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetMarkSize (@code{float} val) -@deftypefnx {C function} @code{void} mgl_set_mark_size (@code{HMGL} gr, @code{float} val) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetMarkSize (@code{float} val) +@deftypefnx {Функция С} @code{void} mgl_set_mark_size (@code{HMGL} gr, @code{float} val) @end ifclear Задает размер маркеров для @ref{1D plotting}. Значение по умолчанию @code{0.02}. @end deftypefn @@ -222,18 +238,18 @@ MGL не требует создания данного типа объекто @anchor{arrowsize} @deftypefn {MGL command} {} arrowsize @code{val} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetArrowSize (@code{float} val) -@deftypefnx {C function} @code{void} mgl_set_arrow_size (@code{HMGL} gr, @code{float} val) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetArrowSize (@code{float} val) +@deftypefnx {Функция С} @code{void} mgl_set_arrow_size (@code{HMGL} gr, @code{float} val) @end ifclear -Задает размер стрелок для @ref{1D plotting}, линий и кривых (@pxref{Primitives drawing}). Значение по умолчанию @code{0.03}. +Задает размер стрелок для @ref{1D plotting}, линий и кривых (см. @ref{Primitives drawing}). Значение по умолчанию @code{0.03}. @end deftypefn @anchor{meshnum} @anchor{MeshNum} @deftypefn {MGL command} {} meshnum @code{val} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetMeshNum (@code{int} val) -@deftypefnx {C function} @code{void} mgl_set_meshnum (@code{HMGL} gr, @code{int} num) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetMeshNum (@code{int} val) +@deftypefnx {Функция С} @code{void} mgl_set_meshnum (@code{HMGL} gr, @code{int} num) @end ifclear Задает ориентировочное число линий в Mesh(), Fall(), Grid() и число стрелок (штрихов) в Vect(), Dew() и число ячеек в Cloud*(). По умолчанию (=0) рисуются все линии, стрелки, ячейки. @end deftypefn @@ -248,34 +264,29 @@ MGL не требует создания данного типа объекто @end ifclear @cindex Cut -Эти функции задают условия когда точка будет исключена (вырезана) из рисования. Замечу, что все точки со значением(-ями) NAN по одной из координат или амплитуде автоматически исключаются из рисования. +Эти функции задают условия когда точка будет исключена (вырезана) из рисования. Замечу, что все точки со значением(-ями) NAN по одной из координат или амплитуде автоматически исключаются из рисования. @sref{Cutting sample} @anchor{cut} @deftypefn {MGL command} {} cut @code{val} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetCut (@code{bool} val) -@deftypefnx {C function} @code{void} mgl_set_cut (@code{HMGL} gr, @code{int} val) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetCut (@code{bool} val) +@deftypefnx {Функция С} @code{void} mgl_set_cut (@code{HMGL} gr, @code{int} val) @end ifclear Задает обрезание точек за пределами осей координат. Если @code{true} то такие точки исключаются из рисования (это по умолчанию) иначе они проецируются на ограничивающий прямоугольник. @end deftypefn -@float -@image{cut, 7cm} -@caption{Левый рисунок нарисован при @code{Cut=false}, правый при @code{Cut=true}.} -@end float - @deftypefn {MGL command} {} cut @code{x1 y1 z1 x2 y2 z2} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetCutBox (@code{mglPoint} p1, @code{mglPoint} p1) -@deftypefnx {C function} @code{void} mgl_set_cut_box (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetCutBox (@code{mglPoint} p1, @code{mglPoint} p1) +@deftypefnx {Функция С} @code{void} mgl_set_cut_box (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2) @end ifclear Задает границы параллелепипеда внутри которого точки не рисуются. Если границы одинаковы (переменные равны), то параллелепипеда считается пустым. @sref{CutMinMax sample} @end deftypefn @deftypefn {MGL command} {} cut 'cond' @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} CutOff (@code{const char *}cond) -@deftypefnx {C function} @code{void} mgl_set_cutoff (@code{HMGL} gr, @code{const char *}cond) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} CutOff (@code{const char *}cond) +@deftypefnx {Функция С} @code{void} mgl_set_cutoff (@code{HMGL} gr, @code{const char *}cond) @end ifclear Задает условие обрезания по формуле @var{cond}. Это условие исключает точки из рисования если результат вычисления формулы не равен нулю. Установите аргумент @code{""} для выключения условия обрезания. @sref{CutOff sample} @end deftypefn @@ -299,20 +310,20 @@ MGL не требует создания данного типа объекто @anchor{font} @deftypefn {MGL command} {} font 'fnt' [@code{val=6}] -Задает стиль и размер шрифта (@pxref{Text printing}). Вначале используется @samp{:rC} -- прямой шрифт с выравниванием по центру. По умолчанию размер подписей оси координат в 1.4 раза больше. См. также @pxref{Font styles}. +Задает стиль и размер шрифта (см. @ref{Text printing}). Вначале используется @samp{:rC} -- прямой шрифт с выравниванием по центру. По умолчанию размер подписей оси координат в 1.4 раза больше. См. также см. @ref{Font styles}. @end deftypefn @anchor{rotatetext} @deftypefn {MGL command} {} rotatetext @code{val} -@deftypefnx {Method on @code{mglGraph}} @code{void} SetRotatedText (@code{bool} val) -@deftypefnx {C function} @code{void} mgl_set_rotated_text (@code{HMGL} gr, @code{int} val) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetRotatedText (@code{bool} val) +@deftypefnx {Функция С} @code{void} mgl_set_rotated_text (@code{HMGL} gr, @code{int} val) Включает/выключает вращение меток и подписей осей координат вдоль оси. @end deftypefn @ifclear UDAV -@deftypefn {Method on @code{mglGraph}} @code{void} SetFontDef (@code{const char *}fnt) -@deftypefnx {C function} @code{void} mgl_set_font_def (@code{HMGL} gr, @code{const char *} val) -Задает стиль шрифта (@pxref{Text printing}). По умолчанию используется @samp{rC} -- прямой шрифт с выравниванием по центру. +@deftypefn {Метод класса @code{mglGraph}} @code{void} SetFontDef (@code{const char *}fnt) +@deftypefnx {Функция С} @code{void} mgl_set_font_def (@code{HMGL} gr, @code{const char *} val) +Задает стиль шрифта (см. @ref{Text printing}). По умолчанию используется @samp{rC} -- прямой шрифт с выравниванием по центру. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} SetFontSize (@code{float} val) @@ -358,10 +369,10 @@ MGL не требует создания данного типа объекто @anchor{palette} @deftypefn {MGL command} {} palette 'colors' @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetPalette (@code{const char *}@var{colors}) -@deftypefnx {C function} @code{void} mgl_set_palette (@code{HMGL} gr, @code{const char *}@var{colors}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetPalette (@code{const char *}@var{colors}) +@deftypefnx {Функция С} @code{void} mgl_set_palette (@code{HMGL} gr, @code{const char *}@var{colors}) @end ifclear -Задает палитру как последовательность цветов. Значение по умолчанию @code{"Hbgrcmyhlnqeup"}, что соответствует цветам: темно серый @samp{H}, синий @samp{b}, зеленый @samp{g}, красный @samp{r}, голубой @samp{c}, малиновый @samp{m}, желтый @samp{y}, серый @samp{h}, сине-зеленый @samp{l}, небесно-голубой @samp{n}, оранжевый @samp{q}, желто-зеленый @samp{e}, сине-фиолетовый @samp{u}, фиолетовый @samp{p}. Палитра в основном используется в 1D графиках (@pxref{1D plotting}) для кривых с неопределенным стилем линии. +Задает палитру как последовательность цветов. Значение по умолчанию @code{"Hbgrcmyhlnqeup"}, что соответствует цветам: темно серый @samp{H}, синий @samp{b}, зелёный @samp{g}, красный @samp{r}, голубой @samp{c}, малиновый @samp{m}, жёлтый @samp{y}, серый @samp{h}, сине-зелёный @samp{l}, небесно-голубой @samp{n}, оранжевый @samp{q}, желто-зелёный @samp{e}, сине-фиолетовый @samp{u}, фиолетовый @samp{p}. Палитра в основном используется в 1D графиках (см. @ref{1D plotting}) для кривых с неопределённым стилем линии. @end deftypefn @c ================================================================== @@ -372,18 +383,20 @@ MGL не требует создания данного типа объекто @cindex SetWarn @cindex GetWarn -Есть 2 переменные показывающие наличие предупреждения/ошибки при создании графика. Обычно вы должны сбросить их с помощью @code{SetWarn(0);} перед построением и проверить переменную @var{WarnCode} на наличие ошибок после построения. Только последнее предупреждение сохраняется. Замечу, что все предупреждения/ошибки в MathGL не являются критичными -- в худшем из вариантов соответствующий график просто не будет построен. +Обычно вы должны сбросить признак ошибки с помощью @code{SetWarn(0);} перед построением и проверить @code{GetWarnCode()} или @code{Message()} на наличие ошибок после построения. Только последнее предупреждение сохраняется. Замечу, что все предупреждения/ошибки в MathGL не являются критичными -- в худшем из вариантов соответствующий график просто не будет построен. -@deftypefn {Метод класса @code{mglGraph}} @code{void} SetWarn (@code{int} code) -Задает код предупреждения. Обычно вызывается только для очистки предупреждений (@code{SetWarn(0);}) или внутри библиотеки. +@deftypefn {Метод класса @code{mglGraph}} @code{void} SetWarn (@code{int} code, @code{const char *}info=@code{""}) +@deftypefnx {Функция С} @code{void} mgl_set_warn (@code{HMGL} gr, @code{int} code, @code{const char *}info) +Задает код предупреждения. Обычно вызывается только для очистки предупреждений (@code{SetWarn(0);}) или внутри библиотеки. Текст @var{info} будет добавлен к предупреждениям как есть при @var{code}<0. @end deftypefn -@deftypefn {Метод класса @code{mglGraph}} @code{void} Message (@code{char *}buf) -Задает буфер для вывода сообщений библиотеки о причине отсутствия графика. Если равен NULL, то сообщения не выводятся. Размер буфера должен быть не менее 1024 байт. Если @var{buf}[0]==0, то сообщений нет. +@deftypefn {Метод класса @code{mglGraph}} @code{const char *}Message () +@deftypefnx {Функция С} @code{const char *}mgl_get_mess (@code{HMGL} gr) +Возвращает текст предупреждений о причине отсутствия графика. Если возвращаемая строка пустая, то сообщений нет. @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{int} GetWarn () -@deftypefnx {C function} @code{int} mgl_get_warn (@code{HMGL} gr) +@deftypefn {Метод класса @code{mglGraph}} @code{int} GetWarnCode () +@deftypefnx {Функция С} @code{int} mgl_get_warn_code (@code{HMGL} gr) Возвращает код сообщения о причине отсутствия графика. Возможные значения: @table @code @item mglWarnNone=0 @@ -422,19 +435,19 @@ Setsize: размер(ы) равны нулю или отрицательны @c ================================================================== -@node Axis settings, Transformation matrix, Graphics setup, MathGL core +@node Axis settings, Subplots and rotation, Graphics setup, MathGL core @section Настройки осей координат -Эти функции управляет видом и масштабом осей координат. Перед построением для каждой точки выполняются 3 преобразования: сначала определяется возможность рисования точки (@pxref{Cutting}), далее применяются формулы перехода к криволинейным координатам и наконец точка отображается. +Эти функции управляет видом и масштабом осей координат. Перед построением для каждой точки выполняются 3 преобразования: сначала определяется возможность рисования точки (см. @ref{Cutting}), далее применяются формулы перехода к криволинейным координатам и наконец точка отображается. @menu * Ranges (bounding box):: -* Transformation:: +* Curved coordinates:: * Ticks:: @end menu @c ------------------------------------------------------------------ -@node Ranges (bounding box), Transformation, , Axis settings +@node Ranges (bounding box), Curved coordinates, , Axis settings @subsection Масштаб осей координат @cindex CRange @cindex XRange @@ -457,20 +470,19 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefnx {MGL command} {} zrange @code{v1 v2} @deftypefnx {MGL command} {} crange @code{v1 v2} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetRange (@code{char} dir, @code{float} v1, @code{float} v2) -@deftypefnx {C function} @code{void} mgl_set_range_val (@code{HMGL} gr, @code{char} dir, @code{float} v1, @code{float} v2) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetRange (@code{char} dir, @code{float} v1, @code{float} v2) +@deftypefnx {Функция С} @code{void} mgl_set_range_val (@code{HMGL} gr, @code{char} dir, @code{float} v1, @code{float} v2) @end ifclear Задает диапазон изменения @samp{x}-,@samp{y}-,@samp{z}-,@samp{c}-координат. См. также @ref{ranges}. @end deftypefn - @deftypefn {MGL command} {} xrange dat [@code{add=off}] @deftypefnx {MGL command} {} yrange dat [@code{add=off}] @deftypefnx {MGL command} {} zrange dat [@code{add=off}] @deftypefnx {MGL command} {} crange dat [@code{add=off}] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetRange (@code{char} dir, @code{const mglData &}dat, @code{bool} add=@code{false}) -@deftypefnx {C function} @code{void} mgl_set_range_dat (@code{HMGL} gr, @code{char} dir, @code{const HCDT} a, @code{int} add) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetRange (@code{char} dir, @code{const mglData &}dat, @code{bool} add=@code{false}) +@deftypefnx {Функция С} @code{void} mgl_set_range_dat (@code{HMGL} gr, @code{char} dir, @code{const HCDT} a, @code{int} add) @end ifclear Задает диапазон изменения @samp{x}-,@samp{y}-,@samp{z}-,@samp{c}-координат как минимальное и максимальное значение массива @var{dat}. Параметр @var{add} указывает добавлять новый диапазон к существующему или заменять его. @end deftypefn @@ -478,17 +490,17 @@ Setsize: размер(ы) равны нулю или отрицательны @anchor{ranges} @deftypefn {MGL command} {} ranges @code{x1 x2 y1 y2 [z1=0 z2=0]} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetRanges (@code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{float} z1=@code{0}, @code{float} z2=@code{0}) -@deftypefnx {Method on @code{mglGraph}} @code{void} SetRanges (@code{mglPoint} p1, @code{mglPoint} p2) -@deftypefnx {C function} @code{void} mgl_set_ranges (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{float} z1, @code{float} z2) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetRanges (@code{mglPoint} p1, @code{mglPoint} p2) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetRanges (@code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{float} z1=@code{0}, @code{float} z2=@code{0}) +@deftypefnx {Функция С} @code{void} mgl_set_ranges (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{float} z1, @code{float} z2) @end ifclear Задает диапазон изменения координат. Если минимальное и максимальное значение координаты равны, то они игнорируются по данному направлению. Также устанавливает размер цветовой шкалы, аналогично команде @code{crange z1 z2}. Начальные диапазоны равны [-1, 1]. @end deftypefn @ifclear UDAV -@deftypefn {Method on @code{mglGraph}} @code{void} SetRanges (@code{const mglData &}xx, @code{const mglData &}yy) -@deftypefnx {Method on @code{mglGraph}} @code{void} SetRanges (@code{const mglData &}xx, @code{const mglData &}yy, @code{const mglData &}zz) -@deftypefnx {Method on @code{mglGraph}} @code{void} SetRanges (@code{const mglData &}xx, @code{const mglData &}yy, @code{const mglData &}zz, @code{const mglData &}cc) +@deftypefn {Метод класса @code{mglGraph}} @code{void} SetRanges (@code{const mglData &}xx, @code{const mglData &}yy) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetRanges (@code{const mglData &}xx, @code{const mglData &}yy, @code{const mglData &}zz) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetRanges (@code{const mglData &}xx, @code{const mglData &}yy, @code{const mglData &}zz, @code{const mglData &}cc) Задает диапазон изменения @samp{x}-,@samp{y}-,@samp{z}-,@samp{c}-координат как минимальное и максимальное значение массивов @var{xx}, @var{yy}, @var{zz}, @var{cc} соответственно. @end deftypefn @end ifclear @@ -496,16 +508,16 @@ Setsize: размер(ы) равны нулю или отрицательны @anchor{origin} @deftypefn {MGL command} {} origin @code{x0 y0 [z0=nan]} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetOrigin (@code{float} x0, @code{float} y0, @code{float} z0=@code{NAN}) -@deftypefnx {Method on @code{mglGraph}} @code{void} SetOrigin (@code{mglPoint} p0) -@deftypefnx {C function} @code{void} mgl_set_origin (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetOrigin (@code{mglPoint} p0) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetOrigin (@code{float} x0, @code{float} y0, @code{float} z0=@code{NAN}) +@deftypefnx {Функция С} @code{void} mgl_set_origin (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0) @end ifclear Задает центр пересечения осей координат. Если одно из значений равно NAN, то MathGL попытается выбрать оптимальное положение осей координат по этому направлению. @end deftypefn @c ------------------------------------------------------------------ -@node Transformation, Ticks, Ranges (bounding box), Axis settings +@node Curved coordinates, Ticks, Ranges (bounding box), Axis settings @subsection Криволинейные координаты @cindex Axis @ifclear UDAV @@ -516,31 +528,31 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefn {MGL command} {} axis 'fx' 'fy' ['fz'='' 'fa'=''] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetFunc (@code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ=@code{""}, @code{const char *}EqA=@code{""}) -@deftypefnx {C function} @code{void} mgl_set_func (@code{HMGL} gr, @code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ, @code{const char *}EqA) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetFunc (@code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ=@code{""}, @code{const char *}EqA=@code{""}) +@deftypefnx {Функция С} @code{void} mgl_set_func (@code{HMGL} gr, @code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ, @code{const char *}EqA) @end ifclear -Задает формулы перехода к криволинейным координатам. Каждая строка является математическим выражением, зависящим от старых координат @samp{x}, @samp{y}, @samp{z} и @samp{a} или @samp{c} для цветовой шкалы. Например, для цилиндрических координат будет @code{Axis("x*cos(y)", "x*sin(y)", "z");}. Для удаления формул соответствующий параметр должен быть пустым или @code{NULL}. Использование формул преобразования слегка замедляет программу, т.е.. @code{Axis("", "", "")} быстрее чем @code{Axis("1*x", "1*y", "1*z")}. Параметр @var{EqA} задает аналогичную формулу для цветовой шкалы. @xref{Textual formulas}. +Задает формулы перехода к криволинейным координатам. Каждая строка является математическим выражением, зависящим от старых координат @samp{x}, @samp{y}, @samp{z} и @samp{a} или @samp{c} для цветовой шкалы. Например, для цилиндрических координат будет @code{SetFunc("x*cos(y)", "x*sin(y)", "z");}. Для удаления формул соответствующий параметр должен быть пустым или @code{NULL}. Использование формул преобразования слегка замедляет программу. Параметр @var{EqA} задает аналогичную формулу для цветовой шкалы. @xref{Textual formulas}. @end deftypefn @deftypefn {MGL command} {} axis @code{how} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetCoor (@code{int} how) -@deftypefnx {C function} @code{void} mgl_set_coor (@code{HMGL} gr, @code{int} how) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetCoor (@code{int} how) +@deftypefnx {Функция С} @code{void} mgl_set_coor (@code{HMGL} gr, @code{int} how) @end ifclear -Устанавливает одну из предопределенных систем криволинейных координат в зависимости от параметра @var{how}: @code{mglCartesian=0} -- декартова система (нет преобразования координат, наиболее быстрая); @code{mglPolar=1} -- полярные координаты @math{x_n=x*cos(y),y_n=x*sin(y), z_n=z}; @code{mglSpherical=2} -- сферические координаты @math{x_n=x*sin(y)*cos(z), y_n=x*sin(y)*sin(z), z_n=x*cos(y)}; @code{mglParabolic=3} -- параболические координаты @math{x_n=x*y, y_n=(x*x-y*y)/2, z_n=z}; @code{mglParaboloidal=4} -- Paraboloidal coordinates @math{x_n=(x*x-y*y)*cos(z)/2, y_n=(x*x-y*y)*sin(z)/2, z_n=x*y}; @code{mglOblate=5} -- Oblate coordinates @math{x_n=cosh(x)*cos(y)*cos(z), y_n=cosh(x)*cos(y)*sin(z), z_n=sinh(x)*sin(y)}; @code{mglProlate=6} -- Prolate coordinates @math{x_n=sinh(x)*sin(y)*cos(z), y_n=sinh(x)*sin(y)*sin(z), z_n=cosh(x)*cos(y)}; @code{mglElliptic=7} -- эллиптические координаты @math{x_n=cosh(x)*cos(y), y_n=sinh(x)*sin(y), z_n=z}; @code{mglToroidal=8} -- тороидальные координаты @math{x_n=sinh(x)*cos(z)/(cosh(x)-cos(y)), y_n=sinh(x)*sin(z)/(cosh(x)-cos(y)), z_n=sin(y)/(cosh(x)-cos(y))}; @code{mglBispherical=9} -- бисферические координаты @math{x_n=sin(y)*cos(z)/(cosh(x)-cos(y)), y_n=sin(y)*sin(z)/(cosh(x)-cos(y)), z_n=sinh(x)/(cosh(x)-cos(y))}; @code{mglBipolar=10} -- биполярные координаты @math{x_n=sinh(x)/(cosh(x)-cos(y)), y_n=sin(y)/(cosh(x)-cos(y)), z_n=z}. +Устанавливает одну из предопределенных систем криволинейных координат в зависимости от параметра @var{how}: @code{mglCartesian=0} -- декартова система (нет преобразования координат, наиболее быстрая); @code{mglPolar=1} -- полярные координаты @math{x_n=x*cos(y),y_n=x*sin(y), z_n=z}; @code{mglSpherical=2} -- сферические координаты @math{x_n=x*sin(y)*cos(z), y_n=x*sin(y)*sin(z), z_n=x*cos(y)}; @code{mglParabolic=3} -- параболические координаты @math{x_n=x*y, y_n=(x*x-y*y)/2, z_n=z}; @code{mglParaboloidal=4} -- Paraboloidal coordinates @math{x_n=(x*x-y*y)*cos(z)/2, y_n=(x*x-y*y)*sin(z)/2, z_n=x*y}; @code{mglOblate=5} -- Oblate coordinates @math{x_n=cosh(x)*cos(y)*cos(z), y_n=cosh(x)*cos(y)*sin(z), z_n=sinh(x)*sin(y)}; @code{mglProlate=6} -- Prolate coordinates @math{x_n=sinh(x)*sin(y)*cos(z), y_n=sinh(x)*sin(y)*sin(z), z_n=cosh(x)*cos(y)}; @code{mglElliptic=7} -- эллиптические координаты @math{x_n=cosh(x)*cos(y), y_n=sinh(x)*sin(y), z_n=z}; @code{mglToroidal=8} -- тороидальные координаты @math{x_n=sinh(x)*cos(z)/(cosh(x)-cos(y)), y_n=sinh(x)*sin(z)/(cosh(x)-cos(y)), z_n=sin(y)/(cosh(x)-cos(y))}; @code{mglBispherical=9} -- бисферические координаты @math{x_n=sin(y)*cos(z)/(cosh(x)-cos(y)), y_n=sin(y)*sin(z)/(cosh(x)-cos(y)), z_n=sinh(x)/(cosh(x)-cos(y))}; @code{mglBipolar=10} -- биполярные координаты @math{x_n=sinh(x)/(cosh(x)-cos(y)), y_n=sin(y)/(cosh(x)-cos(y)), z_n=z}; @code{mglLogLog=11} -- log-log координаты @math{x_n=lg(x), y_n=lg(y), z_n=lg(z)}; @code{mglLogX=12} -- log-x координаты @math{x_n=lg(x), y_n=y, z_n=z}; @code{mglLogY=13} -- log-y координаты @math{x_n=x, y_n=lg(y), z_n=z}. @end deftypefn @anchor{ternary} @deftypefn {MGL command} {} ternary @code{val} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Ternary (@code{bool} tern) -@deftypefnx {C function} @code{void} mgl_set_ternary (@code{HMGL} gr, @code{int} tern) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Ternary (@code{int} tern) +@deftypefnx {Функция С} @code{void} mgl_set_ternary (@code{HMGL} gr, @code{int} tern) @end ifclear -Задает рисование треугольных (Ternary) осей координат. Это специальный тип графика для 3 зависимых координат (компонент) @var{a}, @var{b}, @var{c} таких, что @var{a}+@var{b}+@var{c}=1. MathGL использует только 2 независимые координаты @var{a}=x и @var{b}=y поскольку их достаточно для построения всех графиков. При этом третья координата z является независимым параметром для построения линий уровня, поверхностей и т.д. @sref{Ternary plot sample} +Задает рисование треугольных (Ternary) или пирамидальных (Quaternary) осей координат. Это специальный тип графика для 3 зависимых координат (компонент) @var{a}, @var{b}, @var{c} таких, что @var{a}+@var{b}+@var{c}=1. MathGL использует только 2 независимые координаты @var{a}=x и @var{b}=y поскольку их достаточно для построения всех графиков. При этом третья координата z является независимым параметром для построения линий уровня, поверхностей и т.д. Соответственно Quaternary координаты -- 4 независимые координаты @var{a}, @var{b}, @var{c} и @var{d}, такие что @var{a}+@var{b}+@var{c}+@var{d}=1. Используйте @code{Ternary(0)}. @sref{Ternary axis} @end deftypefn @c ------------------------------------------------------------------ -@node Ticks, , Transformation, Axis settings +@node Ticks, , Curved coordinates, Axis settings @subsection Метки осей @cindex AxisStl @cindex TickLen @@ -561,30 +573,13 @@ Setsize: размер(ы) равны нулю или отрицательны @cindex SetTickSkip @end ifclear -@anchor{ticklen} -@deftypefn {MGL command} {} ticklen @code{val} [@code{stt=1}] -@ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetTickLen (@code{float} val, @code{float} stt=@code{1}) -@deftypefnx {C function} @code{void} mgl_set_tick_len (@code{HMGL} gr, @code{float} val, @code{float} stt) -@end ifclear -Задает относительную длину меток осей координат. Значение по умолчанию @code{0.1}. Параметр @var{stt}>0 задает относительную длину подметок, которые в @code{sqrt(1+stt)} раз меньше. -@end deftypefn - -@deftypefn {MGL command} {} axisstl 'stl' ['tck'='' 'sub'=''] -@ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetAxisStl (@code{const char *}stl=@code{"k"}, @code{const char *}tck=@code{0}, @code{const char *}sub=@code{0}) -@deftypefnx {C function} @code{void} mgl_set_axis_stl (@code{HMGL} gr, @code{const char *}stl, @code{const char *}tck, @code{const char *}sub) -@end ifclear -Задает стиль осей (@var{stl}), меток (@var{tck}) и подметок (@var{sub}) осей координат. Если @var{stl} пустая или ноль, то используется стиль по умолчанию (@samp{k} или @samp{w} в зависимости от типа прозрачности). Если @var{tck}, @var{sub} пустая или ноль, то используется стиль осей (т.е. @var{stl}). -@end deftypefn - @anchor{adjust} @deftypefn {MGL command} {} adjust ['dir'='xyzc'] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Adjust (@code{const char *}dir=@code{"xyz"}) -@deftypefnx {C function} @code{void} mgl_adjust_ticks (@code{HMGL} gr, @code{const char *}dir) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Adjust (@code{const char *}dir=@code{"xyzc"}) +@deftypefnx {Функция С} @code{void} mgl_adjust_ticks (@code{HMGL} gr, @code{const char *}dir) @end ifclear -Автоматически задает шаг меток осей, число подметок и начальное положение меток для осей координат @var{dir} в виде наиболее удобном для человека. Также задает @code{SetTuneTicks(true)}. +Автоматически задает шаг меток осей, число подметок и начальное положение меток для осей координат @var{dir} в виде наиболее удобном для человека. Также задает @code{SetTuneTicks(true)}. Обычно не требуется вызывать эту функцию кроме случая возвращения настроек по умолчанию. @end deftypefn @anchor{xtick} @@ -596,27 +591,27 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefnx {MGL command} {} ztick @code{val [sub=0 org=nan]} @deftypefnx {MGL command} {} ctick @code{val [sub=0 org=nan]} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetTicks (@code{char} dir, @code{float} d=@code{0}, @code{int} ns=@code{0}, @code{float} org=@code{NAN}) -@deftypefnx {C function} @code{void} mgl_set_ticks_dir (@code{HMGL} gr, @code{char} dir, @code{float} d, @code{int} ns, @code{float} org) -@deftypefnx {C function} @code{void} mgl_set_ticks(@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} nz) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetTicks (@code{char} dir, @code{float} d=@code{0}, @code{int} ns=@code{0}, @code{float} org=@code{NAN}) +@deftypefnx {Функция С} @code{void} mgl_set_ticks_dir (@code{HMGL} gr, @code{char} dir, @code{float} d, @code{int} ns, @code{float} org) +@deftypefnx {Функция С} @code{void} mgl_set_ticks (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} nz) @end ifclear -Задает шаг меток осей @var{d}, число подметок @var{ns} и начальное положение меток @var{org} для оси вдоль направления @var{dir} (используйте 'c' для меток colorbar). Переменная @var{d} задает шаг меток (если положительна) или их число на оси (если отрицательна). Нулевое значение задает логарифмические метки. Если @var{org}=@code{NAN}, то используется значение из переменной @var{Org}. +Задает шаг меток осей @var{d}, число подметок @var{ns} и начальное положение меток @var{org} для оси вдоль направления @var{dir} (используйте 'c' для меток colorbar). Переменная @var{d} задает шаг меток (если положительна) или их число на оси (если отрицательна). Нулевое значение задает автоматическую расстановку меток. Если @var{org}=@code{NAN}, то используется значение из переменной @var{Org}. @end deftypefn @deftypefn {MGL command} {} xtick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...] @deftypefnx {MGL command} {} ytick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...] @deftypefnx {MGL command} {} ztick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const char *}lbl, @code{bool} add=@code{false}) -@deftypefnx {Method on @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const wchar_t *}lbl, @code{bool} add=@code{false}) -@deftypefnx {Method on @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const mglData &}val, @code{const char *}lbl, @code{bool} add=@code{false}) -@deftypefnx {Method on @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const mglData &}val, @code{const wchar_t *}lbl, @code{bool} add=@code{false}) -@deftypefnx {C function} @code{void} mgl_set_ticks_str (@code{HMGL} gr, @code{char} dir, @code{const char *}lbl, @code{bool} add) -@deftypefnx {C function} @code{void} mgl_set_ticks_wcs (@code{HMGL} gr, @code{char} dir, @code{const wchar_t *}lbl, @code{bool} add) -@deftypefnx {C function} @code{void} mgl_set_ticks_val (@code{HMGL} gr, @code{char} dir, @code{HCDT} val, @code{const char *}lbl, @code{bool} add) -@deftypefnx {C function} @code{void} mgl_set_ticks_valw (@code{HMGL} gr, @code{char} dir, @code{HCDT} val, @code{const wchar_t *}lbl, @code{bool} add) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const char *}lbl, @code{bool} add=@code{false}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const wchar_t *}lbl, @code{bool} add=@code{false}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const mglData &}val, @code{const char *}lbl, @code{bool} add=@code{false}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetTicksVal (@code{char} dir, @code{const mglData &}val, @code{const wchar_t *}lbl, @code{bool} add=@code{false}) +@deftypefnx {Функция С} @code{void} mgl_set_ticks_str (@code{HMGL} gr, @code{char} dir, @code{const char *}lbl, @code{bool} add) +@deftypefnx {Функция С} @code{void} mgl_set_ticks_wcs (@code{HMGL} gr, @code{char} dir, @code{const wchar_t *}lbl, @code{bool} add) +@deftypefnx {Функция С} @code{void} mgl_set_ticks_val (@code{HMGL} gr, @code{char} dir, @code{HCDT} val, @code{const char *}lbl, @code{bool} add) +@deftypefnx {Функция С} @code{void} mgl_set_ticks_valw (@code{HMGL} gr, @code{char} dir, @code{HCDT} val, @code{const wchar_t *}lbl, @code{bool} add) @end ifclear -Задает явное положение @var{val} и подписи @var{lbl} для меток вдоль оси @var{dir}. Если массив @var{val} не указан, то используются значения равнораспределенные в интервале [@var{Min}.x, @var{Max}.x]. Метки разделяются символом @samp{\n}. Используйте @code{SetTicks()} для восстановления автоматических меток. @sref{Manual ticks sample} +Задает явное положение @var{val} и подписи @var{lbl} для меток вдоль оси @var{dir}. Если массив @var{val} не указан, то используются значения равно распределённые в интервале [@var{Min}.x, @var{Max}.x]. Метки разделяются символом @samp{\n}. Используйте @code{SetTicks()} для восстановления автоматических меток. @end deftypefn @deftypefn {MGL command} {} xtick 'templ' @@ -624,45 +619,62 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefnx {MGL command} {} ztick 'templ' @deftypefnx {MGL command} {} ctick 'templ' @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetTickTempl (@code{char} dir, @code{const char *}templ) -@deftypefnx {Method on @code{mglGraph}} @code{void} SetTickTempl (@code{char} dir, @code{const wchar_t *}templ) -@deftypefnx {C function} @code{void} mgl_set_tick_templ (@code{HMGL} gr, @code{const char *}templ) -@deftypefnx {C function} @code{void} mgl_set_tick_templw (@code{HMGL} gr, @code{const wchar_t *}templ) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetTickTempl (@code{char} dir, @code{const char *}templ) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetTickTempl (@code{char} dir, @code{const wchar_t *}templ) +@deftypefnx {Функция С} @code{void} mgl_set_tick_templ (@code{HMGL} gr, @code{const char *}templ) +@deftypefnx {Функция С} @code{void} mgl_set_tick_templw (@code{HMGL} gr, @code{const wchar_t *}templ) @end ifclear -Задает шаблон @var{templ} для меток вдоль x-,y-,z-оси или colorbar. Шаблон может содержать и символы TeX. Если @var{templ}=@code{""}, то используется шаблон по умолчанию (в простейшем случае @samp{%.2g}). Установка шаблона выключает автоматическое улучшение вида меток (См. @code{SetTuneTicks()}). +Задает шаблон @var{templ} для меток вдоль x-,y-,z-оси или colorbar. Шаблон может содержать и символы TeX. Если @var{templ}=@code{""}, то используется шаблон по умолчанию (в простейшем случае @samp{%.2g}). Установка шаблона выключает автоматическое улучшение вида меток. @end deftypefn -@deftypefn {MGL command} {} xtick val 'templ' -@deftypefnx {MGL command} {} ytick val 'templ' -@deftypefnx {MGL command} {} ztick val 'templ' -@deftypefnx {MGL command} {} ctick val 'templ' +@deftypefn {MGL command} {} ticktime 'dir' [@code{dv} 'tmpl'] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetTickTime (@code{char} dir, @code{float} val, @code{const char *}templ) -@deftypefnx {C function} @code{void} mgl_set_tick_time (@code{HMGL} gr, @code{float} val, @code{const char *}templ) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetTicksTime (@code{char} dir, @code{float} val, @code{const char *}templ) +@deftypefnx {Функция С} @code{void} mgl_set_ticks_time (@code{HMGL} gr, @code{float} val, @code{const char *}templ) @end ifclear -Задает метки времени с шагом @var{val} и шаблоном @var{templ} для меток вдоль x-,y-,z-оси или colorbar. Шаблон может содержать и символы TeX. +Задает метки времени с шагом @var{val} и шаблоном @var{templ} для меток вдоль x-,y-,z-оси или colorbar. Шаблон может содержать и символы TeX. Формат шаблона @var{templ} такой же как @url{http://www.manpagez.com/man/3/strftime/}. Наиболее употребительные варианты: @samp{%X} для национального представления времени, @samp{%x} для национального представления даты, @samp{%Y} для года с цифрами столетия. Если @var{val}=0 и/или @var{templ}="", то используется автоматическая расстановка меток и/или выбор шаблона. @end deftypefn +@deftypefn {MGL command} {} tuneticks @code{val} [@code{pos=1.15}] @ifclear UDAV -@deftypefn {Method on @code{mglGraph}} @code{void} SetTuneTicks (@code{bool} tune, @code{float} pos=@code{1.15}) -@deftypefnx {C function} @code{void} mgl_tune_ticks (@code{HMGL} gr, @code{bool} tune, @code{float} pos) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetTuneTicks (@code{int} tune, @code{float} pos=@code{1.15}) +@deftypefnx {Функция С} @code{void} mgl_tune_ticks (@code{HMGL} gr, @code{int} tune, @code{float} pos) +@end ifclear Включает/выключает улучшение вида меток осей путем вынесения общего множителя (для маленьких, типа 0.001...0.002, или больших, типа 1000...2000, значений координат) или общей компоненты (для узкого диапазона, типа 0.999...1.000). Также задает положение @var{pos} общего множителя на оси: =0 около минимального значения, =1 около максимального значения. @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{void} SetTickRotate (@code{bool} val) -@deftypefnx {C function} @code{void} mgl_set_tick_rotate (@code{HMGL} gr, @code{bool} val) +@ifclear UDAV +@deftypefn {Метод класса @code{mglGraph}} @code{void} SetTickRotate (@code{bool} val) +@deftypefnx {Функция С} @code{void} mgl_set_tick_rotate (@code{HMGL} gr, @code{bool} val) Включает/выключает поворот меток если их число или длина меток слишком велики. @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{void} SetTickSkip (@code{bool} val) -@deftypefnx {C function} @code{void} mgl_set_tick_skip (@code{HMGL} gr, @code{bool} val) +@deftypefn {Метод класса @code{mglGraph}} @code{void} SetTickSkip (@code{bool} val) +@deftypefnx {Функция С} @code{void} mgl_set_tick_skip (@code{HMGL} gr, @code{bool} val) Включает/выключает пропуск меток если их число или длина меток слишком велики. @end deftypefn @end ifclear +@anchor{ticklen} +@deftypefn {MGL command} {} ticklen @code{val} [@code{stt=1}] +@ifclear UDAV +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetTickLen (@code{float} val, @code{float} stt=@code{1}) +@deftypefnx {Функция С} @code{void} mgl_set_tick_len (@code{HMGL} gr, @code{float} val, @code{float} stt) +@end ifclear +Задает относительную длину меток осей координат. Значение по умолчанию @code{0.1}. Параметр @var{stt}>0 задает относительную длину подметок, которые в @code{sqrt(1+stt)} раз меньше. +@end deftypefn + +@deftypefn {MGL command} {} axisstl 'stl' ['tck'='' 'sub'=''] +@ifclear UDAV +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetAxisStl (@code{const char *}stl=@code{"k"}, @code{const char *}tck=@code{0}, @code{const char *}sub=@code{0}) +@deftypefnx {Функция С} @code{void} mgl_set_axis_stl (@code{HMGL} gr, @code{const char *}stl, @code{const char *}tck, @code{const char *}sub) +@end ifclear +Задает стиль осей (@var{stl}), меток (@var{tck}) и подметок (@var{sub}) осей координат. Если @var{stl} пустая или ноль, то используется стиль по умолчанию (@samp{k} или @samp{w} в зависимости от типа прозрачности). Если @var{tck}, @var{sub} пустая или ноль, то используется стиль осей (т.е. @var{stl}). +@end deftypefn + @c ################################################################## -@node Transformation matrix, Export picture, Axis settings, MathGL core +@node Subplots and rotation, Export picture, Axis settings, MathGL core @section Матрица преобразования @cindex Aspect @cindex Rotate @@ -678,30 +690,23 @@ Setsize: размер(ы) равны нулю или отрицательны @cindex Push @cindex Pop -Эти функции контролируют где и как график будет расположен. Существует определенный порядок вызова этих функций для лучшего вида графика. Вначале должны вызываться функции SubPlot() или InPlot() для указания местоположения вывода. После них -- функции вращения Rotate() и сжатия Aspect(). И наконец любые другие функции для рисования графика. Вместо вращения графика можно вызвать функцию ColumnPlot() для расположения графиков в столбец одного над другим без зазора между осями. +Эти функции контролируют где и как график будет расположен. Существует определенный порядок вызова этих функций для лучшего вида графика. Вначале должны вызываться функции SubPlot() или InPlot() для указания местоположения вывода. После них -- функции вращения Rotate() и сжатия Aspect(). И наконец любые другие функции для рисования графика. Вместо вращения графика можно вызвать функцию ColumnPlot() для расположения графиков в столбец одного над другим без зазора между осями. @sref{Subplots} @anchor{subplot} -@deftypefn {MGL command} {} subplot @code{nx ny m [dx=0 dy=0]} -@ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SubPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{float} dx=@code{0}, @code{float} dy=@code{0}) -@deftypefnx {C function} @code{void} mgl_subplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m) -@deftypefnx {C function} @code{void} mgl_subplot_d (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{float} dx, @code{float} dy) -@end ifclear -Помещает последующий вывод в @var{m}-ую ячейку сетки размером @var{nx}*@var{ny} от всего рисунка. Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". С эстетической точки зрения не рекомендуется вызывать эту функцию с различными (или не кратными) размерами сетки. Ячейка может быть дополнительно сдвинута относительно своего обычного положения на относительный размер @var{dx}, @var{dy}. -@end deftypefn - -@deftypefn {MGL command} {} subplot @code{nx ny m} 'style' +@deftypefn {MGL command} {} subplot @code{nx ny m ['stl'='<>_^' dx=0 dy=0]} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SubPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{const char *}style) -@deftypefnx {C function} @code{void} mgl_subplot_s (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{const char *}style) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SubPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{const char *}stl=@code{"<>_^"}, @code{float} dx=@code{0}, @code{float} dy=@code{0}) +@deftypefnx {Функция С} @code{void} mgl_subplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{const char *}stl) +@deftypefnx {Функция С} @code{void} mgl_subplot_d (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{const char *}stl, @code{float} dx, @code{float} dy) @end ifclear -Аналогично предыдущему, но место для осей/colorbar резервируется только если строка @var{style} содержит: @samp{L} или @samp{<} -- с левого края, @samp{R} или @samp{>} -- с правого края, @samp{A} или @samp{^} -- с верхнего края, @samp{U} или @samp{_} -- с нижнего края. +Помещает последующий вывод в @var{m}-ую ячейку сетки размером @var{nx}*@var{ny} от всего рисунка. Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". С эстетической точки зрения не рекомендуется вызывать эту функцию с различными (или не кратными) размерами сетки. Место для осей/colorbar резервируется только если строка @var{style} содержит: @samp{L} или @samp{<} -- с левого края, @samp{R} или @samp{>} -- с правого края, @samp{A} или @samp{^} -- с верхнего края, @samp{U} или @samp{_} -- с нижнего края. Ячейка может быть дополнительно сдвинута относительно своего обычного положения на относительный размер @var{dx}, @var{dy}. @end deftypefn +@anchor{multiplot} @deftypefn {MGL command} {} multiplot @code{nx ny m dx dy} ['style'='<>_^'] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} MultiPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{int} dx, @code{int} dy, @code{const char *}style=@code{"<>_^"}) -@deftypefnx {C function} @code{void} mgl_multiplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{int} dx, @code{int} dy, @code{const char *}style) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} MultiPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{int} dx, @code{int} dy, @code{const char *}stl=@code{"<>_^"}) +@deftypefnx {Функция С} @code{void} mgl_multiplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{int} dx, @code{int} dy, @code{const char *}stl) @end ifclear Помещает последующий вывод в прямоугольник из @var{dx}*@var{dy} ячеек, начиная с @var{m}-ой ячейки, сетки размером @var{nx}*@var{ny} от всего рисунка. Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". Место для осей/colorbar резервируется если строка @var{style} содержит: @samp{L} или @samp{<} -- с левого края, @samp{R} или @samp{>} -- с правого края, @samp{A} или @samp{^} -- с верхнего края, @samp{U} или @samp{_} -- с нижнего края. @end deftypefn @@ -709,40 +714,50 @@ Setsize: размер(ы) равны нулю или отрицательны @anchor{inplot} @deftypefn {MGL command} {} inplot @code{x1 x2 y1 y2 [rel=off]} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} InPlot (@code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{bool} rel=@code{false}) -@deftypefnx {C function} @code{void} mgl_inplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2) -@deftypefnx {C function} @code{void} mgl_relplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} InPlot (@code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{bool} rel=@code{false}) +@deftypefnx {Функция С} @code{void} mgl_inplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2) +@deftypefnx {Функция С} @code{void} mgl_relplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2) @end ifclear -Помещает последующий вывод в прямоугольную область [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}] (исходный размер [0,1]*[0,1]). Эта функция позволяет поместить график в произвольную область рисунка. Если параметр @var{rel}=@code{true}, то используется позиция относительно текщего SubPlot() (или InPlot() с @var{rel}=@code{false}). Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". +Помещает последующий вывод в прямоугольную область [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}] (исходный размер [0,1]*[0,1]). Эта функция позволяет поместить график в произвольную область рисунка. Если параметр @var{rel}=@code{true}, то используется позиция относительно текущего SubPlot() (или InPlot() с @var{rel}=@code{false}). Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". @end deftypefn @anchor{columnplot} @deftypefn {MGL command} {} columnplot @code{num ind [d=0]} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} ColumnPlot (@code{int} num, @code{int} ind, @code{float} d=@code{0}) -@deftypefnx {C function} @code{void} mgl_columnplot (@code{HMGL} gr, @code{int} num, @code{int} ind) -@deftypefnx {C function} @code{void} mgl_columnplot_d (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{float} d) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} ColumnPlot (@code{int} num, @code{int} ind, @code{float} d=@code{0}) +@deftypefnx {Функция С} @code{void} mgl_columnplot (@code{HMGL} gr, @code{int} num, @code{int} ind) +@deftypefnx {Функция С} @code{void} mgl_columnplot_d (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{float} d) +@end ifclear +Помещает последующий вывод в @var{ind}-ую строку столбца из @var{num} строк. Положение столбца выбирается относительно последнего вызова SubPlot() (или InPlot() с @var{rel}=@code{false}). Параметр @var{d} задает дополнительный зазор между строк. +@end deftypefn + +@anchor{gridplot} +@deftypefn {MGL command} {} gridplot @code{nx ny ind [d=0]} +@ifclear UDAV +@deftypefnx {Метод класса @code{mglGraph}} @code{void} GridPlot (@code{int} nx, @code{int} ny, @code{int} ind, @code{float} d=@code{0}) +@deftypefnx {Функция С} @code{void} mgl_gridplot (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} ind) +@deftypefnx {Функция С} @code{void} mgl_gridplot_d (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} ind, @code{float} d) @end ifclear -Помещает последующий вывод в @var{ind}-ую строку столбца из @var{num} строк. Положение столбца выбирается относительно последнего вызова SubPlot() (или InPlot() с @var{rel}=@code{false}). Параметр @var{d} задает дополнительный зазор между строк. @sref{ColumnPlot sample} +Помещает последующий вывод в @var{ind}-ую ячейку таблицы @var{nx}*@var{ny}. Положение ячейки выбирается относительно последнего вызова SubPlot() (или InPlot() с @var{rel}=@code{false}). Параметр @var{d} задает дополнительный зазор между строк. @end deftypefn @anchor{stickplot} @deftypefn {MGL command} {} stickplot @code{num ind tet phi} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} StickPlot (@code{int} num, @code{int} ind, @code{float} tet, @code{float} phi) -@deftypefnx {C function} @code{void} mgl_stickplot (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{float} tet, @code{float} phi) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} StickPlot (@code{int} num, @code{int} ind, @code{float} tet, @code{float} phi) +@deftypefnx {Функция С} @code{void} mgl_stickplot (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{float} tet, @code{float} phi) @end ifclear -Помещает последующий вывод в @var{ind}-ую ячейку "бруска" из @var{num} ячеек. При этом сам брусок повернут на углы @var{tet}, @var{phi}. Положение выбирается относительно последнего вызова SubPlot() (или InPlot() с @var{rel}=@code{false}). @sref{StickPlot sample} +Помещает последующий вывод в @var{ind}-ую ячейку "бруска" из @var{num} ячеек. При этом сам брусок повернут на углы @var{tet}, @var{phi}. Положение выбирается относительно последнего вызова SubPlot() (или InPlot() с @var{rel}=@code{false}). @end deftypefn @anchor{title} -@deftypefn {MGL command} {} title 'txt' ['stl'='#' @code{size=-2}] +@deftypefn {MGL command} {} title 'title' ['stl'='' @code{size=-2}] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Title (@code{const char *}txt, @code{const char *}stl=@code{"#"}, @code{float} size=@code{-2}) -@deftypefnx {Method on @code{mglGraph}} @code{void} Title (@code{const wchar_t *}txt, @code{const char *}stl=@code{"#"}, @code{float} size=@code{-2}) -@deftypefnx {C function} @code{void} mgl_title(@code{HMGL} gr, @code{const char *}txt, @code{const char *}stl, @code{float} size) -@deftypefnx {C function} @code{void} mgl_titlew (@code{HMGL} gr, @code{const wchar_t *}txt, @code{const char *}stl, @code{float} size) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Title (@code{const char *}txt, @code{const char *}stl=@code{""}, @code{float} size=@code{-2}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Title (@code{const wchar_t *}txt, @code{const char *}stl=@code{""}, @code{float} size=@code{-2}) +@deftypefnx {Функция С} @code{void} mgl_title (@code{HMGL} gr, @code{const char *}txt, @code{const char *}stl, @code{float} size) +@deftypefnx {Функция С} @code{void} mgl_titlew (@code{HMGL} gr, @code{const wchar_t *}txt, @code{const char *}stl, @code{float} size) @end ifclear Выводит заголовок @var{title} для текущего "подграфика" шрифтом @var{stl} с размером @var{size}. Если строка @var{stl} содержит @samp{#}, то рисуется обрамляющий прямоугольник. Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться сразу после создания "подграфика". @end deftypefn @@ -750,16 +765,16 @@ Setsize: размер(ы) равны нулю или отрицательны @anchor{rotate} @deftypefn {MGL command} {} rotate @code{tetz tetx [tety=0]} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Rotate (@code{float} TetX, @code{float} TetZ, @code{float} TetY=@code{0}) -@deftypefnx {C function} @code{void} mgl_rotate (@code{HMGL} gr, @code{float} TetX, @code{float} TetZ, @code{float} TetY) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Rotate (@code{float} TetX, @code{float} TetZ, @code{float} TetY=@code{0}) +@deftypefnx {Функция С} @code{void} mgl_rotate (@code{HMGL} gr, @code{float} TetX, @code{float} TetZ, @code{float} TetY) @end ifclear Вращает систему координат относительно осей @{x, z, y@} последовательно на углы @var{TetX}, @var{TetZ}, @var{TetY}. @end deftypefn @deftypefn {MGL command} {} rotate @code{tet x y z} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} RotateN (@code{float} Tet, @code{float} x, @code{float} y, @code{float} z) -@deftypefnx {C function} @code{void} mgl_rotate_vector (@code{HMGL} gr, @code{float Tet}, @code{float x}, @code{float y}, @code{float z}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} RotateN (@code{float} Tet, @code{float} x, @code{float} y, @code{float} z) +@deftypefnx {Функция С} @code{void} mgl_rotate_vector (@code{HMGL} gr, @code{float Tet}, @code{float x}, @code{float y}, @code{float z}) @end ifclear Вращает систему координат относительно вектора @{@var{x}, @var{y}, @var{z}@} на угол @var{Tet}. @end deftypefn @@ -767,8 +782,8 @@ Setsize: размер(ы) равны нулю или отрицательны @anchor{aspect} @deftypefn {MGL command} {} aspect @code{ax ay [az=1]} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Aspect (@code{float} Ax, @code{float} Ay, @code{float} Az) -@deftypefnx {C function} @code{void} mgl_aspect (@code{HMGL} gr, @code{float} Ax, @code{float} Ay, @code{float} Az) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Aspect (@code{float} Ax, @code{float} Ay, @code{float} Az=@code{1}) +@deftypefnx {Функция С} @code{void} mgl_aspect (@code{HMGL} gr, @code{float} Ax, @code{float} Ay, @code{float} Az) @end ifclear Устанавливает соотношение размеров осей в отношении @var{Ax:Ay:Az}. Для лучшего вида следует вызывать после функции Rotate(). @end deftypefn @@ -776,32 +791,46 @@ Setsize: размер(ы) равны нулю или отрицательны @anchor{perspective} @deftypefn {MGL command} {} perspective @code{val} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Perspective (@code{float} a) -@deftypefnx {C function} @code{void} mgl_perspective (@code{HMGL} gr, @code{float} a) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Perspective (@code{float} a) +@deftypefnx {Функция С} @code{void} mgl_perspective (@code{HMGL} gr, @code{float} a) @end ifclear Добавляет (включает) перспективу для графика. Параметр @math{a ~ 1/z_@{eff@} \in [0,1)}. По умолчанию (@code{a=0}) перспектива отключена. @end deftypefn @ifclear UDAV -@deftypefn {Method on @code{mglGraph}} @code{void} View (@code{float} TetX, @code{float} TetZ, @code{float} TetY=@code{0}) -@deftypefnx {C function} @code{void} mgl_view (@code{HMGL} gr, @code{float} TetX, @code{float} TetZ, @code{float} TetY) -Вращает систему координат относительно осей @{x, z, y@} последовательно на углы @var{TetX}, @var{TetZ}, @var{TetY}. Вращение происходит независимо от @code{Rotate()}. -@end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{void} Push () -@deftypefnx {C function} @code{void} mgl_mat_push (@code{HMGL} gr) +@deftypefn {Метод класса @code{mglGraph}} @code{void} Push () +@deftypefnx {Функция С} @code{void} mgl_mat_push (@code{HMGL} gr) Помещает матрицу преобразования в стек. Позднее вы можете восстановить текущее состояние с помощью функции Pop(). Стек может содержать до 10 матриц. @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{void} Pop () -@deftypefnx {C function} @code{void} mgl_mat_pop (@code{HMGL} gr) +@deftypefn {Метод класса @code{mglGraph}} @code{void} Pop () +@deftypefnx {Функция С} @code{void} mgl_mat_pop (@code{HMGL} gr) Заменяет (восстанавливает) матрицу преобразования на последнюю помещенную в стек матрицу. @end deftypefn + +@deftypefn {Метод класса @code{mglGraph}} @code{void} SetPlotFactor (@code{float} val) +@deftypefnx {Функция С} @code{void} mgl_set_plotfactor (@code{HMGL} gr, @code{float} val) +Задает масштаб картинки. Не рекомендуется устанавливать значения меньше 1.5. Это аналог функции Zoom(), но применяется только к конкретному подграфику. Используйте ноль для включения автоматического масштабирования. +@end deftypefn + +Также есть 2 функции, которые управляют масштабированием @code{Zoom()} и вращением @code{View()} всего рисунка. Т.е. они действуют как ещё одна матрица трансформации. Они были введены для вращения/приближения графика с помощью мыши. + +@deftypefn {Метод класса @code{mglGraph}} @code{void} View (@code{float} TetX, @code{float} TetZ, @code{float} TetY=@code{0}) +@deftypefnx {Функция С} @code{void} mgl_view (@code{HMGL} gr, @code{float} TetX, @code{float} TetZ, @code{float} TetY) +Вращает систему координат относительно осей @{x, z, y@} последовательно на углы @var{TetX}, @var{TetZ}, @var{TetY}. Вращение происходит независимо от @code{Rotate()}. +@end deftypefn + +@deftypefn {Метод класса @code{mglGraph}} @code{void} Zoom (@code{float} x1, @code{float} y1, @code{float} x2, @code{float} y2) +@deftypefnx {Функция С} @code{void} mgl_set_zoom (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} x2, @code{float} y2) +Масштабирует весь рисунок. После вызова функции текущий график будет очищен и в дальнейшем рисунок будет содержать только область [x1,x2]*[y1,y2] от исходного рисунка. Координаты @var{x1}, @var{x2}, @var{y1}, @var{y2} меняются в диапазоне от 0 до 1. Внимание! эти настройки не могут быть переписаны никакими другими функциями. Используйте @code{Zoom(0,0,1,1)} для перехода в масштаб по умолчанию. +@end deftypefn + @end ifclear @c ################################################################## -@node Export picture, Primitives drawing, Transformation matrix, MathGL core +@node Export picture, Primitives, Subplots and rotation, MathGL core @section Экспорт рисунка @cindex SetSize @@ -810,8 +839,8 @@ Setsize: размер(ы) равны нулю или отрицательны @anchor{setsize} @deftypefn {MGL command} {} setsize @code{w h} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetSize (@code{int} width, @code{int} height) -@deftypefnx {C function} @code{void} mgl_set_size (@code{HMGL} gr, @code{int} width, @code{int} height) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetSize (@code{int} width, @code{int} height) +@deftypefnx {Функция С} @code{void} mgl_set_size (@code{HMGL} gr, @code{int} width, @code{int} height) @end ifclear Изменяет размер картинки в пикселях. Функция должна вызываться @strong{перед} любыми функциями построения потому что полностью очищает содержимое рисунка. @end deftypefn @@ -819,20 +848,20 @@ Setsize: размер(ы) равны нулю или отрицательны @anchor{quality} @deftypefn {MGL command} {} quality @code{val} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetQuality (@code{int} val=@code{MGL_DRAW_NORM}) -@deftypefnx {C function} @code{void} mgl_set_quality (@code{HMGL} gr, @code{int} val) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetQuality (@code{int} val=@code{MGL_DRAW_NORM}) +@deftypefnx {Функция С} @code{void} mgl_set_quality (@code{HMGL} gr, @code{int} val) @end ifclear Задает качество графика в зависимости от значения @var{val}: @code{MGL_DRAW_WIRE=0} -- нет рисования граней (наиболее быстрый), @code{MGL_DRAW_FAST=1} -- нет интерполяции цвета (быстрый), @code{MGL_DRAW_NORM=2} -- высокое качество (нормальный). Если установлен бит @code{MGL_DRAW_LMEM=0x4}, то происходит прямое рисование в растровое изображение (меньше затраты памяти). @end deftypefn @ifclear UDAV -@deftypefn {Method on @code{mglGraph}} @code{void} StartGroup (const char *name) -@deftypefnx {C function} @code{void} mgl_start_group (@code{HMGL} gr, @code{const char *}name) +@deftypefn {Метод класса @code{mglGraph}} @code{void} StartGroup (const char *name) +@deftypefnx {Функция С} @code{void} mgl_start_group (@code{HMGL} gr, @code{const char *}name) Начинает определение группы. Группа может содержать объекты и другие группы. Они используются для выбора части модели при приближении, изменении прозрачности и т.д. @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{void} EndGroup () -@deftypefnx {C function} @code{void} mgl_end_group (@code{HMGL} gr) +@deftypefn {Метод класса @code{mglGraph}} @code{void} EndGroup () +@deftypefnx {Функция С} @code{void} mgl_end_group (@code{HMGL} gr) Завершает определение группы. @end deftypefn @end ifclear @@ -865,13 +894,13 @@ Setsize: размер(ы) равны нулю или отрицательны @cindex ShowImage @end ifclear -Эти функции экспортируют текущую картинку (кадр) в файл. Имя файла @var{fname} должно иметь соответствующее расширение. Параметр @var{descr} дает краткое описание картинки. Пока прозрачность поддерживается только для форматов PNG, SVG и IDTF. +Эти функции экспортируют текущую картинку (кадр) в файл. Имя файла @var{fname} должно иметь соответствующее расширение. Параметр @var{descr} дает краткое описание картинки. Пока прозрачность поддерживается только для форматов PNG, SVG, OBJ и IDTF. @anchor{write} -@deftypefn {MGL command} {} write 'fname' +@deftypefn {MGL command} {} write ['fname'=''] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} WriteFrame (@code{const char *}fname=@code{""}, @code{const char *}descr=@code{""}) -@deftypefnx {C function} @code{void} mgl_write_frame (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} WriteFrame (@code{const char *}fname=@code{""}, @code{const char *}descr=@code{""}) +@deftypefnx {Функция С} @code{void} mgl_write_frame (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) @end ifclear Экспортирует текущий кадр в файл @var{fname} с типом, определяемым по расширению. Параметр @var{descr} добавляет описание (может быть пустым). Если @var{fname} пустой, то используется имя @samp{frame####.jpg}, где @samp{####} -- текущий номер кадра и имя @samp{frame} определяется переменной @var{PlotId}. @end deftypefn @@ -921,14 +950,36 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteTEX (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_tex (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) -Экспортирует текущий кадр в LaTeX файл (пакет Tikz/PGF), используя векторное представление графика (класс mglGraphPS). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. +Экспортирует текущий кадр в LaTeX файл (пакет Tikz/PGF), используя векторное представление графика. Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteOBJ (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_obj (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) -Экспортирует текущий кадр в OBJ/MTL файл, используя векторное представление графика (класс mglGraphPS). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. +Экспортирует текущий кадр в OBJ/MTL файл, используя векторное представление графика (см. @url{http://en.wikipedia.org/wiki/Wavefront_.obj_file, OBJ формат}). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. +@end deftypefn + + +@deftypefn {Метод класса @code{mglGraph}} @code{void} WriteXYZ (@code{const char *}fname, @code{const char *}descr=@code{""}) +@deftypefnx {Функция С} @code{void} mgl_write_xyz (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) +Экспортирует текущий кадр в XYZ/XYZL/XYZF файлы, используя векторное представление графика (см. @url{http://people.sc.fsu.edu/~jburkardt/data/xyz/xyz.html, XYZ формат}). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. +@end deftypefn + +@deftypefn {Метод класса @code{mglGraph}} @code{void} WriteSTL (@code{const char *}fname, @code{const char *}descr=@code{""}) +@deftypefnx {Функция С} @code{void} mgl_write_stl (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) +Экспортирует текущий кадр в STL файл, используя векторное представление графика (см. @url{http://en.wikipedia.org/wiki/STL_(file_format), STL формат}). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. +@end deftypefn + +@deftypefn {Метод класса @code{mglGraph}} @code{void} WriteOFF (@code{const char *}fname, @code{const char *}descr=@code{""}, @code{bool} colored=@code{false}) +@deftypefnx {Функция С} @code{void} mgl_write_off (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr, @code{bool} colored) +Экспортирует текущий кадр в OFF файл, используя векторное представление графика (см. @url{http://people.sc.fsu.edu/~jburkardt/data/off/off.html, OFF формат}). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. @end deftypefn +@c @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteX3D (@code{const char *}fname, @code{const char *}descr=@code{""}) +@c @deftypefnx {Функция С} @code{void} mgl_write_x3d (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) +@c Экспортирует текущий кадр в X3D файл, используя векторное представление графика (см. @url{http://en.wikipedia.org/wiki/X3d, X3D формат}). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. +@c @end deftypefn + + @deftypefn {Метод класса @code{mglGraph}} @code{void} WriteIDTF (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_idtf (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) Экспортирует текущий кадр в IDTF файл, используя векторное представление графика (класс mglGraphIDTF). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. @@ -939,6 +990,17 @@ Setsize: размер(ы) равны нулю или отрицательны Отображает текущий кадр используя внешнюю программу просмотра @var{viewer}. Функция сохраняет картинку во временный файл и вызывает @var{viewer} для его отображения. Если @var{nowait}=@code{true}, то функция возвращает управление немедленно -- не ждет пока окно просмотра будет закрыто. @end deftypefn + +@deftypefn {Method on @code{mglGraph}} @code{void} ExportMGLD (@code{const char *}fname, @code{const char *}descr=@code{""}) +@deftypefnx {C function} @code{void} mgl_export_mgld (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) +Экспортирует точки и примитивы в файл MGLD формата. В дальнейшем этот файл можно загрузить и просмотреть с помощью @code{mglview}. Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. +@end deftypefn + +@deftypefn {Method on @code{mglGraph}} @code{void} ImportMGLD (@code{const char *}fname, @code{bool} add=@code{false}) +@deftypefnx {C function} @code{void} mgl_import_mgld (@code{HMGL} gr, @code{const char *}fname, @code{int} add) +Импортирует точки и примитивы из файла в формате MGLD. Параметры функции следующие: @var{fname} -- имя файла, @var{add} -- флаг добавления или замены существующих точек и примитивов. +@end deftypefn + @end ifclear @@ -947,7 +1009,7 @@ Setsize: размер(ы) равны нулю или отрицательны @subsection Кадры/Анимация @ifset UDAV -В MGL нет специальных комманд для создания анимации. Однако можно воспользоваться возможностями утилит (@pxref{Utilities}). Например, используя комментарии спеиального вида @samp{##a } или @samp{##c }. +В MGL нет специальных команд для создания анимации. Однако можно воспользоваться возможностями утилит (см. @ref{Utilities}). Например, используя комментарии спеиального вида @samp{##a } или @samp{##c }. @end ifset @ifclear UDAV @@ -958,7 +1020,7 @@ Setsize: размер(ы) равны нулю или отрицательны @cindex StartGIF @cindex CloseGIF -Эти функции позволяют создавать несколько картинок одновременно. В большинстве случаев это бесполезно, но для органов управления (@pxref{Widget classes}) это позволяет показывать анимацию. Также можно записать несколько кадров в анимированный GIF файл. +Эти функции позволяют создавать несколько картинок одновременно. В большинстве случаев это бесполезно, но для органов управления (см. @ref{Widget classes}) это позволяет показывать анимацию. Также можно записать несколько кадров в анимированный GIF файл. @deftypefn {Метод класса @code{mglGraph}} @code{int} NewFrame () @deftypefnx {Функция С} @code{int} mgl_new_frame (@code{HMGL} gr) @@ -998,8 +1060,9 @@ Setsize: размер(ы) равны нулю или отрицательны @ifclear UDAV Эти функции возвращают созданный растровый рисунок, его ширину и высоту. В дальнейшем его можно использовать в любой графической библиотеке (см. также, @ref{Widget classes}) или сохранить в файл (см. также, @ref{Export to file}). -@deftypefn {Метод класса @code{mglGraph}} @code{void} GetRGB (@code{char *}buf, @code{int} size) -@deftypefnx {Метод класса @code{mglGraph}} @code{void} GetBGRN (@code{char *}buf, @code{int} size) +@deftypefn {Method on @code{mglGraph}} @code{const unsigned char *} GetRGB () +@deftypefnx {Method on @code{mglGraph}} @code{void} GetRGB (@code{char *}buf, @code{int} size) +@deftypefnx {Method on @code{mglGraph}} @code{void} GetBGRN (@code{char *}buf, @code{int} size) @deftypefnx {C function} @code{const unsigned char *} mgl_get_rgb (@code{HMGL} gr) Возвращает растровое изображение в формате RGB для текущего кадра. Формат каждого элемента (пикселя): @{red, green, blue@}. Число элементов Width*Height. Положение элемента @{i,j@} есть [3*i + 3*Width*j] (или [4*i + 4*Width*j] для @code{GetBGRN()}). В Python вы должны предоставить буфер @var{buf} достаточного размера @var{size}, т.е. код должен выглядеть следующим образом @verbatim @@ -1011,44 +1074,50 @@ gr.GetBGRN(bits, len(bits)); @end verbatim @end deftypefn -@deftypefn {Метод класса @code{mglGraph}} @code{void} GetRGBA (@code{char *}buf, @code{int} size) +@deftypefn {Method on @code{mglGraph}} @code{const unsigned char *} GetRGBA () +@deftypefnx {Method on @code{mglGraph}} @code{void} GetRGBA (@code{char *}buf, @code{int} size) @deftypefnx {C function} @code{const unsigned char *} mgl_get_rgba (@code{HMGL} gr) Возвращает растровое изображение в формате RGBA для текущего кадра. Формат каждого элемента (пикселя): @{red, green, blue, alpha@}. Число элементов Width*Height. Положение элемента @{i,j@} есть [4*i + 4*Width*j]. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{int} GetWidth () @deftypefnx {Метод класса @code{mglGraph}} @code{int} GetHeight () -@deftypefnx {C function} @code{int} mgl_get_width (@code{HMGL} gr) -@deftypefnx {C function} @code{int} mgl_get_height (@code{HMGL} gr) +@deftypefnx {Функция С} @code{int} mgl_get_width (@code{HMGL} gr) +@deftypefnx {Функция С} @code{int} mgl_get_height (@code{HMGL} gr) Возвращает ширину и высоту изображения. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{mglPoint} CalcXYZ (@code{int} xs, @code{int} ys) -@deftypefnx {C function} @code{void} mgl_calc_xyz (@code{HMGL} gr, @code{int} xs, @code{int} ys, @code{float *}x, @code{float *}y, @code{float *}z) -Вычисляет 3D координаты @{x,y,z@} для экранной точки @{xs,ys@}. В данный момент игнорируется перспектива графика и формулы перехода в криволинейные координаты. Вычисления производятся для последнего использованного InPlot (@pxref{Transformation matrix}). +@deftypefnx {Функция С} @code{void} mgl_calc_xyz (@code{HMGL} gr, @code{int} xs, @code{int} ys, @code{float *}x, @code{float *}y, @code{float *}z) +Вычисляет 3D координаты @{x,y,z@} для экранной точки @{xs,ys@}. В данный момент игнорируется перспектива графика и формулы перехода в криволинейные координаты. Вычисления производятся для последнего использованного InPlot (см. @ref{Transformation matrix}). @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{mglPoint} CalcScr (@code{mglPoint} p) -@deftypefnx {C function} @code{void} mgl_calc_scr (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{int *}xs, @code{int *}ys) -Вычисляет экранные координаты @{xs,ys@} для 3D координат @{x,y,z@}. Вычисления производятся для последнего использованного InPlot (@pxref{Transformation matrix}). +@deftypefnx {Функция С} @code{void} mgl_calc_scr (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{int *}xs, @code{int *}ys) +Вычисляет экранные координаты @{xs,ys@} для 3D координат @{x,y,z@}. Вычисления производятся для последнего использованного InPlot (см. @ref{Transformation matrix}). @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{void} SetObjId (@code{int} id) -@deftypefnx {C function} @code{void} mgl_set_obj_id (@code{HMGL} gr, @code{int} id) +@deftypefn {Метод класса @code{mglGraph}} @code{void} SetObjId (@code{int} id) +@deftypefnx {Функция С} @code{void} mgl_set_obj_id (@code{HMGL} gr, @code{int} id) Задает числовой идентификатор для объектов или "подграфиков". @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{int} GetObjId (@code{long} xs, @code{long} ys) -@deftypefnx {C function} @code{int} mgl_get_obj_id (@code{HMGL} gr, @code{long} xs, @code{long} ys) +@deftypefn {Метод класса @code{mglGraph}} @code{int} GetObjId (@code{long} xs, @code{long} ys) +@deftypefnx {Функция С} @code{int} mgl_get_obj_id (@code{HMGL} gr, @code{long} xs, @code{long} ys) Возвращает числовой идентификатор верхнего объекта в точке @{xs, ys@} рисунка. @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{int} GetSplId (@code{long} xs, @code{long} ys) -@deftypefnx {C function} @code{int} mgl_get_spl_id (@code{HMGL} gr, @code{long} xs, @code{long} ys) +@deftypefn {Метод класса @code{mglGraph}} @code{int} GetSplId (@code{long} xs, @code{long} ys) +@deftypefnx {Функция С} @code{int} mgl_get_spl_id (@code{HMGL} gr, @code{long} xs, @code{long} ys) Возвращает числовой идентификатор верхнего "подграфика" в точке @{xs, ys@} рисунка. @end deftypefn +@deftypefn {Method on @code{mglGraph}} @code{void} Highlight (@code{int} id) +@deftypefnx {C function} @code{void} mgl_highlight (@code{HMGL} gr, @code{int} id) +Выделяет объект с заданным @var{id}. +@end deftypefn + @end ifclear @c ------------------------------------------------------------------ @@ -1062,47 +1131,39 @@ gr.GetBGRN(bits, len(bits)); @cindex MPI_Send @cindex MPI_Recv -There are few functions which allow parallelization at user-level. First 2 limit the drawing region (for example, by subplot per thread) and copy data from that region in another @code{mglGraph} instance. +Многие функции MathGL используют несколько потоков для ускорения работы (если MathGL была собрана с поддержкой pthread). При этом можно настраивать число используемых потоков. -@deftypefn {Method on @code{mglGraph}} @code{int} SetDrawReg (@code{int} nx, @code{int} ny, @code{int} m) -@deftypefnx {C function} @code{int} mgl_set_draw_reg (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m) -Set drawable region as a @var{m}-th cell of @var{nx}*@var{ny} grid of the whole frame area. +@deftypefn {C function} @code{int} mgl_set_num_thr (@code{int} n) +Задает число потоков, которое будет использовано в MathGL. При @var{n}<1 число потоков задается как максимальное число процессоров (ядер) в системе. При @var{n}=1 не используется распараллеливание. @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{int} PutDrawReg (@code{int} nx, @code{int} ny, @code{int} m, @code{const mglGraph *}g) -@deftypefnx {C function} @code{int} mgl_put_draw_reg (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{HMGL} g) -Put drawing from another instance @var{g} for a @var{m}-th cell of @var{nx}*@var{ny} grid of the whole frame area. The width and height of both instances must be the same. -@end deftypefn - -Another option is combining bitmap image (taking into account Z-ordering) from different instances. This method is most appropriate for computer clusters when the data size is so large that it exceed the memory of single computer node. +Другая возможность -- комбинирование изображений из разных объектов @code{mglGraph}. Эти методы наиболее подходят для компьютерных кластеров, когда данные настолько велики, что не могут поместиться в памяти отдельного компьютера. -@deftypefn {Method on @code{mglGraph}} @code{int} Combine (@code{const mglGraph *}g) -@deftypefnx {C function} @code{int} mgl_combine_gr (@code{HMGL} gr, @code{HMGL} g) -Combine drawing from instance @var{g} with @var{gr} (or with this) taking into account Z-ordering of pixels. The width and height of both instances must be the same. +@deftypefn {Метод класса @code{mglGraph}} @code{int} Combine (@code{const mglGraph *}g) +@deftypefnx {Функция С} @code{int} mgl_combine_gr (@code{HMGL} gr, @code{HMGL} g) +Комбинирует (добавляет) рисунок из @var{g} с @var{gr}, принимая во внимание ``высоту'' пикселей. Ширина и высота обоих рисунков должна быть одинаковы. @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{int} MPI_Send (@code{int} id) -@deftypefnx {C function} @code{int} mgl_mpi_send (@code{HMGL} gr, @code{int} id) -Send graphical information from node @var{id} using MPI. The width and height in both nodes must be the same. +@deftypefn {Метод класса @code{mglGraph}} @code{int} MPI_Send (@code{int} id) +@deftypefnx {Функция С} @code{int} mgl_mpi_send (@code{HMGL} gr, @code{int} id) +Посылает рисунок из компьютера (ноды) @var{id}, используя MPI. Ширина и высота обоих рисунков должна быть одинаковы. @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{int} MPI_Recv (@code{int} id) -@deftypefnx {C function} @code{int} mgl_mpi_send (@code{HMGL} gr, @code{int} id) -Receive graphical information from node @var{id} using MPI. The width and height in both nodes must be the same. +@deftypefn {Метод класса @code{mglGraph}} @code{int} MPI_Recv (@code{int} id) +@deftypefnx {Функция С} @code{int} mgl_mpi_send (@code{HMGL} gr, @code{int} id) +Принимает рисунок из компьютера (ноды) @var{id}, используя MPI. Ширина и высота обоих рисунков должна быть одинаковы. @end deftypefn @end ifclear @c ################################################################## -@node Primitives drawing, Text printing, Export picture, MathGL core +@node Primitives, Text printing, Export picture, MathGL core @section Рисование примитивов @cindex Ball @cindex Clf @cindex Line @cindex Curve @cindex Glyph -@cindex Mark -@cindex Error @cindex Face @cindex FaceX @cindex FaceY @@ -1111,34 +1172,40 @@ Receive graphical information from node @var{id} using MPI. The width and height @cindex Drop @cindex Sphere +@ifclear UDAV +@cindex Mark +@cindex Error +@end ifclear + Эти функции рисуют рисуют простые объекты типа линий, точек, сфер, капель, конусов, и т.д. @anchor{clf} @deftypefn {MGL command} {} clf @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Clf () -@deftypefnx {Method on @code{mglGraph}} @code{void} Clf (@code{float} r, @code{float} g, @code{float} b) -@deftypefnx {C function} @code{void} mgl_clf (@code{HMGL} gr) -@deftypefnx {C function} @code{void} mgl_clf_rgb (@code{HMGL} gr, @code{float} r, @code{float} g, @code{float} b) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Clf () +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Clf (@code{float} r, @code{float} g, @code{float} b) +@deftypefnx {Функция С} @code{void} mgl_clf (@code{HMGL} gr) +@deftypefnx {Функция С} @code{void} mgl_clf_rgb (@code{HMGL} gr, @code{float} r, @code{float} g, @code{float} b) @end ifclear -Очищает рисунок и заполняет его цветом @var{Back}. +Очищает рисунок и заполняет его заданным цветом. @end deftypefn @anchor{ball} @deftypefn {MGL command} {} ball @code{x y} ['col'='r.'] @deftypefnx {MGL command} {} ball @code{x y z} ['col'='r.'] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Ball (@code{mglPoint} p, @code{char} col=@code{'r'}) -@deftypefnx {Method on @code{mglGraph}} @code{void} Mark (@code{mglPoint} p, @code{const char *}mark) -@deftypefnx {C function} @code{void} mgl_ball (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z) -@deftypefnx {C function} @code{void} mgl_mark (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{const char *}mark) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Ball (@code{mglPoint} p, @code{char} col=@code{'r'}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Mark (@code{mglPoint} p, @code{const char *}mark) +@deftypefnx {Функция С} @code{void} mgl_ball (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z) +@deftypefnx {Функция С} @code{void} mgl_mark (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{const char *}mark) @end ifclear Рисует маркер (точку по умолчанию) с координатами @var{p}=@{@var{x}, @var{y}, @var{z}@} и цветом @var{col}. @end deftypefn @ifclear UDAV -@deftypefn {Метод класса @code{mglGraph}} @code{void} Error (@code{mglPoint} p, @code{mglPoint} e, @code{char} *pen=@code{""}) -Рисует 3d error box в точке @var{p} размером @var{e} и стилем @var{pen}. +@deftypefn {Method on @code{mglGraph}} @code{void} Error (@code{mglPoint} p, @code{mglPoint} e, @code{char} *stl=@code{""}) +@deftypefnx {C function} @code{void} mgl_error_box (@code{HMGL} gr, @code{float} px, @code{float} py, @code{float} pz, @code{float} ex, @code{float} ey, @code{float} ez, @code{char *}stl) +Рисует 3d error box в точке @var{p} размером @var{e} и стилем @var{stl}. @end deftypefn @end ifclear @@ -1146,8 +1213,8 @@ Receive graphical information from node @var{id} using MPI. The width and height @deftypefn {MGL command} {} line @code{x1 y1 x2 y2} ['stl'=''] @deftypefnx {MGL command} {} line @code{x1 y1 z1 x2 y2 z2} ['stl'=''] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Line (@code{mglPoint} p1, @code{mglPoint} p2, @code{char *}stl=@code{"B"}, @code{int}num=@code{2}) -@deftypefnx {C function} @code{void} mgl_line (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{char *}stl, @code{int}num) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Line (@code{mglPoint} p1, @code{mglPoint} p2, @code{char *}stl=@code{"B"}, @code{int}num=@code{2}) +@deftypefnx {Функция С} @code{void} mgl_line (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{char *}stl, @code{int}num) @end ifclear Рисует геодезическую линию (декартовых координатах -- прямую) из точки @var{p1} в @var{p2} использую стиль линии @var{stl}. Параметр @var{num} определяет гладкость линии (число точек на линии). Если @var{num}=@code{2}, то рисуется прямая даже в криволинейных координатах. Наоборот, для больших значений (например, =@code{100}) рисуется геодезическая линия (окружность в полярных координатах, парабола в параболических и т.д.). Линия рисуется даже если часть ее лежит вне диапазона осей координат. @end deftypefn @@ -1156,15 +1223,15 @@ Receive graphical information from node @var{id} using MPI. The width and height @deftypefn {MGL command} {} curve @code{x1 y1 dx1 dy1 x2 y2 dx2 dy2} ['stl'=''] @deftypefnx {MGL command} {} curve @code{x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2 dz2} ['stl'=''] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Curve (@code{mglPoint} p1, @code{mglPoint} d1, @code{mglPoint} p2, @code{mglPoint} d2, @code{const char *}stl=@code{"B"}, @code{int} num=@code{100}) -@deftypefnx {C function} @code{void} mgl_curve (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} dx1, @code{float} dy1, @code{float} dz1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} dx2, @code{float} dy2, @code{float} dz2, @code{const char *}stl, @code{int} num) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Curve (@code{mglPoint} p1, @code{mglPoint} d1, @code{mglPoint} p2, @code{mglPoint} d2, @code{const char *}stl=@code{"B"}, @code{int} num=@code{100}) +@deftypefnx {Функция С} @code{void} mgl_curve (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} dx1, @code{float} dy1, @code{float} dz1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} dx2, @code{float} dy2, @code{float} dz2, @code{const char *}stl, @code{int} num) @end ifclear Рисует кривую Безье из точки @var{p1} в @var{p2} используя стиль линии @var{stl}. Касательные в точках пропорциональны @var{d1}, @var{d2}. Параметр @var{num} определяет гладкость линии (число точек на линии). Кривая рисуется даже если часть ее лежит вне диапазона осей координат. @end deftypefn @ifclear UDAV -@deftypefn {Method on @code{mglGraph}} @code{void} Face (@code{mglPoint} p1, @code{mglPoint} p2, @code{mglPoint} p3, @code{mglPoint} p4, @code{const char *}stl=@code{"w"}) -@deftypefnx {C function} @code{void} mgl_curve (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} x3, @code{float} y3, @code{float} z3, @code{float} x4, @code{float} y4, @code{float} z4, @code{const char *}stl) +@deftypefn {Метод класса @code{mglGraph}} @code{void} Face (@code{mglPoint} p1, @code{mglPoint} p2, @code{mglPoint} p3, @code{mglPoint} p4, @code{const char *}stl=@code{"w"}) +@deftypefnx {Функция С} @code{void} mgl_curve (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} x3, @code{float} y3, @code{float} z3, @code{float} x4, @code{float} y4, @code{float} z4, @code{const char *}stl) Рисует заполненный четырехугольник (грань) с углами в точках @var{p1}, @var{p2}, @var{p3}, @var{p4} и цветом(-ами) @var{stl}. При этом цвет может быть один для всей грани, или различным если указаны все 4 цвета. Грань будет нарисована даже если часть ее лежит вне диапазона осей координат. @end deftypefn @end ifclear @@ -1175,12 +1242,12 @@ Receive graphical information from node @var{id} using MPI. The width and height @deftypefn {MGL command} {} facex @code{x0 y0 z0 wy wz} ['stl'='' @code{d1=0 d2=0}] @deftypefnx {MGL command} {} facey @code{x0 y0 z0 wx wz} ['stl'='' @code{d1=0 d2=0}] @deftypefnx {MGL command} {} facez @code{x0 y0 z0 wx wy} ['stl'='' @code{d1=0 d2=0}] -@deftypefnx {Method on @code{mglGraph}} @code{void} FaceX (@code{float} x0, @code{float} y0, @code{float} z0, @code{float} wy, @code{float} wz, @code{const char *}stl=@code{"w"}, @code{float} d1=@code{0}, @code{float} d2=@code{0}) -@deftypefnx {Method on @code{mglGraph}} @code{void} FaceY (@code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wz, @code{const char *}stl=@code{"w"}, @code{float} d1=@code{0}, @code{float} d2=@code{0}) -@deftypefnx {Method on @code{mglGraph}} @code{void} FaceZ (@code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wy, @code{const char *}stl=@code{"w"}, @code{float} d1=@code{0}, @code{float} d2=@code{0}) -@deftypefnx {C function} @code{void} mgl_facex (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wy, @code{float} wz, @code{const char *}stl, @code{float} d1, @code{float} d2) -@deftypefnx {C function} @code{void} mgl_facey (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wz, @code{const char *}stl, @code{float} d1, @code{float} d2) -@deftypefnx {C function} @code{void} mgl_facez (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wy, @code{const char *}stl, @code{float} d1, @code{float} d2) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} FaceX (@code{float} x0, @code{float} y0, @code{float} z0, @code{float} wy, @code{float} wz, @code{const char *}stl=@code{"w"}, @code{float} d1=@code{0}, @code{float} d2=@code{0}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} FaceY (@code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wz, @code{const char *}stl=@code{"w"}, @code{float} d1=@code{0}, @code{float} d2=@code{0}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} FaceZ (@code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wy, @code{const char *}stl=@code{"w"}, @code{float} d1=@code{0}, @code{float} d2=@code{0}) +@deftypefnx {Функция С} @code{void} mgl_facex (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wy, @code{float} wz, @code{const char *}stl, @code{float} d1, @code{float} d2) +@deftypefnx {Функция С} @code{void} mgl_facey (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wz, @code{const char *}stl, @code{float} d1, @code{float} d2) +@deftypefnx {Функция С} @code{void} mgl_facez (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wy, @code{const char *}stl, @code{float} d1, @code{float} d2) Рисует закрашенный прямоугольник (грань) перпендикулярно оси [x,y,z] в точке @{@var{x0}, @var{y0}, @var{z0}@} цветом @var{stl} и шириной @var{wx}, @var{wy}, @var{wz} вдоль соответствующего направления. При этом цвет может быть один для всей грани, или различным для разных вершин если указаны все 4 цвета. Параметры @var{d1}!=0, @var{d2}!=0 задают дополнительный сдвиг последней точки (т.е. рисуют четырехугольник).Грань будет нарисована даже если часть ее лежит вне диапазона осей координат. @end deftypefn @@ -1188,17 +1255,17 @@ Receive graphical information from node @var{id} using MPI. The width and height @deftypefn {MGL command} {} sphere @code{x0 y0 r} ['col'='r'] @deftypefnx {MGL command} {} sphere @code{x0 y0 z0 r} ['col'='r'] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Sphere (@code{mglPoint} p, @code{float} r, @code{const char *}stl=@code{"r"}) -@deftypefnx {C function} @code{void} mgl_sphere (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} r, @code{const char *}stl) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Sphere (@code{mglPoint} p, @code{float} r, @code{const char *}stl=@code{"r"}) +@deftypefnx {Функция С} @code{void} mgl_sphere (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} r, @code{const char *}stl) @end ifclear Рисует сферу радиуса @var{r} с центром в точке @var{p}=@{@var{x0}, @var{y0}, @var{z0}@} цветом @var{stl}. @end deftypefn @anchor{drop} -@deftypefn {MGL command} {} drop @code{x0 y0 dx dy r} ['col'='b' @code{sh=1 asp=1}] -@deftypefnx {MGL command} {} drop @code{x0 y0 z0 dx dy dz r} ['col'='b' @code{sh=1 asp=1}] +@deftypefn {MGL command} {} drop @code{x0 y0 dx dy r} ['col'='r' @code{sh=1 asp=1}] +@deftypefnx {MGL command} {} drop @code{x0 y0 z0 dx dy dz r} ['col'='r' @code{sh=1 asp=1}] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Drop (@code{mglPoint} p, @code{mglPoint} d, @code{float} r, @code{mglColor} col, @code{float} shift=@code{1}, @code{float} ap=@code{1}) +@deftypefnx {Method on @code{mglGraph}} @code{void} Drop (@code{mglPoint} p, @code{mglPoint} d, @code{float} r, @code{const char *}col=@code{"r"}, @code{float} shift=@code{1}, @code{float} ap=@code{1}) @deftypefnx {C function} @code{void} mgl_drop (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} dx, @code{float} dy, @code{float} dz, @code{float} r, @code{const char *}col, @code{float} shift, @code{float} ap) @end ifclear Рисует каплю радиуса @var{r} в точке @var{p} вытянутую вдоль направления @var{d} цветом @var{col}. Параметр @var{shift} определяет степень вытянутости: @samp{0} -- сфера, @samp{1} -- классическая капля. Параметр @var{ap} определяет относительную ширину капли (аналог "эллиптичности" для сферы). @sref{Drops sample} @@ -1207,8 +1274,8 @@ Receive graphical information from node @var{id} using MPI. The width and height @anchor{cone} @deftypefn {MGL command} {} cone @code{x1 y1 z1 x2 y2 z2 r1} [@code{r2=-1} 'stl'='' @code{edge=off}] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Cone (@code{mglPoint} p1, @code{mglPoint} p2, @code{float} r1, @code{float} r2=@code{-1}, @code{const char *}stl=@code{"B"}, @code{bool} edge=@code{false}) -@deftypefnx {C function} @code{void} mgl_cone (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} r1, @code{float} r2, @code{const char *}stl, @code{int} draw_edge) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Cone (@code{mglPoint} p1, @code{mglPoint} p2, @code{float} r1, @code{float} r2=@code{-1}, @code{const char *}stl=@code{"B"}, @code{bool} edge=@code{false}) +@deftypefnx {Функция С} @code{void} mgl_cone (@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} r1, @code{float} r2, @code{const char *}stl, @code{int} draw_edge) @end ifclear Рисует трубу (или усеченный конус если @var{edge}=@code{false}) между точками @var{p1}, @var{p2} с радиусами на концах @var{r1}, @var{r2}. Если @var{r2}<0, то полагается @var{r2}=@var{r1}. Цвет конуса задается строкой @var{stl}. @end deftypefn @@ -1217,7 +1284,7 @@ Receive graphical information from node @var{id} using MPI. The width and height @deftypefn {MGL command} {} circle @code{x0 y0 r} ['col'='r'] @deftypefnx {MGL command} {} circle @code{x0 y0 z0 r} ['col'='r'] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Circle (@code{mglPoint} p, @code{float} r, @code{const char *}stl=@code{"r"}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Circle (@code{mglPoint} p, @code{float} r, @code{const char *}stl=@code{"r"}) @end ifclear Рисует круг радиуса @var{r} с центром в точке @var{p}=@{@var{x0}, @var{y0}, @var{z0}@} цветом @var{stl}. Если @var{col} содержит: @samp{#} то рисуется только граница, @samp{@@} то рисуется граница (вторым цветом из @var{col} или черными). @end deftypefn @@ -1226,8 +1293,8 @@ Receive graphical information from node @var{id} using MPI. The width and height @deftypefn {MGL command} {} ellipse @code{x1 y1 x2 y2 r} ['col'='r' @code{sh=1 asp=1}] @deftypefnx {MGL command} {} ellipse @code{x1 y1 z1 x2 y2 z2 r} ['col'='r' @code{sh=1 asp=1}] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Ellipse (@code{mglPoint} p1, @code{mglPoint} p2, @code{float} r, @code{const char *}col=@code{"r"}) -@deftypefnx {C function} @code{void} mgl_ellipse(@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} r, @code{const char *}col) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Ellipse (@code{mglPoint} p1, @code{mglPoint} p2, @code{float} r, @code{const char *}col=@code{"r"}) +@deftypefnx {Функция С} @code{void} mgl_ellipse(@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} r, @code{const char *}col) @end ifclear Рисует круг радиуса @var{r} с фокусами в точках @var{p1}, @var{p2} цветом @var{stl}. Если @var{col} содержит: @samp{#} то рисуется только граница, @samp{@@} то рисуется граница (вторым цветом из @var{col} или черными). @sref{Ellipse sample} @end deftypefn @@ -1236,14 +1303,14 @@ Receive graphical information from node @var{id} using MPI. The width and height @deftypefn {MGL command} {} rhomb @code{x1 y1 x2 y2 r} ['col'='r' @code{sh=1 asp=1}] @deftypefnx {MGL command} {} rhomb @code{x1 y1 z1 x2 y2 z2 r} ['col'='r' @code{sh=1 asp=1}] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Rhomb (@code{mglPoint} p1, @code{mglPoint} p2, @code{float} r, @code{const char *}col=@code{"r"}) -@deftypefnx {C function} @code{void} mgl_rhomb(@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} r, @code{const char *}col) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Rhomb (@code{mglPoint} p1, @code{mglPoint} p2, @code{float} r, @code{const char *}col=@code{"r"}) +@deftypefnx {Функция С} @code{void} mgl_rhomb(@code{HMGL} gr, @code{float} x1, @code{float} y1, @code{float} z1, @code{float} x2, @code{float} y2, @code{float} z2, @code{float} r, @code{const char *}col) @end ifclear Рисует ромб ширины @var{r} с вершинами в точках @var{p1}, @var{p2} цветом @var{stl}. Если @var{col} содержит: @samp{#} то рисуется только граница, @samp{@@} то рисуется граница (вторым цветом из @var{col} или черными). Если @var{col} содержит 3 цвета, то используется градиентная заливка. @sref{Ellipse sample} @end deftypefn @c ################################################################## -@node Text printing, Axis and Colorbar, Primitives drawing, MathGL core +@node Text printing, Axis and Colorbar, Primitives, MathGL core @section Вывод текста @ifclear UDAV @cindex Puts @@ -1253,20 +1320,22 @@ Receive graphical information from node @var{id} using MPI. The width and height @cindex Label @cindex fgets -Функции для вывода текста позволяют вывести строку текста в произвольном месте рисунка, в произвольном направлении и вдоль произвольной кривой. MathGL позволяет использовать произвольное начертание шрифта и многие ТеХ-ие команды (детальнее @pxref{Font styles}). Все функции вывода текста имеют варианты для 8-bit строк (@code{char *}) и для Unicode строк (@code{wchar_t *}). В первом случае используется конверсия из текущей локали, т.е. иногда вам требуется явно указать локаль с помощью функции @code{setlocale()}. Аргумент @var{size} определяет размер текста: размер шрифта если положителен или относительный размер (=-@var{size}*@var{FontSize}) если отрицателен. Начертание шрифта (STIX, arial, courier, times и др) можно изменить с помощью функции LoadFont(). @xref{Font settings}. +Функции для вывода текста позволяют вывести строку текста в произвольном месте рисунка, в произвольном направлении и вдоль произвольной кривой. MathGL позволяет использовать произвольное начертание шрифта и многие ТеХ-ие команды (детальнее см. @ref{Font styles}). Все функции вывода текста имеют варианты для 8-bit строк (@code{char *}) и для Unicode строк (@code{wchar_t *}). В первом случае используется конверсия из текущей локали, т.е. иногда вам требуется явно указать локаль с помощью функции @code{setlocale()}. Аргумент @var{size} определяет размер текста: размер шрифта если положителен или относительный размер (=-@var{size}*@var{FontSize}) если отрицателен. Начертание шрифта (STIX, arial, courier, times и др) можно изменить с помощью функции LoadFont(). @xref{Font settings}. -Параметры шрифта задаются строкой, которая может содержать символы цвета @samp{wkrgbcymhRGBCYMHW} (@pxref{Line styles}) и, после символа @samp{:}, символы стиля (@samp{rbiwou}) и/или выравнивания (@samp{LRC}). Стили шрифта: @samp{r} -- прямой, @samp{i} -- курсив, @samp{b} -- жирный, @samp{w} -- контурный, @samp{o} -- надчеркнутый, @samp{u} -- подчеркнутый. По умолчанию используется прямой шрифт. Типы выравнивания: @samp{L} -- по левому краю (по умолчанию), @samp{C} -- по центру, @samp{R} -- по правому краю. Например, строка @samp{b:iC} соответствует курсиву синего цвета с выравниванием по центру. +Параметры шрифта задаются строкой, которая может содержать символы цвета @samp{wkrgbcymhRGBCYMHW} (см. @ref{Line styles}) и, после символа @samp{:}, символы стиля (@samp{rbiwou}) и/или выравнивания (@samp{LRC}). Стили шрифта: @samp{r} -- прямой, @samp{i} -- курсив, @samp{b} -- жирный, @samp{w} -- контурный, @samp{o} -- надчеркнутый, @samp{u} -- подчеркнутый. По умолчанию используется прямой шрифт. Типы выравнивания: @samp{L} -- по левому краю (по умолчанию), @samp{C} -- по центру, @samp{R} -- по правому краю. Например, строка @samp{b:iC} соответствует курсиву синего цвета с выравниванием по центру. Если строка содержит символы @samp{aA}, то текст выводится в абсолютных координатах (полагаются в диапазоне [0,1]). При этом используются координаты относительно рисунка (если указано @samp{A}) или относительно последнего SubPlot()/InPlot() (если указано @samp{a}). Если строка содержит символ @samp{@@}, то вокруг текста рисуется прямоугольник. +@sref{Text features} + @anchor{text} @deftypefn {MGL command} {} text @code{x y} 'text' ['fnt'='' @code{size=-1}] @deftypefnx {MGL command} {} text @code{x y z} 'text' ['fnt'='' @code{size=-1}] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Puts (@code{mglPoint} p, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{float} size=@code{-1}) -@deftypefnx {Method on @code{mglGraph}} @code{void} Putsw (@code{mglPoint} p, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{float} size=@code{-1}) -@deftypefnx {C function} @code{void} mgl_puts (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{const char *}text, @code{const char *}fnt, @code{float} size) -@deftypefnx {C function} @code{void} mgl_putsw (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{const wchar_t *}text, @code{const char *}fnt, @code{float} size) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Puts (@code{mglPoint} p, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{float} size=@code{-1}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Putsw (@code{mglPoint} p, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{float} size=@code{-1}) +@deftypefnx {Функция С} @code{void} mgl_puts (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{const char *}text, @code{const char *}fnt, @code{float} size) +@deftypefnx {Функция С} @code{void} mgl_putsw (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{const wchar_t *}text, @code{const char *}fnt, @code{float} size) @end ifclear Выводит строку @var{text} от точки @var{p} шрифтом определяемым строкой @var{fnt}. @end deftypefn @@ -1274,10 +1343,10 @@ Receive graphical information from node @var{id} using MPI. The width and height @deftypefn {MGL command} {} text @code{x y dx dy} 'text' ['fnt'=':L' @code{size=-1}] @deftypefnx {MGL command} {} text @code{x y z dx dy dz} 'text' ['fnt'=':L' @code{size=-1}] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Puts (@code{mglPoint} p, @code{mglPoint} d, @code{const char *}text, @code{const char *}fnt=@code{':L'}, @code{float} size=@code{-1}) -@deftypefnx {Method on @code{mglGraph}} @code{void} Putsw (@code{mglPoint} p, @code{mglPoint} d, @code{const wchar_t *}text, @code{const char *}fnt=@code{':L'}, @code{float} size=@code{-1}) -@deftypefnx {C function} @code{void} mgl_puts_dir (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{float} dx, @code{float} dy, @code{float} dz, @code{const char *}text, @code{const char *}fnt, @code{float} size) -@deftypefnx {C function} @code{void} mgl_putsw_dir (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{float} dx, @code{float} dy, @code{float} dz, @code{const wchar_t *}text, @code{const char *}fnt, @code{float} size) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Puts (@code{mglPoint} p, @code{mglPoint} d, @code{const char *}text, @code{const char *}fnt=@code{':L'}, @code{float} size=@code{-1}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Putsw (@code{mglPoint} p, @code{mglPoint} d, @code{const wchar_t *}text, @code{const char *}fnt=@code{':L'}, @code{float} size=@code{-1}) +@deftypefnx {Функция С} @code{void} mgl_puts_dir (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{float} dx, @code{float} dy, @code{float} dz, @code{const char *}text, @code{const char *}fnt, @code{float} size) +@deftypefnx {Функция С} @code{void} mgl_putsw_dir (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{float} dx, @code{float} dy, @code{float} dz, @code{const wchar_t *}text, @code{const char *}fnt, @code{float} size) @end ifclear Выводит строку @var{text} от точки @var{p} вдоль направления @var{d}. Параметр @var{fnt} задает стиль текста и указывает выводить текст над линией (@samp{T}) или под ней (@samp{t}). @end deftypefn @@ -1288,34 +1357,24 @@ Receive graphical information from node @var{id} using MPI. The width and height Выводит @var{n}-ую строку файла @var{fname} от точки @{@var{x},@var{y},@var{z}@} шрифтом @var{fnt} и размером @var{size}. @end deftypefn -@anchor{label} -@deftypefn {MGL command} {} label @code{x y} 'text' ['fnt'=''] -@ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Label (@code{float} x, @code{float} y, @code{const char *}text, @code{const char *}fnt=@code{""}) -@deftypefnx {Method on @code{mglGraph}} @code{void} Labelw (@code{float} x, @code{float} y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}) -@deftypefnx {C function} @code{void} mgl_label_xy (@code{HMGL} gr, @code{float} x, @code{float} y, @code{const char *}text, @code{const char *}fnt) -@deftypefnx {C function} @code{void} mgl_labelw_xy (@code{HMGL} gr, @code{float} x, @code{float} y, @code{const wchar_t *}text, @code{const char *}fnt) -@end ifclear -Выводит строку @var{text} в произвольном месте экрана от точки @{@var{x}, @var{y}@} шрифтом указанным @var{fnt}. Координаты @code{x, y} считаются лежащими в диапазоне [0,1]. -@end deftypefn - +@deftypefn {MGL command} {} text ydat 'text' ['fnt'=''] @deftypefnx {MGL command} {} text xdat ydat 'text' ['fnt'='' @code{size=-1 zval=nan}] @deftypefnx {MGL command} {} text xdat ydat zdat 'text' ['fnt'='' @code{size=-1}] @ifclear UDAV -@deftypefn {Method on @code{mglGraph}} @code{void} Text (@code{const mglData &}y, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) -@deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglData &}y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) -@deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) -@deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) -@deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) -@deftypefnx {Method on @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) -@deftypefnx {C function} @code{void} mgl_text_y (@code{HMGL} gr, @code{HCDT} y, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt) -@deftypefnx {C function} @code{void} mgl_textw_y (@code{HMGL} gr, @code{HCDT} y, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt) -@deftypefnx {C function} @code{void} mgl_text_xy (@code{HCDT} x, @code{HCDT} y, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt) -@deftypefnx {C function} @code{void} mgl_textw_xy (@code{HCDT} x, @code{HCDT} y, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt) -@deftypefnx {C function} @code{void} mgl_text_xyz (@code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt) -@deftypefnx {C function} @code{void} mgl_textw_xyz (@code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt) +@deftypefn {Метод класса @code{mglGraph}} @code{void} Text (@code{const mglData &}y, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Text (@code{const mglData &}y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Text (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const wchar_t *}text, @code{const char *}fnt=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Функция С} @code{void} mgl_text_y (@code{HMGL} gr, @code{HCDT} y, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt) +@deftypefnx {Функция С} @code{void} mgl_textw_y (@code{HMGL} gr, @code{HCDT} y, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt) +@deftypefnx {Функция С} @code{void} mgl_text_xy (@code{HCDT} x, @code{HCDT} y, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt) +@deftypefnx {Функция С} @code{void} mgl_textw_xy (@code{HCDT} x, @code{HCDT} y, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt) +@deftypefnx {Функция С} @code{void} mgl_text_xyz (@code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}text, @code{const char *}fnt, @code{const char *}opt) +@deftypefnx {Функция С} @code{void} mgl_textw_xyz (@code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const wchar_t *}text, @code{const char *}fnt, @code{const char *}opt) @end ifclear -Выводит строку @var{text} вдоль кривой @{@var{x}[i], @var{y}[i], @var{z}[i]@} шрифтом @var{fnt}. Строка @var{fnt} может содержать символы: @samp{t} для вывода текста под кривой (по умолчанию), или @samp{T} для вывода текста над кривой. Размеры по 1-ой размерности должны быть одинаковы для всех массивов @code{x.nx=y.nx=z.nx}. Если массив @var{x} не указан, то используется "автоматический" массив со значениями в диапазоне [@var{Min}.x, @var{Max}.x] (@pxref{Ranges (bounding box)}). Если массив @var{z} не указан, то используется @var{z}[i] = @var{Min}.z. Строка @var{opt} содержит опции команды (@pxref{Command options}). @sref{Text sample} +Выводит строку @var{text} вдоль кривой @{@var{x}[i], @var{y}[i], @var{z}[i]@} шрифтом @var{fnt}. Строка @var{fnt} может содержать символы: @samp{t} для вывода текста под кривой (по умолчанию), или @samp{T} для вывода текста над кривой. Размеры по 1-ой размерности должны быть одинаковы для всех массивов @code{x.nx=y.nx=z.nx}. Если массив @var{x} не указан, то используется "автоматический" массив со значениями в диапазоне [@var{Min}.x, @var{Max}.x] (см. @ref{Ranges (bounding box)}). Если массив @var{z} не указан, то используется @var{z}[i] = @var{Min}.z. Строка @var{opt} содержит опции команды (см. @ref{Command options}). @sref{Text sample} @end deftypefn @c ################################################################## @@ -1327,55 +1386,55 @@ Receive graphical information from node @var{id} using MPI. The width and height @cindex Colorbar @cindex Label -Эти функции рисуют объекты для "измерения" типа осей координат, цветовой таблицы (colorbar), сетку по осям, обрамляющий параллелепипед и подписи по осям координат. См. также @pxref{Axis settings}. +Эти функции рисуют объекты для "измерения" типа осей координат, цветовой таблицы (colorbar), сетку по осям, обрамляющий параллелепипед и подписи по осям координат. См. также см. @ref{Axis settings}. @anchor{axis} -@deftypefn {MGL command} {} axis ['dir'='xyz' @code{adjust=off}] +@deftypefn {MGL command} {} axis ['dir'='xyz' 'stl'=''] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Axis (@code{const char *}dir=@code{"xyz"}, @code{bool} adjust=@code{false}) -@deftypefnx {C function} @code{void} mgl_axis (@code{HMGL} gr, @code{const char *}dir, @code{int} adjust) +@deftypefnx {Method on @code{mglGraph}} @code{void} Axis (@code{const char *}dir=@code{"xyz"}, @code{const char *}stl=@code{""}) +@deftypefnx {C function} @code{void} mgl_axis (@code{HMGL} gr, @code{const char *}dir, @code{const char *}stl) @end ifclear -Рисует оси координат и метки на них (@pxref{Axis settings}) в направлениях, указанных строкой @var{dir}. Если строка содержит символ @samp{_}, то подписи меток отображаться не будут. Шрифт подписей определяется функцией @code{SetFontDef()} (@pxref{Font settings}). Метки будут "подогнаны" если @var{adjust}=@code{true} (с помощью вызова функции @code{AdjustTicks()}). +Рисует оси координат и метки на них (см. @ref{Axis settings}) в направлениях @samp{xyz}, указанных строкой @var{dir}. Если строка содержит символ @samp{_}, то подписи меток отображаться не будут. Если строка содержит символ @samp{AKDTVISO}, то будет нарисована соответствующая стрелка на конце оси. Стиль меток и оси(ей) задается строкой @var{stl}. @sref{Axis and ticks} @end deftypefn @anchor{colorbar} -@deftypefn {MGL command} {} colorbar ['sch'='' @code{pos=0}] +@deftypefn {MGL command} {} colorbar ['sch'=''] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{const char *}sch=@code{""}, @code{int} pos=@code{0}) -@deftypefnx {C function} @code{void} mgl_colorbar (@code{HMGL} gr, @code{const char *}sch, @code{int} pos) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Colorbar (@code{const char *}sch=@code{""}) +@deftypefnx {Функция С} @code{void} mgl_colorbar (@code{HMGL} gr, @code{const char *}sch) @end ifclear -Рисует полосу соответствия цвета и числовых значений (colorbar) для цветовой схемы @var{sch} (используется текущая для @code{sch=""}) с краю от графика. Параметр @var{pos} задает местоположение: @samp{0} - справа (по умолчанию), @samp{1} - слева, @samp{2} - сверху, @samp{3} - снизу. Если строка @var{sch} содержит @samp{<>^_}, то параметр @var{pos} определяется как: @code{pos=0} для @samp{>} (справа), @code{pos=1} для @samp{<} (слева), @code{pos=2} для @samp{^} (сверху), @code{pos=3} для @samp{_} (снизу). Если строка содержит @samp{A}, то используются абсолютные координаты (относительно рисунка). @sref{Dens sample} +Рисует полосу соответствия цвета и числовых значений (colorbar) для цветовой схемы @var{sch} (используется текущая для @code{sch=""}) с краю от графика. Если строка @var{sch} содержит @samp{<>^_}, то положение выбирается: @samp{>} -- справа, @samp{<} -- слева, @samp{^} -- сверху, @samp{_} -- снизу. Если строка содержит @samp{A}, то используются абсолютные координаты (относительно рисунка). @sref{Colorbars} @end deftypefn -@deftypefn {MGL command} {} colorbar vdat ['sch'='' @code{pos=0}] +@deftypefn {MGL command} {} colorbar vdat ['sch'=''] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch=@code{""}, @code{int} pos=@code{0}) -@deftypefnx {C function} @code{void} mgl_colorbar_val (@code{HMGL} gr, @code{HCDT} v, @code{const char *}sch, @code{int} pos) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch=@code{""}) +@deftypefnx {Функция С} @code{void} mgl_colorbar_val (@code{HMGL} gr, @code{HCDT} v, @code{const char *}sch) @end ifclear Аналогично предыдущему, но для цветовой схемы без сглаживания с заданными значениями @var{v}. @sref{ContD sample} @end deftypefn -@deftypefn {MGL command} {} colorbar 'sch' @code{pos x y w h} +@deftypefn {MGL command} {} colorbar 'sch' @code{x y [w=1 h=1]} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{const char *}sch, @code{int} pos, @code{float} x, @code{float} y, @code{float} w, @code{float} h) -@deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{int} pos, @code{float} x, @code{float} y, @code{float} w, @code{float} h) -@deftypefnx {C function} @code{void} mgl_colorbar_ext (@code{HMGL} gr, @code{const char *}sch, @code{int} pos, @code{float} x, @code{float} y, @code{float} w, @code{float} h) +@deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{const char *}sch, @code{float} x, @code{float} y, @code{float} w=@code{1}, @code{float} h=@code{1}) +@deftypefnx {C function} @code{void} mgl_colorbar_ext (@code{HMGL} gr, @code{const char *}sch, @code{float} x, @code{float} y, @code{float} w, @code{float} h) @end ifclear Аналогично первому, но в произвольном месте графика @{@var{x}, @var{y}@} (полагаются в диапазоне [0,1]). Параметры @var{w}, @var{h} задают относительную ширину и высоту colorbar. @end deftypefn +@deftypefn {MGL command} {} colorbar vdat 'sch' @code{x y [w=1 h=1]} @ifclear UDAV -@deftypefn {Method on @code{mglGraph}} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch, @code{int} pos, @code{float} x, @code{float} y, @code{float} w, @code{float} h) -@deftypefnx {C function} @code{void} mgl_colorbar_val_ext (@code{HMGL} gr, @code{HCDT} v, @code{const char *}sch, @code{int} pos, @code{float} x, @code{float} y, @code{float} w, @code{float} h) +@deftypefnx {Method on @code{mglGraph}} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch, @code{float} x, @code{float} y, @code{float} w=@code{1}, @code{float} h=@code{1}) +@deftypefnx {C function} @code{void} mgl_colorbar_val_ext (@code{HMGL} gr, @code{HCDT} v, @code{const char *}sch, @code{float} x, @code{float} y, @code{float} w, @code{float} h) +@end ifclear Аналогично предыдущему, но для цветовой схемы без сглаживания с заданными значениями @var{v}. @end deftypefn -@end ifclear @anchor{grid} @deftypefn {MGL command} {} grid ['dir'='xyz' 'pen'='B'] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Grid (@code{const char *}dir=@code{"xyz"}, @code{const char *}pen=@code{"B"}) -@deftypefnx {C function} @code{void} mgl_axis_grid (@code{HMGL} gr, @code{const char *}dir, @code{const char *}pen) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Grid (@code{const char *}dir=@code{"xyz"}, @code{const char *}pen=@code{"B"}) +@deftypefnx {Функция С} @code{void} mgl_axis_grid (@code{HMGL} gr, @code{const char *}dir, @code{const char *}pen) @end ifclear Рисует линии сетки в направлениях перпендикулярным @var{dir}. Шаг сетки такой же как у меток осей координат. Стиль линий задается параметром @var{pen} (по умолчанию -- сплошная темно синяя линия @samp{B-}). @end deftypefn @@ -1383,11 +1442,11 @@ Receive graphical information from node @var{id} using MPI. The width and height @anchor{box} @deftypefn {MGL command} {} box ['stl'='k' @code{ticks=on}] @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} Box (@code{const char *}col=@code{""}, @code{bool} ticks=@code{true}) -@deftypefnx {C function} @code{void} mgl_box (@code{HMGL} gr, @code{int} ticks) -@deftypefnx {C function} @code{void} mgl_box_str (@code{HMGL} gr, @code{const char *}col, @code{int} ticks) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Box (@code{const char *}col=@code{""}, @code{bool} ticks=@code{true}) +@deftypefnx {Функция С} @code{void} mgl_box (@code{HMGL} gr, @code{int} ticks) +@deftypefnx {Функция С} @code{void} mgl_box_str (@code{HMGL} gr, @code{const char *}col, @code{int} ticks) @end ifclear -Рисует ограничивающий параллелепипед цветом @var{col}. +Рисует ограничивающий параллелепипед цветом @var{col}. Если @var{col} содержит @samp{@@}, то рисуются закрашенные задние грани. При этом первый цвет используется для граней (по умолчанию светло жёлтый), а последний для рёбер и меток. @end deftypefn @anchor{xlabel} @@ -1417,7 +1476,7 @@ Receive graphical information from node @var{id} using MPI. The width and height @cindex SetLegendBox @cindex SetLegendMarks -Эти функции обеспечивают рисование легенды графика (полезно для @ref{1D plotting}). Запись в легенде состоит из двух строк: одна для стиля линии и маркеров, другая с текстом описания (с включенным разбором TeX-их команд). Можно использовать непосредственно массивы строк, или накопление во внутренние массивы с помощью функции AddLegend() с последующим отображением. Положение легенды можно задать автоматически или вручную. Параметры @var{fnt} и @var{size} задают стиль и размер шрифта (@pxref{Font settings}). Параметр @var{llen} задает относительную ширину примера линии. Ели стиль линии пустой, то соответствующий текст печатается без отступа. Если строка @var{fnt} содержит символ @samp{A}, то координаты легенды считаются относительно картинки (а не текущего subplot). Если строка @var{fnt} содержит символ @samp{#}, то рисуется прямоугольник вокруг легенды. @sref{Legend sample} +Эти функции обеспечивают рисование легенды графика (полезно для @ref{1D plotting}). Запись в легенде состоит из двух строк: одна для стиля линии и маркеров, другая с текстом описания (с включенным разбором TeX-их команд). Можно использовать непосредственно массивы строк, или накопление во внутренние массивы с помощью функции AddLegend() с последующим отображением. Положение легенды можно задать автоматически или вручную. Параметры @var{fnt} и @var{size} задают стиль и размер шрифта (см. @ref{Font settings}). Параметр @var{llen} задает относительную ширину примера линии. Ели стиль линии пустой, то соответствующий текст печатается без отступа. Если строка @var{fnt} содержит символ @samp{A}, то координаты легенды считаются относительно картинки (а не текущего subplot). Если строка @var{fnt} содержит символ @samp{#}, то рисуется прямоугольник вокруг легенды. @sref{Legend sample} @anchor{legend} @deftypefn {MGL command} {} legend [@code{pos=3} 'fnt'='#' @code{size=-0.8 llen=0.1}] @@ -1425,13 +1484,13 @@ Receive graphical information from node @var{id} using MPI. The width and height @deftypefnx {Method on @code{mglGraph}} @code{void} Legend (@code{int} pos=@code{0x3}, @code{const char *}fnt=@code{"#"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1}) @deftypefnx {C function} @code{void} mgl_legend (@code{HMGL} gr, @code{int} pos, @code{const char *}fnt, @code{float} size, @code{float} llen) @end ifclear -Рисует легенду из накопленных записей шрифтом @var{fnt} размером @var{size}. Параметр @var{pos} задает положение легенды: @samp{0} -- в нижнем левом углу, @samp{1} -- нижнем правом углу, @samp{2} -- верхнем левом углу, @samp{3} -- верхнем правом углу (по умолчанию). +Рисует легенду из накопленных записей шрифтом @var{fnt} размером @var{size}. Параметр @var{pos} задает положение легенды: @samp{0} -- в нижнем левом углу, @samp{1} -- нижнем правом углу, @samp{2} -- верхнем левом углу, @samp{3} -- верхнем правом углу (по умолчанию). Строка @var{fnt} может содержать вет для прямоугольника (1-ый цвет), для его границы (2-ой цвет) и для текста (последний). Если указано менее 3 цветов, то цвет рёбер будет чёрным (2 и менее цвета), а цвет прямоугольника белым (1 и менее цвета). Прямоугольник рисуется если строка @var{fnt} содержит @samp{#}. @end deftypefn @deftypefn {MGL command} {} legend @code{x y} ['fnt'='#' @code{size=-1 llen=0.1}] @ifclear UDAV @deftypefnx {Method on @code{mglGraph}} @code{void} Legend (@code{float} x, @code{float} y, @code{const char *}fnt=@code{"#"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1}) -@deftypefnx {C function} @code{void} mgl_legend_xy (@code{HMGL} gr, @code{float} x, @code{float} y, @code{const char *}fnt, @code{float} size, @code{float} llen) +@deftypefnx {C function} @code{void} mgl_legend_pos (@code{HMGL} gr, @code{float} x, @code{float} y, @code{const char *}fnt, @code{float} size, @code{float} llen) @end ifclear Рисует легенду из накопленных записей шрифтом @var{fnt} размером @var{size}. Положение легенды задается параметрами @var{x}, @var{y}, которые полагаются нормированными в диапазоне [0,1]. @end deftypefn @@ -1444,7 +1503,7 @@ Receive graphical information from node @var{id} using MPI. The width and height @deftypefnx {C function} @code{void} mgl_add_legend (@code{HMGL} gr, @code{const char *}text, @code{const char *}style) @deftypefnx {C function} @code{void} mgl_add_legendw (@code{HMGL} gr, @code{const wchar_t *}text, @code{const char *}style) @end ifclear -Добавляет описание @var{text} кривой со стилем @var{style} (@pxref{Line styles}) во внутренний массив записей легенды. +Добавляет описание @var{text} кривой со стилем @var{style} (см. @ref{Line styles}) во внутренний массив записей легенды. @end deftypefn @anchor{clearlegend} @@ -1459,8 +1518,8 @@ Receive graphical information from node @var{id} using MPI. The width and height @anchor{legendmarks} @deftypefn {MGL command} {} legendmarks @code{val} @ifclear UDAV -@deftypefnx {Method on @code{mglGraph}} @code{void} SetLegendMarks (@code{int} num) -@deftypefnx {C function} @code{void} mgl_set_legend_marks (@code{HMGL} gr, @code{int} num) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} SetLegendMarks (@code{int} num) +@deftypefnx {Функция С} @code{void} mgl_set_legend_marks (@code{HMGL} gr, @code{int} num) @end ifclear Задает число маркеров в легенде. По умолчанию используется 1 маркер. @end deftypefn @@ -1469,616 +1528,569 @@ Receive graphical information from node @var{id} using MPI. The width and height @node 1D plotting, 2D plotting, Legend, MathGL core @section 1D графики -Эти функции строят графики для одномерных (1D) массивов. Одномерными считаются массивы, зависящие только от одного параметра (индекса) подобно кривой в параметрической форме @{x(i),y(i),z(i)@}, i=1...n. Есть 5 основных типов 1D графиков: линия (Plot), линия с заполнением (Area), ступеньки (Step), прямоугольники (Bars, Barh) и вертикальные линии (Stem). Все эти типы графиков имеют похожий интерфейс. Есть версии для рисования в пространстве и на плоскости. В последнем случае имеется возможность использования только одного массива. Стиль линии и маркеров указывается строковой переменной. Если она равна "", то используется сплошная линия с цветом из палитры (@pxref{Palette and colors}). Кроме того, есть еще несколько типов графиков для одномерных массивов, имеющих другой интерфейс и вид: поверхность вращения кривой (Torus), диаграмма (Chart), размер ошибки (Error), маркеры переменного размера (Mark), трубками (Tube) и т.д. @xref{Line styles}. @sref{1D plot sample} - -@menu -* Plot:: -* Radar:: -* Tens:: -* Area:: -* Region:: -* Stem:: -* Bars:: -* Barh:: -* Chart:: -* Step:: -* Torus:: -* Tube:: -* Mark:: -* TextMark:: -* Error:: -* BoxPlot:: -@end menu - -@c ================================================================== -@node Plot, Radar, , 1D plotting -@subsection Plot @cindex Plot - -Функции рисуют ломанную линию по точкам. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) рисуется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Area}, @ref{Step}, @ref{Stem}, @ref{Tube}, @ref{Mark}, @ref{Error}, @ref{Belt}, @ref{Tens}. @sref{Plot sample} - -@deftypefn {Метод класса @code{mglGraph}} @code{void} Plot (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""}) -@deftypefnx {Функция С} @code{void} mgl_plot_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen) -Рисует в пространстве линию между точками @{@var{x}[i], @var{y}[i], @var{z}[i]@}. -@end deftypefn - -@deftypefn {Метод класса @code{mglGraph}} @code{void} Plot (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""}) -@deftypefnx {Функция С} @code{void} mgl_plot_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}pen) -Рисует линию между точками @{@var{x}[i], @var{y}[i]@} в плоскости @var{z}=@var{zVal} (по умолчанию в плоскости @var{z}=@var{Min.z}). -@end deftypefn - -@deftypefn {Метод класса @code{mglGraph}} @code{void} Plot (@code{const mglData &}y, @code{const char *}pen=@code{""}) -@deftypefnx {Функция С} @code{void} mgl_plot (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}pen) -Рисует линию между точками @{@var{x}[i], @var{y}[i]@} в плоскости @var{z}=@var{zVal} (по умолчанию в плоскости @var{z}=@var{Min.z}), где значения @var{x}[i] равно распределены в интервале [@var{Min}.x, @var{Max}.x]. -@end deftypefn - -@c ================================================================== -@node Radar, Tens, Plot, 1D plotting -@subsection Radar @cindex Radar - -@deftypefn {Метод класса @code{mglGraph}} @code{void} Radar (@code{const mglData &}a, @code{const char *}pen=@code{""}, @code{float} r=@code{-1}) -@deftypefnx {Функция С} @code{void} mgl_radar (@code{HMGL} gr, @code{const HMDT} a, @code{const char *}pen, @code{float} r) -Функции рисуют radar chart, представляющий собой ломанную с вершинами на радиальных линиях (типа ломанной в полярных координатах). График рисуется для каждой строки если один из массивов матрица. Параметр @var{r} задает дополнительный сдвиг данных (т.е. используется @var{a}+@var{r} вместо @var{a}). Если @code{r<0}, то @code{r=max(0, -min(a)}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). Если @var{pen} содержит символ @samp{#}, то также рисуется "сетка" (радиальные линии и круг для @var{r}). См. также @ref{Plot}. @sref{Radar sample} -@end deftypefn - -@c ================================================================== -@node Tens, Area, Radar, 1D plotting -@subsection Tens @cindex Tens - -Функции рисуют ломанную линию по точкам с цветом, определяемым массивом @var{c} (типа графика натяжений). График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx=c.nx}. Строка @var{pen} задает цветовую схему (@pxref{Color scheme}) и стиль и/или толщину линии (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущей цветовой схемой. См. также @ref{Plot}, @ref{Mesh}, @ref{Fall}. @sref{Tens sample} - -@deftypefn {Метод класса @code{mglGraph}} @code{void} Tens (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}pen=@code{""}) -@deftypefnx {Функция С} @code{void} mgl_tens_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}pen) -Рисует в пространстве линию между точками @{@var{x}[i], @var{y}[i], @var{z}[i]@} с цветом @var{c}[i]. -@end deftypefn - -@deftypefn {Метод класса @code{mglGraph}} @code{void} Tens (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}c, @code{const char *}pen=@code{""}) -@deftypefnx {Функция С} @code{void} mgl_tens_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} c, @code{const char *}pen) -Рисует линию между точками @{@var{x}[i], @var{y}[i]@} в плоскости @var{z}=@var{zVal} (по умолчанию в плоскости @var{z}=@var{Min.z}) с цветом @var{c}[i]. -@end deftypefn - -@deftypefn {Метод класса @code{mglGraph}} @code{void} Tens (@code{const mglData &}y, @code{const mglData &}c, @code{const char *}pen=@code{""}) -@deftypefnx {Функция С} @code{void} mgl_tens (@code{HMGL} gr, @code{const HMDT} y, @code{const HMDT} c, @code{const char *}pen) -Рисует линию между точками @{@var{x}[i], @var{y}[i]@} в плоскости @var{z}=@var{zVal} (по умолчанию в плоскости @var{z}=@var{Min.z}) с цветом @var{c}[i], где значения @var{x}[i] равно распределены в интервале [@var{Min}.x, @var{Max}.x]. -@end deftypefn - -@c ================================================================== -@node Area, Region, Tens, 1D plotting -@subsection Area @cindex Area - -Функции рисуют ломанную линию между точками и закрашивает ее вниз до плоскости осей координат. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). Также можно использовать градиентное закрашивание если число указанных цветов равно удвоенному числу кривых для построения. Если строка содержит символ @samp{a}, то линии рисуются одна поверх другой (с суммированием) -- того же эффекта можно достичь вызовом @code{y.CumSum("y");} перед построением графика. См. также @ref{Plot}, @ref{Bars}, @ref{Stem}. @sref{Area sample} - -@deftypefn {Метод класса @code{mglGraph}} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""}) -@deftypefnx {Функция С} @code{void} mgl_area_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen) -Рисует в пространстве линию между точками @{@var{x}[i], @var{y}[i], @var{z}[i]@} и закрашивает ее вниз до плоскости @var{z} = Org.z. -@end deftypefn - -@deftypefn {Метод класса @code{mglGraph}} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""}) -@deftypefnx {Функция С} @code{void} mgl_area_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}pen) -Рисует линию между точками @{@var{x}[i], @var{y}[i]@} в плоскости @var{z}=@var{zVal} (по умолчанию в плоскости @var{z}=@var{Min.z}) и закрашивает ее до прямой @var{y} = Org.y. -@end deftypefn - -@deftypefn {Метод класса @code{mglGraph}} @code{void} Area (@code{const mglData &}y, @code{const char *}pen=@code{""}, @code{bool} sum=@code{false}) -@deftypefnx {Функция С} @code{void} mgl_area (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}pen) -@deftypefnx {Функция С} @code{void} mgl_area_s (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}pen) -Рисует линию между точками @{@var{x}[i], @var{y}[i]@} в плоскости @var{z}=@var{zVal} (по умолчанию в плоскости @var{z}=@var{Min.z}) и закрашивает ее до прямой @var{y} = Org.y, где значения @var{x}[i] равно распределены в интервале [@var{Min}.x, @var{Max}.x]. Параметр @var{sum} задает режим рисования линий одна поверх другой (с сумированием). Замечу, что того же эффекта можно достичь вызовом @code{y.CumSum("y");} перед построением графика. -@end deftypefn - -@c ================================================================== -@node Region, Stem, Area, 1D plotting -@subsection Region @cindex Region - -Функции закрашивают область между 2 кривыми. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y1.nx=y2.nx} и размеры массивов @var{y1}, @var{y2} должны быть также одинаковы. Строка @var{pen} задает цвет (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется текущий цвет из палитры (@pxref{Palette and colors}). Также можно использовать градиентное закрашивание если число указанных цветов равно удвоенному числу кривых для построения. См. также @ref{Area}, @ref{Bars}, @ref{Stem}. @sref{Region sample} - -@deftypefn {Метод класса @code{mglGraph}} @code{void} Region (@code{const mglData &}x, @code{const mglData &}y1, @code{const mglData &}y2, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN}, @code{bool} inside=@code{true}) -@deftypefnx {Функция С} @code{void} mgl_region_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y1, @code{const HMDT} y2, @code{const char *}pen, @code{int} inside) -Закрашивает область между кривыми @{@var{x}[i], @var{y1}[i]@} и @{@var{x}[i], @var{y2}[i]@} при z=@var{zVal}. При @code{inside=off} закрашивается только область y12}). Строка @var{sch} задает цвет контуров: цвет k-го контура определяется символом @code{sch[k%strlen(sch)]}. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{Cont}, @ref{ContF}. @sref{ContD sample} +@anchor{tile} +@deftypefn {MGL command} {} tile zdat ['sch'=''] +@deftypefnx {MGL command} {} tile xdat ydat zdat ['sch'=''] +@ifclear UDAV +@deftypefnx {Method on @code{mglGraph}} @code{void} Tile (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Method on @code{mglGraph}} @code{void} Tile (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {C function} @code{void} mgl_tile (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@deftypefnx {C function} @code{void} mgl_tile_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@end ifclear +Рисует плитки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. График может использоваться как 3d обобщение @ref{step}. См. также @ref{surf}, @ref{boxs}, @ref{step}, @ref{tiles}. @sref{Tile sample} @end deftypefn -@deftypefn {Метод класса @code{mglGraph}} @code{void} ContD (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) -@deftypefnx {Функция С} @code{void} mgl_contd_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal) -Как предыдущий с @var{x}, @var{y} равно распределенными в интервале [@var{Min}, @var{Max}]. +@anchor{dens} +@deftypefn {MGL command} {} dens zdat ['sch'=''] +@deftypefnx {MGL command} {} dens xdat ydat zdat ['sch'=''] +@ifclear UDAV +@deftypefnx {Method on @code{mglGraph}} @code{void} Dens (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{float} zVal=@code{NAN}) +@deftypefnx {Method on @code{mglGraph}} @code{void} Dens (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{float} zVal=@code{NAN}) +@deftypefnx {C function} @code{void} mgl_dens (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@deftypefnx {C function} @code{void} mgl_dens_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@end ifclear +Рисует график плотности для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{Min}.z. Если @var{sch} содержит @samp{#}, то рисуется сетка. См. также @ref{surf}, @ref{cont}, @ref{contf}, @ref{boxs}, @ref{tile}, @code{dens[xyz]}. @sref{Dens sample} @end deftypefn -@deftypefn {Метод класса @code{mglGraph}} @code{void} ContD (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{7}, @code{float} zVal=@code{NAN}) -@deftypefnx {Функция С} @code{void} mgl_contd_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal) -Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в интервале [@var{Cmin}, @var{Cmax}]. +@anchor{cont} +@deftypefn {MGL command} {} cont vdat zdat ['sch'=''] +@deftypefnx {MGL command} {} cont vdat xdat ydat zdat ['sch'=''] +@ifclear UDAV +@deftypefnx {Method on @code{mglGraph}} @code{void} Cont (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Method on @code{mglGraph}} @code{void} Cont (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {C function} @code{void} mgl_cont__val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@deftypefnx {C function} @code{void} mgl_cont_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@end ifclear +Рисует линии уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z=v}[k] или при @var{z} = @var{Min}.z если @var{sch} содержит @samp{_}. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. Если @var{sch} содержит @samp{t} или @samp{T}, то значения @var{v}[k] будут выведены вдоль контуров над (или под) кривой. См. также @ref{dens}, @ref{contf}, @ref{contd}, @ref{axial}, @code{cont[xyz]}. @sref{Cont sample} @end deftypefn -@deftypefn {Метод класса @code{mglGraph}} @code{void} ContD (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{7}, @code{float} zVal=@code{NAN}) -@deftypefnx {Функция С} @code{void} mgl_contd (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal) -Как предыдущий с @var{x}, @var{y} равно распределенными в интервале [@var{Min}, @var{Max}]. +@deftypefn {MGL command} {} cont zdat ['sch'=''] +@deftypefnx {MGL command} {} cont xdat ydat zdat ['sch'=''] +@ifclear UDAV +@deftypefnx {Method on @code{mglGraph}} @code{void} Cont (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Method on @code{mglGraph}} @code{void} Cont (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {C function} @code{void} mgl_cont (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@deftypefnx {C function} @code{void} mgl_cont_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@end ifclear +Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в диапазоне изменения цвета. Здесь @var{num} равен значению параметра @var{value} в опциях @var{opt} (по умолчанию 7). @end deftypefn -@c ================================================================== -@node Axial, Grad, ContD, 2D plotting -@subsection Axial -@cindex Axial - -@deftypefn {Метод класса @code{mglGraph}} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}) -@deftypefnx {Функция С} @code{void} mgl_axial_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch) -Рисует поверхность вращения линии уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. Если строка содержит символы @samp{x}, @samp{y} или @samp{z}, то ось вращения устанавливается в указанное направление. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Cont}, @ref{ContF}, @ref{Torus}, @ref{Surf3}. @sref{Axial sample} +@anchor{contf} +@deftypefn {MGL command} {} contf vdat zdat ['sch'=''] +@deftypefnx {MGL command} {} contf vdat xdat ydat zdat ['sch'=''] +@ifclear UDAV +@deftypefnx {Method on @code{mglGraph}} @code{void} ContF (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Method on @code{mglGraph}} @code{void} ContF (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {C function} @code{void} mgl_contf_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@deftypefnx {C function} @code{void} mgl_contf_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@end ifclear +Рисует закрашенные линии (контуры) уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z=v}[k] или при @var{z} = @var{Min}.z если @var{sch} содержит @samp{_}. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. См. также @ref{dens}, @ref{cont}, @ref{contd}, @code{contf[xyz]}. @sref{ContF sample} @end deftypefn -@deftypefn {Метод класса @code{mglGraph}} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}) -@deftypefnx {Функция С} @code{void} mgl_axial_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} z, @code{const char *}sch) -Как предыдущий с @var{x}, @var{y} равно распределенными в интервале [@var{Min}, @var{Max}]. +@deftypefn {MGL command} {} contf zdat ['sch'=''] +@deftypefnx {MGL command} {} contf xdat ydat zdat ['sch'=''] +@ifclear UDAV +@deftypefnx {Method on @code{mglGraph}} @code{void} ContF (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Method on @code{mglGraph}} @code{void} ContF (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {C function} @code{void} mgl_contf (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@deftypefnx {C function} @code{void} mgl_contf_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@end ifclear +Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в диапазоне изменения цвета. Здесь @var{num} равен значению параметра @var{value} в опциях @var{opt} (по умолчанию 7). @end deftypefn -@deftypefn {Метод класса @code{mglGraph}} @code{void} Axial (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{3}) -@deftypefnx {Функция С} @code{void} mgl_axial_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num) -Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в интервале [@var{Cmin}, @var{Cmax}]. +@anchor{contd} +@deftypefn {MGL command} {} contd vdat zdat ['sch'=''] +@deftypefnx {MGL command} {} contd vdat xdat ydat zdat ['sch'=''] +@ifclear UDAV +@deftypefnx {Method on @code{mglGraph}} @code{void} ContD (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Method on @code{mglGraph}} @code{void} ContD (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {C function} @code{void} mgl_contd_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@deftypefnx {C function} @code{void} mgl_contd_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@end ifclear +Рисует закрашенные линии (контуры) уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z=v}[k] или при @var{z} = @var{Min}.z если @var{sch} содержит @samp{_}. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. Строка @var{sch} задает цвета контуров: цвет k-го контура определяется как k-ый цвет строки. См. также @ref{dens}, @ref{cont}, @ref{contf}. @sref{ContD sample} @end deftypefn -@deftypefn {Метод класса @code{mglGraph}} @code{void} Axial (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{3}) -@deftypefnx {Функция С} @code{void} mgl_axial (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch, @code{int} num) -Как предыдущий с @var{x}, @var{y} равно распределенными в интервале [@var{Min}, @var{Max}]. +@deftypefn {MGL command} {} contd zdat ['sch'=''] +@deftypefnx {MGL command} {} contd xdat ydat zdat ['sch'=''] +@ifclear UDAV +@deftypefnx {Method on @code{mglGraph}} @code{void} ContD (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Method on @code{mglGraph}} @code{void} ContD (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {C function} @code{void} mgl_contd (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@deftypefnx {C function} @code{void} mgl_contd_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@end ifclear +Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в диапазоне изменения цвета. Здесь @var{num} равен значению параметра @var{value} в опциях @var{opt} (по умолчанию 7). @end deftypefn -@c ================================================================== -@node Grad, Grid, Axial, 2D plotting -@subsection Grad -@cindex Grad - -@deftypefn {Метод класса @code{mglGraph}} @code{void} Grad (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}phi, @code{const char *}sch=@code{""}, @code{int} num=@code{5}) -@deftypefnx {Функция С} @code{void} mgl_grad_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal) -Рисует линии градиента скалярного поля @var{phi}[i,j,k] заданного параметрически @{@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Число линий пропорционально @var{num}. Линии рисуются только с границ интервала при @var{num}<0. Младшие размерности массивов @var{x}, @var{y}, @var{z}, @var{phi} должны быть одинаковы @code{x.nx=phi.nx && y.nx=phi.ny && z.nx=phi.nz} или @code{x.nx=y.nx=z.nx=phi.nx && x.ny=y.ny=z.ny=phi.ny && x.nz=y.nz=z.nz=phi.nz}. Массивы @var{x}, @var{y} и @var{z} могут быть векторами (не матрицами как @var{phi}). См. также @ref{Dens3}, @ref{Cont3}, @ref{Flow}. +@anchor{contv} +@deftypefn {MGL command} {} contv vdat zdat ['sch'=''] +@deftypefnx {MGL command} {} contv vdat xdat ydat zdat ['sch'=''] +@ifclear UDAV +@deftypefnx {Method on @code{mglGraph}} @code{void} ContV (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Method on @code{mglGraph}} @code{void} ContV (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {C function} @code{void} mgl_contv_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@deftypefnx {C function} @code{void} mgl_contv_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@end ifclear +Рисует вертикальные цилиндры от линий уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z=v}[k] или при @var{z} = @var{Min}.z если @var{sch} содержит @samp{_}. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. См. также @ref{cont}, @ref{contf}. @sref{ContV sample} @end deftypefn - -@deftypefn {Метод класса @code{mglGraph}} @code{void} Grad (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{float} zVal=@code{NAN}) -@deftypefnx {Функция С} @code{void} mgl_grad_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal) -Рисует линии градиента скалярного поля @var{phi}[i,j] заданного параметрически @{@var{x}[i,j], @var{y}[i,j]@} при @var{z} = @var{zVal}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Число линий пропорционально @var{num}. Линии рисуются только с границ интервала при @var{num}<0. Младшие размерности массивов @var{x}, @var{y}, @var{phi} должны быть одинаковы @code{x.nx=phi.nx && y.nx=phi.ny} или @code{x.nx=y.nx=phi.nx && x.ny=y.ny=phi.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{phi}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{Cont}, @ref{ContF}, @ref{Flow}. @sref{Grad sample} +@deftypefn {MGL command} {} contv zdat ['sch'=''] +@deftypefnx {MGL command} {} contv xdat ydat zdat ['sch'=''] +@ifclear UDAV +@deftypefnx {Method on @code{mglGraph}} @code{void} ContV (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Method on @code{mglGraph}} @code{void} ContV (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {C function} @code{void} mgl_contv (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@deftypefnx {C function} @code{void} mgl_contv_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@end ifclear +Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в диапазоне изменения цвета. Здесь @var{num} равен значению параметра @var{value} в опциях @var{opt} (по умолчанию 7). @end deftypefn -@deftypefn {Метод класса @code{mglGraph}} @code{void} Grad (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{float} zVal=@code{NAN}) -@deftypefnx {Функция С} @code{void} mgl_grad (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal) -Как предыдущий с @var{x}, @var{y} равно распределенными в интервале [@var{Min}, @var{Max}]. +@anchor{axial} +@deftypefn {MGL command} {} axial vdat zdat ['sch'=''] +@deftypefnx {MGL command} {} axial vdat xdat ydat zdat ['sch'=''] +@ifclear UDAV +@deftypefnx {Method on @code{mglGraph}} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Method on @code{mglGraph}} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {C function} @code{void} mgl_axial_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@deftypefnx {C function} @code{void} mgl_axial_xy_val (@code{HMGL} gr, @code{HCDT} v, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@end ifclear +Рисует поверхность вращения линии уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. Если строка содержит символы @samp{x}, @samp{y} или @samp{z}, то ось вращения устанавливается в указанное направление. См. также @ref{cont}, @ref{contf}, @ref{torus}, @ref{surf3}. @sref{Axial sample} @end deftypefn -@c ================================================================== -@node Grid, , Grad, 2D plotting -@subsection Grid -@cindex Grid - -@deftypefn {Метод класса @code{mglGraph}} @code{void} Grid (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) -@deftypefnx {Функция С} @code{void} mgl_grid_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal) -Рисует плоскую сету для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{zVal}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{Cont}, @ref{ContF}. +@deftypefn {MGL command} {} axial zdat ['sch'=''] +@deftypefnx {MGL command} {} axial xdat ydat zdat ['sch'=''] +@ifclear UDAV +@deftypefnx {Method on @code{mglGraph}} @code{void} Axial (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{int} num=@code{3}) +@deftypefnx {Method on @code{mglGraph}} @code{void} Axial (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}, @code{int} num=@code{3}) +@deftypefnx {C function} @code{void} mgl_axial (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@deftypefnx {C function} @code{void} mgl_axial_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@end ifclear +Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в диапазоне изменения цвета. Здесь @var{num} равен значению параметра @var{value} в опциях @var{opt} (по умолчанию 3). @end deftypefn -@deftypefn {Метод класса @code{mglGraph}} @code{void} Grid (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) -@deftypefnx {Функция С} @code{void} mgl_grid (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal) -Как предыдущий с @var{x}, @var{y} равно распределенными в интервале [@var{Min}, @var{Max}]. +@anchor{grid2} +@deftypefn {MGL command} {} grid2 zdat ['sch'=''] +@deftypefnx {MGL command} {} grid2 xdat ydat zdat ['sch'=''] +@ifclear UDAV +@deftypefnx {Method on @code{mglGraph}} @code{void} Grid (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {Method on @code{mglGraph}} @code{void} Grid (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""}) +@deftypefnx {C function} @code{void} mgl_grid (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@deftypefnx {C function} @code{void} mgl_grid_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt) +@end ifclear +Рисует плоскую сету для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{Min}.z. См. также @ref{dens}, @ref{cont}, @ref{contf}, @ref{meshnum}. @end deftypefn @@ -2439,6 +2451,16 @@ Receive graphical information from node @var{id} using MPI. The width and height * Pipe:: @end menu +@c ================================================================== +@subsection Grad +@cindex Grad + +@deftypefn {Метод класса @code{mglGraph}} @code{void} Grad (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}phi, @code{const char *}sch=@code{""}, @code{int} num=@code{5}) +@deftypefnx {Функция С} @code{void} mgl_grad_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal) +Рисует линии градиента скалярного поля @var{phi}[i,j,k] заданного параметрически @{@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Число линий пропорционально @var{num}. Линии рисуются только с границ интервала при @var{num}<0. Младшие размерности массивов @var{x}, @var{y}, @var{z}, @var{phi} должны быть одинаковы @code{x.nx=phi.nx && y.nx=phi.ny && z.nx=phi.nz} или @code{x.nx=y.nx=z.nx=phi.nx && x.ny=y.ny=z.ny=phi.ny && x.nz=y.nz=z.nz=phi.nz}. Массивы @var{x}, @var{y} и @var{z} могут быть векторами (не матрицами как @var{phi}). См. также @ref{Dens3}, @ref{Cont3}, @ref{Flow}. +@end deftypefn + + @c ================================================================== @node Traj, Vect, , Vector fields @subsection Traj @@ -2448,7 +2470,7 @@ Receive graphical information from node @var{id} using MPI. The width and height @deftypefnx {Метод класса @code{mglGraph}} @code{void} Traj (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}, @code{float} len=@code{0}) @deftypefnx {Функция С} @code{void} mgl_traj_xyz (@code{HMGL} gr, @code{const HMDT}x, @code{const HMDT}y, @code{const HMDT}z, @code{const HMDT}ax, @code{const HMDT}ay, @code{const HMDT}az, @code{const char *}sch, @code{float} len) @deftypefnx {Функция С} @code{void} mgl_traj_xy (@code{HMGL} gr, @code{const HMDT}x, @code{const HMDT}y, @code{const HMDT}ax, @code{const HMDT}ay, @code{const char *}sch, @code{float} zVal, @code{float} len) -Рисует вектора @{@var{ax}, @var{ay}, @var{az}@} вдоль кривой @{@var{x}, @var{y}, @var{z}@}. Длина векторов пропорциональна @math{\sqrt@{ax^2+ay^2+az^2@}}. Строка @var{pen} задает цвет (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется текущий цвет из палитры (@pxref{Palette and colors}). Параметр @var{len} задает фактор длины векторов (если не нуль) или выбирать длину пропорционально расстоянию между точками кривой (если @var{len}=0). Размер по 1-му индексу должен быть 2 или больше. График рисуется для каждой строки если один из массивов матрица. См. также @ref{Vect}. @sref{Traj sample} +Рисует вектора @{@var{ax}, @var{ay}, @var{az}@} вдоль кривой @{@var{x}, @var{y}, @var{z}@}. Длина векторов пропорциональна @math{\sqrt@{ax^2+ay^2+az^2@}}. Строка @var{pen} задает цвет (см. @ref{Line styles}). По умолчанию (@code{pen=""}) используется текущий цвет из палитры (см. @ref{Palette and colors}). Параметр @var{len} задает фактор длины векторов (если не нуль) или выбирать длину пропорционально расстоянию между точками кривой (если @var{len}=0). Размер по 1-му индексу должен быть 2 или больше. График рисуется для каждой строки если один из массивов матрица. См. также @ref{Vect}. @sref{Traj sample} @end deftypefn @c ================================================================== @@ -2759,17 +2781,17 @@ gr->ContZ(c.Sum("z"),0,-1); @subsection TriCont @cindex TriCont -@deftypefn {Method on @code{mglGraph}} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) -@deftypefnx {Method on @code{mglGraph}} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) -@deftypefnx {C function} @code{void} mgl_tricont_xyzcv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{float} zVal) -@deftypefnx {C function} @code{void} mgl_tricont_xyzv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal) +@deftypefn {Метод класса @code{mglGraph}} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) +@deftypefnx {Функция С} @code{void} mgl_tricont_xyzcv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{float} zVal) +@deftypefnx {Функция С} @code{void} mgl_tricont_xyzv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal) Рисует линии уровня поверхности из треугольников при @var{z} = @var{zVal} (или для @var{z=v}[k] если @code{zVal==NAN}). Вершины треугольников задаются индексами @var{id} в массиве точек @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Размер по 1-му индексу массива @var{id} должен быть 3 или больше. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. Массив @var{c} задает цвет треугольников (если @var{id}.ny=@var{c}.nx) или цвет вершин (если @var{x}.nx=@var{c}.nx). См. также @ref{TriPlot}, @ref{Cont}. @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN}) -@deftypefnx {Method on @code{mglGraph}} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN}) -@deftypefnx {C function} @code{void} mgl_tricont_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{num}, @code{float} zVal) -@deftypefnx {C function} @code{void} mgl_tricont_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{num}, @code{float} zVal) +@deftypefn {Метод класса @code{mglGraph}} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN}) +@deftypefnx {Функция С} @code{void} mgl_tricont_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{num}, @code{float} zVal) +@deftypefnx {Функция С} @code{void} mgl_tricont_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{num}, @code{float} zVal) Аналогично предыдущему с вектором @var{v} из @var{num} элементов равно распределенных в интервале [@var{Cmin}, @var{Cmax}]. @end deftypefn @@ -2778,15 +2800,15 @@ gr->ContZ(c.Sum("z"),0,-1); @subsection QuadPlot @cindex QuadPlot -@deftypefn {Method on @code{mglGraph}} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}) -@deftypefnx {Method on @code{mglGraph}} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}) -@deftypefnx {C function} @code{void} mgl_quadplot_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch) -@deftypefnx {C function} @code{void} mgl_quadplot_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch) +@deftypefn {Метод класса @code{mglGraph}} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}) +@deftypefnx {Функция С} @code{void} mgl_quadplot_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch) +@deftypefnx {Функция С} @code{void} mgl_quadplot_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch) Рисует поверхность из четырехугольников. Вершины четырехугольников задаются индексами @var{id} в массиве точек @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Размер по 1-му индексу массива @var{id} должен быть 4 или больше. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. Массив @var{c} задает цвет четырехугольников (если @var{id}.ny=@var{c}.nx) или цвет вершин (если @var{x}.nx=@var{c}.nx). См. также @ref{TriPlot}. @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) -@deftypefnx {C function} @code{void} mgl_quadplot_xy (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}sch, @code{float} zVal) +@deftypefn {Метод класса @code{mglGraph}} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) +@deftypefnx {Функция С} @code{void} mgl_quadplot_xy (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}sch, @code{float} zVal) Как предыдущий с @var{z}[i]=@var{zVal}. @end deftypefn @@ -2796,7 +2818,7 @@ gr->ContZ(c.Sum("z"),0,-1); @cindex Plot @cindex Surf -Эти функции строят графики 1D или 2D функций, заданный текстовыми формулами. Вам не нужно создавать массивы для их построения. Параметр @var{stl} задаект стиль линии (@pxref{Line styles}) для @code{Plot()} или цветовую схему (@pxref{Color scheme}) для @code{Surf()}. Параметр @var{n} задает минимальное число точек по координате(ам) для графика. В настоящее время (v. 1.10) число точек автоматически увеличивается для области резкого изменения функции, но только для 1D графиков (т.е. для Plot()). +Эти функции строят графики 1D или 2D функций, заданный текстовыми формулами. Вам не нужно создавать массивы для их построения. Параметр @var{stl} задаект стиль линии (см. @ref{Line styles}) для @code{Plot()} или цветовую схему (см. @ref{Color scheme}) для @code{Surf()}. Параметр @var{n} задает минимальное число точек по координате(ам) для графика. В настоящее время (v. 1.10) число точек автоматически увеличивается для области резкого изменения функции, но только для 1D графиков (т.е. для Plot()). @deftypefn {Метод класса @code{mglGraph}} @code{void} Plot (@code{const char *}eqY, @code{const char *}stl=@code{""}, @code{float} zVal=@code{NAN}, @code{int} n=@code{100}) @deftypefnx {Функция С} @code{void} mgl_fplot (@code{HMGL} gr, @code{const char *}eqY, @code{const char *}stl, @code{float} zVal, @code{int} n) @@ -2838,7 +2860,7 @@ gr->ContZ(c.Sum("z"),0,-1); @cindex Fit2 @cindex Fit3 -Эти функции подбирают параметры функции для наилучшей аппроксимации данных, т.е. минимизируют сумму @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. При этом аппроксимирующая функция @samp{f} может зависеть от одного аргумента @samp{x} (1D случай), от двух аргументов @samp{x,y} (2D случай) или от трех аргументов @samp{x,y,z} (3D случай). Функция @samp{f} также может зависеть от параметров. Список параметров задается строкой @var{var} (например, @samp{abcd}). Обычно пользователь должен предоставить начальные значения параметров в переменной @var{ini}. Однако, при его отсутствии используются нулевые значения. Параметр @var{print}=@code{true} включает вывод найденной формулы в @var{Message} (@pxref{Error handling}). +Эти функции подбирают параметры функции для наилучшей аппроксимации данных, т.е. минимизируют сумму @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. При этом аппроксимирующая функция @samp{f} может зависеть от одного аргумента @samp{x} (1D случай), от двух аргументов @samp{x,y} (2D случай) или от трех аргументов @samp{x,y,z} (3D случай). Функция @samp{f} также может зависеть от параметров. Список параметров задается строкой @var{var} (например, @samp{abcd}). Обычно пользователь должен предоставить начальные значения параметров в переменной @var{ini}. Однако, при его отсутствии используются нулевые значения. Параметр @var{print}=@code{true} включает вывод найденной формулы в @var{Message} (см. @ref{Error handling}). Функции Fit() и FitS() не рисуют полученные массивы. Они заполняют массив @var{fit} по формуле @samp{f} с найденными коэффициентами и возвращают @math{\chi^2} ошибку аппроксимации. При этом, координаты @samp{x,y,z} равнораспределены в интервале @var{Min}--@var{Max}. Число точек в @var{fit} выбирается максимальным из размера массива @var{fit} и значения переменной @var{FitPnts}. Функции используют библиотеку GSL. @sref{Fitting sample} @@ -2936,18 +2958,18 @@ gr->ContZ(c.Sum("z"),0,-1); Эти функции создают распределения данных. Они не выполняют построение сами по себе. Функции могут быть полезны в случае когда данные пользователя определены на случайно расположенных точка (например, после PIC расчетов) и он хочет построить график, требующий регулярных данных (данных на сетках). Диапазон сеток равен диапазону осей координат Min...Max. Массивы @var{x}, @var{y}, @var{z} определяют положение (координаты) точек. Массив @var{a} задает значения данных. Число точек в результате @var{res} -- максимум из размера @var{res} и значения @var{FitPnts}. -@deftypefn {Method on @code{mglGraph}} @code{void} Hist (@code{mglData &}res, @code{const mglData &}x, @code{const mglData &}a) -@deftypefnx {C function} @code{int} mgl_hist_x (@code{HMGL} gr, @code{HMDT} res, @code{const HMDT} x, @code{const HMDT} a) +@deftypefn {Метод класса @code{mglGraph}} @code{void} Hist (@code{mglData &}res, @code{const mglData &}x, @code{const mglData &}a) +@deftypefnx {Функция С} @code{int} mgl_hist_x (@code{HMGL} gr, @code{HMDT} res, @code{const HMDT} x, @code{const HMDT} a) Создет 1D распределение значений массива @var{a} в диапазоне [Min, Max]. @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{void} Hist (@code{mglData &}res, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}a) -@deftypefnx {C function} @code{int} mgl_hist_xy (@code{HMGL} gr, @code{HMDT} res, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} a) +@deftypefn {Метод класса @code{mglGraph}} @code{void} Hist (@code{mglData &}res, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}a) +@deftypefnx {Функция С} @code{int} mgl_hist_xy (@code{HMGL} gr, @code{HMDT} res, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} a) Создет 2D распределение значений массива @var{a} в диапазоне [Min, Max]. @end deftypefn -@deftypefn {Method on @code{mglGraph}} @code{void} Hist (@code{mglData &}res, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}a) -@deftypefnx {C function} @code{int} mgl_hist_xyz (@code{HMGL} gr, @code{HMDT} res, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} a) +@deftypefn {Метод класса @code{mglGraph}} @code{void} Hist (@code{mglData &}res, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}a) +@deftypefnx {Функция С} @code{int} mgl_hist_xyz (@code{HMGL} gr, @code{HMDT} res, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} a) Создет 3D распределение значений массива @var{a} в диапазоне [Min, Max]. @end deftypefn diff --git a/texinfo/example_en.texi b/texinfo/example_en.texi index 7a29778..ec8029f 100644 --- a/texinfo/example_en.texi +++ b/texinfo/example_en.texi @@ -2734,8 +2734,8 @@ int sample(mglGraph *gr) gr->SubPlot(2,2,1,""); gr->Title("'v' style"); gr->Box(); gr->Flow(a,b,"v"); - gr->SubPlot(2,2,2,""); gr->Title("from edges only"); - gr->Box(); gr->Flow(a,b,"","value -5"); + gr->SubPlot(2,2,2,""); gr->Title("'\\#' style"); + gr->Box(); gr->Flow(a,b,"#"); mglData ex,ey,ez; mgls_prepare3v(&ex,&ey,&ez); gr->SubPlot(2,2,3); gr->Title("3d variant"); gr->Rotate(50,60); @@ -2755,14 +2755,14 @@ int sample(mglGraph *gr) int sample(mglGraph *gr) { mglData a,b; mgls_prepare2v(&a,&b); - gr->SubPlot(2,2,0,""); gr->Title("Flow plot (default)"); + gr->SubPlot(2,2,0,""); gr->Title("Pipe plot (default)"); gr->Light(true); gr->Box(); gr->Pipe(a,b); gr->SubPlot(2,2,1,""); gr->Title("'i' style"); gr->Box(); gr->Pipe(a,b,"i"); - gr->SubPlot(2,2,2,""); gr->Title("from edges only"); - gr->Box(); gr->Pipe(a,b,"",0.05,"value -5"); + gr->SubPlot(2,2,2,""); gr->Title("'\\#' style"); + gr->Box(); gr->Pipe(a,b,"#"); mglData ex,ey,ez; mgls_prepare3v(&ex,&ey,&ez); gr->SubPlot(2,2,3); gr->Title("3d variant"); gr->Rotate(50,60); @@ -3380,10 +3380,10 @@ int sample(mglGraph *gr) mglData a; mgls_prepare2d(&a); gr->Light(true); - gr->SubPlot(2,1,0); gr->Rotate(50,60+3); + gr->SubPlot(2,1,0); gr->Rotate(50,60+1); gr->Box(); gr->Surf(a); - gr->SubPlot(2,1,1); gr->Rotate(50,60-3); + gr->SubPlot(2,1,1); gr->Rotate(50,60-1); gr->Box(); gr->Surf(a); return 0; } diff --git a/texinfo/widget_en.texi b/texinfo/widget_en.texi index 466dc55..e51f7c1 100644 --- a/texinfo/widget_en.texi +++ b/texinfo/widget_en.texi @@ -50,18 +50,22 @@ Creates a window for plotting. Parameter @var{draw} sets a pointer to drawing fu There are some keys handles for manipulating by the plot: 'a', 'd', 'w', 's' for the rotating; ',', '.' for viewing of the previous or next frames in the list; 'r' for the switching of transparency; 'f' for the switching of lightning; 'x' for hiding (closing) the window. @end deftypefn -@deftypefn {Method on @code{mglWindow}} @code{void} RunThr () -@c @deftypefnx {C function} @code{HMGL} mgl_qt_run () -@deftypefnx {C function} @code{HMGL} mgl_fltk_thr () +@deftypefn {Method on @code{mglWindow}} @code{int} RunThr () +@deftypefnx {C function} @code{int} mgl_fltk_thr () Run main loop for event handling in separate thread. Note, right now it work for FLTK windows only. @end deftypefn -@deftypefn {Method on @code{mglWindow}} @code{void} Run () -@deftypefnx {C function} @code{HMGL} mgl_qt_run () -@deftypefnx {C function} @code{HMGL} mgl_fltk_run () +@deftypefn {Method on @code{mglWindow}} @code{int} Run () +@deftypefnx {C function} @code{int} mgl_qt_run () +@deftypefnx {C function} @code{int} mgl_fltk_run () Run main loop for event handling. Usually it should be called in a separate thread or as last function call in @code{main()}. @end deftypefn +@deftypefn {Method on @code{mglWindow}} @code{void} SetClickFunc (@code{void} (*func)(@code{HMGL} gr, @code{void *}p)) +@deftypefnx {C function} @code{void} mgl_set_click_func (@code{void} (*func)(@code{HMGL} gr, @code{void *}p)) +Set callback function @code{func} which will be called on mouse click. +@end deftypefn + @deftypefn {Method on @code{mglWindow}} @code{void} ToggleAlpha () @deftypefnx {C function} @code{int} mgl_wnd_toggle_alpha (@code{HMGL} gr) Switch on/off transparency but do not overwrite switches in user drawing function. diff --git a/todo.txt b/todo.txt index 8478e7c..063d0bf 100644 --- a/todo.txt +++ b/todo.txt @@ -35,7 +35,9 @@ Device 0 (VID=0502 and PID=337d) is UNKNOWN. 21. MGL testing system ??? 22. Export to X3D 23. Try libtcc (TinyCC) as alternative to MGL -- in mgllab??? -24. Use OI & Z for determening {x,y,z} from {xs,ys}. Try to find closest. +24. Use OI & Z for determining {x,y,z} from {xs,ys}. Try to find closest. +25. More accurate intersections in Region +26. Add flag for drawing 3d arrows instead of 2d (S,D -- cube, T -- sq.pyramid, I -- square, O -- sphere???, A,K,V -- ???) ============= UDAV ============= diff --git a/udav/udav_wnd.cpp b/udav/udav_wnd.cpp index 3f70661..edefc9c 100644 --- a/udav/udav_wnd.cpp +++ b/udav/udav_wnd.cpp @@ -292,8 +292,8 @@ void MainWindow::makeMenu() a->setShortcut(Qt::Key_F1); o->addAction(a); // a = new QAction(QPixmap(":/xpm/help-faq.png"), tr("&Examples"), this); // connect(a, SIGNAL(triggered()), this, SLOT(showExamples())); - a->setToolTip(tr("Show examples of MGL usage (Shift+F1).")); - a->setShortcut(Qt::SHIFT+Qt::Key_F1); o->addAction(a); +// a->setToolTip(tr("Show examples of MGL usage (Shift+F1).")); +// a->setShortcut(Qt::SHIFT+Qt::Key_F1); o->addAction(a); a = new QAction(QPixmap(":/xpm/help-faq.png"), tr("H&ints"), this); connect(a, SIGNAL(triggered()), this, SLOT(showHint())); a->setToolTip(tr("Show hints of MGL usage.")); o->addAction(a); diff --git a/widgets/fltk.cpp b/widgets/fltk.cpp index 23ecdfe..0dce809 100644 --- a/widgets/fltk.cpp +++ b/widgets/fltk.cpp @@ -142,12 +142,18 @@ int Fl_MathGL::handle(int code) const Fl_Menu_Item *m = popup->popup(Fl::event_x(), Fl::event_y(), 0, 0, 0); if(m) m->do_callback(wpar, vpar); } - else if(gr->get(MGL_SHOW_POS) && !zoom && !rotate && code==FL_PUSH && Fl::event_button()==FL_LEFT_MOUSE) + else if(!zoom && !rotate && code==FL_PUSH && Fl::event_button()==FL_LEFT_MOUSE) { - mglPoint p = gr->CalcXYZ(Fl::event_x()-x(), Fl::event_y()-y()); - char s[128]; - sprintf(s,"x=%g, y=%g, z=%g",p.x,p.y,p.z); - draw(); fl_color(FL_BLACK); fl_draw(s,40,70); + mglCanvasWnd *g=dynamic_cast(gr); + if(g && g->ClickFunc) g->ClickFunc(draw_par); + if(gr->get(MGL_SHOW_POS)) + { + mglPoint p = gr->CalcXYZ(Fl::event_x()-x(), Fl::event_y()-y()); + if(g) g->LastMousePos = p; + char s[128]; + sprintf(s,"x=%g, y=%g, z=%g",p.x,p.y,p.z); + draw(); fl_color(FL_BLACK); fl_draw(s,40,70); + } } else if((!rotate && !zoom) || Fl::event_button()!=FL_LEFT_MOUSE) { diff --git a/widgets/qt.cpp b/widgets/qt.cpp index 1c983ef..8d27c46 100644 --- a/widgets/qt.cpp +++ b/widgets/qt.cpp @@ -230,8 +230,12 @@ void QMathGL::mousePressEvent(QMouseEvent *ev) if(!zoom && !rotate && ev->button()&Qt::LeftButton) { mglPoint p = gr->CalcXYZ(ev->x(), ev->y()); + mglCanvasWnd *g=dynamic_cast(gr); + if(g) g->LastMousePos = p; mousePos.sprintf("x=%g, y=%g, z=%g",p.x,p.y,p.z); repaint(); + + if(g && g->ClickFunc) g->ClickFunc(draw_par); emit mouseClick(p.x,p.y,p.z); emit posChanged(mousePos); emit objChanged(gr->GetObjId(ev->x(),ev->y())-1); @@ -434,7 +438,7 @@ void QMathGL::exportSTL(QString fname) } } //----------------------------------------------------------------------------- -void QMathGL::exportX3D(QString fname) +/*void QMathGL::exportX3D(QString fname) { if(fname.isEmpty()) fname = gr->PlotId.c_str(); if(fname.isEmpty()) QMessageBox::critical(this, appName, tr("No filename."),QMessageBox::Ok,0,0); @@ -444,7 +448,7 @@ void QMathGL::exportX3D(QString fname) mgl_write_x3d(gr,setExtension(fname,"svg").toAscii(), appName.toAscii()); setlocale(LC_NUMERIC, ""); } -} +}*/ //----------------------------------------------------------------------------- void QMathGL::exportTGA(QString fname) { diff --git a/widgets/window.cpp b/widgets/window.cpp index 61a9e7b..203542a 100644 --- a/widgets/window.cpp +++ b/widgets/window.cpp @@ -116,6 +116,8 @@ void mgl_wnd_animation(HMGL gr) { mglCanvasWnd *g = dynamic_cast(gr); if(g) g->Animation(); } void mgl_setup_window(HMGL gr, int clf_upd, int showpos) { mglCanvasWnd *g = dynamic_cast(gr); if(g) g->Setup(clf_upd, showpos); } +void mgl_set_click_func(HMGL gr, void (*func)(void *p)) +{ mglCanvasWnd *g = dynamic_cast(gr); if(g) g->ClickFunc = func; } //----------------------------------------------------------------------------- void mgl_wnd_toggle_alpha_(uintptr_t *gr) { mglCanvasWnd *g = dynamic_cast((HMGL)(*gr)); @@ -208,17 +210,15 @@ int mgl_qt_run_() { return mgl_qt_run(); } // mglDraw class handling // //----------------------------------------------------------------------------- -int mgl_draw_class(mglBase *gr, void *p) +int mgl_draw_class(mglBase *gr, void *p) // so stupid way to save mglDraw class inheritance :( { - mglGraph g(gr); - mglWindow *w = (mglWindow *)p; // so stupid way to save mglDraw class inheritance :( + mglGraph g(gr); mglWindow *w = (mglWindow *)p; return (w && w->dr) ? w->dr->Draw(&g) : 0; } -void mgl_reload_class(void *p) -{ - mglWindow *w = (mglWindow *)p; // so stupid way to save mglDraw class inheritance :( - if(w && w->dr) w->dr->Reload(); -} +void mgl_reload_class(void *p) // so stupid way to save mglDraw class inheritance :( +{ mglWindow *w = (mglWindow *)p; if(w && w->dr) w->dr->Reload();} +void mgl_click_class(void *p) // so stupid way to save mglDraw class inheritance :( +{ mglWindow *w = (mglWindow *)p; if(w && w->dr) w->dr->Click(); } //----------------------------------------------------------------------------- int mgl_draw_graph(mglBase *gr, void *p) { -- 2.30.2