From a7ee2f482cf64b08b5e8d7a6c7497a6f591bc3ec Mon Sep 17 00:00:00 2001 From: Dimitrios Eftaxiopoulos Date: Tue, 27 Jan 2015 15:50:35 +0200 Subject: [PATCH] Imported Upstream version 2.3.1 --- CMakeLists.txt | 39 +- ChangeLog.txt | 23 ++ examples/CMakeLists.txt | 7 + examples/full_test.cpp | 7 +- examples/mgl_module.cpp | 33 ++ include/config.h.in | 1 + include/mgl2/abstract.h | 6 +- include/mgl2/base.h | 4 +- include/mgl2/base_cf.h | 8 +- include/mgl2/canvas.h | 3 +- include/mgl2/canvas_cf.h | 11 +- include/mgl2/data.h | 8 +- include/mgl2/datac.h | 2 +- include/mgl2/define.h | 10 +- include/mgl2/fit.h | 2 + include/mgl2/fltk.h | 15 +- include/mgl2/glut.h | 3 + include/mgl2/mgl.h | 78 ++-- include/mgl2/mpi.h | 3 +- include/mgl2/parser.h | 7 + include/mgl2/prim.h | 5 + include/mgl2/qt.h | 3 + include/mgl2/type.h | 6 +- include/mgl2/window.h | 4 +- include/mgl2/wnd.h | 15 +- json/CMakeLists.txt | 2 +- lang/CMakeLists.txt | 3 + lang/mathgl.i | 3 + lang/mgl.i | 4 +- lang/type.i | 1 + mgltex/CMakeLists.txt | 56 +++ mgltex/mgltex.dtx | 790 +++++++++++++++++++++++++++++++++++++ mgltex/mgltex.installer | 61 +++ mgltex/mgltex.pdf | Bin 0 -> 210387 bytes mgltex/mgltex.sty | 536 +++++++++++++++++++++++++ mgltex/sample.tex | 340 ++++++++++++++++ src/CMakeLists.txt | 11 +- src/addon.cpp | 3 +- src/axis.cpp | 44 ++- src/base.cpp | 10 +- src/base_cf.cpp | 19 + src/canvas.cpp | 22 +- src/canvas_cf.cpp | 4 +- src/complex.cpp | 4 +- src/complex_io.cpp | 4 +- src/crust.cpp | 2 +- src/data.cpp | 4 +- src/data_io.cpp | 8 +- src/data_png.cpp | 124 +++--- src/def_font.cpp | 9 +- src/evalc.cpp | 1 - src/exec.cpp | 20 +- src/export.cpp | 58 ++- src/export_2d.cpp | 17 +- src/export_3d.cpp | 1 + src/fit.cpp | 48 ++- src/font.cpp | 21 +- src/parser.cpp | 54 ++- src/pixel.cpp | 66 +++- src/prc.cpp | 2 +- src/prim.cpp | 62 +++ src/window.cpp | 6 +- texinfo/classes.dia | Bin 3500 -> 4561 bytes texinfo/classes.pdf | Bin 53847 -> 12984 bytes texinfo/classes.png | Bin 53573 -> 138494 bytes texinfo/concept_ru.texi | 2 +- texinfo/core_en.texi | 44 ++- texinfo/core_ru.texi | 69 +++- texinfo/example_en.texi | 3 +- texinfo/example_ru.texi | 2 +- texinfo/parse_en.texi | 149 ++++++- texinfo/parse_ru.texi | 146 ++++++- texinfo/version.texi | 2 +- texinfo/web_en.texi | 114 ++---- texinfo/web_ru.texi | 116 ++---- texinfo/widget_en.texi | 11 +- texinfo/widget_ru.texi | 7 + todo.txt | 10 +- udav/CMakeLists.txt | 2 +- udav/udav_wnd.cpp | 21 - utils/mglconv.cpp | 28 +- utils/mglview.cpp | 31 +- widgets/CMakeLists.txt | 6 +- widgets/fltk.cpp | 31 +- widgets/qt.cpp | 16 +- widgets/qt4/CMakeLists.txt | 5 +- widgets/qt5/CMakeLists.txt | 5 +- 87 files changed, 2991 insertions(+), 552 deletions(-) create mode 100644 examples/mgl_module.cpp create mode 100644 mgltex/CMakeLists.txt create mode 100644 mgltex/mgltex.dtx create mode 100644 mgltex/mgltex.installer create mode 100644 mgltex/mgltex.pdf create mode 100644 mgltex/mgltex.sty create mode 100644 mgltex/sample.tex diff --git a/CMakeLists.txt b/CMakeLists.txt index e465bad..4a4076e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ endif(NOT CMAKE_BUILD_TYPE) set(CMAKE_VERBOSE_MAKEFILE ON) #set(MathGL_VERSION_MAJOR 2) #set(MathGL_VERSION_MINOR 2.2) -set(MathGL_SOVERSION 7.3.0) +set(MathGL_SOVERSION 7.4.0) MACRO(MGL_DEPENDENT_OPTION option doc default depends1 force1 depends2 force2) @@ -71,7 +71,7 @@ option(enable-pthread "Enable POSIX threads support" OFF) option(enable-openmp "Enable OpenMP support" ON) option(enable-lgpl "Enable only LGPL part of MathGL") option(enable-mgl2 "Use names 'libmgl2-*' instead of 'libmgl-*'") -#option(enable-ltdl "Enable loading modules support") +option(enable-ltdl "Enable loading modules support") CMAKE_DEPENDENT_OPTION(enable-doc-site "Enable HTML documentation for website" OFF "NOT enable-all-docs" ON) CMAKE_DEPENDENT_OPTION(enable-doc-html "Enable HTML documentation" OFF "NOT enable-all-docs" ON) CMAKE_DEPENDENT_OPTION(enable-doc-info "Enable INFO documentation" OFF "NOT enable-all-docs" ON) @@ -80,6 +80,7 @@ CMAKE_DEPENDENT_OPTION(enable-doc-pdf-en "Enable English PDF documentation" OFF CMAKE_DEPENDENT_OPTION(enable-doc-prc "Enable PDF samples for HTML docs" OFF "NOT enable-all-docs" ON) CMAKE_DEPENDENT_OPTION(enable-doc-json "Enable JSON samples for HTML docs" OFF "NOT enable-all-docs" ON) option(enable-texi2html "Use texi2html (obsolete package) instead of texi2any" OFF) +CMAKE_DEPENDENT_OPTION(enable-mgltex "Enable installation of mgltex package (MGL scripts in LATEX document)" OFF "NOT enable-lgpl" OFF) CMAKE_DEPENDENT_OPTION(enable-zlib "Enable zlib support" ON "NOT enable-all" ON) CMAKE_DEPENDENT_OPTION(enable-png "Enable png support" ON "NOT enable-all" ON) @@ -99,7 +100,7 @@ CMAKE_DEPENDENT_OPTION(enable-qt5asqt "Set Qt5 as default libmgl-qt" ON "enable- if(UNIX AND enable-rvalue) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") endif(UNIX AND enable-rvalue) - + # MSVC does not require any special flags if(enable-qt4 OR enable-qt5) @@ -134,7 +135,7 @@ include(TestBigEndian) TEST_BIG_ENDIAN(WORDS_BIGENDIAN) if(WORDS_BIGENDIAN) - ADD_DEFINITIONS("-DWORDS_BIGENDIAN") + ADD_DEFINITIONS(-DWORDS_BIGENDIAN) endif(WORDS_BIGENDIAN) CHECK_FUNCTION_EXISTS(sin MGL_SIN) @@ -151,7 +152,7 @@ if(NOT MGL_SIN) endif(MGL_SIN_M) endif(NOT MGL_SIN) if(HAVE_MEMRCHR) - ADD_DEFINITIONS("-DHAVE_MEMRCHR") + ADD_DEFINITIONS(-DHAVE_MEMRCHR) endif(HAVE_MEMRCHR) include(CheckCXXSourceCompiles) @@ -252,18 +253,18 @@ else(enable-gsl) set(MGL_HAVE_GSL 0) endif(enable-gsl) -#if(enable-all OR enable-ltdl) -# set(MGL_HAVE_LTDL 1) -# find_library(LTDL_LIB ltdl) -# find_path(LTDL_INCLUDE_DIR ltdl.h) -# if(NOT LTDL_LIB OR NOT LTDL_INCLUDE_DIR) -# message(SEND_ERROR "${LTDL_LIB}") -# message(SEND_ERROR "${LTDL_INCLUDE_DIR}") -# message(SEND_ERROR "Couldn't find LTDL library.") -# endif(NOT LTDL_LIB OR NOT LTDL_INCLUDE_DIR) -#else(enable-all OR enable-ltdl) -# set(MGL_HAVE_LTDL 0) -#endif(enable-all OR enable-ltdl) +if(enable-all OR enable-ltdl) + set(MGL_HAVE_LTDL 1) + find_library(LTDL_LIB ltdl) + find_path(LTDL_INCLUDE_DIR ltdl.h) + if(NOT LTDL_LIB OR NOT LTDL_INCLUDE_DIR) + message(SEND_ERROR "${LTDL_LIB}") + message(SEND_ERROR "${LTDL_INCLUDE_DIR}") + message(SEND_ERROR "Couldn't find LTDL library.") + endif(NOT LTDL_LIB OR NOT LTDL_INCLUDE_DIR) +else(enable-all OR enable-ltdl) + set(MGL_HAVE_LTDL 0) +endif(enable-all OR enable-ltdl) if(enable-hdf4) set(MGL_HAVE_HDF4 1) @@ -507,3 +508,7 @@ if(NOT MSVC AND NOT BORLAND) endif(MGL_HAVE_DOC_HTML OR MGL_HAVE_DOC_SITE OR MGL_HAVE_DOC_INFO OR MGL_HAVE_DOC_PDF_RU OR MGL_HAVE_DOC_PDF_EN ) endif(NOT MSVC AND NOT BORLAND) + +if(enable-mgltex) + add_subdirectory( mgltex ) +endif(enable-mgltex) diff --git a/ChangeLog.txt b/ChangeLog.txt index 7b56ef2..5c2363f 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,3 +1,26 @@ +2.3.1 Released 20 October 2014 + +* Add MGL command 'load' for loading MGL commands from external DLL (or .so) module. +* Add Logo() function to draw bitmap (logo), which is stretched along whole axis range +* Add MGL command 'reset' which restore default settings and clear image (i.e. call DefaultPlotParam()). +* Change y coordinate at x-z projection. +* Improve projection of 'unrotatable' objects (like legend, title, ...). +* Add projection (Ternary&8) which is the same as usual (Ternary&4) but don't print text on projections +* Improve orientation of axis ticks and labels. +* Add mglWnd::SetDrawFunc(). +* Add mgl_set_global_warn() and mgl_get_global_warn() for set/get messages of global scope. +* Make copying private of mglGraph and derived. +* Add virtual destructors. +* Add some static functions for mglGraph. +* Add option "-n" to mglconv to disable automatic saving of the image. +* Add option "-s" to mglview and mglconv to run setup script before the main one. +* Become compatible with giflib 5.1. +* Add light scaling at MGLD import. +* Add scaling of frames at Adjust(). +* Possible bugfix for 32bit gcc. +* Update docs. + + 2.3 Released 7 August 2014 * Add background image, which allow in particular semi-transparent background color. Correspondingly add function Rasterize() for saving current image as background, and function LoadBackground() for loading background image from PNG or JPEG file. diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 0d0edaa..74ac689 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -32,3 +32,10 @@ if(enable-qt) target_link_libraries(mgl_qt_example mgl-qt4) endif(enable-qt5) endif(enable-qt) + +if(MGL_HAVE_LTDL) + include_directories(${LTDL_INCLUDE_DIR}) + add_library(mgl_module MODULE mgl_module.cpp) + target_link_libraries(mgl_module mgl) # for compatibility with win32 +endif(MGL_HAVE_LTDL) + diff --git a/examples/full_test.cpp b/examples/full_test.cpp index b15981e..c6605dc 100644 --- a/examples/full_test.cpp +++ b/examples/full_test.cpp @@ -64,9 +64,9 @@ void mgls_prepare3v(mglData *ex, mglData *ey, mglData *ez); void save(mglGraph *gr,const char *name,const char *suf); void test(mglGraph *gr) { - gr->Rotate(40,60); gr->Fog(1); gr->Box(); return; +// gr->Rotate(40,60); gr->Fog(1); gr->Box(); return; mglParse par; - par.Execute(gr,"subplot 1 1 0:#rotate 40 60\nperspective 0.9:box:axis\n"); + par.Execute(gr,"load '/home/balakin/mathgl-code/mathgl-2x/build/examples/libmgl_module.so':baxis\n"); // par.Execute(gr,"subplot 1 1 0:#rotate 40 60\nperspective 1.22:box:axis\n"); return; } @@ -424,7 +424,8 @@ int main(int argc,char **argv) printf("Global:%s\n",mglGlobalMess.c_str()); delete gr; return 0; } - else if(dotest==2) + else if(dotest==2) // NOTE mgl_gen_fnt[###][6] have to be updated if new glyphs will be added to built-in font + { mgl_create_cpp_font(gr->Self(), L"!-~,¡-ÿ,̀-̏,Α-ω,ϑ,ϕ,ϖ,ϰ,ϱ,ϵ,А-я,ℏ,ℑ,ℓ,ℜ,←-↙,∀-∯,≠-≯,⟂"); delete gr; return 0; } else if(dotest==4) diff --git a/examples/mgl_module.cpp b/examples/mgl_module.cpp new file mode 100644 index 0000000..34ecf67 --- /dev/null +++ b/examples/mgl_module.cpp @@ -0,0 +1,33 @@ +#include "mgl2/mgl.h" +#include "mgl2/base.h" +#include "mgl2/parser.h" +//----------------------------------------------------------------------------- +int test1(mglGraph *gr, long , mglArg *a, const char *k, const char *) +{ + int res=0; + if(!strcmp(k,"")) { gr->Box(); gr->Axis(); } + else if(!strcmp(k,"s")) { gr->Box(); gr->Axis(a[0].s.c_str()); } + else res = 1; return res; +} +//----------------------------------------------------------------------------- +int test2(mglGraph *gr, long , mglArg *a, const char *k, const char *) +{ + int res=0; + if(!strcmp(k,"nnnns")) + { + gr->FaceZ(mglPoint(a[0].v-a[2].v/2,a[1].v-a[3].v/2),a[2].v,a[3].v,"r"); + gr->Putsw(mglPoint(a[0].v,a[1].v),a[4].w.c_str()); + } + else if(!strcmp(k,"nnnnss")) + { + gr->FaceZ(mglPoint(a[0].v-a[2].v/2,a[1].v-a[3].v/2),a[2].v,a[3].v,a[5].s.c_str()); + gr->Putsw(mglPoint(a[0].v,a[1].v),a[4].w.c_str()); + } + else res = 1; return res; +} +//----------------------------------------------------------------------------- +mglCommand mgl_cmd_extra[] = { + {"baxis","Box + axis","baxis ['stl'='']", test1, 12}, + {"trect","Box + text","trect x0 y0 dx dy 'text' ['stl'='']", test2, 13}, + {"",0,0,0,0}}; +//----------------------------------------------------------------------------- diff --git a/include/config.h.in b/include/config.h.in index e048547..de1ea33 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -17,6 +17,7 @@ #define MGL_HAVE_C99_COMPLEX ${MGL_HAVE_C99_COMPLEX} #endif +#define MGL_HAVE_LTDL ${MGL_HAVE_LTDL} #define MGL_HAVE_RVAL ${MGL_HAVE_RVAL} #define MGL_HAVE_ZLIB ${MGL_HAVE_ZLIB} #define MGL_HAVE_PNG ${MGL_HAVE_PNG} diff --git a/include/mgl2/abstract.h b/include/mgl2/abstract.h index e9342a4..86041a6 100644 --- a/include/mgl2/abstract.h +++ b/include/mgl2/abstract.h @@ -139,7 +139,7 @@ public: // { return j>0 ? (j0 ? (k @@ -46,7 +48,7 @@ #endif -#define MGL_VER2 3.0 // minor version of MathGL 2.* (like 1.3 for v.2.1.3) +#define MGL_VER2 3.1 // minor version of MathGL 2.* (like 1.3 for v.2.1.3) //----------------------------------------------------------------------------- #ifdef WIN32 //_MSC_VER needs this before math.h #define _USE_MATH_DEFINES @@ -323,6 +325,12 @@ void MGL_EXPORT mgl_wcslwr(wchar_t *str); void MGL_EXPORT mgl_wcstombs(char *dst, const wchar_t *src, int size); /// Clear internal data for speeding up FFT and Hankel transforms void MGL_EXPORT mgl_clear_fft(); +/// Set global warning message +void MGL_EXPORT mgl_set_global_warn(const char *text); +void MGL_EXPORT mgl_set_global_warn_(const char *text,int); +/// Get text of global warning message(s) +MGL_EXPORT_PURE const char *mgl_get_global_warn(); +int MGL_EXPORT mgl_get_global_warn_(char *out, int len); #ifdef __cplusplus } #endif diff --git a/include/mgl2/fit.h b/include/mgl2/fit.h index 0b8a1a0..8dda570 100644 --- a/include/mgl2/fit.h +++ b/include/mgl2/fit.h @@ -46,6 +46,7 @@ HMDT MGL_EXPORT mgl_hist_xy(HMGL gr, HCDT x, HCDT y, HCDT a, const char *opt); HMDT MGL_EXPORT mgl_hist_xyz(HMGL gr, HCDT x, HCDT y, HCDT z, HCDT a, const char *opt); void MGL_EXPORT mgl_puts_fit(HMGL gr, double x, double y, double z, const char *prefix, const char *font, double size); +mreal MGL_EXPORT mgl_get_fit_chi(); //----------------------------------------------------------------------------- uintptr_t MGL_EXPORT mgl_fit_1_(uintptr_t* gr, uintptr_t* y, const char *eq, const char *vars, uintptr_t *ini, const char *opt,int, int l, int n); uintptr_t MGL_EXPORT mgl_fit_2_(uintptr_t* gr, uintptr_t* z, const char *eq, const char *vars, uintptr_t *ini, const char *opt,int, int l, int n); @@ -63,6 +64,7 @@ uintptr_t MGL_EXPORT mgl_hist_xy_(uintptr_t* gr, uintptr_t* x, uintptr_t* y, uin uintptr_t MGL_EXPORT mgl_hist_xyz_(uintptr_t* gr, uintptr_t* x, uintptr_t* y, uintptr_t* z, uintptr_t* a, const char *opt,int); void MGL_EXPORT mgl_puts_fit_(uintptr_t* gr, mreal *x, mreal *y, mreal *z, const char *prefix, const char *font, mreal *size, int l, int n); +mreal MGL_EXPORT mgl_get_fit_chi_(); //----------------------------------------------------------------------------- #ifdef __cplusplus } diff --git a/include/mgl2/fltk.h b/include/mgl2/fltk.h index 9ddf91f..df70be4 100644 --- a/include/mgl2/fltk.h +++ b/include/mgl2/fltk.h @@ -42,6 +42,8 @@ int MGL_EXPORT mgl_fltk_thr(); /// Wrapper class for windows displaying graphics class MGL_EXPORT mglFLTK : public mglWnd { + mglFLTK(const mglFLTK &t) {} // copying is not allowed + const mglFLTK &operator=(const mglFLTK &t) { return t; } public: mglFLTK(const char *title="MathGL") : mglWnd() { gr = mgl_create_graph_fltk(0,title,0,0); } @@ -52,6 +54,7 @@ public: mglFLTK(mglDraw *draw, const char *title="MathGL") : mglWnd() { gr = mgl_create_graph_fltk(draw?mgl_draw_class:0,title,draw,mgl_reload_class); mgl_set_click_func(gr, mgl_click_class); } + virtual ~mglFLTK() {} int Run() { return mgl_fltk_run(); } ///< Run main loop for event handling int RunThr() { return mgl_fltk_thr(); } ///< Run main loop for event handling in separate thread }; @@ -119,18 +122,18 @@ protected: const Fl_Menu_Item *popup; ///< pointer to popup menu items Fl_Widget *wpar; ///< widget for popup menu - void *vpar; ///< parameter for popup menu - mreal tet,phi; ///< rotation angles + void *vpar; ///< parameter for popup menu + mreal tet,phi; ///< rotation angles bool rotate; ///< flag for handle mouse - bool zoom; ///< flag for zoom by mouse + bool zoom; ///< flag for zoom by mouse bool wire; - mreal x1,x2,y1,y2; ///< zoom region - int flag; ///< bitwise flag for general state (1-Alpha, 2-Light) + mreal x1,x2,y1,y2; ///< zoom region + int flag; ///< bitwise flag for general state (1-Alpha, 2-Light) int x0,y0,xe,ye; ///< mouse position char pos[128]; virtual void draw(); ///< quick drawing function - int handle(int code); ///< handle mouse events + int handle(int code); ///< handle mouse events void resize(int x, int y, int w, int h); ///< resize control }; //----------------------------------------------------------------------------- diff --git a/include/mgl2/glut.h b/include/mgl2/glut.h index 9a5c539..11fb0d5 100644 --- a/include/mgl2/glut.h +++ b/include/mgl2/glut.h @@ -51,6 +51,8 @@ void MGL_EXPORT mgl_glut_animation(HMGL gr); //----------------------------------------------------------------------------- class MGL_EXPORT mglGLUT: public mglGraph { + mglGLUT(const mglGLUT &t) {} // copying is not allowed + const mglGLUT &operator=(const mglGLUT &t) { return t; } public: mglGLUT(int (*draw)(HMGL gr, void *p), const char *title="MathGL", void *par=0, void (*load)(void *p)=0) : mglGraph(-1) { gr = mgl_create_graph_glut(draw,title,par,load); } @@ -58,6 +60,7 @@ public: { gr = mgl_create_graph_glut(draw?mgl_draw_graph:0,title,(void*)draw,0); } mglGLUT(mglDraw *draw=0, const char *title="MathGL") : mglGraph(-1) { gr = mgl_create_graph_glut(draw?mgl_draw_class:0,title,draw,mgl_reload_class); } + virtual ~mglGLUT() {} inline void ToggleAlpha() ///< Switch on/off transparency (do not overwrite user settings) { mgl_glut_toggle_alpha(gr); } diff --git a/include/mgl2/mgl.h b/include/mgl2/mgl.h index 91530bf..a27d5a5 100644 --- a/include/mgl2/mgl.h +++ b/include/mgl2/mgl.h @@ -24,14 +24,17 @@ #ifdef __cplusplus #include "mgl2/data.h" #include "mgl2/datac.h" +#include //----------------------------------------------------------------------------- /// Wrapper class for all graphics class MGL_EXPORT mglGraph { + mglGraph(const mglGraph &t) {} // copying is not allowed + const mglGraph &operator=(const mglGraph &t) { return t; } protected: HMGL gr; public: - inline mglGraph(int kind=0, int width=600, int height=400) + mglGraph(int kind=0, int width=600, int height=400) { if(kind==-1) gr=NULL; #if MGL_HAVE_OPENGL @@ -39,13 +42,11 @@ public: #else else if(kind==1) { gr=mgl_create_graph(width, height); - mglGlobalMess += "OpenGL support was disabled. Please, enable it and rebuild MathGL.\n"; } + SetGlobalWarn("OpenGL support was disabled. Please, enable it and rebuild MathGL."); } #endif else gr=mgl_create_graph(width, height); } - inline mglGraph(const mglGraph &graph) - { gr = graph.gr; mgl_use_graph(gr,1); } - inline mglGraph(HMGL graph) + mglGraph(HMGL graph) { gr = graph; mgl_use_graph(gr,1); } virtual ~mglGraph() { if(mgl_use_graph(gr,-1)<1) mgl_delete_graph(gr); } @@ -129,6 +130,8 @@ public: inline void RestoreFont() { mgl_restore_font(gr); } /// Set to use or not text rotation inline void SetRotatedText(bool rotated) { mgl_set_rotated_text(gr, rotated); } + /// Set default font for all new HMGL and mglGraph objects + static inline void SetDefFont(const char *name, const char *path=NULL) { mgl_def_font(name,path); } /// Set default palette inline void SetPalette(const char *colors) { mgl_set_palette(gr, colors); } @@ -148,8 +151,16 @@ public: inline int GetWarn() { return mgl_get_warn(gr);} /// Set warning code ant fill message inline void SetWarn(int code, const char *info) { mgl_set_warn(gr,code,info); } - /// Set buffer for warning messages + /// Get text of warning message(s) inline const char *Message() { return mgl_get_mess(gr); } + /// Set global warning message + static inline void SetGlobalWarn(const char *text) { mgl_set_global_warn(text); } + /// Get text of global warning message(s) + static inline const char *GlobalWarn() { return mgl_get_global_warn(); } + /// Suppress printing warnings to stderr + static inline void SuppressWarn(bool on) { mgl_suppress_warn(on); } + /// Check if MathGL version is valid (return false) or not (return true) + static inline bool CheckVersion(const char *ver) { return mgl_check_version(ver); } /// Set axis range scaling -- simplified way to shift/zoom axis range -- need to replot whole image! inline void ZoomAxis(mglPoint p1=mglPoint(0,0,0,0), mglPoint p2=mglPoint(1,1,1,1)) @@ -189,7 +200,7 @@ public: /// Set axis origin inline void SetOrigin(mglPoint p) { mgl_set_origin(gr, p.x, p.y, p.z); } - inline void SetOrigin(double x0, double y0, double z0=NaN) + inline void SetOrigin(double x0, double y0, double z0=mglNaN) { mgl_set_origin(gr, x0, y0, z0); } /// Set the transformation formulas for coordinate @@ -230,7 +241,7 @@ public: inline void AddTick(char dir, double val, const wchar_t *lbl) { mgl_add_tickw(gr,dir,val,lbl); } /// Set the ticks parameters and string for its factor - inline void SetTicks(char dir, double d=0, int ns=0, double org=NaN, const char *factor="") + inline void SetTicks(char dir, double d=0, int ns=0, double org=mglNaN, const char *factor="") { mgl_set_ticks_fact(gr, dir, d, ns, org, factor); } inline void SetTicks(char dir, double d, int ns, double org, const wchar_t *factor) { mgl_set_ticks_factw(gr, dir, d, ns, org, factor); } @@ -558,6 +569,11 @@ public: /// Draws the arc around axis 'z' with center at p0 and starting from p1, by color stl and angle a (in degrees) inline void Arc(mglPoint p0, mglPoint p1, double a, const char *stl="r") { mgl_arc_ext(gr, p0.x,p0.y,p0.z, 0,0,1, p1.x,p1.y,p0.z, a,stl); } + /// Draws bitmap (logo) which is stretched along whole axis range + inline void Logo(long w, long h, const unsigned char *rgba, bool smooth=false, const char *opt="") + { mgl_logo(gr, w, h, rgba, smooth, opt); } + inline void Logo(const char *fname, bool smooth=false, const char *opt="") + { mgl_logo_file(gr, fname, smooth, opt); } /// Print text in position p with specified font inline void Putsw(mglPoint p,const wchar_t *text,const char *font=":C",double size=-1) @@ -1061,43 +1077,43 @@ public: { mgl_pipe_3d(gr, &ax, &ay, &az, sch, r0, opt); } /// Draw density plot for data at x = sVal - inline void DensX(const mglDataA &a, const char *stl="", double sVal=NaN, const char *opt="") + inline void DensX(const mglDataA &a, const char *stl="", double sVal=mglNaN, const char *opt="") { mgl_dens_x(gr, &a, stl, sVal, opt); } /// Draw density plot for data at y = sVal - inline void DensY(const mglDataA &a, const char *stl="", double sVal=NaN, const char *opt="") + inline void DensY(const mglDataA &a, const char *stl="", double sVal=mglNaN, const char *opt="") { mgl_dens_y(gr, &a, stl, sVal, opt); } /// Draw density plot for data at z = sVal - inline void DensZ(const mglDataA &a, const char *stl="", double sVal=NaN, const char *opt="") + inline void DensZ(const mglDataA &a, const char *stl="", double sVal=mglNaN, const char *opt="") { mgl_dens_z(gr, &a, stl, sVal, opt); } /// Draw contour lines for data at x = sVal - inline void ContX(const mglDataA &a, const char *stl="", double sVal=NaN, const char *opt="") + inline void ContX(const mglDataA &a, const char *stl="", double sVal=mglNaN, const char *opt="") { mgl_cont_x(gr, &a, stl, sVal, opt); } - inline void ContX(const mglDataA &v, const mglDataA &a, const char *stl="", double sVal=NaN, const char *opt="") + inline void ContX(const mglDataA &v, const mglDataA &a, const char *stl="", double sVal=mglNaN, const char *opt="") { mgl_cont_x_val(gr, &v, &a, stl, sVal, opt); } /// Draw contour lines for data at y = sVal - inline void ContY(const mglDataA &a, const char *stl="", double sVal=NaN, const char *opt="") + inline void ContY(const mglDataA &a, const char *stl="", double sVal=mglNaN, const char *opt="") { mgl_cont_y(gr, &a, stl, sVal, opt); } - inline void ContY(const mglDataA &v, const mglDataA &a, const char *stl="", double sVal=NaN, const char *opt="") + inline void ContY(const mglDataA &v, const mglDataA &a, const char *stl="", double sVal=mglNaN, const char *opt="") { mgl_cont_y_val(gr, &v, &a, stl, sVal, opt); } /// Draw contour lines for data at z = sVal - inline void ContZ(const mglDataA &a, const char *stl="", double sVal=NaN, const char *opt="") + inline void ContZ(const mglDataA &a, const char *stl="", double sVal=mglNaN, const char *opt="") { mgl_cont_z(gr, &a, stl, sVal, opt); } - inline void ContZ(const mglDataA &v, const mglDataA &a, const char *stl="", double sVal=NaN, const char *opt="") + inline void ContZ(const mglDataA &v, const mglDataA &a, const char *stl="", double sVal=mglNaN, const char *opt="") { mgl_cont_z_val(gr, &v, &a, stl, sVal, opt); } /// Draw solid contours for data at x = sVal - inline void ContFX(const mglDataA &a, const char *stl="", double sVal=NaN, const char *opt="") + inline void ContFX(const mglDataA &a, const char *stl="", double sVal=mglNaN, const char *opt="") { mgl_contf_x(gr, &a, stl, sVal, opt); } - inline void ContFX(const mglDataA &v, const mglDataA &a, const char *stl="", double sVal=NaN, const char *opt="") + inline void ContFX(const mglDataA &v, const mglDataA &a, const char *stl="", double sVal=mglNaN, const char *opt="") { mgl_contf_x_val(gr, &v, &a, stl, sVal, opt); } /// Draw solid contours for data at y = sVal - inline void ContFY(const mglDataA &a, const char *stl="", double sVal=NaN, const char *opt="") + inline void ContFY(const mglDataA &a, const char *stl="", double sVal=mglNaN, const char *opt="") { mgl_contf_y(gr, &a, stl, sVal, opt); } - inline void ContFY(const mglDataA &v, const mglDataA &a, const char *stl="", double sVal=NaN, const char *opt="") + inline void ContFY(const mglDataA &v, const mglDataA &a, const char *stl="", double sVal=mglNaN, const char *opt="") { mgl_contf_y_val(gr, &v, &a, stl, sVal, opt); } /// Draw solid contours for data at z = sVal - inline void ContFZ(const mglDataA &a, const char *stl="", double sVal=NaN, const char *opt="") + inline void ContFZ(const mglDataA &a, const char *stl="", double sVal=mglNaN, const char *opt="") { mgl_contf_z(gr, &a, stl, sVal, opt); } - inline void ContFZ(const mglDataA &v, const mglDataA &a, const char *stl="", double sVal=NaN, const char *opt="") + inline void ContFZ(const mglDataA &v, const mglDataA &a, const char *stl="", double sVal=mglNaN, const char *opt="") { mgl_contf_z_val(gr, &v, &a, stl, sVal, opt); } /// Draw curve for formula with x in x-axis range @@ -1214,8 +1230,11 @@ public: inline void PutsFit(mglPoint p, const char *prefix=0, const char *font="", double size=-1) { mgl_puts_fit(gr, p.x, p.y, p.z, prefix, font, size); } /// Get last fitted formula - inline const char *GetFit() + inline const char *GetFit() const { return mgl_get_fit(gr); } + /// Get chi for last fitted formula + static inline mreal GetFitChi() + { return mgl_get_fit_chi(); } /// Solve PDE with x,y,z in range [Min, Max] inline mglData PDE(const char *ham, const mglDataA &ini_re, const mglDataA &ini_im, double dz=0.1, double k0=100, const char *opt="") @@ -1272,7 +1291,11 @@ public: mglParse(mglParse &p) { pr = p.pr; mgl_use_parser(pr,1); } mglParse(bool setsize=false) { pr=mgl_create_parser(); mgl_parser_allow_setsize(pr, setsize); } - virtual ~mglParse() { if(mgl_use_parser(pr,-1)<1) mgl_delete_parser(pr); } + virtual ~mglParse() + { +#pragma omp critical + if(mgl_use_parser(pr,-1)<1) mgl_delete_parser(pr); + } /// Get pointer to internal mglParser object inline HMPR Self() { return pr; } /// Parse and draw single line of the MGL script @@ -1307,6 +1330,9 @@ public: /// Get number of defined commands inline long GetCmdNum() { return mgl_parser_cmd_num(pr); } + /// Load new commands from external dynamic Library (must have "const mglCommand *mgl_cmd_extra" variable) + inline void LoadDLL(const char *fname) + { mgl_parser_load(pr, fname); } /// Set value for parameter $N inline void AddParam(int id, const char *str) @@ -1319,6 +1345,8 @@ public: inline void AllowSetSize(bool allow) { mgl_parser_allow_setsize(pr, allow); } /// Allow reading/saving files inline void AllowFileIO(bool allow) { mgl_parser_allow_file_io(pr, allow); } + /// Allow loading commands from external libraries + inline void AllowDllCall(bool allow) { mgl_parser_allow_dll_call(pr, allow); } /// Set flag to stop script parsing inline void Stop() { mgl_parser_stop(pr); } diff --git a/include/mgl2/mpi.h b/include/mgl2/mpi.h index 11819ca..aab7a4d 100644 --- a/include/mgl2/mpi.h +++ b/include/mgl2/mpi.h @@ -39,9 +39,10 @@ void MGL_EXPORT mgl_mpi_recv_(uintptr_t *gr, int *id); /// Wrapper class for all graphics class MGL_EXPORT mglGraphMPI:public mglGraph { + mglGraphMPI(const mglGraphMPI &t) {} // copying is not allowed + const mglGraphMPI &operator=(const mglGraphMPI &t) { return t; } public: inline mglGraphMPI(int kind=0, int width=600, int height=400):mglGraph(kind,width,height){} - inline mglGraphMPI(const mglGraph &graph):mglGraph(graph){} inline mglGraphMPI(HMGL graph):mglGraph(graph){} virtual ~mglGraphMPI(){} diff --git a/include/mgl2/parser.h b/include/mgl2/parser.h index 039b5b1..0fe0f23 100644 --- a/include/mgl2/parser.h +++ b/include/mgl2/parser.h @@ -23,6 +23,9 @@ #ifdef __cplusplus #include "mgl2/mgl.h" #include +#if MGL_HAVE_LTDL +#include +#endif //----------------------------------------------------------------------------- /// Structure for the command argument. struct mglArg @@ -86,8 +89,12 @@ class mglParser { friend void mgl_export(wchar_t *out, const wchar_t *in, int type); public: +#if MGL_HAVE_LTDL + std::vector DllOpened; ///< Opened external DLL (keep ) +#endif std::vector DataList; ///< List with data and its names std::vector NumList; ///< List with numbers and its names + bool AllowDllCall; ///< Allow calls from external dynamic libraries bool AllowSetSize; ///< Allow using setsize command bool AllowFileIO; ///< Allow reading/saving files bool Stop; ///< Stop command was. Flag prevent further execution diff --git a/include/mgl2/prim.h b/include/mgl2/prim.h index 5da1bb9..582d4a7 100644 --- a/include/mgl2/prim.h +++ b/include/mgl2/prim.h @@ -146,6 +146,11 @@ void MGL_EXPORT mgl_table(HMGL gr, double x, double y, HCDT val, const char *tex void MGL_EXPORT mgl_table_(uintptr_t *gr, mreal *x, mreal *y, uintptr_t *val, const char *text, const char *fnt, const char *opt,int,int,int); void MGL_EXPORT mgl_tablew(HMGL gr, double x, double y, HCDT val, const wchar_t *text, const char *fnt, const char *opt); +/// Draws bitmap (logo) which is stretched along whole axis range +void MGL_EXPORT mgl_logo(HMGL gr, long w, long h, const unsigned char *rgba, int smooth, const char *opt); +void MGL_EXPORT mgl_logo_file(HMGL gr, const char *fname, int smooth, const char *opt); +void MGL_EXPORT mgl_logo_file_(uintptr_t *gr, const char *fname, int *smooth, const char *opt,int l,int n); + #ifdef __cplusplus } #endif diff --git a/include/mgl2/qt.h b/include/mgl2/qt.h index bee9b2f..ab877bd 100644 --- a/include/mgl2/qt.h +++ b/include/mgl2/qt.h @@ -38,6 +38,8 @@ int MGL_EXPORT mgl_qt_run_(); /// Wrapper class for windows displaying graphics class MGL_EXPORT mglQT : public mglWnd { + mglQT(const mglQT &t) {} // copying is not allowed + const mglQT &operator=(const mglQT &t) { return t; } public: mglQT(const char *title="MathGL") : mglWnd() { gr = mgl_create_graph_qt(0,title,0,0); } @@ -48,6 +50,7 @@ public: mglQT(mglDraw *draw, const char *title="MathGL") : mglWnd() { gr = mgl_create_graph_qt(draw?mgl_draw_class:0,title,draw,mgl_reload_class); mgl_set_click_func(gr, mgl_click_class); } + virtual ~mglQT() {} int Run() { return mgl_qt_run(); } ///< Run main loop for event handling }; //----------------------------------------------------------------------------- diff --git a/include/mgl2/type.h b/include/mgl2/type.h index 85758a3..3a97b80 100644 --- a/include/mgl2/type.h +++ b/include/mgl2/type.h @@ -22,9 +22,9 @@ #include "mgl2/define.h" //----------------------------------------------------------------------------- -const mreal Pi = M_PI; -const mreal NaN = NAN; -const mreal Inf = INFINITY; +const mreal mglPi = M_PI; +const mreal mglNaN = NAN; +const mreal mglInf = INFINITY; const mreal mgl_min_a = 1./256; //----------------------------------------------------------------------------- #define MGL_SET_XYZ(p,xx,yy,zz) {p.x=(xx);p.y=(yy);p.z=(zz);} diff --git a/include/mgl2/window.h b/include/mgl2/window.h index b4a84ea..00d5294 100644 --- a/include/mgl2/window.h +++ b/include/mgl2/window.h @@ -22,11 +22,13 @@ #include "mgl2/qt.h" #include "mgl2/fltk.h" -#include "mgl2/wx.h" +//#include "mgl2/wx.h" //----------------------------------------------------------------------------- /// Wrapper class for all windows displaying graphics class MGL_EXPORT mglWindow : public mglWnd { + mglWindow(const mglWindow &t) {} // copying is not allowed + const mglWindow &operator=(const mglWindow &t) { return t; } int wnd; ///< Type of window public: mglWindow(const char *title="MathGL") : mglWnd() diff --git a/include/mgl2/wnd.h b/include/mgl2/wnd.h index e09af52..a1aa0c3 100644 --- a/include/mgl2/wnd.h +++ b/include/mgl2/wnd.h @@ -54,9 +54,12 @@ void MGL_EXPORT mgl_reload_class(void *p); /// Abstract class for windows displaying graphics class MGL_EXPORT mglWnd : public mglGraph { + mglWnd(const mglWnd &t) {} // copying is not allowed + const mglWnd &operator=(const mglWnd &t) { return t; } public: mglWnd() : mglGraph(-1) {} - virtual int Run()=0; ///< Run main loop for event handling + virtual ~mglWnd() {} + virtual int Run()=0; ///< Run main loop for event handling inline void ToggleAlpha() ///< Switch on/off transparency (do not overwrite user settings) { mgl_wnd_toggle_alpha(gr); } @@ -80,8 +83,16 @@ public: { mgl_wnd_prev_frame(gr); } inline void Animation() ///< Run slideshow (animation) of frames { mgl_wnd_animation(gr); } - void SetClickFunc(void (*func)(void *p)) ///< Callback function for mouse click + inline void SetClickFunc(void (*func)(void *p)) ///< Callback function for mouse click { mgl_set_click_func(gr,func); } + /// Set callback functions for drawing and data reloading + inline void SetDrawFunc(int (*draw)(mglBase *gr, void *p), void *par=NULL, void (*reload)(void *p)=NULL) + { mgl_wnd_set_func(gr,draw,par,reload); } + inline void SetDrawFunc(int (*draw)(mglGraph *gr)) + { mgl_wnd_set_func(gr,draw?mgl_draw_graph:0,(void*)draw,0); } + inline void SetDrawFunc(mglDraw *draw) + { mgl_wnd_set_func(gr,draw?mgl_draw_class:0,draw,mgl_reload_class); + mgl_set_click_func(gr, mgl_click_class); } inline void SetDelay(double dt) ///< Set delay for animation in seconds { mgl_wnd_set_delay(gr, dt); } diff --git a/json/CMakeLists.txt b/json/CMakeLists.txt index e45d923..1c860d7 100644 --- a/json/CMakeLists.txt +++ b/json/CMakeLists.txt @@ -15,7 +15,7 @@ else(enable-qt5) endif(enable-qt5) add_executable(MglForJsTestBench ${json_src} ${json_moc_src} ${json_ui_src}) if(enable-qt5) - add_definitions( -DMGL_USE_QT5) + target_compile_definitions(MglForJsTestBench PUBLIC MGL_USE_QT5) target_link_libraries(MglForJsTestBench mgl-qt5) qt5_use_modules(MglForJsTestBench Core Widgets Gui Network WebKit WebKitWidgets PrintSupport) else(enable-qt5) diff --git a/lang/CMakeLists.txt b/lang/CMakeLists.txt index 68ec117..c15a950 100644 --- a/lang/CMakeLists.txt +++ b/lang/CMakeLists.txt @@ -2,6 +2,9 @@ set(src_imp_dep ../include/mgl2/type.h ../include/mgl2/data.h ../include/mgl2/mgl.h +mgl.i +data.i +type.i ) set(mgl_clean_files "") diff --git a/lang/mathgl.i b/lang/mathgl.i index 5bd9517..3288af2 100644 --- a/lang/mathgl.i +++ b/lang/mathgl.i @@ -40,6 +40,9 @@ #include "mgl2/type.h" #include "mgl2/data.h" #include "mgl2/mgl.h" +const double Pi = M_PI; +const double NaN = NAN; +const double Inf = INFINITY; %} #if MGL_USE_DOUBLE diff --git a/lang/mgl.i b/lang/mgl.i index 168b1f9..3a05562 100644 --- a/lang/mgl.i +++ b/lang/mgl.i @@ -21,6 +21,8 @@ /// Wrapper class for all graphics class mglGraph { + mglGraph(const mglGraph &t) {} // copying is not allowed + const mglGraph &operator=(const mglGraph &t) { return t; } protected: HMGL gr; public: @@ -36,8 +38,6 @@ public: #endif else gr=mgl_create_graph(width, height); } - inline mglGraph(const mglGraph &graph) - { gr = graph.gr; mgl_use_graph(gr,1); } inline mglGraph(HMGL graph) { gr = graph; mgl_use_graph(gr,1); } virtual ~mglGraph() diff --git a/lang/type.i b/lang/type.i index 133642a..6704b2a 100644 --- a/lang/type.i +++ b/lang/type.i @@ -26,6 +26,7 @@ typedef float mreal; //----------------------------------------------------------------------------- const mreal Pi = M_PI; const mreal NaN = NAN; +const mreal Inf = INFINITY; const mreal mgl_min_a = 1./256; //----------------------------------------------------------------------------- /// Class for point in 3D space diff --git a/mgltex/CMakeLists.txt b/mgltex/CMakeLists.txt new file mode 100644 index 0000000..560e656 --- /dev/null +++ b/mgltex/CMakeLists.txt @@ -0,0 +1,56 @@ +find_program(findpdflatex pdflatex) +if(NOT findpdflatex) + message(SEND_ERROR "Couldn't find pdflatex needed for LATEX example building.") +endif(NOT findpdflatex) +find_program(findkpsewhich kpsewhich) +if(NOT findkpsewhich) + message(SEND_ERROR "Couldn't find kpsewhich needed for LATEX example install.") +endif(NOT findkpsewhich) +find_program(findmktexlsr mktexlsr) +if(NOT findmktexlsr) + message(SEND_ERROR "Couldn't find mktexlsr needed for LATEX example install.") +endif(NOT findmktexlsr) +execute_process( + COMMAND ${findkpsewhich} -var-value=TEXMFLOCAL + OUTPUT_VARIABLE TEXMFLOCALDIR + RESULT_VARIABLE TEXMFLOCAL_ERR + OUTPUT_STRIP_TRAILING_WHITESPACE +) +if(NOT TEXMFLOCALDIR) + message(SEND_ERROR "Couldn't find TEXMFLOCAL directory.") +endif(NOT TEXMFLOCALDIR) + +set(extramgl Axis_projection Vectorial) + +add_custom_command(OUTPUT scripts + COMMAND ${CMAKE_COMMAND} -E make_directory ${MathGL_BINARY_DIR}/mgltex/scripts + COMMAND ${CMAKE_COMMAND} -E copy ${MathGL_SOURCE_DIR}/mgltex/sample.tex ${MathGL_BINARY_DIR}/mgltex/ + COMMAND ${CMAKE_COMMAND} -E copy ${MathGL_SOURCE_DIR}/mgltex/mgltex.sty ${MathGL_BINARY_DIR}/mgltex/ + COMMAND ${findpdflatex} -draftmode sample.tex +) +foreach(mglscr ${extramgl}) + list(APPEND mglpng scripts/${mglscr}.png) + add_custom_command(OUTPUT scripts/${mglscr}.png + COMMAND mglconv -o ${mglscr}.png ${mglscr}.mgl + DEPENDS mglconv scripts + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/mgltex/scripts/ + ) +endforeach(mglscr) + +add_custom_command(OUTPUT scripts/sample.png + COMMAND mglconv -o scripts/sample.png scripts/sample.mgl + DEPENDS mglconv scripts +) + +add_custom_command(OUTPUT sample.pdf + COMMAND ${findpdflatex} sample.tex + DEPENDS mgltex.sty sample.tex ${mglpng} scripts/sample.png) +add_custom_target(pdf ALL DEPENDS sample.pdf) + +get_directory_property(mglconv_clean ADDITIONAL_MAKE_CLEAN_FILES) +set(mglconv_clean ${mglconv_clean} scripts sample.sty sample.tex sample.aux sample.log) +set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${mglconv_clean}") + +install(FILES mgltex.sty DESTINATION ${TEXMFLOCALDIR}/tex/latex/mgltex/) +install(FILES sample.tex mgltex.pdf ${MathGL_BINARY_DIR}/mgltex/sample.pdf DESTINATION ${TEXMFLOCALDIR}/doc/latex/mgltex/) +install(CODE "execute_process(COMMAND ${findmktexlsr} ${TEXMFLOCALDIR})") diff --git a/mgltex/mgltex.dtx b/mgltex/mgltex.dtx new file mode 100644 index 0000000..77e480a --- /dev/null +++ b/mgltex/mgltex.dtx @@ -0,0 +1,790 @@ +% \iffalse meta-comment +% +% Copyright (C) 2014 by Diego Sejas +% +% This program is free software: you can redistribute it and/or modify it +% under the terms of the GNU General Public License as published by the +% Free Software Foundation, either version 3 of the License, or (at your +% option) any later version. +% +% This program is distributed in the hope that it will be useful, but +% WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +% Public License for more details. +% +% You should have received a copy of the GNU General Public License along +% with this program. If not, see . +% +% \fi +% +% \iffalse +%\def\mgl@name{mgltex} +%\def\mgl@date{2014/09/16} +%\def\mgl@version{1.0} +%\def\mgl@description{Embed MGL code into LaTeX documents} +% +%\NeedsTeXFormat{LaTeX2e} +%\ProvidesPackage{\mgl@name}[\mgl@date\space v.\mgl@version\space\mgl@description] +% +%<*driver> +\documentclass{ltxdoc} +\usepackage{mgltex} +\def\linefill#1{% + \leavevmode\leaders\hrule height #1\hfill\kern0em% +} +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\begin{document} + \DocInput{mgltex.dtx} +\end{document} +% +% \fi +% +% \CheckSum{0} +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% \changes{v1.0}{2014/09/27}{Initial version} +% +% \GetFileInfo{mgltex.sty} +% +% \DoNotIndex{} +% +% \title{The \textsf{\mglTeX} package\thanks{This document corresponds to \textsf{\mglTeX}~\fileversion, dated \filedate.}} +% \author{Diego Sejas Viscarra\\\texttt{diego.mathematician@gmail.com}} +% +% \maketitle +% +% \begin{abstract} +% \noindent +% \end{abstract} +% +% \section{Introduction} +% MathGL is a fast and efficient library by Alexey Balakin for the creation of high-quality publication-ready scientific graphics. It implements more than $50$ different types of graphics for 1d, 2d and 3d large sets of data. It supports exporting images to bitmap formats (PNG, JPEG, BMP, etc.), or vector formats (EPS, \TeX, SVG, etc.), or 3d image formats (STL, OBJ, XYZ, etc.), and even its own 3d format, MGLD. MathGL also defines its own vector font specification format, and supports UTF-16 encoding with \TeX-like symbol parsing. It supports various kinds of transparency and lighting, textual formula evaluation, arbitrary curvilinear coordinate systems, loading of subroutines from .dll or .so libraries, and many other useful features. +% +% MathGL has interfaces for a wide variety of programming languages, such as C/C++, Fortran, Python, Octave, Pascal, Forth, and many others, but it also defines its own scripting language, called \emph{MGL}, which can be used to generate graphics independently of any programming language. The \textsf{\mglTeX} package adds support to embed MGL code inside \LaTeX{} documents, which is automatically extracted and executed, and the resulting images are included in the document. +% +% Besides the obvious advantage of having available all the useful features of MathGL, \textsf{\mglTeX} facilitates the maintenance of your document, since both code for text and code for graphics are contained in a single file. +% +% \section{Usage} +% \noindent The simplest way to load \textsf{\mglTeX} to a \LaTeX{} document is to write the command +% \begin{center} +% |\usepackage{mgltex}| +% \end{center} +% in the preamble. Alternatively, one can pass a number of options to the package by means of the syntax +% \begin{center} +% |\usepackage|\oarg{options list}|{mgltex}|, +% \end{center} +% where \meta{options list} is a comma-separated list that can contains one or more of the following options: +% \begin{itemize} +% \item |draft|: The generated images won't be included in the document. This option is useful when fast compilation of the document is needed. +% \item |final|: This overrides the |draft| option. +% \item |png|, |jpg|, |jpeg|: To export images to the corresponding bitmap format. +% \item |eps|, |epsz|: To export to uncompressed/compressed EPS format as primitives. +% \item |bps|, |bpsz|: To export to uncompressed/compressed EPS format as bitmap. +% \item |pdf|: To export to 3D PDF format. +% \end{itemize} +% It must be noted that the options that specify the format to save the images are exclusive, in the sense that if one specifies more than one format, only the last one will be used. +% +% The are two ways to compile a document with \textsf{\mglTeX}: The first way is to run +% \begin{center} +% |latex --shell-escape |\meta{document} +% \end{center} +% twice, since the first run will extract the MGL code, execute it and include some of the resulting graphics, while the second run will include the remaining graphics; the second way is to run |latex |\meta{document} to extract the MGL code, then execute the generated scripts with the program |mglconv| (which comes with MathGL), and execute |latex |\meta{document} once more to include the graphics. +% +% \subsection{Environments for MGL code embedding} +% \DescribeEnv{mgl}\noindent The main environment defined by \textsf{\mglTeX} is |mgl|. It extracts its contents to a general script, called \meta{document}.mgl, where \meta{document} stands for the name of the \LaTeX{} file being compiled; this script is compiled, and the corresponding image is included. Its syntax is: +% \begin{center} +% \begin{tabular}{l} +% \hline\\[-0.75em] +% |\begin{mgl}|\oarg{key-val list}\\[0.5em] +% \hss\meta{MGL code}\hss\\[0.5em] +% |\end{mgl}|\\[0.25em] +% \hline +% \end{tabular} +% \end{center} +% Here, \meta{key-val list} accepts the same optional arguments as the |\includegraphics| command from the \textsf{graphicx} package, plus an additional one, |imgext|, which can be used to specify the extension to save the graphic. The \meta{MGL code} doesn't need to contain any specific instruction to create the image, since \textsf{\mglTeX} takes care of that. +% +% \DescribeEnv{mgladdon} This environment adds its contents to the general script \meta{document}.mgl, but it doesn't produce any image. It doesn't require any kind of arguments. +% \begin{center} +% \begin{tabular}{l} +% \hline\\[-0.75em] +% |\begin{mgladdon}|\\[0.5em] +% \hss\meta{MGL code}\hss\\[0.5em] +% |\end{mgladdon}|\\[0.25em] +% \hline +% \end{tabular} +% \end{center} +% +% \DescribeEnv{mglcode} This is the same as the |mgl| environment, but the corresponding code is written \emph{verbatim} to a separate script, whose name is specified as mandatory argument. It accepts the same optional arguments as |mgl|. +% \begin{center} +% \begin{tabular}{l} +% \hline\\[-0.75em] +% |\begin{mglcode}|\oarg{key-val list}\marg{script\_name}\\[0.5em] +% \hss\meta{MGL code}\hss\\[0.5em] +% |\end{mglcode}|\\[0.25em] +% \hline +% \end{tabular} +% \end{center} +% +% \DescribeEnv{mglscript} The code within |mglscript| is written verbatim to a script whose name is specified as mandatory argument, but no image is produced. It is useful for creation of MGL scripts which can be later post-processed by another package, like \textsf{listings}. +% \begin{center} +% \begin{tabular}{l} +% \hline\\[-0.75em] +% |\begin{mglscript}|\marg{script\_name}\\[0.5em] +% \hss\meta{MGL code}\hss\\[0.5em] +% |\end{mglscript}|\\[0.25em] +% \hline +% \end{tabular} +% \end{center} +% +% \DescribeEnv{mglfunc} This is used to define MGL functions within the general script \meta{document}.mgl. It takes one mandatory argument, which is the name of the function, plus one optional argument, which specifies the number of arguments of the function. The environment needs to contain only the body of the function, since the lines ``func \meta{function\_name} \meta{number of arguments}'' and ``return'' are appended automatically at the beginning and the end, respectively. The resulting code is written at the end of the general script, after the |stop| command, which is also written automatically. +% \begin{center} +% \begin{tabular}{l} +% \hline\\[-0.75em] +% |\begin{mglfunc}|\oarg{number of arguments}\marg{function\_name}\\[0.5em] +% \hss\meta{MGL function body}\hss\\[0.5em] +% |\end{mglfunc}|\\[0.25em] +% \hline +% \end{tabular} +% \end{center} +% +% \subsection{Fast creation of graphics} +% \noindent\textsf{\mglTeX} defines a convenient way to work with many graphics that have exactly the same settings (for example, same angles of rotation, same type of grid, etc.): instead of writing repetitive code every time it's needed, it can be stored in memory with the |mglplotsettings| environment, and then can be used when needed with the |\mglplot| command. +% +% \DescribeEnv{mglplotsettings} This environment stores its contents in memory for later use. It accepts one mandatory argument, which is a keyword (name) to be associated to the corresponding block of code, so different blocks of code can be stored with different names. +% \begin{center} +% \begin{tabular}{l} +% \hline\\[-0.75em] +% |\begin{mglplotsettings}|\marg{keyword}\\[0.5em] +% \hss\meta{MGL code}\hss\\[0.5em] +% |\end{mglplotsettings}|\\[0.25em] +% \hline +% \end{tabular} +% \end{center} +% +% \DescribeMacro{\mglplot} This command is used for fast generation of graphics with default settings, and can be used in parallel with the |mglplotsettings| environment. It accepts one mandatory argument which consists of MGL instructions, separated by the symbol ``:'', which can span through various text lines. It also accepts the same optional arguments as the |mgl| environment, plus an additional one, called |settings|, which can be used to specify a keyword used in a |mglplotsettings| environment. If the |settings| option is specified, the code in the mandatory argument will be appended to the block of code of the corresponding |mglplotsettings| environment. +% \begin{center} +% \begin{tabular}{l} +% \hline\\[-0.75em] +% |\mglplot|\oarg{key-val list}\marg{MGL code}\\[0.25em] +% \hline +% \end{tabular} +% \end{center} +% +% \subsection{Verbatim-like environments} +% \DescribeEnv{mglblock}\noindent It writes its contents \emph{verbatim} to a file, whose name is given as mandatory argument, and then it also typesets its contents on the \LaTeX{} document, numbering each line of code. +% \begin{center} +% \begin{tabular}{l} +% \hline\\[-0.75em] +% |\begin{mglblock}|\marg{script\_name}\\[0.5em] +% \hss\meta{MGL code}\hss\\[0.5em] +% |\end{mglblock}|\\[0.25em] +% \hline +% \end{tabular} +% \end{center} +% +% \DescribeEnv{mglverbatim} It typesets its contents to the \LaTeX{} document, numbering each line of code. +% \begin{center} +% \begin{tabular}{l} +% \hline\\[-0.75em] +% |\begin{mglverbatim}|\\[0.5em] +% \hss\meta{MGL code}\hss\\[0.5em] +% |\end{mglverbatim}|\\[0.25em] +% \hline +% \end{tabular} +% \end{center} +% +% \subsection{Working with external scripts} +% \noindent In case of having MGL scripts in their own files, \textsf{\mglTeX} can work with them without needing to transcript them to the \LaTeX{} document. +% +% \DescribeMacro{\mglgraphics} This command takes one mandatory argument, which is the name of an external MGL script, which will be automatically executed, and the resulting image will be included. The same optional arguments as the |mgl| environment are accepted. +% \begin{center} +% \begin{tabular}{l} +% \hline\\[-0.75em] +% |\mglgraphics|\oarg{key-val list}\marg{script\_name}\\[0.25em] +% \hline +% \end{tabular} +% \end{center} +% +% \DescribeMacro{\mglinclude} This command takes one mandatory argument, which is the name of an external MGL script, which will be automatically transcript \emph{verbatim} on the \LaTeX{} document, and each line of code will be numerated. +% \begin{center} +% \begin{tabular}{l} +% \hline\\[-0.75em] +% |\mglinclude|\marg{script\_name}\\[0.25em] +% \hline +% \end{tabular} +% \end{center} +% +% \subsection{Additional commands} +% \DescribeMacro{\mgldir}\noindent This command can be used to specify where \textsf{\mglTeX} should create the MGL scripts and corresponding images. This is useful, for example, to avoid a lot of scripts and images from polluting the current directory. +% \begin{center} +% \begin{tabular}{l} +% \hline\\[-0.75em] +% |\mgldir|\marg{directory}\\[0.25em] +% \hline +% \end{tabular} +% \end{center} +% This command must be used in the preamble of the document, since the first MGL script is created at the moment of the |\begin{document}| command; trying to use it somewhere else will issue an error. On the other hand, it is the responsibility of the user to create the \meta{directory}, since \textsf{\mglTeX} won't do it automatically. +% +% \DescribeMacro{\mglTeX} This command just pretty-prints the name of the package. +% \begin{center} +% \begin{tabular}{l} +% \hline\\[-0.75em] +% |\mglTeX|\\[0.25em] +% \hline +% \end{tabular} +% \end{center} +% +% \subsection{Behavior of \textsf{\mglTeX}} +% \noindent As a convenient feature, the environments |mglcode|, |mglscript| and |mglblock| will automatically check if they are being used to create different scripts with the same name, in which case \textsf{\mglTeX} will issue a warning; however, if one of these environments overwrite an external script (not embedded in the document), it won't be noticed. Likewise, the user will be warned if the environment |mglfunc| is being used to create different MGL functions with the same name. +% +% When \textsf{\mglTeX} is unable to find a graphic that is supposed to include, instead of producing an error, it will warn the user about it, and will display a box in the corresponding position of the document, like the following one: +% \begin{center} +% \framebox[10em]{ +% \centering +% \bfseries\Huge +% \vbox{MGL\\image\\not\\found} +% } +% \end{center} +% Notice that the first time \LaTeX{} is executed, many of these boxes will appear in the document because the graphics from the MGL scripts are created, but not all are included (until \LaTeX{} is run for the second time). +% +% \StopEventually{} +% \section{Implementation} +% \begin{macrocode} + +\RequirePackage{keyval} +\RequirePackage{graphicx} + +\DeclareOption{draft}{% + \PassOptionsToPackage{\CurrentOption}{graphicx}% +} +\DeclareOption{final}{% + \PassOptionsToPackage{\CurrentOption}{graphicx}% +} + +\DeclareGraphicsExtensions{.png,.eps,.jpg,.jpeg,.bps,.pdf,.epsz,.eps.gz,.bpsz,.bps.gz,.gif} +%\DeclareGraphicsExtensions{.png,.eps,.jpg,.jpeg,.bps,.pdf,.gif} +%\DeclareGraphicsRule{*}{eps}{*}{} +%\DeclareGraphicsRule{.eps.gz}{eps}{.eps.bb}{`gunzip -c #1}% gzipped EPS +%\DeclareGraphicsRule{.epsz}{eps}{.eps.bb}{`gunzip -c #1}% gzipped EPS +%\DeclareGraphicsRule{.bps.gz}{eps}{.bps.bb}{`gunzip -c #1}% gzipped EPS +%\DeclareGraphicsRule{.bpsz}{eps}{.bps.bb}{`gunzip -c #1}% gzipped EPS + +\DeclareOption{jpg}{\def\mgl@image@ext{.jpg}} +\DeclareOption{jpeg}{\def\mgl@image@ext{.jpeg}} +\DeclareOption{pdf}{\def\mgl@image@ext{.pdf}} +\DeclareOption{png}{\def\mgl@image@ext{.png}} +\DeclareOption{eps}{\def\mgl@image@ext{.eps}} +\DeclareOption{epsz}{\def\mgl@image@ext{.eps.gz}} +\DeclareOption{bps}{\def\mgl@image@ext{.bps}} +\DeclareOption{bpsz}{\def\mgl@image@ext{.bps.gz}} +\DeclareOption{gif}{\def\mgl@image@ext{.gif}} + +\DeclareOption{tex}{\def\mgl@image@ext{.tex}} +%\DeclareOption{svg}{\def\mgl@image@ext{.svg}} +%\DeclareOption{svgz}{\def\mgl@image@ext{.svgz}} +%\DeclareOption{bmp}{\def\mgl@image@ext{.bmp}} +%\DeclareOption{tga}{\def\mgl@image@ext{.tga}} +%\DeclareOption{mgld}{\def\mgl@image@ext{.mgld}} +%\DeclareOption{json}{\def\mgl@image@ext{.json}} +%\DeclareOption{jsonz}{\def\mgl@image@ext{.jsonz}} +%\DeclareOption{obj}{\def\mgl@image@ext{.obj}} +%\DeclareOption{xyz}{\def\mgl@image@ext{.xyz}} +%\DeclareOption{stl}{\def\mgl@image@ext{.stl}} +%\DeclareOption{off}{\def\mgl@image@ext{.off}} +%\DeclareOption{prc}{\def\mgl@image@ext{.prc}} + +\ExecuteOptions{final,eps} +\ProcessOptions* + +\define@key{mgl@keys}{bb}{\g@addto@macro{\graph@keys}{bb=#1,}} +\define@key{mgl@keys}{bbllx}{\g@addto@macro{\graph@keys}{bbllx=#1,}} +\define@key{mgl@keys}{bblly}{\g@addto@macro{\graph@keys}{bblly=#1,}} +\define@key{mgl@keys}{bburx}{\g@addto@macro{\graph@keys}{bburx=#1,}} +\define@key{mgl@keys}{bbury}{\g@addto@macro{\graph@keys}{bbury=#1,}} +\define@key{mgl@keys}{natwidth}{\g@addto@macro{\graph@keys}{natwidth=#1,}} +\define@key{mgl@keys}{natheight}{\g@addto@macro{\graph@keys}{natheight=#1,}} +\define@key{mgl@keys}{hiresbb}{\g@addto@macro{\graph@keys}{hiresbb=#1,}} +\define@key{mgl@keys}{viewport}{\g@addto@macro{\graph@keys}{viewport=#1,}} +\define@key{mgl@keys}{trim}{\g@addto@macro{\graph@keys}{trim=#1,}} +\define@key{mgl@keys}{angle}{\g@addto@macro{\graph@keys}{angle=#1,}} +\define@key{mgl@keys}{origin}{\g@addto@macro{\graph@keys}{origin=#1,}} +\define@key{mgl@keys}{width}{\g@addto@macro{\graph@keys}{width=#1,}} +\define@key{mgl@keys}{height}{\g@addto@macro{\graph@keys}{height=#1,}} +\define@key{mgl@keys}{totalheight}{\g@addto@macro{\graph@keys}{totalheight=#1,}} +\define@key{mgl@keys}{keepaspectratio}{\g@addto@macro{\graph@keys}{keepaspectratio=#1,}} +\define@key{mgl@keys}{scale}{\g@addto@macro{\graph@keys}{scale=#1,}} +\define@key{mgl@keys}{clip}[true]{\g@addto@macro{\graph@keys}{clip=#1,}} +\define@key{mgl@keys}{draft}[false]{\g@addto@macro{\graph@keys}{draft=#1,}} +\define@key{mgl@keys}{type}{\g@addto@macro{\graph@keys}{type=#1,}} +\define@key{mgl@keys}{ext}{\g@addto@macro{\graph@keys}{ext=#1,}} +\define@key{mgl@keys}{read}{\g@addto@macro{\graph@keys}{read=#1,}} +\define@key{mgl@keys}{command}{\g@addto@macro{\graph@keys}{command=#1,}} +\define@key{mgl@keys}{imgext}{\def\mgl@image@ext{.#1}} + +\define@key{mglplot@keys}{bb}{\g@addto@macro{\graph@keys}{bb=#1,}} +\define@key{mglplot@keys}{bbllx}{\g@addto@macro{\graph@keys}{bbllx=#1,}} +\define@key{mglplot@keys}{bblly}{\g@addto@macro{\graph@keys}{bblly=#1,}} +\define@key{mglplot@keys}{bburx}{\g@addto@macro{\graph@keys}{bburx=#1,}} +\define@key{mglplot@keys}{bbury}{\g@addto@macro{\graph@keys}{bbury=#1,}} +\define@key{mglplot@keys}{natwidth}{\g@addto@macro{\graph@keys}{natwidth=#1,}} +\define@key{mglplot@keys}{natheight}{\g@addto@macro{\graph@keys}{natheight=#1,}} +\define@key{mglplot@keys}{hiresbb}{\g@addto@macro{\graph@keys}{hiresbb=#1,}} +\define@key{mglplot@keys}{viewport}{\g@addto@macro{\graph@keys}{viewport=#1,}} +\define@key{mglplot@keys}{trim}{\g@addto@macro{\graph@keys}{trim=#1,}} +\define@key{mglplot@keys}{angle}{\g@addto@macro{\graph@keys}{angle=#1,}} +\define@key{mglplot@keys}{origin}{\g@addto@macro{\graph@keys}{origin=#1,}} +\define@key{mglplot@keys}{width}{\g@addto@macro{\graph@keys}{width=#1,}} +\define@key{mglplot@keys}{height}{\g@addto@macro{\graph@keys}{height=#1,}} +\define@key{mglplot@keys}{totalheight}{\g@addto@macro{\graph@keys}{totalheight=#1,}} +\define@key{mglplot@keys}{keepaspectratio}{\g@addto@macro{\graph@keys}{keepaspectratio=#1,}} +\define@key{mglplot@keys}{scale}{\g@addto@macro{\graph@keys}{scale=#1,}} +\define@key{mglplot@keys}{clip}[true]{\g@addto@macro{\graph@keys}{clip=#1,}} +\define@key{mglplot@keys}{draft}[false]{\g@addto@macro{\graph@keys}{draft=#1,}} +\define@key{mglplot@keys}{type}{\g@addto@macro{\graph@keys}{type=#1,}} +\define@key{mglplot@keys}{ext}{\g@addto@macro{\graph@keys}{ext=#1,}} +\define@key{mglplot@keys}{read}{\g@addto@macro{\graph@keys}{read=#1,}} +\define@key{mglplot@keys}{command}{\g@addto@macro{\graph@keys}{command=#1,}} +\define@key{mglplot@keys}{outext}{\def\mglplot@output@ext{.#1}} +\define@key{mglplot@keys}{settings}{\def\mglplot@settings{#1}} + +\def\mgl@dir{} +\def\mgldir#1{% + \def\mgl@dir{#1}% +} +\@onlypreamble\mgldir + +\newwrite\mgl@script +\AtBeginDocument{% + \immediate\openout\mgl@script="\mgl@dir\jobname.mgl"% +} +\AtEndDocument{% + \immediate\write\mgl@script{}% + \immediate\write\mgl@script{stop}% + \mgl@func% + \immediate\closeout\mgl@script% + \immediate\write18{mglconv -n "\mgl@dir\jobname.mgl"}% +} + +\def\mglplotsettings@defined{} +\newcommand\mglplotsettings[1][generic]{% + \test@mglplotsettings@defined{#1}% + \expandafter\def\csname mgl@setup@#1\endcsname{\immediate\write\mgl@script{}}% + \g@addto@macro{\mglplotsettings@defined}{#1,}% + \let\do\@makeother \dospecials% + \endlinechar`\^^M \catcode`\^^M\active% + \catcode`\ =10% + \expandafter\mglplotsettings@write@line% +} +\def\test@mglplotsettings@defined#1{% + \def\this@setup{#1}% + \@for\mglplotsettings@name:=\mglplotsettings@defined\do{% + \ifx\this@mglplotsettings\mglplotsettings@name% + \PackageWarning{\mgl@name}{Redefining "#1" setup for \noexpand\mglplot}% + \fi% + }% +} +\begingroup% + \catcode`\^^M\active% + \gdef\mglplotsettings@write@line#1^^M{% + \def\next@action{% + \expandafter\g@addto@macro\csname mgl@setup@\this@setup\endcsname{\immediate\write\mgl@script{#1}}% + \mglplotsettings@write@line% + }% + \test@end@mglplotsettings{#1}% + \next@action% + }% +\endgroup +\begingroup% + \escapechar=-1 \relax% + \xdef\end@mglplotsettings{\string\\end\string\{mglplotsettings\string\}}% +\endgroup +\def\test@end@mglplotsettings#1{% + \edef\this@line{#1}% + \ifx\this@line\end@mglplotsettings% + \def\next@action{\end{mglplotsettings}}% + \fi% +} +\def\endmglplotsettings{} + +\def\TeX@ext{.tex} +\newcounter{mgl@image@no} + +\def\mglplot{% + \@ifnextchar[{\@mglplot}{\@mglplot[]}% +} +\def\@mglplot[#1]{% + \def\mglplot@settings{generic}% + \def\graph@keys{}% + \setkeys{mglplot@keys}{#1}% + \stepcounter{mgl@image@no}% + \ifx\csname mgl@setup@\mglplot@settings\endcsname\@undefined% + \PackageError{\mgl@name}{Setup "\mglplot@settings" undefined}{}% + \else% + \csname mgl@setup@\mglplot@settings\endcsname% + \fi% + \@@mglplot% +} +\long\def\@@mglplot#1{% + \immediate\write\mgl@script{\detokenize{#1}}% + \immediate\write\mgl@script{write '\mgl@dir\jobname-mgl-\arabic{mgl@image@no}\mgl@image@ext'}% + \immediate\write\mgl@script{reset}% + \mgl@include@image{\mgl@dir\jobname-mgl-\arabic{mgl@image@no}}% +} + +\newcommand\mgl[1][]{% + \def\graph@keys{}% + \setkeys{mgl@keys}{#1}% + \let\do\@makeother \dospecials% + \endlinechar`\^^M \catcode`\^^M\active% + \catcode`\ =10% + \mgl@write@line% +} +\begingroup% + \escapechar=-1 \relax% + \xdef\end@mgl{\string\\end\string\{mgl\string\}}% +\endgroup +\begingroup% + \catcode`\^^M\active% + \gdef\mgl@write@line#1^^M{% + \def\next@action{% + \immediate\write\mgl@script{#1}% + \mgl@write@line% + }% + \test@end@mgl{#1}% + \next@action% + }% +\endgroup +\def\test@end@mgl#1{% + \edef\this@line{#1}% + \ifx\this@line\end@mgl% + \def\next@action{\end{mgl}}% + \fi% +} +\def\endmgl{% + \stepcounter{mgl@image@no}% + \immediate\write\mgl@script{write '\mgl@dir\jobname-mgl-\arabic{mgl@image@no}\mgl@image@ext'}% + \immediate\write\mgl@script{reset}% + \mgl@include@image{\mgl@dir\jobname-mgl-\arabic{mgl@image@no}}% +} +\def\mgl@include@image#1{% + \ifx\mgl@image@ext\TeX@ext% + \IfFileExists{#1.tex}{% + \include{#1}% + }{% + \mgl@img@not@found{#1}% + }% + \else% + \def\next@action{\mgl@img@not@found{#1}}% + \@for\img@ext:=\Gin@extensions\do{% + \IfFileExists{#1\img@ext}{% + \def\next@action{% + \expandafter\includegraphics\expandafter[\graph@keys]{#1}% + }% + }{}% + }% + \next@action% + \fi% +} +\def\mgl@img@not@found#1{% + \PackageWarning{\mgl@name}{MGL image "#1" not found}% + \framebox[10em]{% + \centering% + \bfseries\Huge% + \vbox{MGL\\image\\not\\found}% + }% +} + +\bgroup% + \escapechar=-1\relax% + \xdef\end@mgladdon{\string\\end\string\{mgladdon\string\}}% +\egroup% +\newenvironment{mgladdon}{% + \def\test@end@mgl##1{% + \edef\this@line{##1}% + \ifx\this@line\end@mgladdon% + \def\next@action{\end{mgladdon}}% + \fi% + }% + \mgl[]% +}{} + +\def\mgl@script@written{} +\newwrite\mgl@out@stream +\newcommand\mglcode[2][]{% + \def\graph@keys{}% + \setkeys{mgl@keys}{#1}% + \test@mgl@script@written{#2}% + \xdef\mgl@script@written{\mgl@script@written#2,}% + \def\this@script{#2}% + \immediate\openout\mgl@out@stream=\mgl@dir\this@script.mgl% + \let\do\@makeother \dospecials% + \endlinechar`\^^M \catcode`\^^M\active% + \obeyspaces% + \mglcode@write@line% +} +\def\test@mgl@script@written#1{% + \edef\this@script{#1}% + \@for\mgl@script@name:=\mgl@script@written\do{% + \ifx\this@script\mgl@script@name% + \PackageWarning{\mgl@name}{Overwriting MGL script "\this@script.mgl"}% + \fi% + }% +} +\def\mglcode@write@line#1{% + \let\next@action\mglcode@write@line% + \expandafter\if#1\^^M% + \immediate\write\mgl@out@stream{\the\mgl@line}% + \mgl@line{}% + \mgl@word{}% + \else\expandafter\if#1\space% + \mgl@word{}% + \mgl@line\expandafter{\the\mgl@line#1}% + \else% + \mgl@word\expandafter{\the\mgl@word#1}% + \mgl@line\expandafter{\the\mgl@line#1}% + \test@end@mglcode{\the\mgl@word}% + \fi\fi% + \next@action% +} +\begingroup% + \escapechar=-1\relax% + \xdef\end@mglcode{\string\\end\string\{mglcode\string\}}% +\endgroup% +\def\test@end@mglcode#1{% + \edef\this@word{#1}% + \ifx\this@word\end@mglcode% + \def\next@action{\end{mglcode}}% + \fi% +} +\def\endmglcode{% + \immediate\closeout\mgl@out@stream% + \immediate\write18{mglconv "\mgl@dir\this@script.mgl" -o "\mgl@dir\this@script\mgl@image@ext"}% + \mgl@include@image{\mgl@dir\this@script}% +} + +\bgroup% + \escapechar=-1\relax% + \xdef\end@mglscript{\string\\end\string\{mglscript\string\}}% +\egroup% +\newenvironment{mglscript}[1]{% + \def\test@end@mglcode##1{% + \edef\this@word{##1}% + \ifx\this@word\end@mglscript% + \def\next@action{\end{mglscript}}% + \fi% + }% + \mglcode{#1}% +}{% + \immediate\closeout\mgl@out@stream% +} + +\def\mglfunc@defined{} +\def\mgl@func{} +\newcommand\mglfunc[2][0]{% + \test@mglfunc@defined{#2}% + \g@addto@macro{\mglfunc@defined}{#2,}% + \let\do\@makeother \dospecials% + \endlinechar`\^^M \catcode`\^^M\active% + \catcode`\ =10% + \g@addto@macro{\mgl@func}{\immediate\write\mgl@script{}}% + \g@addto@macro{\mgl@func}{\immediate\write\mgl@script{func '#2' #1}}% + \expandafter\mglfunc@ignore@line% +} +\def\test@mglfunc@defined#1{% + \def\this@func{#1}% + \@for\mglfunc@name:=\mglfunc@defined\do{% + \ifx\this@func\mglfunc@name% + \PackageWarning{\mgl@name}{MGL function "#1" has multiple definitions}% + \fi% + }% +} +\begingroup% + \catcode`\^^M\active% + \gdef\mglfunc@ignore@line#1^^M{% + \expandafter\mglfunc@write@line% + } + \gdef\mglfunc@write@line#1^^M{% + \def\next@action{% + \g@addto@macro{\mgl@func}{\immediate\write\mgl@script{#1}}% + \mglfunc@write@line% + }% + \test@end@mglfunc{#1}% + \next@action% + }% +\endgroup +\begingroup% + \escapechar=-1 \relax% + \xdef\end@mglfunc{\string\\end\string\{mglfunc\string\}}% +\endgroup +\def\test@end@mglfunc#1{% + \edef\this@line{#1}% + \ifx\this@line\end@mglfunc% + \def\next@action{\end{mglfunc}}% + \fi% +} +\def\endmglfunc{% + \g@addto@macro{\mgl@func}{\immediate\write\mgl@script{return}}% +} + +\def\mglblock#1{% + \test@mgl@script@written{#1}% + \xdef\mgl@script@written{\mgl@script@written#1,}% + \def\this@script{#1}% + \let\do\@makeother \dospecials% + \endlinechar`\^^M \catcode`\^^M\active% + \obeyspaces% + \immediate\openout\mgl@out@stream="\mgl@dir\this@script.mgl"% + \mglblock@ignore@line% +} +\def\mglblock@ignore@line#1{% + \mglblock@write@line% +} +\def\mglblock@write@line#1{% + \let\next@action\mglblock@write@line% + \expandafter\if#1\^^M% + \immediate\write\mgl@out@stream{\the\mgl@line}% + \mgl@line{}% + \mgl@word{}% + \else\expandafter\if#1\space% + \mgl@word{}% + \mgl@line\expandafter{\the\mgl@line#1}% + \else% + \mgl@word\expandafter{\the\mgl@word#1}% + \mgl@line\expandafter{\the\mgl@line#1}% + \test@end@mglblock{\the\mgl@word}% + \fi\fi% + \next@action% +} +\begingroup% + \escapechar=-1\relax% + \xdef\end@mglblock{\string\\end\string\{mglblock\string\}}% +\endgroup% +\def\test@end@mglblock#1{% + \edef\this@word{#1}% + \ifx\this@word\end@mglblock% + \def\next@action{\end{mglblock}}% + \fi% +} +\newread\mgl@in@stream +\def\endmglblock{% + \immediate\closeout\mgl@out@stream% + \immediate\openin\mgl@in@stream="\mgl@dir\this@script.mgl"% + \begingroup% + \list{\itshape\footnotesize\arabic{mgl@verb@line@no}.}{}% + \setlength{\labelsep}{1em}% + \itemsep\z@skip% + \leftskip\z@skip\rightskip\z@skip% + \verbatim@font% + \parindent\z@\parfillskip\@flushglue\parskip\z@skip% + \@vobeyspaces% + \mglblock@read@line% +} +\def\mglblock@read@line{% + \stepcounter{mgl@verb@line@no}% + \read\mgl@in@stream to \this@line% + \ifeof\mgl@in@stream% + \def\next@action{% + \immediate\closein\mgl@in@stream% + \endlist% + \endgroup% + }% + \else% + \def\next@action{% + \item\mbox{\this@line}% + \mglblock@read@line% + }% + \fi% + \next@action% +} + +\newcounter{mgl@verb@line@no} +\def\mglverbatim{% + \setcounter{mgl@verb@line@no}{0}% + \list{\itshape\footnotesize\arabic{mgl@verb@line@no}.}{}% + \setlength{\labelsep}{1em}% + \itemsep\z@skip% + \leftskip\z@skip\rightskip\z@skip% + \verbatim@font% + \parindent\z@\parfillskip\@flushglue\parskip\z@skip% + \let\do\@makeother \dospecials% + \endlinechar`\^^M \catcode`\^^M\active% + \obeyspaces% + \mglverbatim@ignore@line% +} +\def\mglverbatim@ignore@line#1{% + \mglverbatim@write@line% +} +\newtoks\mgl@word +\newtoks\mgl@line +\def\mglverbatim@write@line#1{% + \let\next@action\mglverbatim@write@line% + \expandafter\if#1\^^M% + \stepcounter{mgl@verb@line@no}% + \item\mbox{\the\mgl@line}% + \mgl@line{}% + \mgl@word{}% + \else\expandafter\if#1\space% + \mgl@word{}% + \mgl@line\expandafter{\the\mgl@line#1}% + \else% + \mgl@word\expandafter{\the\mgl@word#1}% + \mgl@line\expandafter{\the\mgl@line#1}% + \test@end@mglverbatim{\the\mgl@word}% + \fi\fi% + \next@action% +} +\begingroup% + \escapechar=-1\relax% + \xdef\end@mglverbatim{\string\\end\string\{mglverbatim\string\}}% +\endgroup% +\def\test@end@mglverbatim#1{% + \edef\this@word{#1}% + \ifx\this@word\end@mglverbatim% + \def\next@action{\end{mglverbatim}}% + \fi% +} +\def\endmglverbatim{\endlist} + +\newcommand\mglgraphics[2][]{% + \def\graph@keys{}% + \setkeys{mgl@keys}{#1}% + \immediate\write18{mglconv "\mgl@dir#2.mgl" -o "\mgl@dir#2\mgl@image@ext"} + \mgl@include@image{\mgl@dir#2}% +} + +\def\mglinclude#1{% + \setcounter{mgl@verb@line@no}{0}% + \immediate\openin\mgl@in@stream="\mgl@dir#1.mgl"% + \begingroup% + \list{\itshape\footnotesize\arabic{mgl@verb@line@no}.}{}% + \setlength{\labelsep}{1em}% + \itemsep\z@skip% + \leftskip\z@skip\rightskip\z@skip% + \verbatim@font% + \parindent\z@\parfillskip\@flushglue\parskip\z@skip% + \let\do\@makeother \dospecials% + \endlinechar`\^^M \catcode`\^^M\active% + \@vobeyspaces% + \mglblock@read@line% +} + +\def\mglTeX{mgl\TeX} +% \end{macrocode} +% \Finale \ No newline at end of file diff --git a/mgltex/mgltex.installer b/mgltex/mgltex.installer new file mode 100644 index 0000000..f780ff3 --- /dev/null +++ b/mgltex/mgltex.installer @@ -0,0 +1,61 @@ +%% +%% Copyright (C) 2014 by Diego Sejas +%% +%% This program is free software: you can redistribute it and/or modify it +%% under the terms of the GNU General Public License as published by the +%% Free Software Foundation, either version 3 of the License, or (at your +%% option) any later version. +%% +%% This program is distributed in the hope that it will be useful, but +%% WITHOUT ANY WARRANTY; without even the implied warranty of +%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +%% Public License for more details. +%% +%% You should have received a copy of the GNU General Public License along +%% with this program. If not, see . +%% + +\input docstrip.tex +\keepsilent + +\usedir{tex/latex/mgltex} + +\preamble + +This is a generated file. + +Copyright (C) 2014 by Diego Sejas + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or (at your +option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see . + +\endpreamble + +\generate{\file{mgltex.sty}{\from{mgltex.dtx}{package}}} + +\obeyspaces +\Msg{**********************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the *} +\Msg{* following file into a directory searched by TeX: *} +\Msg{* *} +\Msg{* mgltex.sty *} +\Msg{* *} +\Msg{* To produce the documentation run the file mgltex.dtx *} +\Msg{* through LaTeX. *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{* *} +\Msg{**********************************************************} + +\endbatchfile \ No newline at end of file diff --git a/mgltex/mgltex.pdf b/mgltex/mgltex.pdf new file mode 100644 index 0000000000000000000000000000000000000000..61542e961b87f3f5dc290d96979e0413542cd7ce GIT binary patch literal 210387 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

b0i^JTLILaDBlEn2h83t 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�L|74D(3k63$o@-Hr$iRJ$> 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 Uu;oWk2;yY}AyQLIDoY{$KZVC=^Z)<= literal 0 HcmV?d00001 diff --git a/mgltex/mgltex.sty b/mgltex/mgltex.sty new file mode 100644 index 0000000..33fea4b --- /dev/null +++ b/mgltex/mgltex.sty @@ -0,0 +1,536 @@ +%% +%% This is file `mgltex.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% mgltex.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Copyright (C) 2014 by Diego Sejas +%% +%% This program is free software: you can redistribute it and/or modify it +%% under the terms of the GNU General Public License as published by the +%% Free Software Foundation, either version 3 of the License, or (at your +%% option) any later version. +%% +%% This program is distributed in the hope that it will be useful, but +%% WITHOUT ANY WARRANTY; without even the implied warranty of +%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +%% Public License for more details. +%% +%% You should have received a copy of the GNU General Public License along +%% with this program. If not, see . +%% +\def\mgl@name{mgltex} +\def\mgl@date{2014/09/16} +\def\mgl@version{1.0} +\def\mgl@description{Embed MGL code into LaTeX documents} + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{\mgl@name}[\mgl@date\space v.\mgl@version\space\mgl@description] + +\RequirePackage{keyval} +\RequirePackage{graphicx} + +\DeclareOption{draft}{% + \PassOptionsToPackage{\CurrentOption}{graphicx}% +} +\DeclareOption{final}{% + \PassOptionsToPackage{\CurrentOption}{graphicx}% +} + +\DeclareGraphicsExtensions{.png,.eps,.jpg,.jpeg,.bps,.pdf,.epsz,.eps.gz,.bpsz,.bps.gz,.gif} + +\DeclareOption{jpg}{\def\mgl@image@ext{.jpg}} +\DeclareOption{jpeg}{\def\mgl@image@ext{.jpeg}} +\DeclareOption{pdf}{\def\mgl@image@ext{.pdf}} +\DeclareOption{png}{\def\mgl@image@ext{.png}} +\DeclareOption{eps}{\def\mgl@image@ext{.eps}} +\DeclareOption{epsz}{\def\mgl@image@ext{.eps.gz}} +\DeclareOption{bps}{\def\mgl@image@ext{.bps}} +\DeclareOption{bpsz}{\def\mgl@image@ext{.bps.gz}} +\DeclareOption{gif}{\def\mgl@image@ext{.gif}} + +\DeclareOption{tex}{\def\mgl@image@ext{.tex}} + +\ExecuteOptions{final,eps} +\ProcessOptions* + +\define@key{mgl@keys}{bb}{\g@addto@macro{\graph@keys}{bb=#1,}} +\define@key{mgl@keys}{bbllx}{\g@addto@macro{\graph@keys}{bbllx=#1,}} +\define@key{mgl@keys}{bblly}{\g@addto@macro{\graph@keys}{bblly=#1,}} +\define@key{mgl@keys}{bburx}{\g@addto@macro{\graph@keys}{bburx=#1,}} +\define@key{mgl@keys}{bbury}{\g@addto@macro{\graph@keys}{bbury=#1,}} +\define@key{mgl@keys}{natwidth}{\g@addto@macro{\graph@keys}{natwidth=#1,}} +\define@key{mgl@keys}{natheight}{\g@addto@macro{\graph@keys}{natheight=#1,}} +\define@key{mgl@keys}{hiresbb}{\g@addto@macro{\graph@keys}{hiresbb=#1,}} +\define@key{mgl@keys}{viewport}{\g@addto@macro{\graph@keys}{viewport=#1,}} +\define@key{mgl@keys}{trim}{\g@addto@macro{\graph@keys}{trim=#1,}} +\define@key{mgl@keys}{angle}{\g@addto@macro{\graph@keys}{angle=#1,}} +\define@key{mgl@keys}{origin}{\g@addto@macro{\graph@keys}{origin=#1,}} +\define@key{mgl@keys}{width}{\g@addto@macro{\graph@keys}{width=#1,}} +\define@key{mgl@keys}{height}{\g@addto@macro{\graph@keys}{height=#1,}} +\define@key{mgl@keys}{totalheight}{\g@addto@macro{\graph@keys}{totalheight=#1,}} +\define@key{mgl@keys}{keepaspectratio}{\g@addto@macro{\graph@keys}{keepaspectratio=#1,}} +\define@key{mgl@keys}{scale}{\g@addto@macro{\graph@keys}{scale=#1,}} +\define@key{mgl@keys}{clip}[true]{\g@addto@macro{\graph@keys}{clip=#1,}} +\define@key{mgl@keys}{draft}[false]{\g@addto@macro{\graph@keys}{draft=#1,}} +\define@key{mgl@keys}{type}{\g@addto@macro{\graph@keys}{type=#1,}} +\define@key{mgl@keys}{ext}{\g@addto@macro{\graph@keys}{ext=#1,}} +\define@key{mgl@keys}{read}{\g@addto@macro{\graph@keys}{read=#1,}} +\define@key{mgl@keys}{command}{\g@addto@macro{\graph@keys}{command=#1,}} +\define@key{mgl@keys}{imgext}{\def\mgl@image@ext{.#1}} + +\define@key{mglplot@keys}{bb}{\g@addto@macro{\graph@keys}{bb=#1,}} +\define@key{mglplot@keys}{bbllx}{\g@addto@macro{\graph@keys}{bbllx=#1,}} +\define@key{mglplot@keys}{bblly}{\g@addto@macro{\graph@keys}{bblly=#1,}} +\define@key{mglplot@keys}{bburx}{\g@addto@macro{\graph@keys}{bburx=#1,}} +\define@key{mglplot@keys}{bbury}{\g@addto@macro{\graph@keys}{bbury=#1,}} +\define@key{mglplot@keys}{natwidth}{\g@addto@macro{\graph@keys}{natwidth=#1,}} +\define@key{mglplot@keys}{natheight}{\g@addto@macro{\graph@keys}{natheight=#1,}} +\define@key{mglplot@keys}{hiresbb}{\g@addto@macro{\graph@keys}{hiresbb=#1,}} +\define@key{mglplot@keys}{viewport}{\g@addto@macro{\graph@keys}{viewport=#1,}} +\define@key{mglplot@keys}{trim}{\g@addto@macro{\graph@keys}{trim=#1,}} +\define@key{mglplot@keys}{angle}{\g@addto@macro{\graph@keys}{angle=#1,}} +\define@key{mglplot@keys}{origin}{\g@addto@macro{\graph@keys}{origin=#1,}} +\define@key{mglplot@keys}{width}{\g@addto@macro{\graph@keys}{width=#1,}} +\define@key{mglplot@keys}{height}{\g@addto@macro{\graph@keys}{height=#1,}} +\define@key{mglplot@keys}{totalheight}{\g@addto@macro{\graph@keys}{totalheight=#1,}} +\define@key{mglplot@keys}{keepaspectratio}{\g@addto@macro{\graph@keys}{keepaspectratio=#1,}} +\define@key{mglplot@keys}{scale}{\g@addto@macro{\graph@keys}{scale=#1,}} +\define@key{mglplot@keys}{clip}[true]{\g@addto@macro{\graph@keys}{clip=#1,}} +\define@key{mglplot@keys}{draft}[false]{\g@addto@macro{\graph@keys}{draft=#1,}} +\define@key{mglplot@keys}{type}{\g@addto@macro{\graph@keys}{type=#1,}} +\define@key{mglplot@keys}{ext}{\g@addto@macro{\graph@keys}{ext=#1,}} +\define@key{mglplot@keys}{read}{\g@addto@macro{\graph@keys}{read=#1,}} +\define@key{mglplot@keys}{command}{\g@addto@macro{\graph@keys}{command=#1,}} +\define@key{mglplot@keys}{outext}{\def\mglplot@output@ext{.#1}} +\define@key{mglplot@keys}{settings}{\def\mglplot@settings{#1}} + +\def\mgl@dir{} +\def\mgldir#1{% + \def\mgl@dir{#1}% +} +\@onlypreamble\mgldir + +\newwrite\mgl@script +\AtBeginDocument{% + \immediate\openout\mgl@script="\mgl@dir\jobname.mgl"% +} +\AtEndDocument{% + \immediate\write\mgl@script{}% + \immediate\write\mgl@script{stop}% + \mgl@func% + \immediate\closeout\mgl@script% + \immediate\write18{mglconv -n "\mgl@dir\jobname.mgl"}% +} + +\def\mglplotsettings@defined{} +\newcommand\mglplotsettings[1][generic]{% + \test@mglplotsettings@defined{#1}% + \expandafter\def\csname mgl@setup@#1\endcsname{\immediate\write\mgl@script{}}% + \g@addto@macro{\mglplotsettings@defined}{#1,}% + \let\do\@makeother \dospecials% + \endlinechar`\^^M \catcode`\^^M\active% + \catcode`\ =10% + \expandafter\mglplotsettings@write@line% +} +\def\test@mglplotsettings@defined#1{% + \def\this@setup{#1}% + \@for\mglplotsettings@name:=\mglplotsettings@defined\do{% + \ifx\this@mglplotsettings\mglplotsettings@name% + \PackageWarning{\mgl@name}{Redefining "#1" setup for \noexpand\mglplot}% + \fi% + }% +} +\begingroup% + \catcode`\^^M\active% + \gdef\mglplotsettings@write@line#1^^M{% + \def\next@action{% + \expandafter\g@addto@macro\csname mgl@setup@\this@setup\endcsname{\immediate\write\mgl@script{#1}}% + \mglplotsettings@write@line% + }% + \test@end@mglplotsettings{#1}% + \next@action% + }% +\endgroup +\begingroup% + \escapechar=-1 \relax% + \xdef\end@mglplotsettings{\string\\end\string\{mglplotsettings\string\}}% +\endgroup +\def\test@end@mglplotsettings#1{% + \edef\this@line{#1}% + \ifx\this@line\end@mglplotsettings% + \def\next@action{\end{mglplotsettings}}% + \fi% +} +\def\endmglplotsettings{} + +\def\TeX@ext{.tex} +\newcounter{mgl@image@no} + +\def\mglplot{% + \@ifnextchar[{\@mglplot}{\@mglplot[]}% +} +\def\@mglplot[#1]{% + \def\mglplot@settings{generic}% + \def\graph@keys{}% + \setkeys{mglplot@keys}{#1}% + \stepcounter{mgl@image@no}% + \ifx\csname mgl@setup@\mglplot@settings\endcsname\@undefined% + \PackageError{\mgl@name}{Setup "\mglplot@settings" undefined}{}% + \else% + \csname mgl@setup@\mglplot@settings\endcsname% + \fi% + \@@mglplot% +} +\long\def\@@mglplot#1{% + \immediate\write\mgl@script{\detokenize{#1}}% + \immediate\write\mgl@script{write '\mgl@dir\jobname-mgl-\arabic{mgl@image@no}\mgl@image@ext'}% + \immediate\write\mgl@script{reset}% + \mgl@include@image{\mgl@dir\jobname-mgl-\arabic{mgl@image@no}}% +} + +\newcommand\mgl[1][]{% + \def\graph@keys{}% + \setkeys{mgl@keys}{#1}% + \let\do\@makeother \dospecials% + \endlinechar`\^^M \catcode`\^^M\active% + \catcode`\ =10% + \mgl@write@line% +} +\begingroup% + \escapechar=-1 \relax% + \xdef\end@mgl{\string\\end\string\{mgl\string\}}% +\endgroup +\begingroup% + \catcode`\^^M\active% + \gdef\mgl@write@line#1^^M{% + \def\next@action{% + \immediate\write\mgl@script{#1}% + \mgl@write@line% + }% + \test@end@mgl{#1}% + \next@action% + }% +\endgroup +\def\test@end@mgl#1{% + \edef\this@line{#1}% + \ifx\this@line\end@mgl% + \def\next@action{\end{mgl}}% + \fi% +} +\def\endmgl{% + \stepcounter{mgl@image@no}% + \immediate\write\mgl@script{write '\mgl@dir\jobname-mgl-\arabic{mgl@image@no}\mgl@image@ext'}% + \immediate\write\mgl@script{reset}% + \mgl@include@image{\mgl@dir\jobname-mgl-\arabic{mgl@image@no}}% +} +\def\mgl@include@image#1{% + \ifx\mgl@image@ext\TeX@ext% + \IfFileExists{#1.tex}{% + \include{#1}% + }{% + \mgl@img@not@found{#1}% + }% + \else% + \def\next@action{\mgl@img@not@found{#1}}% + \@for\img@ext:=\Gin@extensions\do{% + \IfFileExists{#1\img@ext}{% + \def\next@action{% + \expandafter\includegraphics\expandafter[\graph@keys]{#1}% + }% + }{}% + }% + \next@action% + \fi% +} +\def\mgl@img@not@found#1{% + \PackageWarning{\mgl@name}{MGL image "#1" not found}% + \framebox[10em]{% + \centering% + \bfseries\Huge% + \vbox{MGL\\image\\not\\found}% + }% +} + +\bgroup% + \escapechar=-1\relax% + \xdef\end@mgladdon{\string\\end\string\{mgladdon\string\}}% +\egroup% +\newenvironment{mgladdon}{% + \def\test@end@mgl##1{% + \edef\this@line{##1}% + \ifx\this@line\end@mgladdon% + \def\next@action{\end{mgladdon}}% + \fi% + }% + \mgl[]% +}{} + +\def\mgl@script@written{} +\newwrite\mgl@out@stream +\newcommand\mglcode[2][]{% + \def\graph@keys{}% + \setkeys{mgl@keys}{#1}% + \test@mgl@script@written{#2}% + \xdef\mgl@script@written{\mgl@script@written#2,}% + \def\this@script{#2}% + \immediate\openout\mgl@out@stream=\mgl@dir\this@script.mgl% + \let\do\@makeother \dospecials% + \endlinechar`\^^M \catcode`\^^M\active% + \obeyspaces% + \mglcode@write@line% +} +\def\test@mgl@script@written#1{% + \edef\this@script{#1}% + \@for\mgl@script@name:=\mgl@script@written\do{% + \ifx\this@script\mgl@script@name% + \PackageWarning{\mgl@name}{Overwriting MGL script "\this@script.mgl"}% + \fi% + }% +} +\def\mglcode@write@line#1{% + \let\next@action\mglcode@write@line% + \expandafter\if#1\^^M% + \immediate\write\mgl@out@stream{\the\mgl@line}% + \mgl@line{}% + \mgl@word{}% + \else\expandafter\if#1\space% + \mgl@word{}% + \mgl@line\expandafter{\the\mgl@line#1}% + \else% + \mgl@word\expandafter{\the\mgl@word#1}% + \mgl@line\expandafter{\the\mgl@line#1}% + \test@end@mglcode{\the\mgl@word}% + \fi\fi% + \next@action% +} +\begingroup% + \escapechar=-1\relax% + \xdef\end@mglcode{\string\\end\string\{mglcode\string\}}% +\endgroup% +\def\test@end@mglcode#1{% + \edef\this@word{#1}% + \ifx\this@word\end@mglcode% + \def\next@action{\end{mglcode}}% + \fi% +} +\def\endmglcode{% + \immediate\closeout\mgl@out@stream% + \immediate\write18{mglconv "\mgl@dir\this@script.mgl" -o "\mgl@dir\this@script\mgl@image@ext"}% + \mgl@include@image{\mgl@dir\this@script}% +} + +\bgroup% + \escapechar=-1\relax% + \xdef\end@mglscript{\string\\end\string\{mglscript\string\}}% +\egroup% +\newenvironment{mglscript}[1]{% + \def\test@end@mglcode##1{% + \edef\this@word{##1}% + \ifx\this@word\end@mglscript% + \def\next@action{\end{mglscript}}% + \fi% + }% + \mglcode{#1}% +}{% + \immediate\closeout\mgl@out@stream% +} + +\def\mglfunc@defined{} +\def\mgl@func{} +\newcommand\mglfunc[2][0]{% + \test@mglfunc@defined{#2}% + \g@addto@macro{\mglfunc@defined}{#2,}% + \let\do\@makeother \dospecials% + \endlinechar`\^^M \catcode`\^^M\active% + \catcode`\ =10% + \g@addto@macro{\mgl@func}{\immediate\write\mgl@script{}}% + \g@addto@macro{\mgl@func}{\immediate\write\mgl@script{func '#2' #1}}% + \expandafter\mglfunc@ignore@line% +} +\def\test@mglfunc@defined#1{% + \def\this@func{#1}% + \@for\mglfunc@name:=\mglfunc@defined\do{% + \ifx\this@func\mglfunc@name% + \PackageWarning{\mgl@name}{MGL function "#1" has multiple definitions}% + \fi% + }% +} +\begingroup% + \catcode`\^^M\active% + \gdef\mglfunc@ignore@line#1^^M{% + \expandafter\mglfunc@write@line% + } + \gdef\mglfunc@write@line#1^^M{% + \def\next@action{% + \g@addto@macro{\mgl@func}{\immediate\write\mgl@script{#1}}% + \mglfunc@write@line% + }% + \test@end@mglfunc{#1}% + \next@action% + }% +\endgroup +\begingroup% + \escapechar=-1 \relax% + \xdef\end@mglfunc{\string\\end\string\{mglfunc\string\}}% +\endgroup +\def\test@end@mglfunc#1{% + \edef\this@line{#1}% + \ifx\this@line\end@mglfunc% + \def\next@action{\end{mglfunc}}% + \fi% +} +\def\endmglfunc{% + \g@addto@macro{\mgl@func}{\immediate\write\mgl@script{return}}% +} + +\def\mglblock#1{% + \test@mgl@script@written{#1}% + \xdef\mgl@script@written{\mgl@script@written#1,}% + \def\this@script{#1}% + \let\do\@makeother \dospecials% + \endlinechar`\^^M \catcode`\^^M\active% + \obeyspaces% + \immediate\openout\mgl@out@stream="\mgl@dir\this@script.mgl"% + \mglblock@ignore@line% +} +\def\mglblock@ignore@line#1{% + \mglblock@write@line% +} +\def\mglblock@write@line#1{% + \let\next@action\mglblock@write@line% + \expandafter\if#1\^^M% + \immediate\write\mgl@out@stream{\the\mgl@line}% + \mgl@line{}% + \mgl@word{}% + \else\expandafter\if#1\space% + \mgl@word{}% + \mgl@line\expandafter{\the\mgl@line#1}% + \else% + \mgl@word\expandafter{\the\mgl@word#1}% + \mgl@line\expandafter{\the\mgl@line#1}% + \test@end@mglblock{\the\mgl@word}% + \fi\fi% + \next@action% +} +\begingroup% + \escapechar=-1\relax% + \xdef\end@mglblock{\string\\end\string\{mglblock\string\}}% +\endgroup% +\def\test@end@mglblock#1{% + \edef\this@word{#1}% + \ifx\this@word\end@mglblock% + \def\next@action{\end{mglblock}}% + \fi% +} +\newread\mgl@in@stream +\def\endmglblock{% + \immediate\closeout\mgl@out@stream% + \immediate\openin\mgl@in@stream="\mgl@dir\this@script.mgl"% + \begingroup% + \list{\itshape\footnotesize\arabic{mgl@verb@line@no}.}{}% + \setlength{\labelsep}{1em}% + \itemsep\z@skip% + \leftskip\z@skip\rightskip\z@skip% + \verbatim@font% + \parindent\z@\parfillskip\@flushglue\parskip\z@skip% + \@vobeyspaces% + \mglblock@read@line% +} +\def\mglblock@read@line{% + \stepcounter{mgl@verb@line@no}% + \read\mgl@in@stream to \this@line% + \ifeof\mgl@in@stream% + \def\next@action{% + \immediate\closein\mgl@in@stream% + \endlist% + \endgroup% + }% + \else% + \def\next@action{% + \item\mbox{\this@line}% + \mglblock@read@line% + }% + \fi% + \next@action% +} + +\newcounter{mgl@verb@line@no} +\def\mglverbatim{% + \setcounter{mgl@verb@line@no}{0}% + \list{\itshape\footnotesize\arabic{mgl@verb@line@no}.}{}% + \setlength{\labelsep}{1em}% + \itemsep\z@skip% + \leftskip\z@skip\rightskip\z@skip% + \verbatim@font% + \parindent\z@\parfillskip\@flushglue\parskip\z@skip% + \let\do\@makeother \dospecials% + \endlinechar`\^^M \catcode`\^^M\active% + \obeyspaces% + \mglverbatim@ignore@line% +} +\def\mglverbatim@ignore@line#1{% + \mglverbatim@write@line% +} +\newtoks\mgl@word +\newtoks\mgl@line +\def\mglverbatim@write@line#1{% + \let\next@action\mglverbatim@write@line% + \expandafter\if#1\^^M% + \stepcounter{mgl@verb@line@no}% + \item\mbox{\the\mgl@line}% + \mgl@line{}% + \mgl@word{}% + \else\expandafter\if#1\space% + \mgl@word{}% + \mgl@line\expandafter{\the\mgl@line#1}% + \else% + \mgl@word\expandafter{\the\mgl@word#1}% + \mgl@line\expandafter{\the\mgl@line#1}% + \test@end@mglverbatim{\the\mgl@word}% + \fi\fi% + \next@action% +} +\begingroup% + \escapechar=-1\relax% + \xdef\end@mglverbatim{\string\\end\string\{mglverbatim\string\}}% +\endgroup% +\def\test@end@mglverbatim#1{% + \edef\this@word{#1}% + \ifx\this@word\end@mglverbatim% + \def\next@action{\end{mglverbatim}}% + \fi% +} +\def\endmglverbatim{\endlist} + +\newcommand\mglgraphics[2][]{% + \def\graph@keys{}% + \setkeys{mgl@keys}{#1}% + \immediate\write18{mglconv "\mgl@dir#2.mgl" -o "\mgl@dir#2\mgl@image@ext"} + \mgl@include@image{\mgl@dir#2}% +} + +\def\mglinclude#1{% + \setcounter{mgl@verb@line@no}{0}% + \immediate\openin\mgl@in@stream="\mgl@dir#1.mgl"% + \begingroup% + \list{\itshape\footnotesize\arabic{mgl@verb@line@no}.}{}% + \setlength{\labelsep}{1em}% + \itemsep\z@skip% + \leftskip\z@skip\rightskip\z@skip% + \verbatim@font% + \parindent\z@\parfillskip\@flushglue\parskip\z@skip% + \let\do\@makeother \dospecials% + \endlinechar`\^^M \catcode`\^^M\active% + \@vobeyspaces% + \mglblock@read@line% +} + +\def\mglTeX{mgl\TeX} +\endinput +%% +%% End of file `mgltex.sty'. diff --git a/mgltex/sample.tex b/mgltex/sample.tex new file mode 100644 index 0000000..7fcda3b --- /dev/null +++ b/mgltex/sample.tex @@ -0,0 +1,340 @@ +\documentclass[12pt]{article} + +\usepackage[png]{mgltex} + +\title{\mglTeX{} package example} +\author{Diego Sejas Viscarra, Alexey Balakin} +\date{\today} +\mgldir{scripts/} + +\begin{document} + +\maketitle + + +LaTeX package \texttt{mgltex} (was made by Diego Sejas Viscarra) allow one to make figures directly from MGL script located in LaTeX file. + +For using this package you need to specify \texttt{--shell-escape} option for \emph{latex/pdflatex} or manually run \emph{mglconv} tool with produced MGL scripts for generation of images. Don't forgot to run \emph{latex/pdflatex} second time to insert generated images into the output document. + +The package may have following options: \texttt{draft}, \texttt{final} -- the same as in the \emph{graphicx} package; \texttt{jpg}, \texttt{jpeg}, \texttt{png} -- for export to JPEG/PNG images; \texttt{eps}, \texttt{epsz} -- for export to uncompressed/compressed EPS format as primitives; \texttt{bps}, \texttt{bpsz} -- for export to uncompressed/compressed EPS format as bitmap (don't work with \emph{pdflatex}), \texttt{pdf} -- for export to 3D PDF. + +The package defines the following environments: +\begin{description} +\item[mgl] + It writes its contents to a general script which has the same name as the LaTeX document, but its extension is \emph{.mgl}. The code in this environment is compiled and the image produced is included. It takes exactly the same optional arguments as the \texttt{\textbackslash{}includegraphics} command, plus an additional argument \emph{imgext}, which specifies the extension to save the image. +\item[mgladdon] + It adds its contents to the general script, without producing any image. It useful to set some global properties (like size of the images) at beginning of the document. +\item[mglcode] + Is exactly the same as \texttt{mgl}, but it writes its contents verbatim to its own file, whose name is specified as a mandatory argument. +\item[mglscript] + Is exactly the same as \texttt{mglcode}, but it doesn't produce any image, nor accepts optional arguments. It is useful, for example, to create a MGL script, which can later be post processed by another package like "listings". +\item[mglblock] + It writes its contents verbatim to a file, specified as a mandatory argument, and to the LaTeX document, and numerates each line of code. + +% This last three environments will test if the user is overwriting some file, and will issue a warning in that case. +\item[mglverbatim] + Exactly the same as \texttt{mglblock}, but it doesn't write to a file. This environment doesn't have arguments. +\item[mglfunc] + Is used to define MGL functions. It takes one mandatory argument, which is the name of the function, plus one additional argument, which specifies the number of arguments of the function. The environment needs to contain only the body of the function, since the first and last lines are appended automatically, and the resulting code is written at the end of the general script, which is also written automatically. The warning is produced if 2 or more function with the same name is defined. +\item[mglplotsettings] + If many scripts with the same code are to be written, the repetitive code can be written inside this environment only once, then this code will be used automatically every time the \texttt{\textbackslash{}mglplot} command is used (see below). It takes one optional argument, which is a name to be associated to the corresponding contents of the environment; this name can be passed to the \texttt{\textbackslash{}mglplot} command to use the corresponding block of code automatically (see below). +\end{description} + +The package also defines the following commands: +\begin{description} +\item[\textbackslash{}mglplot] + It takes one mandatory argument, which is MGL instructions separated by the symbol ':' this argument can be more than one line long. It takes the same optional arguments as the \texttt{mgl} environment, plus an additional argument \emph{settings}, which indicates the name associated to a block of code inside a \texttt{mglplotsettings} environment. The code inside the mandatory argument will be appended to the block of code specified, and the resulting code will be written to the general script. +\item[\textbackslash{}mglgraphics] + This command takes the same optional arguments as the \texttt{mgl} environment, and one mandatory argument, which is the name of a MGL script. This command will compile the corresponding script and include the resulting image. It is useful when you have a script outside the LaTeX document, and you want to include the image, but you don't want to type the script again. +\item[\textbackslash{}mglinclude] + This is like \texttt{\textbackslash{}mglgraphics} but, instead of creating/including the corresponding image, it writes the contents of the MGL script to the LaTeX document, and numerates the lines. +\item[\textbackslash{}mgldir] + This command can be used in the preamble of the document to specify a directory where LaTeX will save the MGL scripts and generate the corresponding images. This directory is also where \texttt{\textbackslash{}mglgraphics} and \texttt{\textbackslash{}mglinclude} will look for scripts. +\item[\textbackslash{}mglTeX] + It just pretty prints the name of the package ''\mglTeX''. +\end{description} + + +An example of usage of \texttt{mgl} and \texttt{mglfunc} environments would be: +\begin{verbatim} +\begin{mglfunc}{prepare2d} + new a 50 40 '0.6*sin(pi*(x+1))*sin(1.5*pi*(y+1))+0.4*cos(0.75*pi*(x+1)*(y+1))' + new b 50 40 '0.6*cos(pi*(x+1))*cos(1.5*pi*(y+1))+0.4*cos(0.75*pi*(x+1)*(y+1))' +\end{mglfunc} + +\begin{figure}[!ht] + \centering + \begin{mgl}[width=0.85\textwidth,height=7.5cm] + fog 0.5 + call 'prepare2d' + subplot 2 2 0:title 'Surf plot (default)':rotate 50 60:light on:box:surf a + + subplot 2 2 1:title '"\#" style; meshnum 10':rotate 50 60:box + surf a '#'; meshnum 10 + + subplot 2 2 2 : title 'Mesh plot' : rotate 50 60 : box + mesh a + + new x 50 40 '0.8*sin(pi*x)*sin(pi*(y+1)/2)' + new y 50 40 '0.8*cos(pi*x)*sin(pi*(y+1)/2)' + new z 50 40 '0.8*cos(pi*(y+1)/2)' + subplot 2 2 3 : title 'parametric form' : rotate 50 60 : box + surf x y z 'BbwrR' + \end{mgl} +\end{figure} +\end{verbatim} +Note, that \texttt{mglfunc} environment(s) can be located at any position (at the beginning, at the end, or somewhere else) of LaTeX document. +\begin{mglfunc}{prepare2d} + new a 50 40 '0.6*sin(pi*(x+1))*sin(1.5*pi*(y+1))+0.4*cos(0.75*pi*(x+1)*(y+1))' + new b 50 40 '0.6*cos(pi*(x+1))*cos(1.5*pi*(y+1))+0.4*cos(0.75*pi*(x+1)*(y+1))' +\end{mglfunc} + +\begin{figure}[!ht] + \centering + \begin{mgl}[width=0.85\textwidth,height=7.5cm] + fog 0.5 + call 'prepare2d' + subplot 2 2 0 : title 'Surf plot (default)' : rotate 50 60 : light on : box : surf a + + subplot 2 2 1 : title '"\#" style; meshnum 10' : rotate 50 60 : box + surf a '#'; meshnum 10 + + subplot 2 2 2 : title 'Mesh plot' : rotate 50 60 : box + mesh a + + new x 50 40 '0.8*sin(pi*x)*sin(pi*(y+1)/2)' + new y 50 40 '0.8*cos(pi*x)*sin(pi*(y+1)/2)' + new z 50 40 '0.8*cos(pi*(y+1)/2)' + subplot 2 2 3 : title 'parametric form' : rotate 50 60 : box + surf x y z 'BbwrR' + \end{mgl} +\end{figure} + +Following example show the usage of \texttt{mglscript} environment +\begin{verbatim} +\begin{mglscript}{Vectorial} +call 'prepare2v' +subplot 3 2 0 '' : title 'lolo' : box +vect a b +subplot 3 2 1 '' : title '"." style; "=" style' : box +vect a b '.=' +subplot 3 2 2 '' : title '"f" style' : box +vect a b 'f' +subplot 3 2 3 '' : title '">" style' : box +vect a b '>' +subplot 3 2 4 '' : title '"<" style' : box +vect a b '<' +call 'prepare3v' +subplot 3 2 5 : title '3d variant' : rotate 50 60 : box +vect ex ey ez + +stop + +func 'prepare2v' + new a 20 30 '0.6*sin(pi*(x+1))*sin(1.5*pi*(y+1))+0.4*cos(0.75*pi*(x+1)*(y+1))' + new b 20 30 '0.6*cos(pi*(x+1))*cos(1.5*pi*(y+1))+0.4*cos(0.75*pi*(x+1)*(y+1))' +return + +func 'prepare3v' + define $1 pow(x*x+y*y+(z-0.3)*(z-0.3)+0.03,1.5) + define $2 pow(x*x+y*y+(z+0.3)*(z+0.3)+0.03,1.5) + new ex 10 10 10 '0.2*x/$1-0.2*x/$2' + new ey 10 10 10 '0.2*y/$1-0.2*y/$2' + new ez 10 10 10 '0.2*(z-0.3)/$1-0.2*(z+0.3)/$2' +return +\end{mglscript} +\end{verbatim} + +\begin{mglscript}{Vectorial} +call 'prepare2v' +subplot 3 2 0 '' : title 'lolo' : box +vect a b +subplot 3 2 1 '' : title '"." style; "=" style' : box +vect a b '.=' +subplot 3 2 2 '' : title '"f" style' : box +vect a b 'f' +subplot 3 2 3 '' : title '">" style' : box +vect a b '>' +subplot 3 2 4 '' : title '"<" style' : box +vect a b '<' +call 'prepare3v' +subplot 3 2 5 : title '3d variant' : rotate 50 60 : box +vect ex ey ez + +stop + +func 'prepare2v' + new a 20 30 '0.6*sin(pi*(x+1))*sin(1.5*pi*(y+1))+0.4*cos(0.75*pi*(x+1)*(y+1))' + new b 20 30 '0.6*cos(pi*(x+1))*cos(1.5*pi*(y+1))+0.4*cos(0.75*pi*(x+1)*(y+1))' +return + +func 'prepare3v' + define $1 pow(x*x+y*y+(z-0.3)*(z-0.3)+0.03,1.5) + define $2 pow(x*x+y*y+(z+0.3)*(z+0.3)+0.03,1.5) + new ex 10 10 10 '0.2*x/$1-0.2*x/$2' + new ey 10 10 10 '0.2*y/$1-0.2*y/$2' + new ez 10 10 10 '0.2*(z-0.3)/$1-0.2*(z+0.3)/$2' +return +\end{mglscript} + +You should use \texttt{\textbackslash{}mglgraphics} command to display its contents +\begin{verbatim} +\begin{figure}[!ht] + \centering + \mglgraphics[width=40em,height=20em]{Vectorial} + \caption{A beautiful example} +\end{figure} +\end{verbatim} + +\begin{figure}[!ht] + \centering + \mglgraphics[width=40em,height=20em]{Vectorial} + \caption{A beautiful example} +\end{figure} + +Alternatively, you can display the contents of the script in parallel to saving to a file, if you are using \texttt{mglblock} environment +\begin{verbatim} +\begin{mglblock}{Axis_projection} + ranges 0 1 0 1 0 1 + new x 50 '0.25*(1+cos(2*pi*x))' + new y 50 '0.25*(1+sin(2*pi*x))' + new z 50 'x' + new a 20 30 '30*x*y*(1-x-y)^2*(x+y<1)' + new rx 10 'rnd':new ry 10:fill ry '(1-v)*rnd' rx + light on + + title 'Projection sample':ternary 4:rotate 50 60 + box:axis:grid + plot x y z 'r2':surf a '#' + xlabel 'X':ylabel 'Y':zlabel 'Z' +\end{mglblock} +\begin{figure}[!ht] + \centering + \mglgraphics[scale=0.5]{Axis_projection} + \caption{The image from Axis\_projection.mgl script} +\end{figure} +\end{verbatim} + +\begin{mglblock}{Axis_projection} + ranges 0 1 0 1 0 1 + new x 50 '0.25*(1+cos(2*pi*x))' + new y 50 '0.25*(1+sin(2*pi*x))' + new z 50 'x' + new a 20 30 '30*x*y*(1-x-y)^2*(x+y<1)' + new rx 10 'rnd':new ry 10:fill ry '(1-v)*rnd' rx + light on + + title 'Projection sample':ternary 4:rotate 50 60 + box:axis:grid + plot x y z 'r2':surf a '#' + xlabel 'X':ylabel 'Y':zlabel 'Z' +\end{mglblock} +\begin{figure}[!ht] + \centering + \mglgraphics[scale=0.5]{Axis_projection} + \caption{The image from Axis\_projection.mgl script} +\end{figure} + +Finally, you can just show MGL script itself +\begin{verbatim} +\begin{mglverbatim} + ranges 0 1 0 1 0 1 + new x 50 '0.25*(1+cos(2*pi*x))' + new y 50 '0.25*(1+sin(2*pi*x))' + new z 50 'x' + new a 20 30 '30*x*y*(1-x-y)^2*(x+y<1)' + new rx 10 'rnd':new ry 10:fill ry '(1-v)*rnd' rx + light on + + title 'Projection sample':ternary 4:rotate 50 60 + box:axis:grid + plot x y z 'r2':surf a '#' + xlabel 'X':ylabel 'Y':zlabel 'Z' +\end{mglverbatim} +\end{verbatim} + +\begin{mglverbatim} + ranges 0 1 0 1 0 1 + new x 50 '0.25*(1+cos(2*pi*x))' + new y 50 '0.25*(1+sin(2*pi*x))' + new z 50 'x' + new a 20 30 '30*x*y*(1-x-y)^2*(x+y<1)' + new rx 10 'rnd':new ry 10:fill ry '(1-v)*rnd' rx + light on + + title 'Projection sample':ternary 4:rotate 50 60 + box:axis:grid + plot x y z 'r2':surf a '#' + xlabel 'X':ylabel 'Y':zlabel 'Z' +\end{mglverbatim} + + +An example of usage of \texttt{\textbackslash{}mglplot} command would be: +\begin{verbatim} +\begin{mglplotsettings} + box '@{W9}' : axis +\end{mglplotsettings} +\begin{mglplotsettings}[2d] + box : axis + grid 'xy' ';k' +\end{mglplotsettings} +\begin{mglplotsettings}[3d] + rotate 50 60 + box : axis : grid 'xyz' ';k' +\end{mglplotsettings} +\begin{figure}[!ht] + \centering + \mglplot[scale=0.5]{new a 200 'sin(pi*x)':plot a '2B'} +\end{figure} +\begin{figure}[!ht] + \centering + \mglplot[scale=0.5,settings=2d]{ + fplot 'sin(pi*x)' '2B' : + fplot 'cos(pi*x^2)' '2R' + } +\end{figure} +\begin{figure}[!ht] + \centering + \mglplot[width=0.5 \textwidth, settings=3d] + {fsurf 'sin(pi*x)+cos(pi*y)'} +\end{figure} +\end{verbatim} + +\begin{mglplotsettings} + box '@{W9}' : axis +\end{mglplotsettings} +\begin{mglplotsettings}[2d] + box : axis + grid 'xy' ';k' +\end{mglplotsettings} +\begin{mglplotsettings}[3d] + rotate 50 60 + box : axis : grid 'xyz' ';k' +\end{mglplotsettings} +\begin{figure}[!ht] + \centering + \mglplot[scale=0.5]{new a 200 'sin(pi*x)':plot a '2B'} +\end{figure} +\begin{figure}[!ht] + \centering + \mglplot[scale=0.5,settings=2d]{ + fplot 'sin(pi*x)' '2B' : + fplot 'cos(pi*x^2)' '2R' + } +\end{figure} +\begin{figure}[!ht] + \centering + \mglplot[width=0.5 \textwidth, settings=3d] + {fsurf 'sin(pi*x)+cos(pi*y)'} +\end{figure} + +As an additional feature, when an image is not found or cannot be included, instead of issuing an error, \texttt{mgltex} prints a box with the word \emph{'MGL image not found'} in the LaTeX document. +\begin{figure}[!ht] + \centering + \mglgraphics{xyz} +\end{figure} + +The last sample is displaying the content of the MGL file using \texttt{\textbackslash{}mglinclude} command: +\mglinclude{Vectorial} + +\end{document} \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 95c8580..484368a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,7 @@ set(mgl_src addon.cpp axis.cpp base_cf.cpp base.cpp canvas_cf.cpp canvas.cpp cont.cpp crust.cpp complex.cpp complex_ex.cpp complex_io.cpp fft.cpp data_gr.cpp - data.cpp data_io.cpp data_ex.cpp data_png.cpp def_font.cpp + data.cpp data_io.cpp data_ex.cpp data_png.cpp export_2d.cpp export_3d.cpp eval.cpp evalp.cpp exec.cpp export.cpp fit.cpp font.cpp obj.cpp other.cpp parser.cpp pde.cpp pixel.cpp plot.cpp prim.cpp surf.cpp tex_table.cpp vect.cpp volume.cpp evalc.cpp @@ -44,7 +44,7 @@ add_library(mgl SHARED ${mgl_src} ${mgl_hdr}) add_library(mgl-static STATIC ${mgl_src} ${mgl_hdr}) set_target_properties(mgl PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(mgl-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) -set_target_properties(mgl-static PROPERTIES COMPILE_FLAGS -DMGL_STATIC_DEFINE) +target_compile_definitions(mgl-static PUBLIC MGL_STATIC_DEFINE) generate_export_header(mgl EXPORT_FILE_NAME ../include/mgl2/dllexport.h) if(enable-mgl2) @@ -88,6 +88,11 @@ if(MGL_HAVE_HDF4) include_directories(${HDF4_INCLUDE_DIR}) endif(MGL_HAVE_HDF4) +if(MGL_HAVE_LTDL) + target_link_libraries(mgl ${LTDL_LIB} ) + include_directories(${LTDL_INCLUDE_DIR}) +endif(MGL_HAVE_LTDL) + if(MGL_HAVE_GSL) target_link_libraries(mgl ${GSL_LIB} ${GSL_CBLAS_LIB} ) include_directories(${GSL_INCLUDE_DIR}) @@ -115,7 +120,7 @@ if(MGL_HAVE_MPI) set_target_properties(mgl-mpi PROPERTIES DEFINE_SYMBOL "mgl_EXPORTS") set_target_properties(mgl-mpi-static PROPERTIES OUTPUT_NAME "mgl-mpi") set_target_properties(mgl-mpi-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) - set_target_properties(mgl-mpi-static PROPERTIES COMPILE_FLAGS -DMGL_STATIC_DEFINE) + target_compile_definitions(mgl-mpi-static PUBLIC MGL_STATIC_DEFINE) if(enable-mgl2) set_target_properties(mgl-mpi PROPERTIES OUTPUT_NAME "mgl2-mpi") diff --git a/src/addon.cpp b/src/addon.cpp index 5f96413..f523bed 100644 --- a/src/addon.cpp +++ b/src/addon.cpp @@ -223,8 +223,7 @@ void MGL_EXPORT mgl_difr_axial_old(dual *a,int n,int step,dual q,int Border,dual register mreal dd = i+di; dd = 1./(sqrt(dd*dd+1.)+dd); // corrections for "axiality" register mreal gg = 1+dd*dd; - d[i] = a[i*step] + adt*( b[i-1]*((gg-dd)/k) - - b[i]*(2*gg/k) + b[i+1]*((gg+dd)/k) ); + d[i] = a[i*step] + adt*( b[i-1]*((gg-dd)/k) - b[i]*(2*gg/k) + b[i+1]*((gg+dd)/k) ); } memcpy(b,d,n*sizeof(dual)); switch(Border) diff --git a/src/axis.cpp b/src/axis.cpp index 35776ce..f9db21a 100644 --- a/src/axis.cpp +++ b/src/axis.cpp @@ -476,7 +476,7 @@ void mglCanvas::Axis(const char *dir, const char *stl, const char *opt) if(strchr(dir,ar[i])) { arr=ar[i]; break; } if(!mglchrs(dir,"xXyYzZ")) dir="xyz"; - SaveState(opt); + mreal angl = SaveState(opt); AdjustTicks(dir,mglchr(stl,'a'),Tstl); LoadState(); @@ -486,25 +486,25 @@ void mglCanvas::Axis(const char *dir, const char *stl, const char *opt) ax.inv = ay.inv = az.inv = false; if(strchr(dir,'X') || strchr(dir,'x')) - { ax.inv = inv; DrawAxis(ax, text, arr, stl, opt); } + { ax.inv = inv; DrawAxis(ax, text, arr, stl, angl); } if(strchr(dir,'Z') || strchr(dir,'z')) - { az.inv = inv; DrawAxis(az, text, arr, stl, opt); } + { az.inv = inv; DrawAxis(az, text, arr, stl, angl); } if((TernAxis&3)) { mglAxis ty(ay); ty.pos='t'; ty.ch='T'; ty.dir = mglPoint(-1,1); ty.org = mglPoint(1,0,ay.org.z); - DrawAxis(ty, text, arr, stl, opt); ty.ch='t'; + DrawAxis(ty, text, arr, stl, angl); ty.ch='t'; ty.dir = mglPoint(0,-1); ty.org = mglPoint(0,1,ay.org.z); - DrawAxis(ty, text, arr, stl, opt); + DrawAxis(ty, text, arr, stl, angl); } else if(strchr(dir,'Y') || strchr(dir,'y')) - { ay.inv = inv; DrawAxis(ay, text, arr, stl, opt); } + { ay.inv = inv; DrawAxis(ay, text, arr, stl, angl); } set(ret, MGL_ENABLE_RTEXT); } //----------------------------------------------------------------------------- -void mglCanvas::DrawAxis(mglAxis &aa, bool text, char arr,const char *stl,const char *opt) +void mglCanvas::DrawAxis(mglAxis &aa, bool text, char arr,const char *stl,mreal angl) { - SaveState(opt); + aa.angl = angl; if(strchr("xyz",aa.ch)) aa.org = mglPoint(GetOrgX(aa.ch,aa.inv), GetOrgY(aa.ch,aa.inv), GetOrgZ(aa.ch,aa.inv)); if(aa.ch=='x') aa.v0 = aa.org.x; @@ -588,6 +588,12 @@ void mglCanvas::DrawLabels(mglAxis &aa, bool inv, const mglMatrix *M) { w[i] = TextWidth(aa.txt[i].text.c_str(),FontDef,-1); kk[i] = AddPnt(M, o+d*aa.txt[i].val,-1,d,0,7); + if(kk[i]>=0) + { + mglPnt &pp = Pnt[kk[i]]; + if(pp.u<0 || (pp.u==0 && pp.v<0)) + { pp.u=-pp.u; pp.v=-pp.v; pp.w=-pp.w; } + } } for(l=0,c=INFINITY,i=0;i0 && l < vv/v) l = vv/v; if(c>v) c = v; } - if(get(MGL_ENABLE_RTEXT) && get(MGL_TICKS_ROTATE) && l>1 && c>0) // try rotate first + if(mgl_isnum(aa.angl)) // manual rotation + { + tet = aa.angl*M_PI/180; + mreal s = sin(tet); + if(s>0) + { pos[2]=(aa.ch=='c' && !inv)?'R':'L'; l=0.99*h/s/c; + for(i=0;i1 && c>0) // try rotate first { tet = c>1.1*h ? asin(1.1*h/c) : M_PI/2; pos[2]=(aa.ch=='c' && !inv)?'R':'L'; l=0.99*h/sin(tet)/c; for(i=0;iaa.v1) v0 = v0 - aa.ds*floor((v0-aa.v1)/aa.ds+1e-3); else v0 = v0 - aa.ds*floor((v0-aa.v2)/aa.ds+1e-3); + fflush(stdout); // somehow this help to bypass bug in GCC 32bit if(v0+aa.ds!=v0 && aa.v2+aa.ds!=aa.v2) for(mreal v=v0;(v-aa.v2)*(v-aa.v1)<=0;v+=aa.ds) mgl_drw_grid(this, v, d, oa, ob, da1, db1, da2, db2); @@ -833,6 +851,12 @@ void mglCanvas::Labelw(char dir, const wchar_t *text, mreal pos, const char *opt if(pos<-0.2) ff[1]='L'; if(pos>0.2) ff[1]='R'; strncpy(font,FontDef,63); strcat(font,ff); long kk = AddPnt(&B, p,-1,q,0,7); ff[1]=0; + if(kk>=0) + { + mglPnt &pp = Pnt[kk]; + if(pp.u<0 || (pp.u==0 && pp.v<0)) + { pp.u=-pp.u; pp.v=-pp.v; pp.w=-pp.w; } + } ff[0] = GetLabelPos(t, kk, *aa); strcat(font,ff); text_plot(kk,text,font,-1.4,0.35+shift); } @@ -1090,7 +1114,7 @@ void mglCanvas::colorbar(HCDT vv, const mreal *c, int where, mreal x, mreal y, m SetPenPal(AxisStl); // bool out = fabs(x)>1 && fabs(y)>1; bool inv = where!=3 && where!=0; - ac.ns = where; + ac.ns = where; ac.angl=NAN; if(text) DrawLabels(ac,inv,&M); // NOTE ns isn't used for colorbar clr(MGL_DISABLE_SCALE); EndGroup(); } diff --git a/src/base.cpp b/src/base.cpp index 9c5cf49..06ce6a4 100644 --- a/src/base.cpp +++ b/src/base.cpp @@ -45,7 +45,7 @@ void MGL_EXPORT mgl_create_cpp_font(HMGL gr, const wchar_t *how) l += 2*f->GetNl(0,ch); n += 6*f->GetNt(0,ch); } - printf("unsigned mgl_numg=%lu, mgl_cur=%lu;\n",(unsigned long)s.size(),l+n); + printf("const long mgl_numg=%lu, mgl_cur=%lu;\n",(unsigned long)s.size(),l+n); printf("float mgl_fact=%g;\n",f->GetFact(0)/mgl_fgen); printf("long mgl_gen_fnt[%lu][6] = {\n", (unsigned long)s.size()); for(i=m=0;iGetWarn(); } void MGL_EXPORT mgl_set_warn(HMGL gr, int code, const char *txt) { gr->SetWarn(code,txt); } +extern bool mglPrintWarn; +void MGL_EXPORT mgl_set_global_warn(const char *txt) +{ + if(txt && *txt) + { + mglGlobalMess += txt; mglGlobalMess += '\n'; + if(mglPrintWarn) fprintf(stderr,"Global message - %s\n",txt); + } +} +void MGL_EXPORT mgl_set_global_warn_(const char *txt, int l) +{ char *s=new char[l+1]; memcpy(s,txt,l); s[l]=0; mgl_set_global_warn(s); delete []s; } +MGL_EXPORT_PURE const char *mgl_get_global_warn() { return mglGlobalMess.c_str(); } +int MGL_EXPORT mgl_get_global_warn_(char *out, int len) +{ + const char *res = mgl_get_global_warn(); + if(out) strncpy(out,res,len); + return strlen(res); +} +//----------------------------------------------------------------------------- void MGL_EXPORT mgl_set_origin(HMGL gr, double x0, double y0, double z0) { gr->SetOrigin(x0,y0,z0); } void MGL_EXPORT mgl_set_palette(HMGL gr, const char *colors) diff --git a/src/canvas.cpp b/src/canvas.cpp index 7a7a332..fd6e388 100644 --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -114,7 +114,7 @@ void mglCanvas::ClearFrame() pthread_mutex_lock(&mutexAct); #endif -#pragma omp critical(txt) +#pragma omp critical { StartAutoGroup(NULL); Sub.clear(); Leg.clear(); Grp.clear(); Act.clear(); @@ -352,7 +352,7 @@ void mglCanvas::mark_plot(long p, char type, mreal size) size = size?fabs(size):1; size *= MarkSize*0.35*font_factor; if(type=='.') size = fabs(PenWidth)*sqrt(font_factor/400); - if(TernAxis&4) for(int i=0;i<4;i++) + if(TernAxis&12) for(int i=0;i<4;i++) { p = ProjScale(i, pp); MGL_MARK_PLOT } else { MGL_MARK_PLOT } } @@ -369,7 +369,7 @@ void mglCanvas::line_plot(long p1, long p2) if(p1>p2) { long kk=p1; p1=p2; p2=kk; } // rearrange start/end for proper dashing long pp1=p1,pp2=p2; mreal pw = fabs(PenWidth)*sqrt(font_factor/400); - if(TernAxis&4) for(int i=0;i<4;i++) + if(TernAxis&12) for(int i=0;i<4;i++) { p1 = ProjScale(i, pp1); p2 = ProjScale(i, pp2); MGL_LINE_PLOT } else { MGL_LINE_PLOT } @@ -387,7 +387,7 @@ void mglCanvas::trig_plot(long p1, long p2, long p3) if(p1<0 || p2<0 || p3<0 || mgl_isnan(Pnt[p1].x) || mgl_isnan(Pnt[p2].x) || mgl_isnan(Pnt[p3].x)) return; long pp1=p1,pp2=p2,pp3=p3; mreal pw = fabs(PenWidth)*sqrt(font_factor/400); - if(TernAxis&4) for(int i=0;i<4;i++) + if(TernAxis&12) for(int i=0;i<4;i++) { p1 = ProjScale(i, pp1); p2 = ProjScale(i, pp2); p3 = ProjScale(i, pp3); MGL_TRIG_PLOT } else { MGL_TRIG_PLOT } @@ -406,7 +406,7 @@ void mglCanvas::quad_plot(long p1, long p2, long p3, long p4) if(p4<0 || mgl_isnan(Pnt[p4].x)) { trig_plot(p1,p2,p3); return; } long pp1=p1,pp2=p2,pp3=p3,pp4=p4; mreal pw = fabs(PenWidth)*sqrt(font_factor/400); - if(TernAxis&4) for(int i=0;i<4;i++) + if(TernAxis&12) for(int i=0;i<4;i++) { p1 = ProjScale(i, pp1); p2 = ProjScale(i, pp2); p3 = ProjScale(i, pp3); p4 = ProjScale(i, pp4); MGL_QUAD_PLOT } @@ -428,6 +428,16 @@ mreal mglCanvas::text_plot(long p,const wchar_t *text,const char *font,mreal siz TernAxis = TernAxis|4; return res; } + else if(TernAxis&8) // text at projections + { + mreal res; + TernAxis = TernAxis&(~8); +// for(int i=0;i<4;i++) + res = text_plot(ProjScale(3,p,true),text,font,size/2,sh,col,rot); + TernAxis = TernAxis|8; + return res; + } + mglPnt q=Pnt[p]; mreal ll = q.u*q.u+q.v*q.v; @@ -798,7 +808,7 @@ std::wstring MGL_EXPORT mgl_ftoa(double v, const char *fmt) // parse -nan numbers if(!strcmp(sf,"-nan")) memcpy(sf,"nan",4); - + // clear exp format int st = se[0]=='-'?1:0; if(plus || se[3+st+dig]=='-') // first remove zeros after 'e' diff --git a/src/canvas_cf.cpp b/src/canvas_cf.cpp index 07ef15d..0add529 100644 --- a/src/canvas_cf.cpp +++ b/src/canvas_cf.cpp @@ -463,9 +463,9 @@ void MGL_EXPORT mgl_set_tick_shift_(uintptr_t *gr, mreal *sx, mreal *sy, mreal * //----------------------------------------------------------------------------- #if !MGL_HAVE_PNG void MGL_EXPORT mgl_write_prc(HMGL gr, const char *fname,const char *descr, int make_pdf) -{ mglGlobalMess += "PNG support was disabled. Please, enable it and rebuild MathGL.\n"; } +{ mgl_set_global_warn("PNG support was disabled. Please, enable it and rebuild MathGL."); } void MGL_EXPORT mgl_write_prc_(uintptr_t *graph, const char *fname,const char *descr, int *make_pdf,int lf,int ld) -{ mglGlobalMess += "PNG support was disabled. Please, enable it and rebuild MathGL.\n"; } +{ mgl_set_global_warn("PNG support was disabled. Please, enable it and rebuild MathGL."); } #endif //----------------------------------------------------------------------------- void MGL_EXPORT mgl_finish(HMGL gr) diff --git a/src/complex.cpp b/src/complex.cpp index 46f77bb..4bde0ee 100644 --- a/src/complex.cpp +++ b/src/complex.cpp @@ -936,6 +936,7 @@ void MGL_EXPORT mgl_datac_put_val(HADT d, dual val, long xx, long yy, long zz) long nx=d->nx, ny=d->ny, nz=d->nz; if(xx>=nx || yy>=ny || zz>=nz) return; dual *a=d->a; + if(xx>=0 && yy>=0 && zz>=0) a[xx+nx*(yy+zz*ny)] = val; if(xx<0 && yy<0 && zz<0) #pragma omp parallel for for(long i=0;i triads; if(de_duplicate(pts, out)) - mglGlobalMess += "There are duplicated points for triangulation.\n"; + mgl_set_global_warn("There are duplicated points for triangulation."); s_hull_pro(pts, triads); long m = triads.size(); nums=new mglData(3,m); diff --git a/src/data.cpp b/src/data.cpp index b2cdb26..14930d8 100644 --- a/src/data.cpp +++ b/src/data.cpp @@ -1548,6 +1548,7 @@ void MGL_EXPORT mgl_data_put_val(HMDT d, mreal val, long xx, long yy, long zz) register long nx=d->nx, ny=d->ny, nz=d->nz; if(xx>=nx || yy>=ny || zz>=nz) return; mreal *a=d->a; + if(xx>=0 && yy>=0 && zz>=0) a[xx+nx*(yy+zz*ny)] = val; if(xx<0 && yy<0 && zz<0) #pragma omp parallel for for(long i=0;ihi) h=hi; + if(*g) + { + if(wi>w) wi = w; + if(hi>h) hi = h; + } + else { w = wi; h = hi; *g = new unsigned char[4*w*h]; } if(type==PNG_COLOR_TYPE_RGB_ALPHA) #pragma omp parallel for - for(long i=0;ih) hi = h; - if(wi>w) wi = w; + if(*g) + { + if(hi>h) hi = h; + if(wi>w) wi = w; + } + else { w = wi; h = hi; *g = new unsigned char[4*w*h]; } for(long i=0;i=v2) return; + unsigned char *g = 0; + int w=0, h=0; + if(!mgl_read_image(&g,w,h,fname)) return; long num=0; - FILE *fp = fopen(fname, "rb"); - if (!fp) return; - png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0); - if (!png_ptr) { fclose(fp); return; } - png_infop info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) - { png_destroy_read_struct(&png_ptr,0,0); fclose(fp); return; } - png_infop end_info = png_create_info_struct(png_ptr); - if (!end_info) - { png_destroy_read_struct(&png_ptr,&info_ptr,0); fclose(fp); return; } - - png_init_io(png_ptr, fp); - png_read_png(png_ptr, info_ptr, - PNG_TRANSFORM_STRIP_ALPHA|PNG_TRANSFORM_PACKING| - PNG_TRANSFORM_STRIP_16|PNG_TRANSFORM_EXPAND,0); - unsigned char **rows = png_get_rows(png_ptr, info_ptr); unsigned char *c = mgl_create_scheme(scheme,num); if(num>1) { - long w=png_get_image_width(png_ptr, info_ptr); - long h=png_get_image_height(png_ptr, info_ptr); d->Create(w,h,1); #pragma omp parallel for collapse(2) - for(long i=0;iny;i++) for(long j=0;jnx;j++) + for(long i=0;iny-i-1]+3*j,true); + size_t val = mgl_col_dif(c+3*k,g+4*w*(d->ny-i-1)+4*j,true); if(val==0) { pos=k; break; } if(vala[j+d->nx*i] = v1 + pos*(v2-v1)/num; } } - png_destroy_read_struct(&png_ptr, &info_ptr,&end_info); - fclose(fp); delete []c; -#else - mglGlobalMess += "PNG support was disabled. Please, enable it and rebuild MathGL.\n"; -#endif + delete []g; + delete []c; } //----------------------------------------------------------------------------- +int MGL_NO_EXPORT mgl_png_save(const char *fname, int w, int h, unsigned char **p); +int MGL_NO_EXPORT mgl_bmp_save(const char *fname, int w, int h, unsigned char **p); +int MGL_NO_EXPORT mgl_tga_save(const char *fname, int w, int h, unsigned char **p); +int MGL_NO_EXPORT mgl_jpeg_save(const char *fname, int w, int h, unsigned char **p); +int MGL_NO_EXPORT mgl_bps_save(const char *fname, int w, int h, unsigned char **p); void MGL_EXPORT mgl_data_export(HCDT dd, const char *fname, const char *scheme,mreal v1,mreal v2,long ns) { -#if MGL_HAVE_PNG long nx=dd->GetNx(), ny=dd->GetNy(), nz=dd->GetNz(); if(v1>v2) return; if(ns<0 || ns>=nz) ns=0; @@ -223,9 +216,9 @@ void MGL_EXPORT mgl_data_export(HCDT dd, const char *fname, const char *scheme,m unsigned char **p = new unsigned char*[ny]; unsigned char *d = new unsigned char[3*nx*ny]; -#pragma omp parallel for + #pragma omp parallel for for(long i=0;iv(j,i,ns)-v1)/(v2-v1)); @@ -234,40 +227,19 @@ void MGL_EXPORT mgl_data_export(HCDT dd, const char *fname, const char *scheme,m } delete []c; - FILE *fp = fopen(fname, "wb"); - if (!fp) { delete []p; delete []d; return; } - png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0); - if (!png_ptr) { delete []p; delete []d; fclose(fp); return; } - png_infop info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) - { png_destroy_write_struct(&png_ptr,0); delete []p; delete []d; fclose(fp); return; } - png_init_io(png_ptr, fp); - png_set_filter(png_ptr, 0, PNG_ALL_FILTERS); - png_set_compression_level(png_ptr, Z_BEST_COMPRESSION); - png_set_IHDR(png_ptr, info_ptr, nx, ny, 8, PNG_COLOR_TYPE_RGB, - PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); - png_set_rows(png_ptr, info_ptr, p); - png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, 0); - png_write_end(png_ptr, info_ptr); - png_destroy_write_struct(&png_ptr, &info_ptr); - fclose(fp); delete []p; delete []d; -#else - mglGlobalMess += "PNG support was disabled. Please, enable it and rebuild MathGL.\n"; -#endif + int len=strlen(fname); + if(!strcmp(fname+len-4,".jpg") || !strcmp(fname+len-5,".jpeg")) mgl_jpeg_save(fname, nx,ny,p); + if(!strcmp(fname+len-4,".bmp")) mgl_bmp_save(fname, nx,ny,p); + if(!strcmp(fname+len-4,".png")) mgl_png_save(fname, nx,ny,p); + if(!strcmp(fname+len-4,".eps") || !strcmp(fname+len-4,".bps")) mgl_bps_save(fname, nx,ny,p); } //----------------------------------------------------------------------------- void MGL_EXPORT mgl_data_export_(uintptr_t *d, const char *fname, const char *scheme,mreal *v1,mreal *v2,int *ns,int l,int n) -{ - char *s=new char[l+1]; memcpy(s,fname,l); s[l]=0; +{ char *s=new char[l+1]; memcpy(s,fname,l); s[l]=0; char *f=new char[n+1]; memcpy(f,scheme,n); f[n]=0; - mgl_data_export(_DT_,s,f,*v1,*v2,*ns); - delete []s; delete []f; -} + mgl_data_export(_DT_,s,f,*v1,*v2,*ns); delete []s; delete []f; } void MGL_EXPORT mgl_data_import_(uintptr_t *d, const char *fname, const char *scheme,mreal *v1,mreal *v2,int l,int n) -{ - char *s=new char[l+1]; memcpy(s,fname,l); s[l]=0; +{ char *s=new char[l+1]; memcpy(s,fname,l); s[l]=0; char *f=new char[n+1]; memcpy(f,scheme,n); f[n]=0; - mgl_data_import(_DT_,s,f,*v1,*v2); - delete []s; delete []f; -} + mgl_data_import(_DT_,s,f,*v1,*v2); delete []s; delete []f; } //----------------------------------------------------------------------------- diff --git a/src/def_font.cpp b/src/def_font.cpp index e2b5de1..4497e52 100644 --- a/src/def_font.cpp +++ b/src/def_font.cpp @@ -1,7 +1,6 @@ -#include "mgl2/define.h" -unsigned MGL_EXPORT mgl_numg=411, mgl_cur=243136; -float MGL_EXPORT mgl_fact=35.7143; -long MGL_EXPORT mgl_gen_fnt[411][6] = { +const long mgl_numg=411, mgl_cur=243136; +const float mgl_fact=35.7143; +long mgl_gen_fnt[411][6] = { {0x21,166,41,0,39,164}, {0x22,204,43,398,38,570}, {0x23,250,33,798,32,930}, @@ -414,7 +413,7 @@ long MGL_EXPORT mgl_gen_fnt[411][6] = { {0x226f,342,20,242874,19,242954}, {0x27c2,346,8,243068,6,243100} }; -short MGL_EXPORT mgl_buf_fnt[243136] = { +short mgl_buf_fnt[243136] = { 88,88,94,88,117,278,117,282,118,286,118,297,117,311,113,322,108,331,101,336,92,338,81,336,74,331,69,323,66,312,65,300,65,289,66,284,66,278,16383,16383,118,21,116,30,113,37,107,43,100,47,92,49,83,47,76,43,70,37,66,30,65,22,66,13,70,6,75,0,82,-2,91,-3,100,-2,107,0,113,6,116,13,118,21,150,215,154,243,158,268,162,289,165,306,166,318,165,324,162,330,157,334,151,337,145,338,138,337,132,334,127,330,124,324,123,316,124,307,126,291,129,270,134,244,139,215,16383,16383,65,215,70,243,75,268,78,289,80,306,81,318,80,324,77,330,73,334,67,337,60,338,53,337,47,334,42,330,40,324,39,316,39,307,42,291,45,270, 107,43,107,0,113,37,113,37,107,0,113,6,113,37,113,6,116,30,116,30,113,6,116,13,116,30,116,13,118,21,65,22,66,13,66,30,66,30,66,13,70,6,66,30,70,6,70,37,70,37,70,6,75,0,70,37,75,0,76,43,76,43,75,0,82,-2,76,43,82,-2,83,47,83,47,82,-2,91,-3,83,47,91,-3,92,49,92,49,91,-3,100,-2,92,49,100,-2,100,47,100,47,100,-2,107,0,100,47,107,0,107,43,118,297,117,311,117,278,118,297,117,278,117,282,118,297,117,282,118,286,118,297,118,286,118,290,118,297,118,290,118,294,117,278,117,311,113,322,117,278,113,322,108,331,117,278,108,331,101,336,117,278,101,336,94,88,92,338,81,336,88,88,92,338,88,88,94,88,92,338,94,88,101,336,66,284,66,278,69,323,69,323,66,278,88,88,69,323,88,88,74,331,74,331,88,88,81,336,66,312,65,300,65,297,66,312,65,297,65,293,66,312,65,293,65,289,66,312,65,289,66,284,66,312,66,284,69,323, 150,215,154,243,158,268,162,289,165,306,166,318,165,324,162,330,157,334,151,337,145,338,138,337,132,334,127,330,124,324,123,316,124,307,126,291,129,270,134,244,139,215,16383,16383,65,215,70,243,75,268,78,289,80,306,81,318,80,324,77,330,73,334,67,337,60,338,53,337,47,334,42,330,40,324,39,316,39,307,42,291,45,270,50,244,55,215,248,203,248,230,200,230,214,331,185,331,171,230,104,230,119,331,90,331,75,230,17,230,17,203,71,203,60,136,3,136,3,108,56,108,40,0,69,0,85,108,152,108,137,0,166,0,181,108,235,108,235,136,185,136,195,203,16383,16383,166,203,156,136,89,136,100,203,132,319,154,314,172,304,186,291,197,273,205,250,213,250,213,305,202,314,189,321, diff --git a/src/evalc.cpp b/src/evalc.cpp index f8f76a6..13ff94a 100644 --- a/src/evalc.cpp +++ b/src/evalc.cpp @@ -77,7 +77,6 @@ mglFormulaC::mglFormulaC(const char *string) Left=Right=0; Res=0; Kod=0; if(!string) { Kod = EQ_NUM; Res = 0; return; } -//printf("%s\n",string); fflush(stdout); char *str = new char[strlen(string)+1]; strcpy(str,string); long n,len; diff --git a/src/exec.cpp b/src/exec.cpp index b97d9b3..ed776dc 100644 --- a/src/exec.cpp +++ b/src/exec.cpp @@ -275,6 +275,13 @@ int MGL_NO_EXPORT mgls_clf(mglGraph *gr, long , mglArg *a, const char *k, const else res = 1; return res; } //----------------------------------------------------------------------------- +int MGL_NO_EXPORT mgls_reset(mglGraph *gr, long , mglArg *, const char *k, const char *) +{ + int res=0; + if(!strcmp(k,"")) gr->DefaultPlotParam(); + else res = 1; return res; +} +//----------------------------------------------------------------------------- int MGL_NO_EXPORT mgls_chart(mglGraph *gr, long , mglArg *a, const char *k, const char *opt) { int res=0; @@ -1239,6 +1246,14 @@ int MGL_NO_EXPORT mgls_face(mglGraph *gr, long , mglArg *a, const char *k, const else res = 1; gr->Self()->LoadState(); return res; } //----------------------------------------------------------------------------- +int MGL_NO_EXPORT mgls_logo(mglGraph *gr, long , mglArg *a, const char *k, const char *opt) +{ + int res=0; + if(!strcmp(k,"s")) gr->Logo(a[0].s.c_str(),false,opt); + else if(!strcmp(k,"sn")) gr->Logo(a[0].s.c_str(),iint(a[1].v),opt); + else res = 1; return res; +} +//----------------------------------------------------------------------------- int MGL_NO_EXPORT mgls_resize(mglGraph *, long , mglArg *a, const char *k, const char *) { int res=0; @@ -3017,8 +3032,10 @@ mglCommand mgls_base_cmd[] = { {"legendmarks","Set number of marks in the legend","legendmarks val", mgls_legendmarks ,15}, {"light","Setup light","light [val] | val num | num xpos ypos zpos ['fmt' br]", mgls_light ,2}, {"line","Draw line","line x1 y1 x2 y2 ['fmt']|x1 y1 z1 x2 y2 z2 ['fmt']", mgls_line ,13}, - {"list","Creates new variable from list of numbers or data","list Var v1 ...|Var D1 ...", 0, 6}, + {"list","Creates new variable from list of numbers or data","list Var v1 ...|Var D1 ...", 0, 4}, + {"load","Load commands from external DLL","load 'fname'", 0, 6}, {"loadfont","Load fontfaces","loadfont ['face']", mgls_loadfont ,15}, + {"logo","Draw bitmap (logo) along axis range","logo 'fname' [smooth]", mgls_logo ,13}, {"map","Draw mapping plot","map Udat Vdat ['fmt']|Xdat Ydat Udat Vdat ['fmt']", mgls_map ,10}, {"mark","Draw mark plot for 1D data","mark Ydat Rdat ['fmt']|Xdat Ydat Rdat ['fmt']|Xdat Ydat Zdat Rdat ['fmt']", mgls_mark ,7}, {"marksize","Set size of markers","marksize val", mgls_marksize ,2}, @@ -3066,6 +3083,7 @@ mglCommand mgls_base_cmd[] = { {"rect","Draw rectangle","rect x1 y1 x2 y2 ['fmt']|x1 y1 z1 x2 y2 z2 ['fmt']", mgls_rect ,13}, {"refill","Fill data by interpolation of Vdat","refill Dat Xdat Vdat [sl] | Dat Xdat Ydat Vdat [sl] | Dat Xdat Ydat Zdat Vdat", mgls_refill ,3}, {"region","Draw filled region (ribbon) between 2 curves","region Ydat1 Ydat2 ['fmt']|Xdat Ydat1 Ydat2 ['fmt']||Xdat1 Ydat1 Xdat2 Ydat2 ['fmt']|Xdat1 Ydat1 Zdat1 Xdat2 Ydat2 Zdat2 ['fmt']", mgls_region ,7}, + {"reset","Reset settings and clear picture","reset", mgls_reset ,12}, {"resize","Resize data","resize Res Dat mx [my mz]", mgls_resize ,4}, {"return","Return from function","return", 0, 6}, {"rhomb","Draw rhombus","rhomb x1 y1 x2 y2 r ['fmt']|x1 y1 z1 x2 y2 z2 r ['fmt']", mgls_rhomb ,13}, diff --git a/src/export.cpp b/src/export.cpp index c44d53b..65529b4 100644 --- a/src/export.cpp +++ b/src/export.cpp @@ -72,7 +72,7 @@ int MGL_NO_EXPORT mgl_pnga_save(const char *fname, int w, int h, unsigned char * if(fl) fclose(fp); return 0; #else - mglGlobalMess += "PNG support was disabled. Please, enable it and rebuild MathGL.\n"; + mgl_set_global_warn("PNG support was disabled. Please, enable it and rebuild MathGL."); return 1; #endif } @@ -106,7 +106,7 @@ int MGL_NO_EXPORT mgl_png_save(const char *fname, int w, int h, unsigned char ** if(fl) fclose(fp); return 0; #else - mglGlobalMess += "PNG support was disabled. Please, enable it and rebuild MathGL.\n"; + mgl_set_global_warn("PNG support was disabled. Please, enable it and rebuild MathGL."); return 1; #endif } @@ -193,7 +193,7 @@ int MGL_NO_EXPORT mgl_jpeg_save(const char *fname, int w, int h, unsigned char * if(fl) fclose(fp); return 0; #else - mglGlobalMess += "JPEG support was disabled. Please, enable it and rebuild MathGL.\n"; + mgl_set_global_warn("JPEG support was disabled. Please, enable it and rebuild MathGL."); return 1; #endif } @@ -228,16 +228,33 @@ int MGL_NO_EXPORT mgl_bps_save(const char *fname, int w, int h, unsigned char ** void *fp; if(!strcmp(fname,"-")) fp = stdout; // allow to write in stdout - else fp = gz ? (void*)gzopen(fname,"wt") : (void*)fopen(fname,"wt"); + else + { + fp = gz ? (void*)gzopen(fname,"wt") : (void*)fopen(fname,"wt"); + if(gz) + { + unsigned len = strlen(fname), pos=0; + char *buf = new char[len+4]; + memcpy(buf,fname,len); + if(buf[len-3]=='.') pos = len-2; + else if(buf[len-2]=='.') pos = len-1; + else { buf[len-1]='.'; pos = len; } + if(pos) { buf[pos]=buf[pos+1]='b'; buf[pos+2]=0; } + FILE *fb = fopen(buf,"w"); + fprintf(fb, "%%%%BoundingBox: 0 0 %d %d\n", w, h); + fclose(fb); + } + } mgl_printf(fp, gz, "%%!PS-Adobe-3.0 EPSF-3.0\n%%%%BoundingBox: 0 0 %d %d\n",w,h); mgl_printf(fp, gz, "%%%%Created by MathGL library\n%%%%Title: %s\n", fname); mgl_printf(fp, gz, "%%%%CreationDate: %s\n",ctime(&now)); mgl_printf(fp, gz, "%d %d 8 [1 0 0 1 0 0] {currentfile %d string readhexstring pop} false 3 colorimage\n", - w,h,1+w*h/40); - for(j=h-1;j>=0;j--) for(i=0;i0) mgl_printf(fp, gz, "\n"); - mgl_printf(fp, gz, "%02x%02x%02x",p[j][3*i],p[j][3*i+1],p[j][3*i+2]); + if((i+w*j)%40==0 && i+j>0) mgl_printf(fp, gz, "\n"); + register long jj=h-1-j; + mgl_printf(fp, gz, "%02x%02x%02x",p[jj][3*i],p[jj][3*i+1],p[jj][3*i+2]); } mgl_printf(fp, gz, "\n\nshowpage\n%%%%EOF\n"); if(strcmp(fname,"-")) { if(gz) gzclose((gzFile)fp); else fclose((FILE *)fp); } @@ -284,10 +301,14 @@ int MGL_NO_EXPORT mgl_gif_save(const char *fname, int w, int h, unsigned char ** line[m] = i+6*(j+6*k); } EGifPutLine(fg, line, w*h); +#if GIFLIB_MAJOR>5 || (GIFLIB_MAJOR==5 && GIFLIB_MINOR>0) + EGifCloseFile(fg,0); +#else EGifCloseFile(fg); +#endif delete []line; return 0; #else - mglGlobalMess += "GIF support was disabled. Please, enable it and rebuild MathGL.\n"; + mgl_set_global_warn("GIF support was disabled. Please, enable it and rebuild MathGL."); return 1; #endif } @@ -299,9 +320,13 @@ int MGL_NO_EXPORT mgl_gif_save(const char *fname, int w, int h, unsigned char ** void mglCanvas::StartGIF(const char *fname, int ms) { #if MGL_HAVE_GIF - if(gif) EGifCloseFile(gif); std::string fn=fname; if(fn.empty()) { fn=PlotId+".gif"; fname = fn.c_str(); } +#if GIFLIB_MAJOR>5 || (GIFLIB_MAJOR==5 && GIFLIB_MINOR>0) + if(gif) EGifCloseFile(gif,0); +#else + if(gif) EGifCloseFile(gif); +#endif #if GIFLIB_MAJOR>=5 gif = EGifOpenFileName(fname, 0, 0); EGifSetGifVersion(gif,true); @@ -353,16 +378,20 @@ void mglCanvas::StartGIF(const char *fname, int ms) EGifPutExtension(gif,0xf9,4,ext2); #endif #else - mglGlobalMess += "GIF support was disabled. Please, enable it and rebuild MathGL.\n"; + mgl_set_global_warn("GIF support was disabled. Please, enable it and rebuild MathGL."); #endif } //----------------------------------------------------------------------------- void mglCanvas::CloseGIF() { #if MGL_HAVE_GIF +#if GIFLIB_MAJOR>5 || (GIFLIB_MAJOR==5 && GIFLIB_MINOR>0) + if(gif) EGifCloseFile(gif,0); +#else if(gif) EGifCloseFile(gif); +#endif #else - mglGlobalMess += "GIF support was disabled. Please, enable it and rebuild MathGL.\n"; + mgl_set_global_warn("GIF support was disabled. Please, enable it and rebuild MathGL."); #endif gif = 0; } @@ -396,8 +425,6 @@ void mglCanvas::EndFrame() EGifPutLine(gif, line, n); delete []line; free(l); if(f) free(f); -//#else -// mglGlobalMess += "GIF support was disabled. Please, enable it and rebuild MathGL.\n"; #endif } //----------------------------------------------------------------------------- @@ -559,10 +586,13 @@ void MGL_EXPORT mgl_write_frame(HMGL gr, const char *fname,const char *descr) if(!strcmp(fname+len-4,".png")) mgl_write_png(gr,fname,descr); if(!strcmp(fname+len-4,".eps")) mgl_write_eps(gr,fname,descr); if(!strcmp(fname+len-5,".epsz")) mgl_write_eps(gr,fname,descr); + if(!strcmp(fname+len-7,".eps.gz")) mgl_write_eps(gr,fname,descr); if(!strcmp(fname+len-4,".bps")) mgl_write_bps(gr,fname,descr); if(!strcmp(fname+len-5,".bpsz")) mgl_write_bps(gr,fname,descr); + if(!strcmp(fname+len-7,".bps.gz")) mgl_write_bps(gr,fname,descr); if(!strcmp(fname+len-4,".svg")) mgl_write_svg(gr,fname,descr); if(!strcmp(fname+len-5,".svgz")) mgl_write_svg(gr,fname,descr); + if(!strcmp(fname+len-7,".svg.gz")) mgl_write_svg(gr,fname,descr); if(!strcmp(fname+len-4,".gif")) mgl_write_gif(gr,fname,descr); if(!strcmp(fname+len-4,".bmp")) mgl_write_bmp(gr,fname,descr); if(!strcmp(fname+len-4,".tga")) mgl_write_tga(gr,fname,descr); diff --git a/src/export_2d.cpp b/src/export_2d.cpp index aa0a5ff..172d8a8 100644 --- a/src/export_2d.cpp +++ b/src/export_2d.cpp @@ -180,8 +180,23 @@ void MGL_EXPORT mgl_write_eps(HMGL gr, const char *fname,const char *descr) if(!strcmp(fname,"-")) fp = stdout; // allow to write in stdout else fp = gz ? (void*)gzopen(fname,"wt") : (void*)fopen(fname,"wt"); if(!fp) { gr->SetWarn(mglWarnOpen,fname); return; } - const std::string loc = setlocale(LC_NUMERIC, NULL); setlocale(LC_NUMERIC, "C"); int w = _Gr_->GetWidth(), h = _Gr_->GetHeight(); + + if(gz) + { + unsigned len = strlen(fname), pos=0; + char *buf = new char[len+4]; + memcpy(buf,fname,len); + if(buf[len-3]=='.') pos = len-2; + else if(buf[len-2]=='.') pos = len-1; + else { buf[len-1]='.'; pos = len; } + if(pos) { buf[pos]=buf[pos+1]='b'; buf[pos+2]=0; } + FILE *fb = fopen(buf,"w"); + fprintf(fb, "%%%%BoundingBox: 0 0 %d %d\n", w, h); + fclose(fb); + } + + const std::string loc = setlocale(LC_NUMERIC, NULL); setlocale(LC_NUMERIC, "C"); mgl_printf(fp, gz, "%%!PS-Adobe-3.0 EPSF-3.0\n%%%%BoundingBox: 0 0 %d %d\n", w, h); mgl_printf(fp, gz, "%%%%Created by MathGL library\n%%%%Title: %s\n",descr ? descr : fname); mgl_printf(fp, gz, "%%%%CreationDate: %s\n",ctime(&now)); diff --git a/src/export_3d.cpp b/src/export_3d.cpp index 6e0d624..eee798e 100644 --- a/src/export_3d.cpp +++ b/src/export_3d.cpp @@ -700,6 +700,7 @@ bool mglCanvas::ImportMGLD(const char *fname, bool add) const std::string loc = setlocale(LC_NUMERIC, NULL); setlocale(LC_NUMERIC, "C"); if(!add) { Clf(); Txt.clear(); } else { ClfZB(); npnt=Pnt.size(); nglf=Glf.size(); } + LightScale(&B); #if MGL_HAVE_PTHREAD pthread_mutex_lock(&mutexGlf); pthread_mutex_lock(&mutexPnt); diff --git a/src/fit.cpp b/src/fit.cpp index d84d6e7..d49f686 100644 --- a/src/fit.cpp +++ b/src/fit.cpp @@ -32,6 +32,10 @@ mglData MGL_NO_EXPORT mglFormulaCalc(const char *str, const std::vectoreq, list); #pragma omp parallel for for(long i=0;in;i++) - gsl_vector_set (f, i, (res.a[i] - fd->a[i])/fd->s[i]); + { + mreal aa = fd->a[i], ss = fd->s[i]; + if(mgl_isnum(aa) && ss==ss && ss!=0) + gsl_vector_set (f, i, (res.a[i] - aa)/ss); + else gsl_vector_set (f, i, 0); + } delete []var; return GSL_SUCCESS; } @@ -100,7 +109,12 @@ int MGL_NO_EXPORT mgl_fit__df (const gsl_vector * x, void *data, gsl_matrix * J) var[j].Fill(gsl_vector_get(x,j)); #pragma omp parallel for for(long i=0;in;i++) - gsl_matrix_set (J, i, j, dif.a[i]/fd->s[i]); + { + mreal aa = fd->a[i], ss = fd->s[i]; + if(mgl_isnum(aa) && ss==ss && ss!=0) + gsl_matrix_set (J, i, j, dif.a[i]/ss); + else gsl_matrix_set (J, i, j, 0); + } } delete []var; return GSL_SUCCESS; @@ -119,7 +133,12 @@ int MGL_NO_EXPORT mgl_fit__fdf (const gsl_vector * x, void *data, gsl_vector * f mglData res = mglFormulaCalc(fd->eq, list); #pragma omp parallel for for(long i=0;in;i++) - gsl_vector_set (f, i, (res.a[i] - fd->a[i])/fd->s[i]); + { + mreal aa = fd->a[i], ss = fd->s[i]; + if(mgl_isnum(aa) && ss==ss && ss!=0) + gsl_vector_set (f, i, (res.a[i] - aa)/ss); + else gsl_vector_set (f, i, 0); + } const mreal eps = 1e-5; for(long j=0;jm;j++) { @@ -128,7 +147,12 @@ int MGL_NO_EXPORT mgl_fit__fdf (const gsl_vector * x, void *data, gsl_vector * f var[j].Fill(gsl_vector_get(x,j)); #pragma omp parallel for for(long i=0;in;i++) - gsl_matrix_set (J, i, j, dif.a[i]/fd->s[i]); + { + mreal aa = fd->a[i], ss = fd->s[i]; + if(mgl_isnum(aa) && ss==ss && ss!=0) + gsl_matrix_set (J, i, j, dif.a[i]/ss); + else gsl_matrix_set (J, i, j, 0); + } } delete []var; return GSL_SUCCESS; @@ -179,6 +203,7 @@ mreal MGL_NO_EXPORT mgl_fit_base(mglFitData &fd, mreal *ini) void mglPrepareFitEq(mglBase *gr,mreal chi, const char *eq, const char *var, mreal *par) { char buf[32]=""; + mglFitChi = chi; snprintf(mglFitRes,1024,"chi=%g",chi); size_t i,k,len=strlen(var); for(i=0;iSetWarn(mglWarnNull,"Fit[S]"); return 0; } mglData x(xx), y(yy), s(ss); x.s=L"x"; + long mm = yy->GetNy()*yy->GetNz(); +#pragma omp parallel for + for(long i=0;iSetWarn(mglWarnNull,"Fit[S]"); return 0; } mglData x(m, n), y(m, n), z(zz), s(ss); x.s=L"x"; y.s=L"y"; + long nz = zz->GetNz(), mm = n*m; #pragma omp parallel for collapse(2) for(long i=0;iGetNz()); mreal res = -1; - for(long i=0;iGetNz();i++) + for(long i=0;inx>=fd.m) in.Set(ini->a,fd.m); else in.Fill(0.,0); @@ -373,6 +406,7 @@ HMDT MGL_EXPORT mgl_fit_xyzas(HMGL gr, HCDT xx, HCDT yy, HCDT zz, HCDT aa, HCDT x.a[i0] = GetX(xx,i,j,k).x; y.a[i0] = GetY(yy,i,j,k).x; z.a[i0] = GetZ(zz,i,j,k).x; + if(mgl_isnan(x.a[i0]) || mgl_isnan(y.a[i0]) || mgl_isnan(z.a[i0])) a.a[i0] = NAN; } mglFitData fd; fd.n = m*n*l; fd.x = &x; fd.y = &y; diff --git a/src/font.cpp b/src/font.cpp index 85639cf..6ea1871 100644 --- a/src/font.cpp +++ b/src/font.cpp @@ -29,11 +29,8 @@ #include "mgl2/base.h" #include "mgl2/font.h" +#include "def_font.cpp" //----------------------------------------------------------------------------- -extern unsigned mgl_numg, mgl_cur; -extern float mgl_fact; -extern long mgl_gen_fnt[516][6]; -extern short mgl_buf_fnt[246080]; extern mglTeXsymb mgl_tex_symb[]; extern long mgl_tex_num; //mglFont mglDefFont("nofont"); @@ -547,7 +544,7 @@ float mglFont::Puts(const unsigned *text, float x,float y,float f,int style,floa void mglFont::main_copy() { #pragma omp parallel for - for(size_t i=0;i &buf) return true; } //----------------------------------------------------------------------------- -//extern std::string mglGlobalMess; ///< Buffer for receiving global messages bool mglFont::Load(const char *base, const char *path) { // base = 0; @@ -690,13 +686,12 @@ bool mglFont::Load(const char *base, const char *path) path = buf; buf[i]=0; base = buf+i+1; } } - Clear(); // first clear old + Clear(); // first clear old snprintf(str,256,"%s%c%s.vfm",path,sep,base?base:""); std::vector norm, bold, ital, both; if(!(base && *base) || !read_main(str,norm)) { -// mglGlobalMess += "Load built-in font.\n"; read_def(); setlocale(LC_NUMERIC,loc.c_str()); if(buf) delete []buf; return true; } @@ -732,7 +727,7 @@ bool mglFont::Load(const char *base, const char *path) for(long i=0;iRestoreOnce(); } void MGL_EXPORT mgl_parser_stop(HMPR p) { p->Stop = true; } void MGL_EXPORT mgl_parser_allow_setsize(HMPR p, int a) { p->AllowSetSize= a; } void MGL_EXPORT mgl_parser_allow_file_io(HMPR p, int a) { p->AllowFileIO = a; } +void MGL_EXPORT mgl_parser_allow_dll_call(HMPR p, int a){ p->AllowDllCall = a; } //----------------------------------------------------------------------------- #define _PR_ ((mglParser *)(*p)) uintptr_t MGL_EXPORT mgl_create_parser_() { return uintptr_t(new mglParser); } @@ -959,6 +979,7 @@ void MGL_EXPORT mgl_parse_text_(uintptr_t* gr, uintptr_t* p, const char *str, in void MGL_EXPORT mgl_parser_restore_once_(uintptr_t* p) { _PR_->RestoreOnce(); } void MGL_EXPORT mgl_parser_allow_setsize_(uintptr_t* p, int *a) { _PR_->AllowSetSize= *a; } void MGL_EXPORT mgl_parser_allow_file_io_(uintptr_t* p, int *a) { _PR_->AllowFileIO = *a; } +void MGL_EXPORT mgl_parser_allow_dll_call_(uintptr_t* p, int *a){ _PR_->AllowDllCall= *a; } void MGL_EXPORT mgl_parser_stop_(uintptr_t* p) { _PR_->Stop = true; } //----------------------------------------------------------------------------- long MGL_EXPORT mgl_use_parser(HMPR pr, int inc) @@ -1015,3 +1036,32 @@ uintptr_t MGL_EXPORT mgl_parser_calc_(uintptr_t *p, const char *str,int l) void MGL_EXPORT mgl_parser_del_all(HMPR p) { p->DeleteAll(); } void MGL_EXPORT mgl_parser_del_all_(uintptr_t *p) { _PR_->DeleteAll(); } //--------------------------------------------------------------------------- +void MGL_EXPORT mgl_parser_load(HMPR pr, const char *so_name) +{ + if(!pr->AllowDllCall) return; +#if MGL_HAVE_LTDL + lt_dlhandle so = lt_dlopen(so_name); + if(!so) return; + const mglCommand *cmd = (const mglCommand *)lt_dlsym(so,"mgl_cmd_extra"); + if(!cmd) return; + + int i, mp, mc, exist=true; + // determine the number of symbols + for(i=0;pr->Cmd[i].name[0];i++){}; mp = i; + for(i=0;cmd[i].name[0];i++) + if(!pr->FindCommand(cmd[i].name)) exist=false; + if(exist) { lt_dlclose(so); return; } // all commands already presents + else pr->DllOpened.push_back(so); + mc = i; + mglCommand *buf = new mglCommand[mp+mc+1]; + memcpy(buf, pr->Cmd, mp*sizeof(mglCommand)); + memcpy(buf+mp, cmd, (mc+1)*sizeof(mglCommand)); + qsort(buf, mp+mc, sizeof(mglCommand), mgl_cmd_cmp); + if(pr->Cmd!=mgls_base_cmd) delete []pr->Cmd; + pr->Cmd = buf; +#endif +} +void MGL_EXPORT mgl_parser_load_(uintptr_t *p, const char *dll_name,int l) +{ char *s=new char[l+1]; memcpy(s,dll_name,l); s[l]=0; + mgl_parser_load(_PR_, s); delete []s; } +//--------------------------------------------------------------------------- diff --git a/src/pixel.cpp b/src/pixel.cpp index 7903080..c22949b 100644 --- a/src/pixel.cpp +++ b/src/pixel.cpp @@ -46,15 +46,31 @@ void mglCanvas::SetSize(int w,int h,bool clf) for(long i=0;i &pnt = DrwDat[k].Pnt; + n = long(pnt.size()); +#pragma omp parallel for + for(long i=0;i0) #pragma omp parallel for for(long i=0;iSetWarn(mglWarnLow,"Logo"); return; } + static int cgid=1; gr->StartGroup("Logo",cgid++); + mreal z = gr->SaveState(opt); + if(mgl_isnan(z)) z = gr->Min.z; + mreal x1 = gr->Min.x, y1 = gr->Min.y, dx, dy; + if(!smooth || w<2 || h<2) + { + dx = (gr->Max.x-x1)/w; dy = (gr->Max.y-y1)/h; + gr->Reserve(4*(w+1)*(h+1)); + for(long j=0;jAddPnt(mglPoint(x1+dx*i,y1+dy*j,z),0); gr->SetRGBA(k1,c); + k2 = gr->AddPnt(mglPoint(x1+dx*(i+1),y1+dy*j,z),0); gr->SetRGBA(k2,c); + k3 = gr->AddPnt(mglPoint(x1+dx*i,y1+dy*(j+1),z),0); gr->SetRGBA(k3,c); + k4 = gr->AddPnt(mglPoint(x1+dx*(i+1),y1+dy*(j+1),z),0); gr->SetRGBA(k4,c); + gr->quad_plot(k1,k2,k3,k4); + } + } + else + { + dx = (gr->Max.x-x1)/(w-1); dy = (gr->Max.y-y1)/(h-1); + gr->Reserve(w*h); + long *pos = new long[w*h]; + for(long j=0;jAddPnt(mglPoint(x1+dx*i,y1+dy*j,z),0); + gr->SetRGBA(pos[i1],mglColor(rgba[i0]/255.,rgba[i0+1]/255.,rgba[i0+2]/255.)); + } + for(long j=0;jquad_plot(pos[i1],pos[i1+1],pos[i1+w],pos[i1+1+w]); + } + delete []pos; + } + gr->EndGroup(); +} +//----------------------------------------------------------------------------- +bool MGL_NO_EXPORT mgl_read_image(unsigned char **g, int &w, int &h, const char *fname); +void MGL_EXPORT mgl_logo_file(HMGL gr, const char *fname, int smooth, const char *opt) +{ + unsigned char *g = 0; + int w=0, h=0; + if(!mgl_read_image(&g,w,h,fname)) return; + mgl_logo(gr,w,h,g,smooth,opt); + delete []g; +} +//----------------------------------------------------------------------------- +void MGL_EXPORT mgl_logo_file_(uintptr_t *gr, const char *fname, int *smooth, const char *opt,int l,int n) +{ char *s=new char[l+1]; memcpy(s,fname,l); s[l]=0; + char *f=new char[n+1]; memcpy(f,opt,n); f[n]=0; + mgl_logo_file(_GR_,s,*smooth,f); delete []s; delete []f; } +//----------------------------------------------------------------------------- diff --git a/src/window.cpp b/src/window.cpp index 9f5512c..835c304 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -117,16 +117,18 @@ void mglCanvasWnd::ReLoad() const std::string loc = setlocale(LC_NUMERIC, NULL); setlocale(LC_NUMERIC, "C"); // use frames for quickly redrawing while adding/changing primitives if(mgl_is_frames(this)) NewFrame(); - + int n = DrawFunc ? DrawFunc(this,FuncPar) : 0; if(n=0) NumFig = n; - + if(mgl_is_frames(this)) EndFrame(); setlocale(LC_NUMERIC, loc.c_str()); Update(); } } //----------------------------------------------------------------------------- +void MGL_EXPORT mgl_wnd_set_func(HMGL gr, int (*draw)(HMGL gr, void *p), void *par, void (*reload)(void *p)) +{ mglCanvasWnd *g = dynamic_cast(gr); if(g) g->SetDrawFunc(draw, par, reload); } void MGL_EXPORT mgl_wnd_toggle_alpha(HMGL gr) { mglCanvasWnd *g = dynamic_cast(gr); if(g) g->ToggleAlpha(); } void MGL_EXPORT mgl_wnd_toggle_light(HMGL gr) diff --git a/texinfo/classes.dia b/texinfo/classes.dia index 04bf40dbd4b8027a7414c72b6aab9929e8a43b35..80f25ac79486215548769936260d2d53ecbd349a 100644 GIT binary patch literal 4561 zcmV;?5iaf@iwFP!000021MQt%bK5o+hVSz$JnpSR;~QYzq|8C~3zBjyQKCo@IFM`~&!mkNh!8~LeSm}W@!j`dt|v#I(`-JTP2U{T zh#ViK(~H?~JRQ9`{{6%I*XH>9x39h%j+1ZgpHY@vAK7TxZL*Z<0}Zo~6lun=ei5PaOBT z^i7)8FMEA6n~!ai{QhRGNyBxD|1Pyzw3^#S)6v^+eh}YOA8GNzm(bE zr|bRL?`Bec5iBx{G5cl6*u+E&O&`9K-Mc#v+ubB=cUjo(#`CkAS(azXIA8Dbd^Ve; z$+YVAGMUWN{vFLPl8JrBwvCHKLQ=&g6I2o-3^#HA{w~LPK5H3Lp53NSJ=~3l`PF(S z<7r-XK%K6Bm5xVOx#Q)lm%oa~u0k}*#>4G8w9=yCD&_Zd_GR16clfHRtKS1%{quM} zKA)tUKE03o{BZeuKbNoHof1ZmZ+Cnes;f29ZfH`O%H3%_i47c{JY0h$I;>jFVyBJxyZ+#AAVc zcNbSlmLI)7dN=!W{J5sFE2{DE&GFyK>bF%NpS_yZ^|i0-X7=@&A_Gz%{knEEUHbgI ze&x)5_+&boq}A15lZePc`QKAr{FO$r?AKp9Nw3c?X4!Oowc}$r<>l)-UQ-Y4aOpJ> zuPaj&lj?_xm{6)%zs}BQ*)Yx8MnWRG+8gcJ-FRy6$JweLY*2(`Xf;9g>tcR2yF1&k zes3rFF1^@ANqRQV?11m%#m~5z1|S%ib=$LSC`8iJ!5IU0_m+?AtdpaD5raC4vvj8a)})Btm| z_h^u#xMO@qu>0v}WF0i?D2)n1L)Zm_op6O6RiLz^@+_ zJP2?+@FhG*csvNi1L9#vJp6_hrZ9MrhzDPI_@`CcVUi6k9ey59(+zkqu6QWCBq05? zc|^Hk0~%>#*eQ>UqGrG?DEjqzF`G`$(&?}q!4BhU3Mh#CeGL0#T-?-q-xQI!6GNuM zvn0!Acg^loj5%KVY?4k#+mGX=YZt8t{vCTL?zMfG?DIZfgT=$Y99`KNvQXH3R)#Gc zJ^rix!qy&v4ezCk_mb83QobGmS^GqOCUNXz5-a#gELJA53NwjS+awk^iJ#jfW)72> z?r9QJ;=?1L_ui?SQ-Fw!ox!#nSxjWADnB?*sR5qJYh&Bc#KpB8=klS>WwAOR^)7Rn zufErKnaUkPADv?#sfInZE$#7(V_O#H*w$f4UFmWR z2Fp`M?fYN0FgB#t6?IVY@@#5|A{ZuJnI zWyx@SJKu6YJj~$^4hGJVU(5_3mlLc^nq0b>bN*0p2XYGc9}hYgKspy(UM3Qq3xcF8 z_$f4Ut;$f1Fki-){h^OI+ra; z`jm`nv40PdB+NNln{)6y8=O@�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 a2(ypxs$cZKc@|uMeD{BUH2?slI{^UkhPz_` diff --git a/texinfo/classes.pdf b/texinfo/classes.pdf index db68b627132da4f0a3b50809fcffe66ee81dfd83..dc9753993e7fcc3c2ce9c180d8a95c80b05a0784 100644 GIT binary patch literal 12984 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 IY5e;C0(=}FcmMzZ diff --git a/texinfo/concept_ru.texi b/texinfo/concept_ru.texi index 01c8ed5..fedfece 100644 --- a/texinfo/concept_ru.texi +++ b/texinfo/concept_ru.texi @@ -12,7 +12,7 @@ @item @strong{Все функции имеют ``упрощенный'' и ``продвинутый'' варианты.} Сделано опять из-за удобства. В ``упрощенном'' варианте для построения графика нужны только один-два массив(а) данных, которые автоматически равнораспределяются в заданном диапазоне осей координат. В ``продвинутой'' версии можно не только указать явно диапазон построения графика, но и задать его параметрически. Последнее позволяет легко строить довольно сложные кривые и поверхности. В обоих вариантах функций порядок аргументов стандартен: сначала идут массивы данных, потом необязательный строковый параметр стиля графика, а далее строка опций для более точной настройки графика. @item -@strong{Все данные передаются через экземпляры класса mglData(A).} Такой подход позволяет избежать ошибок при работе с памятью и единообразно передавать данные разных типов (mreal, double, данные из файла, заполненных пользователем и пр.) в функции рисования. +@strong{Все данные передаются через экземпляры класса mglData(A).} Такой подход позволяет избежать ошибок при работе с памятью и единообразно передавать данные разных типов (float, double, данные из файла, заполненных пользователем и пр.) в функции рисования. @item @strong{Все элементы рисунков векторные.} Изначально библиотека MathGL была ориентированна на работу с научными данными, которые по своей природе векторные (линии, грани, матрицы и т.д.). Поэтому векторность используется во всех рисунках! Причем иногда даже в ущерб производительности (например, при выводе шрифтов). Помимо всего прочего, векторность позволяет легко масштабировать рисунок -- измените размер картинки в 2 раза, и рисунок пропорционально растянется. @item diff --git a/texinfo/core_en.texi b/texinfo/core_en.texi index 5b3ded0..a7b8026 100644 --- a/texinfo/core_en.texi +++ b/texinfo/core_en.texi @@ -15,6 +15,7 @@ Some of MathGL features will appear only in novel versions. To test used MathGL @anchor{version} @deftypefn {MGL command} {} version 'ver' @ifclear UDAV +@deftypefnx {Method on @code{mglGraph}} @code{bool} CheckVersion (@code{const char *}ver) static @deftypefnx {C function} @code{int} mgl_check_version (@code{const char *}ver) @end ifclear Return nonzero if MathGL version is appropriate for required by @var{ver}, i.e. if major version is the same and minor version is greater or equal to one in @var{ver}. @@ -80,12 +81,14 @@ You don't need to create canvas object in MGL. Functions and variables in this group influences on overall graphics appearance. So all of them should be placed @emph{before} any actual plotting function calls. +@anchor{reset} +@deftypefn {MGL command} {} reset @ifclear UDAV -@deftypefn {Method on @code{mglGraph}} @code{void} DefaultPlotParam () +@deftypefnx {Method on @code{mglGraph}} @code{void} DefaultPlotParam () @deftypefnx {C function} @code{void} mgl_set_def_param (@code{HMGL} gr) -Restore initial values for all of parameters. -@end deftypefn @end ifclear +Restore initial values for all of parameters and clear the image. +@end deftypefn @menu * Transparency:: @@ -427,7 +430,8 @@ Copy font data from another @code{mglGraph} object. Restore font data to default typeface. @end deftypefn -@deftypefn {C function} @code{void} mgl_def_font (@code{const char *}name, @code{const char *}path) +@deftypefn {Method on @code{mglGraph}} @code{void} SetDefFont (@code{const char *}name, @code{const char *}path=@code{""}) static +@deftypefnx {C function} @code{void} mgl_def_font (@code{const char *}name, @code{const char *}path) Load default font typeface (for all newly created HMGL/mglGraph objects) from @var{path}/@var{name}. @end deftypefn @@ -568,10 +572,21 @@ Unbalanced ' in MGL script @end table @end deftypefn -@deftypefn {C function} @code{void} mgl_suppress_warn (@code{int} state) +@deftypefn {Method on @code{mglGraph}} @code{void} SuppressWarn (@code{bool} state) static +@deftypefnx {C function} @code{void} mgl_suppress_warn (@code{int} state) Disable printing warnings to @code{stderr} if @var{state} is nonzero. @end deftypefn +@deftypefn {Method on @code{mglGraph}} @code{void} SetGlobalWarn (@code{const char *}info) static +@deftypefnx {C function} @code{void} mgl_set_global_warn (@code{const char *}info) +Set warning message @var{info} for global scope. +@end deftypefn + +@deftypefn {Method on @code{mglGraph}} @code{const char *} GlobalWarn () static +@deftypefnx {C function} @code{const char *} mgl_get_global_warn () +Get warning message(s) for global scope. +@end deftypefn + @end ifclear @@ -753,7 +768,7 @@ Ternary plot is special plot for 3 dependent coordinates (components) @var{a}, @ Correspondingly, Quaternary plot is plot for 4 dependent coordinates @var{a}, @var{b}, @var{c} and @var{d} so that @var{a}+@var{b}+@var{c}+@var{d}=1. MathGL uses only 3 independent coordinates @var{a}=x, @var{b}=y and @var{d}=z since it is enough to plot everything. -Projections can be obtained by adding value @code{4} to @var{tern} argument. So, that @var{tern}=@code{4} will draw projections in Cartesian coordinates, @var{tern}=@code{5} will draw projections in Ternary coordinates, @var{tern}=@code{6} will draw projections in Quaternary coordinates. +Projections can be obtained by adding value @code{4} to @var{tern} argument. So, that @var{tern}=@code{4} will draw projections in Cartesian coordinates, @var{tern}=@code{5} will draw projections in Ternary coordinates, @var{tern}=@code{6} will draw projections in Quaternary coordinates. If you add @code{8} instead of @code{4} then all text labels will not be printed on projections. Use @code{Ternary(0)} for returning to usual axis. @sref{Ternary axis} @sref{Axis projection} @end deftypefn @@ -1776,6 +1791,18 @@ colors for filling and boundary (second one if style @samp{@@} is used, black co @end itemize @end deftypefn + +@anchor{logo} +@deftypefn {MGL command} {} logo 'fname' [smooth=off] +@ifclear UDAV +@deftypefnx {Method on @code{mglGraph}} @code{void} Logo (@code{const char *}fname, @code{bool} smooth=@code{false}, @code{const char *}opt=@code{""}) +@deftypefnx {Method on @code{mglGraph}} @code{void} Logo (@code{long} w, @code{long} h, @code{const unsigned char *}rgba, @code{bool} smooth=@code{false}, @code{const char *}opt=@code{""}) +@deftypefnx {C function only} @code{void} mgl_logo (@code{HMGL} gr, @code{long} w, @code{long} h, @code{const unsigned char *}rgba, @code{bool} smooth, @code{const char *}opt) +@deftypefnx {C function} @code{void} mgl_logo_file (@code{HMGL} gr, @code{const char *}fname, @code{bool} smooth, @code{const char *}opt) +@end ifclear +Draw bitmap (logo) along whole axis range, which can be changed by @ref{Command options}. Bitmap can be loaded from file or specified as RGBA values for pixels. Parameter @var{smooth} set to draw bitmap without or with color interpolation. +@end deftypefn + @c ################################################################## @external{} @node Text printing, Axis and Colorbar, Primitives, MathGL core @@ -3401,6 +3428,11 @@ Print last fitted formula with found coefficients (as numbers) at position @var{ @deftypefnx {Fortran subroutine} @code{} mgl_get_fit (@code{long} gr, @code{char *}out, @code{int} len) Get last fitted formula with found coefficients (as numbers). @end deftypefn + +@deftypefn {Method on @code{mglGraph}} @code{mreal} GetFitChi () +@deftypefnx {C function only} @code{mreal} mgl_get_fit_chi () +Get \chi for last fitted formula. +@end deftypefn @end ifclear diff --git a/texinfo/core_ru.texi b/texinfo/core_ru.texi index cb5adc0..bb7c2d5 100644 --- a/texinfo/core_ru.texi +++ b/texinfo/core_ru.texi @@ -13,9 +13,10 @@ Некоторые возможности MathGL доступны только в новых версиях библиотеки. Для проверки текущей версии MathGL можно использовать следующую функцию. @anchor{version} -@deftypefn {MGL command} {} version 'ver' +@deftypefn {Команда MGL} {} version 'ver' @ifclear UDAV -@deftypefnx {C function} @code{int} mgl_check_version (@code{const char *}ver) +@deftypefnx {Метод класса @code{mglGraph}} @code{bool} CheckVersion (@code{const char *}ver) static +@deftypefnx {Функция С} @code{int} mgl_check_version (@code{const char *}ver) @end ifclear Возвращает ненулевое значение если версия MathGL подходит для требуемой в @var{ver}, т.е. если номер основной версии совпадает и "подверсия" больше или равна указанной в @var{ver}. @end deftypefn @@ -80,12 +81,14 @@ MGL не требует создания данного типа объекто Функции и переменные в этой группе влияют на вид всего рисунка. Соответственно они должны располагаться @emph{перед} вызовом функций непосредственно рисующих графики. +@anchor{reset} +@deftypefn {Команда MGL} {} reset @ifclear UDAV -@deftypefn {Метод класса @code{mglGraph}} @code{void} DefaultPlotParam () +@deftypefnx {Метод класса @code{mglGraph}} @code{void} DefaultPlotParam () @deftypefnx {Функция С} @code{void} mgl_set_def_param (@code{HMGL} gr) -Устанавливает все настройки по умолчанию. -@end deftypefn @end ifclear +Устанавливает все настройки по умолчанию и очищает рисунок. +@end deftypefn @menu * Transparency:: @@ -413,7 +416,8 @@ MGL не требует создания данного типа объекто Восстанавливает начертание шрифта по умолчанию. @end deftypefn -@deftypefn {Функция С} @code{void} mgl_def_font (@code{const char *}name, @code{const char *}path) +@deftypefn {Метод класса @code{mglGraph}} @code{void} SetDefFont (@code{const char *}name, @code{const char *}path=@code{""}) static +@deftypefnx {Функция С} @code{void} mgl_def_font (@code{const char *}name, @code{const char *}path) Загружает начертание шрифта по умолчанию (для всех вновь создаваемых HMGL/mglGraph объектов) из файла @var{path}/@var{name}. @end deftypefn @@ -552,10 +556,21 @@ Setsize: размер(ы) равны нулю или отрицательны @end table @end deftypefn -@deftypefn {Функция С} @code{void} mgl_suppress_warn (@code{int} state) +@deftypefn {Метод класса @code{mglGraph}} @code{void} SuppressWarn (@code{bool} state) static +@deftypefnx {Функция С} @code{void} mgl_suppress_warn (@code{int} state) Выключает вывод предупреждений в @code{stderr} если @var{state} не ноль. @end deftypefn +@deftypefn {Метод класса @code{mglGraph}} @code{void} SetGlobalWarn (@code{const char *}info) static +@deftypefnx {Функция С} @code{void} mgl_set_global_warn (@code{const char *}info) +Задает предупреждение @var{info}, не привязанное к конкретному объекту рисования. +@end deftypefn + +@deftypefn {Метод класса @code{mglGraph}} @code{const char *} GlobalWarn () static +@deftypefnx {Функция С} @code{const char *} mgl_get_global_warn () +Возвращает предупреждения, не привязанные к конкретному объекту рисования. +@end deftypefn + @end ifclear @@ -573,17 +588,17 @@ Setsize: размер(ы) равны нулю или отрицательны @cindex SetEventFunc @deftypefn {Метод класса @code{mglGraph}} @code{void} Stop (@code{bool} stop=@code{true}) -@deftypefnx {C function only} @code{void} mgl_ask_stop (@code{HMGL} gr, @code{int} stop) +@deftypefnx {Функция С only} @code{void} mgl_ask_stop (@code{HMGL} gr, @code{int} stop) Просит остановить рисование если @var{stop} не ноль, иначе сбрасывает флаг остановки. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{bool} NeedStop () -@deftypefnx {C function only} @code{void} mgl_need_stop (@code{HMGL} gr) +@deftypefnx {Функция С only} @code{void} mgl_need_stop (@code{HMGL} gr) Возвращает @code{true} если рисование должно быть остановлено. Также запускает обработку всех отложенных событий в GUI. Пользователь должен вызывать эту функцию время от времени внутри долгих вычислений для плавности отклика GUI. @end deftypefn @deftypefn {Метод класса @code{mglGraph}} @code{bool} SetEventFunc (@code{void (*}func@code{)(void *)}, @code{void *}par=@code{NULL}) -@deftypefnx {C function only} @code{void} mgl_set_event_func (@code{HMGL} gr, @code{void (*}func@code{)(void *)}, @code{void *}par) +@deftypefnx {Функция С only} @code{void} mgl_set_event_func (@code{HMGL} gr, @code{void (*}func@code{)(void *)}, @code{void *}par) Задает функцию, которая будет вызвана для обработки событий в GUI библиотеке. @end deftypefn @@ -736,7 +751,7 @@ Ternary -- специальный тип графика для 3 зависим Соответственно Quaternary координаты -- 4 зависимые координаты @var{a}, @var{b}, @var{c} и @var{d}, такие что @var{a}+@var{b}+@var{c}+@var{d}=1. MathGL использует только 2 независимые координаты @var{a}=x, @var{b}=y и @var{d}=z поскольку их достаточно для построения всех графиков. -Проекции строятся если к переменной @var{tern} добавить число @code{4}. Так что @var{tern}=@code{4} нарисует проекции в декартовых координатах, @var{tern}=@code{5} нарисует проекции в треугольных координатах, @var{tern}=@code{6} нарисует проекции в пирамидальных координатах. +Проекции строятся если к переменной @var{tern} добавить число @code{4}. Так что @var{tern}=@code{4} нарисует проекции в декартовых координатах, @var{tern}=@code{5} нарисует проекции в треугольных координатах, @var{tern}=@code{6} нарисует проекции в пирамидальных координатах. Если добавить @code{8} вместо @code{4}, то текст не будет выводиться на проекциях. Используйте @code{Ternary(0)} для возвращения к привычным координатам. @sref{Ternary axis} @sref{Axis projection} @end deftypefn @@ -1676,29 +1691,40 @@ These functions change background image. @end deftypefn @anchor{arc} -@deftypefn {MGL command} {} arc @code{x0 y0 x1 y1 a} ['col'='r'] -@deftypefnx {MGL command} {} arc @code{x0 y0 z0 x1 y1 a} ['col'='r'] -@deftypefnx {MGL command} {} arc @code{x0 y0 z0 xa ya za x1 y1 z1 a} ['col'='r'] +@deftypefn {Команда MGL} {} arc @code{x0 y0 x1 y1 a} ['col'='r'] +@deftypefnx {Команда MGL} {} arc @code{x0 y0 z0 x1 y1 a} ['col'='r'] +@deftypefnx {Команда MGL} {} arc @code{x0 y0 z0 xa ya za x1 y1 z1 a} ['col'='r'] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Arc (@code{mglPoint} p0, @code{mglPoint} p1, @code{mreal} a, @code{const char *}col=@code{"r"}) @deftypefnx {Метод класса @code{mglGraph}} @code{void} Arc (@code{mglPoint} p0, @code{mglPoint} pa, @code{mglPoint} p1, @code{mreal} a, @code{const char *}col=@code{"r"}) -@deftypefnx {C function} @code{void} mgl_arc (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} x1, @code{mreal} y1, @code{mreal} a, @code{const char *}col) -@deftypefnx {C function} @code{void} mgl_arc_ext (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} xa, @code{mreal} ya, @code{mreal} za, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} a, @code{const char *}col) +@deftypefnx {Функция С} @code{void} mgl_arc (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} x1, @code{mreal} y1, @code{mreal} a, @code{const char *}col) +@deftypefnx {Функция С} @code{void} mgl_arc_ext (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} xa, @code{mreal} ya, @code{mreal} za, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} a, @code{const char *}col) @end ifclear Рисует дугу вокруг оси @var{pa} (по умолчанию вокруг оси z @var{pa}=@{0,0,1@}) с центром в @var{p0}, начиная с точки @var{p1}. Параметр @var{a} задает угол дуги в градусах. Строка @var{col} задает цвет дуги и тип стрелок на краях. @end deftypefn @anchor{polygon} -@deftypefn {MGL command} {} polygon @code{x0 y0 x1 y1 num} ['col'='r'] -@deftypefnx {MGL command} {} polygon @code{x0 y0 z0 x1 y1 z1 num} ['col'='r'] +@deftypefn {Команда MGL} {} polygon @code{x0 y0 x1 y1 num} ['col'='r'] +@deftypefnx {Команда MGL} {} polygon @code{x0 y0 z0 x1 y1 z1 num} ['col'='r'] @ifclear UDAV @deftypefnx {Метод класса @code{mglGraph}} @code{void} Polygon (@code{mglPoint} p0, @code{mglPoint} p1, @code{int} num, @code{const char *}col=@code{"r"}) -@deftypefnx {C function} @code{void} mgl_polygon (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{int} num, @code{const char *}col) +@deftypefnx {Функция С} @code{void} mgl_polygon (@code{HMGL} gr, @code{mreal} x0, @code{mreal} y0, @code{mreal} z0, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{int} num, @code{const char *}col) @end ifclear Рисует правильный @var{num}-угольник с центром в @var{p0} с первой вершиной в @var{p1} цветом @var{col}. Если @var{col} содержит: @samp{#} то рисуется только граница, @samp{@@} то рисуется граница (вторым цветом из @var{col} или черными). @c Если @var{col} содержит 3 цвета, то используется градиентная заливка. @end deftypefn +@anchor{logo} +@deftypefn {Команда MGL} {} logo 'fname' [smooth=off] +@ifclear UDAV +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Logo (@code{const char *}fname, @code{bool} smooth=@code{false}, @code{const char *}opt=@code{""}) +@deftypefnx {Метод класса @code{mglGraph}} @code{void} Logo (@code{long} w, @code{long} h, @code{const unsigned char *}rgba, @code{bool} smooth=@code{false}, @code{const char *}opt=@code{""}) +@deftypefnx {Функция С} @code{void} mgl_logo (@code{HMGL} gr, @code{long} w, @code{long} h, @code{const unsigned char *}rgba, @code{bool} smooth, @code{const char *}opt) +@deftypefnx {Функция С} @code{void} mgl_logo_file (@code{HMGL} gr, @code{const char *}fname, @code{bool} smooth, @code{const char *}opt) +@end ifclear +Draw bitmap (logo) along whole axis range, which can be changed by @ref{Command options}. Bitmap can be loaded from file or specified as RGBA values for pixels. Parameter @var{smooth} set to draw bitmap without or with color interpolation. +@end deftypefn + @c ################################################################## @external{} @node Text printing, Axis and Colorbar, Primitives, MathGL core @@ -3314,6 +3340,11 @@ These functions change background image. @deftypefnx {Fortran процедура} @code{} mgl_get_fit (@code{long} gr, @code{char *}out, @code{int} len) Возвращает последнюю подобранную формулу с найденными коэффициентами. @end deftypefn + +@deftypefn {Метод класса @code{mglGraph}} @code{mreal} GetFitChi () +@deftypefnx {Функция С} @code{mreal} mgl_get_fit_chi () +Возвращает величину \chi для последней подобранной формулы. +@end deftypefn @end ifclear diff --git a/texinfo/example_en.texi b/texinfo/example_en.texi index 9dcad68..e277ed8 100644 --- a/texinfo/example_en.texi +++ b/texinfo/example_en.texi @@ -21,7 +21,8 @@ gr = mglGraph(); gr.FPlot("sin(pi*x)"); gr.WriteFrame("test.png"); @end verbatim -in Octave will be as (you need first install MathGL package by command @code{octave:1> pkg install /usr/share/mathgl/octave/mathgl.tar.gz} from @code{sudo octave}) +in Octave will be as (you need first execute @code{mathgl;} in newer Octave versions) +@c (install MathGL package by command @code{octave:1> pkg install /usr/share/mathgl/octave/mathgl.tar.gz} from @code{sudo octave}) @verbatim gr = mglGraph(); gr.FPlot("sin(pi*x)"); diff --git a/texinfo/example_ru.texi b/texinfo/example_ru.texi index a318c2c..209fe29 100644 --- a/texinfo/example_ru.texi +++ b/texinfo/example_ru.texi @@ -21,7 +21,7 @@ gr = mglGraph(); gr.FPlot("sin(pi*x)"); gr.WriteFrame("test.png"); @end verbatim -в Octave он будет почти тем же +в Octave он будет почти тем же (в новых версиях надо предварительно выполнить @code{mathgl;}) @verbatim gr = mglGraph(); gr.FPlot("sin(pi*x)"); diff --git a/texinfo/parse_en.texi b/texinfo/parse_en.texi index 356086c..42f08ee 100644 --- a/texinfo/parse_en.texi +++ b/texinfo/parse_en.texi @@ -11,6 +11,7 @@ MathGL library supports the simplest scripts for data handling and plotting. The @menu * MGL definition:: * Program flow commands:: +* LaTeX package:: @ifclear UDAV * mglParse class:: @end ifclear @@ -62,12 +63,7 @@ Command may have several set of possible arguments (for example, @code{plot ydat @c ------------------------------------------------------------------ @external{} -@ifclear UDAV -@node Program flow commands, mglParse class, MGL definition, MGL scripts -@end ifclear -@ifset UDAV -@node Program flow commands, , MGL definition, MGL scripts -@end ifset +@node Program flow commands, LaTeX package, MGL definition, MGL scripts @section Program flow commands @nav{} @@ -111,12 +107,12 @@ Sets @var{N}-th script argument to palette character at position evaluated from @cindex call @anchor{call} -@deftypefn {MGL command} {} call 'fname' [ARG1 ARG2 ... ARG9] +@deftypefn {MGL command} {} call 'funcname' [ARG1 ARG2 ... ARG9] Executes function @var{fname} (or script if function is not found). Optional arguments will be passed to functions. See also @ref{func}. @end deftypefn @cindex func @anchor{func} -@deftypefn {MGL command} {} func 'fname' [narg=0] +@deftypefn {MGL command} {} func 'funcname' [narg=0] Define the function @var{fname} and number of required arguments. The arguments will be placed in script parameters $1, $2, ... $9. Note, you should stop script execution before function definition(s) by command @ref{stop}. See also @ref{return}. @end deftypefn @cindex return @@ -125,6 +121,12 @@ Define the function @var{fname} and number of required arguments. The arguments Return from the function. See also @ref{func}. @end deftypefn +@cindex load +@anchor{load} +@deftypefn {MGL command} {} load 'filename' +Load additional MGL command from external module (DLL or .so), located in file @var{filename}. This module have to contain array with name @code{mgl_cmd_extra} of type @code{mglCommand}, which describe provided commands. +@end deftypefn + @cindex if @anchor{if} @@ -178,10 +180,130 @@ The code between @code{once on} and @code{once off} will be executed only once. Terminate execution. @end deftypefn + + +@c ------------------------------------------------------------------ +@external{} +@ifclear UDAV +@node LaTeX package, mglParse class, Program flow commands, MGL scripts +@end ifclear +@ifset UDAV +@node LaTeX package, , Program flow commands, MGL scripts +@end ifset +@section LaTeX package +@nav{} + +There is LaTeX package @code{mgltex} (was made by Diego Sejas Viscarra) which allow one to make figures directly from MGL script located in LaTeX file. + +For using this package you need to specify @code{--shell-escape} option for @emph{latex/pdflatex} or manually run @emph{mglconv} tool with produced MGL scripts for generation of images. Don't forgot to run @emph{latex/pdflatex} second time to insert generated images into the output document. + +The package may have following options: @code{draft}, @code{final} -- the same as in the @emph{graphicx} package; @code{jpg}, @code{jpeg}, @code{png} -- for export to JPEG/PNG images; @code{eps}, @code{epsz} -- for export to uncompressed/compressed EPS format as primitives; @code{bps}, @code{bpsz} -- for export to uncompressed/compressed EPS format as bitmap, @code{pdf} -- for export to 3D PDF. + +The package defines the following environments: +@table @samp +@item mgl + It writes its contents to a general script which has the same name as the LaTeX document, but its extension is @emph{.mgl}. The code in this environment is compiled and the image produced is included. It takes exactly the same optional arguments as the @code{\includegraphics} command, plus an additional argument @var{imgext}, which specifies the extension to save the image. + +An example of usage of @samp{mgl} environment would be: +@verbatim +\begin{mglfunc}{prepare2d} + new a 50 40 '0.6*sin(pi*(x+1))*sin(1.5*pi*(y+1))+0.4*cos(0.75*pi*(x+1)*(y+1))' + new b 50 40 '0.6*cos(pi*(x+1))*cos(1.5*pi*(y+1))+0.4*cos(0.75*pi*(x+1)*(y+1))' +\end{mglfunc} + +\begin{figure}[!ht] + \centering + \begin{mgl}[width=0.85\textwidth,height=7.5cm] + fog 0.5 + call 'prepare2d' + subplot 2 2 0 : title 'Surf plot (default)' : rotate 50 60 : light on : box : surf a + + subplot 2 2 1 : title '"\#" style; meshnum 10' : rotate 50 60 : box + surf a '#'; meshnum 10 + + subplot 2 2 2 : title 'Mesh plot' : rotate 50 60 : box + mesh a + + new x 50 40 '0.8*sin(pi*x)*sin(pi*(y+1)/2)' + new y 50 40 '0.8*cos(pi*x)*sin(pi*(y+1)/2)' + new z 50 40 '0.8*cos(pi*(y+1)/2)' + subplot 2 2 3 : title 'parametric form' : rotate 50 60 : box + surf x y z 'BbwrR' + \end{mgl} +\end{figure} +@end verbatim + +@item mgladdon + It adds its contents to the general script, without producing any image. +@item mglcode + Is exactly the same as @samp{mgl}, but it writes its contents verbatim to its own file, whose name is specified as a mandatory argument. +@item mglscript + Is exactly the same as @samp{mglcode}, but it doesn't produce any image, nor accepts optional arguments. It is useful, for example, to create a MGL script, which can later be post processed by another package like "listings". +@item mglblock + It writes its contents verbatim to a file, specified as a mandatory argument, and to the LaTeX document, and numerates each line of code. + +@c This last three environments will test if the user is overwriting some file, and will issue a warning in that case. +@item mglverbatim + Exactly the same as @samp{mglblock}, but it doesn't write to a file. This environment doesn't have arguments. +@item mglfunc + Is used to define MGL functions. It takes one mandatory argument, which is the name of the function, plus one additional argument, which specifies the number of arguments of the function. The environment needs to contain only the body of the function, since the first and last lines are appended automatically, and the resulting code is written at the end of the general script, after the @ref{stop} command, which is also written automatically. The warning is produced if 2 or more function with the same name is defined. +@item mglsetup + If many scripts with the same code are to be written, the repetitive code can be written inside this environment only once, then this code will be used automatically every time the @samp{\mglplot} command is used (see below). It takes one optional argument, which is a name to be associated to the corresponding contents of the environment; this name can be passed to the @samp{\mglplot} command to use the corresponding block of code automatically (see below). +@end table + +The package also defines the following commands: +@table @samp +@item \mglplot + It takes one mandatory argument, which is MGL instructions separated by the symbol @samp{:} this argument can be more than one line long. It takes the same optional arguments as the @samp{mgl} environment, plus an additional argument @var{setup}, which indicates the name associated to a block of code inside a @samp{mglsetup} environment. The code inside the mandatory argument will be appended to the block of code specified, and the resulting code will be written to the general script. + +An example of usage of @samp{\mglplot} command would be: +@verbatim +\begin{mglsetup} + box '@{W9}' : axis +\end{mglsetup} +\begin{mglsetup}[2d] + box : axis + grid 'xy' ';k' +\end{mglsetup} +\begin{mglsetup}[3d] + rotate 50 60 + box : axis : grid 'xyz' ';k' +\end{mglsetup} +\begin{figure}[!ht] + \centering + \mglplot[scale=0.5]{new a 200 'sin(pi*x)' : plot a '2B'} +\end{figure} +\begin{figure}[!ht] + \centering + \mglplot[scale=0.5,setup=2d]{ + fplot 'sin(pi*x)' '2B' : + fplot 'cos(pi*x^2)' '2R' + } +\end{figure} +\begin{figure}[!ht] + \centering + \mglplot[setup=3d]{fsurf 'sin(pi*x)+cos(pi*y)'} +\end{figure} +@end verbatim + +@item \mglgraphics + This command takes the same optional arguments as the @samp{mgl} environment, and one mandatory argument, which is the name of a MGL script. This command will compile the corresponding script and include the resulting image. It is useful when you have a script outside the LaTeX document, and you want to include the image, but you don't want to type the script again. +@item \mglinclude + This is like @samp{\mglgraphics} but, instead of creating/including the corresponding image, it writes the contents of the MGL script to the LaTeX document, and numerates the lines. +@item \mgldir + This command can be used in the preamble of the document to specify a directory where LaTeX will save the MGL scripts and generate the corresponding images. This directory is also where @samp{\mglgraphics} and @samp{\mglinclude} will look for scripts. +@item \mglTeX + It just pretty prints the name of the package. +@end table + +As an additional feature, when an image is not found or cannot be included, instead of issuing an error, @code{mgltex} prints a box with the word @samp{MGL image not found} in the LaTeX document. + + + @ifclear UDAV @c ------------------------------------------------------------------ @external{} -@node mglParse class, , Program flow commands, MGL scripts +@node mglParse class, , LaTeX package, MGL scripts @section mglParse class @nav{} @cindex mglParse @@ -264,7 +386,7 @@ Function delete the variable with given @var{name}. @deftypefn{Method on @code{mglParse} (C++)} @code{void} DeleteAll () @deftypefnx {C function} @code{void} mgl_parser_del_all (@code{HMPR} p) -Function delete all variables in this parser. +Function delete all variables and reset list of commands to default one in this parser. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{void} RestoreOnce () @@ -274,7 +396,7 @@ Restore Once flag. @deftypefn {Method on @code{mglParse}} @code{void} AllowSetSize (@code{bool} a) @deftypefnx {C function} @code{void} mgl_parser_allow_setsize (@code{HMPR} p, @code{int} a) -Allow to parse 'setsize' command or not. +Allow to parse @ref{setsize} command or not. @end deftypefn @deftypefn {Method on @code{mglParse}} @code{void} AllowFileIO (@code{bool} a) @@ -282,6 +404,11 @@ Allow to parse 'setsize' command or not. Allow reading/saving files or not. @end deftypefn +@deftypefn {Method on @code{mglParse}} @code{void} AllowDllCall (@code{bool} a) +@deftypefnx {C function} @code{void} mgl_parser_allow_dll_call (@code{HMPR} p, @code{int} a) +Allow to parse @ref{load} command or not. +@end deftypefn + @deftypefn {Method on @code{mglParse}} @code{void} Stop () @deftypefnx {C function} @code{void} mgl_parser_stop (@code{HMPR} p) Sends stop signal which terminate execution at next command. diff --git a/texinfo/parse_ru.texi b/texinfo/parse_ru.texi index 532c925..7943f61 100644 --- a/texinfo/parse_ru.texi +++ b/texinfo/parse_ru.texi @@ -11,6 +11,7 @@ MathGL имеет встроенный скриптовый язык MGL для @menu * MGL definition:: * Program flow commands:: +* LaTeX package:: @ifclear UDAV * mglParse class:: @end ifclear @@ -65,12 +66,7 @@ MathGL имеет встроенный скриптовый язык MGL для @c ------------------------------------------------------------------ @external{} -@ifclear UDAV -@node Program flow commands, mglParse class, MGL definition, MGL scripts -@end ifclear -@ifset UDAV -@node Program flow commands, , MGL definition, MGL scripts -@end ifset +@node Program flow commands, LaTeX package, MGL definition, MGL scripts @section Управление ходом выполнения @nav{} @@ -129,6 +125,12 @@ MathGL имеет встроенный скриптовый язык MGL для Возвращается из подпрограммы. См. также @ref{func}. @end deftypefn +@cindex load +@anchor{load} +@deftypefn {MGL command} {} load 'filename' +Загружает дополнительные команды MGL из внешней динамической библиотеки @var{filename}. Данная библиотека должна содержать массив с именем @code{mgl_cmd_extra} типа @code{mglCommand}, который содержит описание новых комманд. +@end deftypefn + @cindex if @anchor{if} @@ -182,10 +184,131 @@ MathGL имеет встроенный скриптовый язык MGL для Останавливает выполнение скрипта. @end deftypefn + +@c TODO Translate it! + +@c ------------------------------------------------------------------ +@external{} +@ifclear UDAV +@node LaTeX package, mglParse class, Program flow commands, MGL scripts +@end ifclear +@ifset UDAV +@node LaTeX package, , Program flow commands, MGL scripts +@end ifset +@section LaTeX package +@nav{} + +There is LaTeX package @code{mgltex} (was made by Diego Sejas Viscarra) which allow one to make figures directly from MGL script located in LaTeX file. + +For using this package you need to specify @code{--shell-escape} option for @emph{latex/pdflatex} or manually run @emph{mglconv} tool for produced MGL scripts for generation of images. Don't forgot to run @emph{latex/pdflatex} second time to insert generated images into the output document. + +The package may have following options: @code{draft}, @code{final} -- the same as in the @emph{graphicx} package; @code{jpg}, @code{jpeg}, @code{png} -- for export to JPEG/PNG images; @code{eps}, @code{epsz} -- for export to uncompressed/compressed EPS format as primitives; @code{bps}, @code{bpsz} -- for export to uncompressed/compressed EPS format as bitmap, @code{pdf} -- for export to 3D PDF. + +The package defines the following environments: +@table @samp +@item mgl + It writes its contents to a general script which has the same name as the LaTeX document, but its extension is @emph{.mgl}. The code in this environment is compiled and the image produced is included. It takes exactly the same optional arguments as the @code{\includegraphics} command, plus an additional argument @var{imgext}, which specifies the extension to save the image. + +An example of usage of @samp{mgl} environment would be: +@verbatim +\begin{mglfunc}{prepare2d} + new a 50 40 '0.6*sin(pi*(x+1))*sin(1.5*pi*(y+1))+0.4*cos(0.75*pi*(x+1)*(y+1))' + new b 50 40 '0.6*cos(pi*(x+1))*cos(1.5*pi*(y+1))+0.4*cos(0.75*pi*(x+1)*(y+1))' +\end{mglfunc} + +\begin{figure}[!ht] + \centering + \begin{mgl}[width=0.85\textwidth,height=7.5cm] + fog 0.5 + call 'prepare2d' + subplot 2 2 0 : title 'Surf plot (default)' : rotate 50 60 : light on : box : surf a + + subplot 2 2 1 : title '"\#" style; meshnum 10' : rotate 50 60 : box + surf a '#'; meshnum 10 + + subplot 2 2 2 : title 'Mesh plot' : rotate 50 60 : box + mesh a + + new x 50 40 '0.8*sin(pi*x)*sin(pi*(y+1)/2)' + new y 50 40 '0.8*cos(pi*x)*sin(pi*(y+1)/2)' + new z 50 40 '0.8*cos(pi*(y+1)/2)' + subplot 2 2 3 : title 'parametric form' : rotate 50 60 : box + surf x y z 'BbwrR' + \end{mgl} +\end{figure} +@end verbatim + +@item mgladdon + It adds its contents to the general script, without producing any image. +@item mglcode + Is exactly the same as @samp{mgl}, but it writes its contents verbatim to its own file, whose name is specified as a mandatory argument. +@item mglscript + Is exactly the same as @samp{mglcode}, but it doesn't produce any image, nor accepts optional arguments. It is useful, for example, to create a MGL script, which can later be post processed by another package like "listings". +@item mglblock + It writes its contents verbatim to a file, specified as a mandatory argument, and to the LaTeX document, and numerates each line of code. + +@c This last three environments will test if the user is overwriting some file, and will issue a warning in that case. +@item mglverbatim + Exactly the same as @samp{mglblock}, but it doesn't write to a file. This environment doesn't have arguments. +@item mglfunc + Is used to define MGL functions. It takes one mandatory argument, which is the name of the function, plus one additional argument, which specifies the number of arguments of the function. The environment needs to contain only the body of the function, since the first and last lines are appended automatically, and the resulting code is written at the end of the general script, after the @ref{stop} command, which is also written automatically. The warning is produced if 2 or more function with the same name is defined. +@item mglsetup + If many scripts with the same code are to be written, the repetitive code can be written inside this environment only once, then this code will be used automatically every time the @samp{\mglplot} command is used (see below). It takes one optional argument, which is a name to be associated to the corresponding contents of the environment; this name can be passed to the @samp{\mglplot} command to use the corresponding block of code automatically (see below). +@end table + +The package also defines the following commands: +@table @samp +@item \mglplot + It takes one mandatory argument, which is MGL instructions separated by the symbol @samp{:} this argument can be more than one line long. It takes the same optional arguments as the @samp{mgl} environment, plus an additional argument @var{setup}, which indicates the name associated to a block of code inside a @samp{mglsetup} environment. The code inside the mandatory argument will be appended to the block of code specified, and the resulting code will be written to the general script. + +An example of usage of @samp{\mglplot} command would be: +@verbatim +\begin{mglsetup} + box '@{W9}' : axis +\end{mglsetup} +\begin{mglsetup}[2d] + box : axis + grid 'xy' ';k' +\end{mglsetup} +\begin{mglsetup}[3d] + rotate 50 60 + box : axis : grid 'xyz' ';k' +\end{mglsetup} +\begin{figure}[!ht] + \centering + \mglplot[scale=0.5]{new a 200 'sin(pi*x)' : plot a '2B'} +\end{figure} +\begin{figure}[!ht] + \centering + \mglplot[scale=0.5,setup=2d]{ + fplot 'sin(pi*x)' '2B' : + fplot 'cos(pi*x^2)' '2R' + } +\end{figure} +\begin{figure}[!ht] + \centering + \mglplot[setup=3d]{fsurf 'sin(pi*x)+cos(pi*y)'} +\end{figure} +@end verbatim + +@item \mglgraphics + This command takes the same optional arguments as the @samp{mgl} environment, and one mandatory argument, which is the name of a MGL script. This command will compile the corresponding script and include the resulting image. It is useful when you have a script outside the LaTeX document, and you want to include the image, but you don't want to type the script again. +@item \mglinclude + This is like @samp{\mglgraphics} but, instead of creating/including the corresponding image, it writes the contents of the MGL script to the LaTeX document, and numerates the lines. +@item \mgldir + This command can be used in the preamble of the document to specify a directory where LaTeX will save the MGL scripts and generate the corresponding images. This directory is also where @samp{\mglgraphics} and @samp{\mglinclude} will look for scripts. +@item \mglTeX + It just pretty prints the name of the package. +@end table + +As an additional feature, when an image is not found or cannot be included, instead of issuing an error, @code{mgltex} prints a box with the word @samp{MGL image not found} in the LaTeX document. + + + @ifclear UDAV @c ------------------------------------------------------------------ @external{} -@node mglParse class, , Program flow commands, MGL scripts +@node mglParse class, , LaTeX package, MGL scripts @section mglParse class @nav{} @cindex mglParse @@ -268,7 +391,7 @@ MathGL имеет встроенный скриптовый язык MGL для @deftypefn{Метод класса @code{mglParse} (C++)} @code{void} DeleteAll () @deftypefnx {Функция С} @code{void} mgl_parser_del_all (@code{HMPR} p) -Удаляет все переменные в данном классе. +Удаляет все переменные и сбрасывает список команд к списку по умолчанию в данном классе. @end deftypefn @deftypefn {Метод класса @code{mglParse}} @code{void} RestoreOnce () @@ -278,7 +401,7 @@ MathGL имеет встроенный скриптовый язык MGL для @deftypefn {Метод класса @code{mglParse}} @code{void} AllowSetSize (@code{bool} a) @deftypefnx {Функция С} @code{void} mgl_parser_allow_setsize (@code{HMPR} p, @code{int} a) -Разрешает/запрещает команду 'setsize'. +Разрешает/запрещает команду @ref{setsize}. @end deftypefn @deftypefn {Метод класса @code{mglParse}} @code{void} AllowFileIO (@code{bool} a) @@ -286,6 +409,11 @@ MathGL имеет встроенный скриптовый язык MGL для Разрешает/запрещает команды чтения файлов. @end deftypefn +@deftypefn {Метод класса @code{mglParse}} @code{void} AllowDllCall (@code{bool} a) +@deftypefnx {Функция С} @code{void} mgl_parser_allow_dll_call (@code{HMPR} p, @code{int} a) +Разрешает/запрещает команду @ref{load}. +@end deftypefn + @deftypefn {Метод класса @code{mglParse}} @code{void} Stop () @deftypefnx {Функция С} @code{void} mgl_parser_stop (@code{HMPR} p) Посылает сигнал завершения выполнения для следующей команды. diff --git a/texinfo/version.texi b/texinfo/version.texi index f560bba..b66e705 100644 --- a/texinfo/version.texi +++ b/texinfo/version.texi @@ -1,2 +1,2 @@ @set VERSION 2.3 -@set MINVER @c .2 +@set MINVER .1 diff --git a/texinfo/web_en.texi b/texinfo/web_en.texi index b9dc2c9..940c54c 100644 --- a/texinfo/web_en.texi +++ b/texinfo/web_en.texi @@ -52,11 +52,10 @@ Generally, MathGL is GPL library. However, you can use LGPL license for MathGL c @strong{Latest news} @itemize +@item @emph{20 October 2014.} +New version (v.@value{VERSION}@value{MINVER}) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are @ref{LaTeX package}, command to load external DLL file (@ref{load}), new primitive (@ref{logo}), improvements for projections, manual rotation angle in @ref{axis} and other minor improvements, which denoted @ref{News, here}. @item @emph{7 August 2014.} New version (v.@value{VERSION}) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are many major improvements for both MathGL core and for UDAV, which denoted @ref{News, here}. -@comment New version (v.@value{VERSION}@value{MINVER}) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are extend of 'region' plot, improve export to TeX, add missing Fortran functions, bugfixes, and other improvements, which denoted @ref{News, here}. Note, this release looks as bug free, but next release (v.2.3) will introduce a set of improvements which may not so stable at first time. -@item @emph{11 November 2013.} -New version (v.2.2) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are speeding up, new plot kinds and data handling functions, new plot styles, masks for bitmap output, wx-widget, Lua interface, and many other improvements, which denoted @ref{News, here}. @end itemize There is detailed @ref{News, news list}. Sourceforge project page @uref{http://sourceforge.net/projects/mathgl/, here}. @@ -75,6 +74,33 @@ Javascript interface was developed with support of @url{http://www.datadvance.ne @nav{} @itemize + +@item @strong{20 October 2014.} +New version (v.2.3.1) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are minor improvements and bugfixes: +@itemize @bullet +@item Add @ref{LaTeX package} @emph{mglTeX} (author Diego Sejas Viscarra) for making figures directly from MGL script located in LaTeX file. +@item Add MGL command @ref{load} for loading MGL commands from external DLL (or .so) module. +@item Add @ref{logo} function to draw bitmap (logo), which is stretched along whole axis range. +@item Add MGL command @ref{reset} which restore default settings and clear image (i.e. call @code{DefaultPlotParam()}). +@item Add option @code{value} to @ref{axis} function, which allow to set rotation angle for tick labels. +@item Change y coordinate at x-z projection. +@item Improve projection of 'unrotatable' objects (like @ref{legend}, @ref{title}, ...). +@item Add projection (@ref{ternary}&8) which is the same as usual (@ref{ternary}&4) but don't print text on projections +@item Improve orientation of axis ticks and labels. +@item Add mglWnd::SetDrawFunc(). +@item Add mgl_set_global_warn() and mgl_get_global_warn() for set/get messages of global scope. +@item Make copying private of mglGraph and derived. +@item Add virtual destructors. +@item Add some static functions for mglGraph. +@item Add option @samp{-n} to mglconv to disable automatic saving of the image. +@item Add option @samp{-s} to mglview and mglconv to run setup script before the main one. +@item Become compatible with giflib 5.1. +@item Add light scaling at MGLD import. +@item Add scaling of frames at Adjust(). +@item Possible bugfix for 32bit gcc. +@item Update documentation and make other minor bugfixes and compatibility changes. +@end itemize + @item @strong{7 August 2014.} New version (v.2.3) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are major improvements and speeding up of core MathGL and UDAV. @itemize @bullet @@ -145,84 +171,10 @@ New version (v.2.3) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is @end itemize -@item @strong{19 March 2014.} -New version (v.2.2.2.1) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are compatibility changes for MS VisualStudio 2010 and early. -@itemize @bullet -@item Compatibility changes for MS VisualStudio 2010 and early. -@item Function SetRange(v1,v2) ignore NAN values now. -@item Add enable-json-sample for building json-samples on demand only. -@item Update documentation. -@end itemize - -@item @strong{10 March 2014.} -New version (v.2.2.2) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are minor improvements and bugfixes: -@itemize @bullet -@item Add mgl_region_3d() to draw region (or ribbon) between 2 curves. Correspondingly extend mglGraph::Region() function and MGL command 'region'. -@item Allow LGPL for MathGL widgets. -@item Improve export to TeX. -@item Add missing functions to Fortran interface. -@item Bugfix for legend with enabled lighting. -@item Minor bugfixes and memory leaks. -@end itemize - -@item @strong{22 January 2014.} -New version (v.2.2.1) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are minor improvements and bugfixes: -@itemize @bullet -@item Add Qt5 support. -@item Add Pascal interface. -@item Improve JavaScript interface. -@item Add function mglGraph::AddRange(char dir, mreal v1, mreal v2) and extend corresponding MGL commands '[xyzc]range'. -@item Add 'hypot(x,y)' function for known functions in formula parsing. -@item Add style '~' to disable colorbar or axis labels. NOTE, axis style '_' is obsolete and should be replaced by '~'. -@item Change Aspect() if Ax=NAN. Now, Ay and Az set the ratio to optimal aspect (not exact value as previously). -@item Disable changes by View(),Zoom(),Perspective() for position of Title(), Legend(), Colorbar(). -@item Partial support of perspective in CalcXYZ(). -@item Speed up PDE solving. -@item Add complex versions of PDE, QO2d, QO3d. -@item Correct filled background for Box() in curved coordinates. -@item Allow nx=1 for Stem and Error. -@item Bugfix for drawing single axis. -@item Bugfix for missing options parsing for some of MGL commands. -@item Bugfix for .pmin suffix in MGL. Add mglData::MaximalNeg() and mglData::MinimalPos() functions. Add .nmin and .nmax suffixes. -@item Bugfix for colorbar labels. -@item Force using python 2.7 by default due to bug in Ubuntu. Debian sid works well with python 3.* too. -@item Other minor bugfixes and memory leaks. -@end itemize - -@item @strong{11 November 2013.} -New version (v.2.2) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are minor bugfixes and improvements: -@itemize @bullet -@item Add OpenMP calls mostly everywhere (can work as replacement of pthreads - a bit faster since more loops is parallelized). -@item Greatly speed up consequent FFT and Hankel transforms. Add mgl_clear_fft() function for manual clearing of saved FFT/Hankel data. -@item Add @ref{ohlc} plot for drawing Open-High-Low-Close diagram -@item Add wxMathGL widget. See @ref{wxMathGL class}. -@item Add interface for Lua v.5.1. -@item Add @ref{mask} for face drawing if one of symbols @samp{-+=;oOsS~<>jdD*^} is specified in color scheme. This work only for export in bitmap images. -@item Add @ref{quality}=8 for dots drawing (extremely fast). -@item Add styles '4','6','8' for @ref{cone} and @ref{cones} to produce square, hex-, octo-prism. -@item Add style 't' for @ref{cones} to produce tubes (cylinders). -@item Add style '^' for @ref{legend} to left/right align legend if its coordinates are right/left from the center -@item Add style '<', '^', '>' for aligning/centering boxes in @ref{bars}, @ref{barh}, @ref{boxplot}, @ref{cones}. Also this plots become centered by default if nx sizes are the same for all data. -@item Add @ref{dots} function which set independently both color and transparency of dots. -@item Improve automatic axis position. Add style '^' for inverse automatic axis position. -@item Improve tick labeling. Add style @ref{tuneticks}&4 for zero filling of tick labels. -@item Add @ref{refill} for filling by interpolation of parametrically dependent data -@item Add transparency for @ref{area} and @ref{region} plots. -@item Add mgl_clf_chr() function and extend @ref{clf} command. -@item Fourier now perform true inverse Fourier transform (instead of backward one). -@item Improve/change lighting from local sources. Add @ref{diffuse} function. -@item C functions now return NULL if HMDT data cannot be created for given input argument(s). -@item Enable line width for @ref{mesh} and @ref{fall} plots. -@item Replace +INF and -INF by NAN in textual formula output. -@item Add manual compression of JSON. -@item Define WORDS_BIGENDIAN and HAVE_MEMRCHR (thanks to Dinar Valeev). -@item Bugfix for cleaning unused points. -@item Fix 'setsize' command at UDAV starting. -@item Rewrite MGL parsing by using std::wstring for avoiding possible bugs of wcs*() functions. -@item Minor bugfixes. -@item Update docs. -@end itemize - +@item @strong{19 March 2014.}Version 2.2.2.1 was released. +@item @strong{10 March 2014.} Version 2.2.2 was released. +@item @strong{22 January 2014.} Version 2.2.1 was released. +@item @strong{11 November 2013.} Version 2.2 was released. @item @strong{8 May 2013.} Version 2.1.3.1 was released. @item @strong{2 May 2013.} Version 2.1.3 was released. @item @strong{28 January 2013.} Version 2.1.2 was released. diff --git a/texinfo/web_ru.texi b/texinfo/web_ru.texi index 9771dfa..940c54c 100644 --- a/texinfo/web_ru.texi +++ b/texinfo/web_ru.texi @@ -52,11 +52,10 @@ Generally, MathGL is GPL library. However, you can use LGPL license for MathGL c @strong{Latest news} @itemize +@item @emph{20 October 2014.} +New version (v.@value{VERSION}@value{MINVER}) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are @ref{LaTeX package}, command to load external DLL file (@ref{load}), new primitive (@ref{logo}), improvements for projections, manual rotation angle in @ref{axis} and other minor improvements, which denoted @ref{News, here}. @item @emph{7 August 2014.} New version (v.@value{VERSION}) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are many major improvements for both MathGL core and for UDAV, which denoted @ref{News, here}. -@comment New version (v.@value{VERSION}@value{MINVER}) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are extend of 'region' plot, improve export to TeX, add missing Fortran functions, bugfixes, and other improvements, which denoted @ref{News, here}. Note, this release looks as bug free, but next release (v.2.3) will introduce a set of improvements which may not so stable at first time. -@item @emph{11 November 2013.} -New version (v.2.2) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are speeding up, new plot kinds and data handling functions, new plot styles, masks for bitmap output, wx-widget, Lua interface, and many other improvements, which denoted @ref{News, here}. @end itemize There is detailed @ref{News, news list}. Sourceforge project page @uref{http://sourceforge.net/projects/mathgl/, here}. @@ -75,13 +74,40 @@ Javascript interface was developed with support of @url{http://www.datadvance.ne @nav{} @itemize + +@item @strong{20 October 2014.} +New version (v.2.3.1) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are minor improvements and bugfixes: +@itemize @bullet +@item Add @ref{LaTeX package} @emph{mglTeX} (author Diego Sejas Viscarra) for making figures directly from MGL script located in LaTeX file. +@item Add MGL command @ref{load} for loading MGL commands from external DLL (or .so) module. +@item Add @ref{logo} function to draw bitmap (logo), which is stretched along whole axis range. +@item Add MGL command @ref{reset} which restore default settings and clear image (i.e. call @code{DefaultPlotParam()}). +@item Add option @code{value} to @ref{axis} function, which allow to set rotation angle for tick labels. +@item Change y coordinate at x-z projection. +@item Improve projection of 'unrotatable' objects (like @ref{legend}, @ref{title}, ...). +@item Add projection (@ref{ternary}&8) which is the same as usual (@ref{ternary}&4) but don't print text on projections +@item Improve orientation of axis ticks and labels. +@item Add mglWnd::SetDrawFunc(). +@item Add mgl_set_global_warn() and mgl_get_global_warn() for set/get messages of global scope. +@item Make copying private of mglGraph and derived. +@item Add virtual destructors. +@item Add some static functions for mglGraph. +@item Add option @samp{-n} to mglconv to disable automatic saving of the image. +@item Add option @samp{-s} to mglview and mglconv to run setup script before the main one. +@item Become compatible with giflib 5.1. +@item Add light scaling at MGLD import. +@item Add scaling of frames at Adjust(). +@item Possible bugfix for 32bit gcc. +@item Update documentation and make other minor bugfixes and compatibility changes. +@end itemize + @item @strong{7 August 2014.} New version (v.2.3) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are major improvements and speeding up of core MathGL and UDAV. @itemize @bullet @item Add background image, which allow in particular semi-transparent background color. Correspondingly add function @ref{rasterize} for saving current image as background, and function @ref{background} for loading background image from PNG or JPEG file. @item Add primitives to draw @ref{polygon} and angle @ref{arc}. @item Allow arbitrary factor for axis ticks (like, @code{gr->SetTicks('x',M_PI,0,NAN,"\\pi");} or @code{@ref{xtick} pi '\pi'}). -@item Add function mglGraph::AddTick() for adding manual tick to the list of existed ones. +@item Add function @code{AddTick()} for adding manual tick to the list of existed ones. @item Add new styles and symbols: @itemize @@ -145,84 +171,10 @@ New version (v.2.3) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is @end itemize -@item @strong{19 March 2014.} -New version (v.2.2.2.1) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are compatibility changes for MS VisualStudio 2010 and early. -@itemize @bullet -@item Compatibility changes for MS VisualStudio 2010 and early. -@item Function SetRange(v1,v2) ignore NAN values now. -@item Add enable-json-sample for building json-samples on demand only. -@item Update documentation. -@end itemize - -@item @strong{10 March 2014.} -New version (v.2.2.2) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are minor improvements and bugfixes: -@itemize @bullet -@item Add mgl_region_3d() to draw region (or ribbon) between 2 curves. Correspondingly extend mglGraph::Region() function and MGL command 'region'. -@item Allow LGPL for MathGL widgets. -@item Improve export to TeX. -@item Add missing functions to Fortran interface. -@item Bugfix for legend with enabled lighting. -@item Minor bugfixes and memory leaks. -@end itemize - -@item @strong{22 January 2014.} -New version (v.2.2.1) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are minor improvements and bugfixes: -@itemize @bullet -@item Add Qt5 support. -@item Add Pascal interface. -@item Improve JavaScript interface. -@item Add function mglGraph::AddRange(char dir, mreal v1, mreal v2) and extend corresponding MGL commands '[xyzc]range'. -@item Add 'hypot(x,y)' function for known functions in formula parsing. -@item Add style '~' to disable colorbar or axis labels. NOTE, axis style '_' is obsolete and should be replaced by '~'. -@item Change Aspect() if Ax=NAN. Now, Ay and Az set the ratio to optimal aspect (not exact value as previously). -@item Disable changes by View(),Zoom(),Perspective() for position of Title(), Legend(), Colorbar(). -@item Partial support of perspective in CalcXYZ(). -@item Speed up PDE solving. -@item Add complex versions of PDE, QO2d, QO3d. -@item Correct filled background for Box() in curved coordinates. -@item Allow nx=1 for Stem and Error. -@item Bugfix for drawing single axis. -@item Bugfix for missing options parsing for some of MGL commands. -@item Bugfix for .pmin suffix in MGL. Add mglData::MaximalNeg() and mglData::MinimalPos() functions. Add .nmin and .nmax suffixes. -@item Bugfix for colorbar labels. -@item Force using python 2.7 by default due to bug in Ubuntu. Debian sid works well with python 3.* too. -@item Other minor bugfixes and memory leaks. -@end itemize - -@item @strong{11 November 2013.} -New version (v.2.2) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are minor bugfixes and improvements: -@itemize @bullet -@item Add OpenMP calls mostly everywhere (can work as replacement of pthreads - a bit faster since more loops is parallelized). -@item Greatly speed up consequent FFT and Hankel transforms. Add mgl_clear_fft() function for manual clearing of saved FFT/Hankel data. -@item Add @ref{ohlc} plot for drawing Open-High-Low-Close diagram -@item Add wxMathGL widget. See @ref{wxMathGL class}. -@item Add interface for Lua v.5.1. -@item Add @ref{mask} for face drawing if one of symbols @samp{-+=;oOsS~<>jdD*^} is specified in color scheme. This work only for export in bitmap images. -@item Add @ref{quality}=8 for dots drawing (extremely fast). -@item Add styles '4','6','8' for @ref{cone} and @ref{cones} to produce square, hex-, octo-prism. -@item Add style 't' for @ref{cones} to produce tubes (cylinders). -@item Add style '^' for @ref{legend} to left/right align legend if its coordinates are right/left from the center -@item Add style '<', '^', '>' for aligning/centering boxes in @ref{bars}, @ref{barh}, @ref{boxplot}, @ref{cones}. Also this plots become centered by default if nx sizes are the same for all data. -@item Add @ref{dots} function which set independently both color and transparency of dots. -@item Improve automatic axis position. Add style '^' for inverse automatic axis position. -@item Improve tick labeling. Add style @ref{tuneticks}&4 for zero filling of tick labels. -@item Add @ref{refill} for filling by interpolation of parametrically dependent data -@item Add transparency for @ref{area} and @ref{region} plots. -@item Add mgl_clf_chr() function and extend @ref{clf} command. -@item Fourier now perform true inverse Fourier transform (instead of backward one). -@item Improve/change lighting from local sources. Add @ref{diffuse} function. -@item C functions now return NULL if HMDT data cannot be created for given input argument(s). -@item Enable line width for @ref{mesh} and @ref{fall} plots. -@item Replace +INF and -INF by NAN in textual formula output. -@item Add manual compression of JSON. -@item Define WORDS_BIGENDIAN and HAVE_MEMRCHR (thanks to Dinar Valeev). -@item Bugfix for cleaning unused points. -@item Fix 'setsize' command at UDAV starting. -@item Rewrite MGL parsing by using std::wstring for avoiding possible bugs of wcs*() functions. -@item Minor bugfixes. -@item Update docs. -@end itemize - +@item @strong{19 March 2014.}Version 2.2.2.1 was released. +@item @strong{10 March 2014.} Version 2.2.2 was released. +@item @strong{22 January 2014.} Version 2.2.1 was released. +@item @strong{11 November 2013.} Version 2.2 was released. @item @strong{8 May 2013.} Version 2.1.3.1 was released. @item @strong{2 May 2013.} Version 2.1.3 was released. @item @strong{28 January 2013.} Version 2.1.2 was released. diff --git a/texinfo/widget_en.texi b/texinfo/widget_en.texi index faa187b..09d618d 100644 --- a/texinfo/widget_en.texi +++ b/texinfo/widget_en.texi @@ -9,7 +9,7 @@ @cindex window @cindex widgets -There are set of ``window'' classes for making a window with MathGL graphics: @code{mglWindow} and @code{mglGLUT} for whole window, @code{Fl_MathGL} and @code{QMathGL} as widgets. All these classes allow user to show, rotate, export, and change view of the plot using keyboard. Most of them (except @code{mglGLUT}) also have toolbar and menu for simplifying plot manipulation. All window classes have mostly the same set of functions. +There are set of ``window'' classes for making a window with MathGL graphics: @code{mglWindow}, @code{mglFLTK}, @code{mglQT} and @code{mglGLUT} for whole window, @code{Fl_MathGL} and @code{QMathGL} as widgets. All these classes allow user to show, rotate, export, and change view of the plot using keyboard. Most of them (except @code{mglGLUT}) also have toolbar and menu for simplifying plot manipulation. All window classes have mostly the same set of functions. For drawing you can use: @code{NULL} pointer if you'll update plot manually, global callback function of type @code{int draw(@code{HMGL} gr, @code{void *}p)} or @code{int draw(@code{mglGraph *}gr)}, or instance of class derived from @code{mglDraw} class. This class is defined in @code{#include } and have only 2 methods: @verbatim @@ -65,9 +65,16 @@ Run main loop for event handling in separate thread. Note, right now it work for 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} SetDrawFunc (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{void *}par=@code{NULL}, @code{void} (*reload)(@code{void *}p)=@code{NULL}) +@deftypefnx {Method on @code{mglWindow}} @code{void} SetDrawFunc (@code{int} (*draw)(@code{mglGraph *}gr)) +@deftypefnx {Method on @code{mglWindow}} @code{void} SetDrawFunc (@code{mglDraw *}obj) +@deftypefnx {C function} @code{void} mgl_wnd_set_func (@code{HMGL} gr, @code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{void *}par, @code{void} (*reload)(@code{void *}p)) +Set callback functions for drawing (@var{draw}) and data reloading (@var{reload}), or instance @var{obj} of a class derived from @code{mglDraw}. +@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. +Set callback function @var{func} which will be called on mouse click. @end deftypefn @deftypefn {Method on @code{mglWindow}} @code{void} ToggleAlpha () diff --git a/texinfo/widget_ru.texi b/texinfo/widget_ru.texi index e00998c..c14dde8 100644 --- a/texinfo/widget_ru.texi +++ b/texinfo/widget_ru.texi @@ -65,6 +65,13 @@ public: Запускает цикл обработки сообщений. Обычно эта функция должна вызываться в отдельном потоке или последней функцией в @code{main()}. @end deftypefn +@deftypefn {Метод класса @code{mglWindow}} @code{void} SetDrawFunc (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{void *}par=@code{NULL}, @code{void} (*reload)(@code{void *}p)=@code{NULL}) +@deftypefnx {Метод класса @code{mglWindow}} @code{void} SetDrawFunc (@code{int} (*draw)(@code{mglGraph *}gr)) +@deftypefnx {Метод класса @code{mglWindow}} @code{void} SetDrawFunc (@code{mglDraw *}obj) +@deftypefnx {Функция С} @code{void} mgl_wnd_set_func (@code{HMGL} gr, @code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{void *}par, @code{void} (*reload)(@code{void *}p)) +Устанавливает функцию, которая будет вызвана при перерисовке (@var{draw}) и при повторной загрузке данных (@var{reload}), или объект @var{obj} класса, производного от @code{mglDraw}. +@end deftypefn + @deftypefn {Метод класса @code{mglWindow}} @code{void} SetClickFunc (@code{void} (*func)(@code{HMGL} gr, @code{void *}p)) @deftypefnx {Функция С} @code{void} mgl_set_click_func (@code{void} (*func)(@code{HMGL} gr, @code{void *}p)) Устанавливает функцию, которая будет вызвана при щелчке мышью. diff --git a/todo.txt b/todo.txt index e4b155d..93e7148 100644 --- a/todo.txt +++ b/todo.txt @@ -21,6 +21,10 @@ B. как делать анимацию (кадры) для мышиной версии ... список кадров, кнопки добавить в кадры + вставить из кадра 16. Docs about mgl_datac_diffr 17. Extend QO + extra docs +18. Import OBJ ??? +19. Simplified triangle filling for Quality=1 ?!? +20. Extend 'ask' by adding multiple questions simultaneously (+ set/get default values from file ???) +21. Occasional seg.fault in mgl_qt_example at exit ZZ. Update *.i for new functions {before release!!!} @@ -33,12 +37,16 @@ ZZ. Update *.i for new functions {before release!!!} 4. Check centered curved text (see text2) 5. Export to X3D - 6. New tests: c. Tests for mglDataC arrays (as separate flag) e. Test for Crop, Momentum, NormSl, Sew, DiffParam, Envelope, STFA for all directions "xyz"; Clean, Last, First, Find, Spline3, FindAny, Insert, Delete, Put, SetId/Column, Squeeze, Extend, Trace, Combine, new Max/Min/Momentum, FillSample, Hist, operators, Sort, Roots, Jacobian u. Test FlowP + 3d +7. Improve z-order for rapidly oscillating surfaces +10. Manual rotation angle for axis ticks (as "value" option?!) +11. Export to XPM (like GIF) +13. Title and perspective + ============= DOCUMENTATION ============= A. Paper about MathGL!!! diff --git a/udav/CMakeLists.txt b/udav/CMakeLists.txt index 1abb7d0..6f9c045 100644 --- a/udav/CMakeLists.txt +++ b/udav/CMakeLists.txt @@ -4,7 +4,7 @@ if(enable-qt) set(udav_src anim_dlg.cpp find_dlg.cpp mem_pnl.cpp prop_dlg.cpp textedit.cpp args_dlg.cpp help_pnl.cpp newcmd_dlg.cpp text_pnl.cpp calc_dlg.cpp hint_dlg.cpp open_dlg.cpp qmglsyntax.cpp udav_wnd.cpp dat_pnl.cpp info_dlg.cpp opt_dlg.cpp setup_dlg.cpp - files_dlg.cpp plot_pnl.cpp style_dlg.cpp data_dlg.cpp tree_pnl.cpp subplot_dlg.cpp ) + files_dlg.cpp plot_pnl.cpp style_dlg.cpp data_dlg.cpp subplot_dlg.cpp ) set(udav_moc_hdr anim_dlg.h files_dlg.h info_dlg.h opt_dlg.h text_pnl.h args_dlg.h find_dlg.h mem_pnl.h plot_pnl.h setup_dlg.h udav_wnd.h calc_dlg.h help_pnl.h newcmd_dlg.h diff --git a/udav/udav_wnd.cpp b/udav/udav_wnd.cpp index adcefe5..f3e04af 100644 --- a/udav/udav_wnd.cpp +++ b/udav/udav_wnd.cpp @@ -145,27 +145,6 @@ int main(int argc, char **argv) // mgl addon // //----------------------------------------------------------------------------- -/*mglCommand udav_base_cmd[] = { - {L"fplot",L"Plot curve by formula",L"fplot 'func' ['stl'='' num=100]", mgls_fplot, mglc_fplot}, - {L"fsurf",L"Plot surface by formula",L"fsurf 'func' ['stl'='' numx=100 numy=100]", mgls_fsurf, mglc_fsurf}, - {L"fgets",L"Print string from file",L"fgets x y {z} 'fname' [pos=0 'stl'='' size=-1.4]", mgls_fgets, mglc_fgets}, -{L"",0,0,0,0}}; -//----------------------------------------------------------------------------- -void udavAddCommands(const mglCommand *cmd) // NOTE it work but I don't how I can use it -{ - int i, mp, mc; - // determine the number of symbols - for(i=0;parser.Cmd[i].name[0];i++){}; mp = i; - for(i=0;cmd[i].name[0];i++){}; mc = i; - mglCommand *buf = new mglCommand[mp+mc+1]; - memcpy(buf, parser.Cmd, mp*sizeof(mglCommand)); - memcpy(buf+mp, cmd, (mc+1)*sizeof(mglCommand)); - qsort(buf, mp+mc, sizeof(mglCommand), mgl_cmd_cmp); -#pragma omp critical(cmd_parser) - if(parser.Cmd!=mgls_base_cmd) delete []parser.Cmd; - parser.Cmd = buf; -}*/ -//----------------------------------------------------------------------------- void udavLoadDefCommands() {} //{ udavAddCommands(udav_base_cmd); } //----------------------------------------------------------------------------- // diff --git a/utils/mglconv.cpp b/utils/mglconv.cpp index fe3eec6..6f5382c 100644 --- a/utils/mglconv.cpp +++ b/utils/mglconv.cpp @@ -30,11 +30,25 @@ int main(int argc, char *argv[]) mglParse p(true); char ch, buf[2048], iname[256]="", oname[256]=""; std::vector var; + std::wstring str; + bool none=false; while(1) { - ch = getopt(argc, argv, "1:2:3:4:5:6:7:8:9:ho:L:C:A:"); + ch = getopt(argc, argv, "1:2:3:4:5:6:7:8:9:hno:L:C:A:s:"); if(ch>='1' && ch<='9') p.AddParam(ch-'0', optarg); + else if(ch=='s') + { + setlocale(LC_CTYPE, ""); + FILE *fp = fopen(optarg,"r"); + if(fp) + { + wchar_t ch; + while((ch=fgetwc(fp))!=WEOF) str.push_back(ch); + fclose(fp); str += L"\n"; + } + } + else if(ch=='n') none = true; else if(ch=='L') setlocale(LC_CTYPE, optarg); else if(ch=='A') { @@ -63,8 +77,9 @@ int main(int argc, char *argv[]) "\t... ...\n" "\t-9 str set str as argument $9 for script\n" "\t-L loc set locale to loc\n" + "\t-s opt set MGL script for setting up the plot\n" "\t-o name set output file name\n" - "\t- get script from standard input\n" + "\t-n no manual output (script should save results by itself)\n" "\t-A val add animation value val\n" "\t-C n1:n2:dn add animation value in range [n1,n2] with step dn\n" "\t-C n1:n2 add animation value in range [n1,n2] with step 1\n" @@ -78,12 +93,13 @@ int main(int argc, char *argv[]) } if(ch=='h') return 0; if(*oname==0) { strncpy(oname,*iname?iname:"out",250); strcat(oname,".png"); } - + else none = false; + mgl_ask_func = mgl_ask_gets; // prepare for animation - std::wstring str; setlocale(LC_CTYPE, ""); FILE *fp = *iname?fopen(iname,"r"):stdin; + if(!fp) { printf("No file for MGL script\n"); return 0; } wchar_t cw; while((cw=fgetwc(fp))!=WEOF) str.push_back(cw); // while(!feof(fp)) str.push_back(fgetwc(fp)); @@ -126,10 +142,10 @@ int main(int argc, char *argv[]) { p.Execute(&gr,str.c_str()); printf("%s\n",gr.Message()); - gr.WriteFrame(oname); + if(!none) gr.WriteFrame(oname); } if(!mglGlobalMess.empty()) printf("%s",mglGlobalMess.c_str()); - printf("Write output to %s\n",oname); + if(!none || gif) printf("Write output to %s\n",oname); return 0; } //----------------------------------------------------------------------------- diff --git a/utils/mglview.cpp b/utils/mglview.cpp index 75b37cc..f08530b 100644 --- a/utils/mglview.cpp +++ b/utils/mglview.cpp @@ -23,7 +23,7 @@ #include "mgl2/mgl.h" #include "mgl2/qt.h" //----------------------------------------------------------------------------- -std::wstring str; +std::wstring str, opt; mglParse p(true); void mgl_error_print(const char *Message, void *par); void mgl_ask_fltk(const wchar_t *quest, wchar_t *res); @@ -43,17 +43,29 @@ int main(int argc, char **argv) mgl_suppress_warn(true); while(1) { - ch = getopt(argc, argv, "1:2:3:4:5:6:7:8:9:ho:L:"); + ch = getopt(argc, argv, "1:2:3:4:5:6:7:8:9:hL:s:"); if(ch>='1' && ch<='9') p.AddParam(ch-'0', optarg); + else if(ch=='s') + { + setlocale(LC_CTYPE, ""); + FILE *fp = fopen(optarg,"r"); + if(fp) + { + wchar_t ch; + while((ch=fgetwc(fp))!=WEOF) opt.push_back(ch); + fclose(fp); + } + } else if(ch=='L') setlocale(LC_CTYPE, optarg); else if(ch=='h' || (ch==-1 && optind>=argc)) { - printf("mglconv convert mgl script to bitmap png file.\nCurrent version is 2.%g\n",MGL_VER2); + printf("mglview show plot from MGL script or MGLD file.\nCurrent version is 2.%g\n",MGL_VER2); printf("Usage:\tmglview [parameter(s)] scriptfile\n"); printf( "\t-1 str set str as argument $1 for script\n" "\t... ...\n" "\t-9 str set str as argument $9 for script\n" + "\t-s opt set MGL script for setting up the plot\n" "\t-L loc set locale to loc\n" "\t- get script from standard input\n" "\t-h print this message\n" ); @@ -67,6 +79,7 @@ int main(int argc, char **argv) bool mgld=(*iname && iname[strlen(iname)-1]=='d'); if(!mgld) { + str = opt + L"\n"; setlocale(LC_CTYPE, ""); FILE *fp = *iname?fopen(iname,"r"):stdin; if(fp) @@ -75,6 +88,7 @@ int main(int argc, char **argv) while((ch=fgetwc(fp))!=WEOF) str.push_back(ch); fclose(fp); } + else { printf("No file for MGL script\n"); return 0; } } mgl_ask_func = mgl_ask_gets; @@ -84,12 +98,17 @@ int main(int argc, char **argv) { gr.Setup(false); gr.NewFrame(); setlocale(LC_NUMERIC, "C"); - gr.ImportMGLD(iname); + if(!opt.empty()) + { + p.Execute(&gr,opt.c_str()); + printf("Setup script: %s\n",gr.Message()); + gr.ImportMGLD(iname,true); + } + else gr.ImportMGLD(iname); setlocale(LC_NUMERIC, ""); gr.EndFrame(); gr.Update(); } if(!mglGlobalMess.empty()) printf("%s",mglGlobalMess.c_str()); - gr.Run(); - return 0; + return gr.Run(); } //----------------------------------------------------------------------------- diff --git a/widgets/CMakeLists.txt b/widgets/CMakeLists.txt index 61b20fd..756124b 100644 --- a/widgets/CMakeLists.txt +++ b/widgets/CMakeLists.txt @@ -9,7 +9,7 @@ if(MGL_HAVE_FLTK) set_target_properties(mgl-fltk PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(mgl-fltk PROPERTIES DEFINE_SYMBOL "mgl_EXPORTS") set_target_properties(mgl-fltk-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) - set_target_properties(mgl-fltk-static PROPERTIES COMPILE_FLAGS -DMGL_STATIC_DEFINE) + target_compile_definitions(mgl-fltk-static PUBLIC MGL_STATIC_DEFINE) target_link_libraries(mgl-fltk mgl ${FLTK_LIBRARIES}) if(enable-mgl2) @@ -35,7 +35,7 @@ if(MGL_HAVE_GLUT) set_target_properties(mgl-glut PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(mgl-glut PROPERTIES DEFINE_SYMBOL "mgl_EXPORTS") set_target_properties(mgl-glut-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) - set_target_properties(mgl-glut-static PROPERTIES COMPILE_FLAGS -DMGL_STATIC_DEFINE) + target_compile_definitions(mgl-glut-static PUBLIC MGL_STATIC_DEFINE) target_link_libraries(mgl-glut mgl) target_link_libraries(mgl-glut ${GLUT_LIBRARIES} ${OPENGL_LIBRARIES}) @@ -62,7 +62,7 @@ if(MGL_HAVE_WX) set_target_properties(mgl-wx PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(mgl-wx PROPERTIES DEFINE_SYMBOL "mgl_EXPORTS") set_target_properties(mgl-wx-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) - set_target_properties(mgl-wx-static PROPERTIES COMPILE_FLAGS -DMGL_STATIC_DEFINE) + target_compile_definitions(mgl-wx-static PUBLIC MGL_STATIC_DEFINE) target_link_libraries(mgl-wx mgl) target_link_libraries(mgl-wx ${wxWidgets_LIBRARIES}) diff --git a/widgets/fltk.cpp b/widgets/fltk.cpp index 15fb62d..688feb5 100644 --- a/widgets/fltk.cpp +++ b/widgets/fltk.cpp @@ -71,7 +71,7 @@ using mglCanvasWnd::Window; Fl_MGLView *mgl; ///< Pointer to MGL widget with buttons mglCanvasFL(); - ~mglCanvasFL(); + virtual ~mglCanvasFL(); /// Create a window for plotting. Now implemeted only for GLUT. void Window(int argc, char **argv, int (*draw)(mglBase *gr, void *p), const char *title, @@ -571,43 +571,33 @@ Fl_Menu_Item pop_graph[20] = { //----------------------------------------------------------------------------- Fl_MGLView::Fl_MGLView(int xx, int yy, int ww, int hh, const char *lbl) : Fl_Window(xx,yy,ww,hh,lbl) { + Fl_Button *o; grid = alpha = light = sshow = 0; menu = 0; next = prev = reload = NULL; delay = NULL; - Fl_Button *o; - Fl_Group *g = new Fl_Group(0,30,435,30); - + Fl_Group *g = new Fl_Group(0,0,435,30); alpha_bt = new Fl_Button(0, 1, 25, 25); alpha_bt->type(FL_TOGGLE_BUTTON); alpha_bt->image(xpm_a1); alpha_bt->callback(mgl_alpha_cb,this); alpha_bt->tooltip(mgl_gettext("Switch on/off transparency in the picture")); -// alpha_bt->box(FL_PLASTIC_UP_BOX); alpha_bt->down_box(FL_PLASTIC_DOWN_BOX); light_bt = new Fl_Button(25, 1, 25, 25); light_bt->type(FL_TOGGLE_BUTTON); light_bt->image(xpm_l1); light_bt->callback(mgl_light_cb,this); light_bt->tooltip(mgl_gettext("Switch on/off lightning in the picture")); -// light_bt->box(FL_PLASTIC_UP_BOX); light_bt->down_box(FL_PLASTIC_DOWN_BOX); grid_bt = new Fl_Button(50, 1, 25, 25); grid_bt->type(FL_TOGGLE_BUTTON); grid_bt->image(xpm_wire); grid_bt->callback(mgl_grid_cb,this); grid_bt->tooltip(mgl_gettext("Switch on/off grid drawing")); - // grid_bt->box(FL_PLASTIC_UP_BOX); grid_bt->down_box(FL_PLASTIC_DOWN_BOX); rotate_bt = new Fl_Button(80, 1, 25, 25);rotate_bt->type(FL_TOGGLE_BUTTON); rotate_bt->image(xpm_r1); rotate_bt->callback(mgl_rotate_cb,this); rotate_bt->tooltip(mgl_gettext("Rotate picture by holding left mouse button")); -// rotate_bt->box(FL_PLASTIC_UP_BOX); rotate_bt->down_box(FL_PLASTIC_DOWN_BOX); zoom_bt = new Fl_Button(105, 1, 25, 25); zoom_bt->type(FL_TOGGLE_BUTTON); zoom_bt->image(xpm_z1); zoom_bt->callback(mgl_zoom_cb,this); zoom_bt->tooltip(mgl_gettext("Zoom in selected region of the picture")); -// zoom_bt->box(FL_PLASTIC_UP_BOX); zoom_bt->down_box(FL_PLASTIC_DOWN_BOX); o = new Fl_Button(130, 1, 25, 25); o->tooltip(mgl_gettext("Return picture to normal zoom")); o->image(new Fl_Pixmap(zoom_out_xpm)); o->callback(mgl_norm_cb,this); -// o->box(FL_PLASTIC_UP_BOX); o->down_box(FL_PLASTIC_DOWN_BOX); - o = new Fl_Button(160, 1, 25, 25); o->tooltip(mgl_gettext("Stop drawing")); o->image(new Fl_Pixmap(stop_xpm)); o->callback(mgl_stop_cb,this); - o = new Fl_Button(160, 1, 25, 25); o->tooltip(mgl_gettext("Refresh the picture")); o->image(new Fl_Pixmap(ok_xpm)); o->callback(mgl_draw_cb,this); -// o->box(FL_PLASTIC_UP_BOX); o->down_box(FL_PLASTIC_DOWN_BOX); Fl_Counter *tet, *phi; tet = new Fl_Counter(195, 1, 90, 25, 0); tet->callback(mgl_draw_cb,this); @@ -616,40 +606,30 @@ Fl_MGLView::Fl_MGLView(int xx, int yy, int ww, int hh, const char *lbl) : Fl_Win tet->tooltip(mgl_gettext("Theta angle (tilt z-axis)")); phi->lstep(10); phi->step(1); phi->range(-180,180); phi->tooltip(mgl_gettext("Phi angle (rotate in x*y plane)")); -// tet->box(FL_PLASTIC_UP_BOX); phi->box(FL_PLASTIC_UP_BOX); g->end(); g->resizable(0); - g = new Fl_Group(0,30,30,260); + g = new Fl_Group(0,0,30,260); o = new Fl_Button(1, 30, 25, 25); o->tooltip(mgl_gettext("Shift the picture up")); o->image(new Fl_Pixmap(up_1_xpm)); o->callback(mgl_su_cb,this); // o->box(FL_PLASTIC_UP_BOX); o->down_box(FL_PLASTIC_DOWN_BOX); o = new Fl_Button(1, 55, 25, 25); o->tooltip(mgl_gettext("Shift the picture left")); o->image(new Fl_Pixmap(left_1_xpm)); o->callback(mgl_sl_cb,this); -// o->box(FL_PLASTIC_UP_BOX); o->down_box(FL_PLASTIC_DOWN_BOX); o = new Fl_Button(1, 80, 25, 25); o->tooltip(mgl_gettext("Zoom in the picture")); o->image(new Fl_Pixmap(zoom_1_xpm)); o->callback(mgl_sz_cb,this); -// o->box(FL_PLASTIC_UP_BOX); o->down_box(FL_PLASTIC_DOWN_BOX); o = new Fl_Button(1, 105, 25, 25); o->tooltip(mgl_gettext("Zoom out the picture")); o->image(new Fl_Pixmap(norm_1_xpm)); o->callback(mgl_so_cb,this); -// o->box(FL_PLASTIC_UP_BOX); o->down_box(FL_PLASTIC_DOWN_BOX); o = new Fl_Button(1, 130, 25, 25); o->tooltip(mgl_gettext("Shift the picture right")); o->image(new Fl_Pixmap(right_1_xpm)); o->callback(mgl_sr_cb,this); -// o->box(FL_PLASTIC_UP_BOX); o->down_box(FL_PLASTIC_DOWN_BOX); o = new Fl_Button(1, 155, 25, 25); o->tooltip(mgl_gettext("Shift the picture down")); o->image(new Fl_Pixmap(down_1_xpm)); o->callback(mgl_sd_cb,this); -// o->box(FL_PLASTIC_UP_BOX); o->down_box(FL_PLASTIC_DOWN_BOX); o = new Fl_Button(1, 185, 25, 25); o->tooltip(mgl_gettext("Show previous frame in slideshow")); o->image(new Fl_Pixmap(prev_sl_xpm)); o->callback(mgl_sprev_cb,this); -// o->box(FL_PLASTIC_UP_BOX); o->down_box(FL_PLASTIC_DOWN_BOX); anim_bt = new Fl_Button(1, 210, 25, 25); anim_bt->type(FL_TOGGLE_BUTTON); anim_bt->image(xpm_s1); anim_bt->callback(mgl_sshow_cb,this); anim_bt->tooltip(mgl_gettext("Run/Stop slideshow (graphics animation)")); -// anim_bt->box(FL_PLASTIC_UP_BOX); anim_bt->down_box(FL_PLASTIC_DOWN_BOX); o = new Fl_Button(1, 235, 25, 25); o->tooltip(mgl_gettext("Show next frame in slideshow")); o->image(new Fl_Pixmap(next_sl_xpm)); o->callback(mgl_snext_cb,this); -// o->box(FL_PLASTIC_UP_BOX); o->down_box(FL_PLASTIC_DOWN_BOX); - g->end(); g->resizable(0); scroll = new Fl_Scroll(30, 30, 800, 600); @@ -658,8 +638,7 @@ Fl_MGLView::Fl_MGLView(int xx, int yy, int ww, int hh, const char *lbl) : Fl_Win FMGL->tet_val = tet; FMGL->phi_val = phi; FMGL->set_popup(pop_graph,FMGL,this); - scroll->end(); - resizable(scroll); end(); + scroll->end(); resizable(scroll); end(); } Fl_MGLView::~Fl_MGLView() {} //----------------------------------------------------------------------------- diff --git a/widgets/qt.cpp b/widgets/qt.cpp index aea5f7c..298edcb 100644 --- a/widgets/qt.cpp +++ b/widgets/qt.cpp @@ -46,7 +46,6 @@ #define MGL_MAX_LINES (INT_MAX-1000) #if !defined(WIN32) && !defined(__APPLE__) #include -#include #endif //----------------------------------------------------------------------------- /// Base class for windows containing MathGL graphics @@ -59,6 +58,7 @@ using mglCanvasWnd::Window; QMainWindow *Wnd; ///< Pointer to window mglCanvasQT(); + virtual ~mglCanvasQT() { if(Wnd) delete Wnd; } /// Create a window for plotting. Now implemeted only for GLUT. void Window(int argc, char **argv, int (*draw)(mglBase *gr, void *p),const char *title, @@ -143,6 +143,7 @@ QMathGL::QMathGL(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f) //----------------------------------------------------------------------------- QMathGL::~QMathGL() { + timer->stop(); timerRefr->stop(); if(mgl_use_graph(gr,-1)<1) mgl_delete_graph(gr); if(grBuf) delete []grBuf; if(draw) delete draw; @@ -1007,15 +1008,10 @@ void mglCanvasQT::Window(int argc, char **argv, int (*draw)(mglBase *gr, void *p // must be placed before ANY window creation XInitThreads(); #endif - QApplication *a; - if(!argv) - { - static char tmp[2][1]; - tmp[0][0]=tmp[1][0]=0; - static int aa=1; - a = new QApplication(aa, (char **)tmp); - } - else a = new QApplication(argc, argv); +// static char buf=0, *tmp=&buf; +// if(!argv) { argc = 1; argv = &tmp; } + if(!argv) argc = 0; + QApplication *a = new QApplication(argc, argv); a->connect(a, SIGNAL(lastWindowClosed()), a, SLOT(quit())); } diff --git a/widgets/qt4/CMakeLists.txt b/widgets/qt4/CMakeLists.txt index 10cf8ef..00affe5 100644 --- a/widgets/qt4/CMakeLists.txt +++ b/widgets/qt4/CMakeLists.txt @@ -7,7 +7,7 @@ function(libmglqt mglqt) set_target_properties(mgl-${mglqt} PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(mgl-${mglqt} PROPERTIES DEFINE_SYMBOL "mgl_EXPORTS") set_target_properties(mgl-${mglqt}-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) - set_target_properties(mgl-${mglqt}-static PROPERTIES COMPILE_FLAGS -DMGL_STATIC_DEFINE) + target_compile_definitions(mgl-${mglqt}-static PUBLIC MGL_STATIC_DEFINE) target_link_libraries(mgl-${mglqt} mgl) target_link_libraries(mgl-${mglqt} ${QT_LIBRARIES}) @@ -47,8 +47,7 @@ if(enable-qt4) set_target_properties(mgl-wnd PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(mgl-wnd PROPERTIES DEFINE_SYMBOL "mgl_EXPORTS") set_target_properties(mgl-wnd-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) - set_target_properties(mgl-wnd-static PROPERTIES COMPILE_FLAGS -DMGL_STATIC_DEFINE) - + target_compile_definitions(mgl-wnd-static PUBLIC MGL_STATIC_DEFINE) if(enable-mgl2) set_target_properties(mgl-wnd PROPERTIES OUTPUT_NAME "mgl2-wnd") set_target_properties(mgl-wnd-static PROPERTIES OUTPUT_NAME "mgl2-wnd") diff --git a/widgets/qt5/CMakeLists.txt b/widgets/qt5/CMakeLists.txt index 1bd58bf..da87a6b 100644 --- a/widgets/qt5/CMakeLists.txt +++ b/widgets/qt5/CMakeLists.txt @@ -8,7 +8,7 @@ function(libmglqt mglqt) set_target_properties(mgl-${mglqt} PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(mgl-${mglqt} PROPERTIES DEFINE_SYMBOL "mgl_EXPORTS") set_target_properties(mgl-${mglqt}-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) - set_target_properties(mgl-${mglqt}-static PROPERTIES COMPILE_FLAGS -DMGL_STATIC_DEFINE) + target_compile_definitions(mgl-${mglqt}-static PUBLIC MGL_STATIC_DEFINE) target_link_libraries(mgl-${mglqt} mgl) qt5_use_modules(mgl-${mglqt} Core Widgets Gui PrintSupport) qt5_use_modules(mgl-${mglqt}-static Core Widgets Gui PrintSupport) @@ -47,8 +47,7 @@ if(enable-qt5) set_target_properties(mgl-wnd PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(mgl-wnd PROPERTIES DEFINE_SYMBOL "mgl_EXPORTS") set_target_properties(mgl-wnd-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) - set_target_properties(mgl-wnd-static PROPERTIES COMPILE_FLAGS -DMGL_STATIC_DEFINE) - + target_compile_definitions(mgl-wnd-static PUBLIC MGL_STATIC_DEFINE) if(enable-mgl2) set_target_properties(mgl-wnd PROPERTIES OUTPUT_NAME "mgl2-wnd") set_target_properties(mgl-wnd-static PROPERTIES OUTPUT_NAME "mgl2-wnd") -- 2.30.2