[SCM] Packaging for mathgl branch, master, updated. 3c7acf4c8f14ae6d90768a5b99f64687bd9f4ee0
Dimitrios Eftaxiopoulos
eftaxi12 at otenet.gr
Wed Aug 18 01:01:12 UTC 2010
The following commit has been merged in the master branch:
commit 7341987359c987441a67e3bd941c6c8546039b5c
Author: Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>
Date: Wed Aug 18 03:32:26 2010 +0300
Drop NMU and -x.y versioning
diff --git a/debian/changelog b/debian/changelog
index fc70a0f..c6dbf44 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,7 +1,6 @@
-mathgl (1.10.2.1-1.1) UNRELEASED; urgency=low
+mathgl (1.10.2.1-1) UNRELEASED; urgency=low
[ D Eftaxiopoulos ]
- * NMU.
* Update to Debian Policy 3.9.1.0.
* Put myself and D. Haley to the maintainers list.
* Comment out parallel-build-png.patch in the debian/patches/series file
diff --git a/debian/control b/debian/control
index 9c25230..5b06f50 100644
--- a/debian/control
+++ b/debian/control
@@ -1,8 +1,8 @@
Source: mathgl
Section: science
Priority: optional
-Maintainer: Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>, D Haley <mycae at yahoo.com>
-Uploaders: Debian Science Maintainers <debian-science-maintainers at lists.alioth.debian.org>
+Maintainer: Debian Science Maintainers <debian-science-maintainers at lists.alioth.debian.org>
+Uploaders: Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>, D Haley <mycae at yahoo.com>
DM-Upload-Allowed: yes
Build-Depends: debhelper (>= 7), libltdl-dev, libgsl0-dev, freeglut3-dev, libgl1-mesa-dev | libgl-dev, libpng-dev, libhdf5-serial-dev | libhdf5-dev, libjpeg-dev, libtiff-dev, libfltk-dev, libqt4-dev, libwxgtk2.8-dev, swig, texinfo, texi2html, texlive, texlive-generic-recommended, octave3.2-headers, libgif-dev, autoconf, quilt
Standards-Version: 3.9.1.0
diff --git a/debian/patches/debian-changes-1.10.2.1-1.1 b/debian/patches/debian-changes-1.10.2.1-1
similarity index 99%
rename from debian/patches/debian-changes-1.10.2.1-1.1
rename to debian/patches/debian-changes-1.10.2.1-1
index 08d3354..4e6d5f2 100644
--- a/debian/patches/debian-changes-1.10.2.1-1.1
+++ b/debian/patches/debian-changes-1.10.2.1-1
@@ -1,12 +1,12 @@
-Description: Upstream changes introduced in version 1.10.2.1-1.1
+Description: Upstream changes introduced in version 1.10.2.1-1
This patch has been created by dpkg-source during the package build.
Here's the last changelog entry, hopefully it gives details on why
those changes were made:
.
- mathgl (1.10.2.1-1.1) UNRELEASED; urgency=low
+ mathgl (1.10.2.1-1) UNRELEASED; urgency=low
.
[ D Eftaxiopoulos ]
- * NMU.
+ * Update to Debian Policy 3.9.1.0.
* Put myself and D. Haley to the maintainers list.
* Comment out parallel-build-png.patch in the debian/patches/series file
since it seems to apply to a texinfo/Makefile.am file that is not
@@ -35380,1201 +35380,1201 @@ Last-Update: <YYYY-MM-DD>
--- /dev/null
+++ mathgl-1.10.2.1/examples/full_test_idtf.cpp
@@ -0,0 +1,1195 @@
-+#include <time.h>
-+#include <locale.h>
-+#include <string.h>
-+#include <stdio.h>
-+#include <getopt.h>
-+#include <mgl/mgl_zb.h>
-+#include <mgl/mgl_eps.h>
-+#include <mgl/mgl_idtf.h>
-+#define IDTF_TYPE 5
-+int type = IDTF_TYPE;
-+bool idtf_mode = true;
-+int pdftransparency = 1;
-+int vertex_color = 0;
-+int compression = 1;
-+//-----------------------------------------------------------------------------
-+mglData s;
-+//-----------------------------------------------------------------------------
-+void save(mglGraph *gr,const char *name,const char *suf="",int type=0)
-+{
-+// return;
-+ char buf[128];
-+ switch(type)
-+{
-+ case 1: // EPS
-+ sprintf(buf,"%s%s.eps",name,suf);
-+ gr->WriteEPS(buf); break;
-+ case 2: // SVG
-+ sprintf(buf,"%s%s.svg",name,suf);
-+ gr->WriteSVG(buf); break;
-+ case 3: // PNG
-+ sprintf(buf,"%s%s.png",name,suf);
-+ gr->WritePNG(buf,0,true); break;
-+ case 4: // JPEG
-+ sprintf(buf,"%s%s.jpg",name,suf);
-+ gr->WriteJPEG(buf); break;
-+ case 5: // IDTF
-+ sprintf(buf,"%s%s.idtf",name,suf);
-+ gr->WriteIDTF(buf); break;
-+ default:// PNG (no alpha)
-+ sprintf(buf,"%s%s.png",name,suf);
-+ gr->WritePNG(buf,0,false); break;
-+}
-+ puts(buf);
-+}
-+//-----------------------------------------------------------------------------
-+int sample_colors(mglGraph *gr) // arrow styles
-+{
-+ gr->Face(mglPoint(-1, -1), mglPoint(-1, -0.7), mglPoint(-0.6, -1), mglPoint(-0.6, -0.7), "L#");
-+ gr->Puts(mglPoint(-0.8,-0.9, 0.01), "L", "C:w", -1.4);
-+ gr->Face(mglPoint(-0.6,-1), mglPoint(-0.6, -0.7), mglPoint(-0.2, -1), mglPoint(-0.2, -0.7), "E#");
-+ gr->Puts(mglPoint(-0.4,-0.9, 0.01), "E", "C:w", -1.4);
-+ gr->Face(mglPoint(-0.2,-1), mglPoint(-0.2, -0.7), mglPoint(0.2, -1), mglPoint(0.2, -0.7), "N#");
-+ gr->Puts(mglPoint( 0, -0.9, 0.01), "N", "C:w", -1.4);
-+ gr->Face(mglPoint( 0.2,-1), mglPoint(0.2, -0.7), mglPoint(0.6, -1), mglPoint(0.6, -0.7), "U#");
-+ gr->Puts(mglPoint( 0.4,-0.9, 0.01), "U", "C:w", -1.4);
-+ gr->Face(mglPoint( 0.6,-1), mglPoint(0.6, -0.7), mglPoint(1, -1), mglPoint(1, -0.7), "Q#");
-+ gr->Puts(mglPoint( 0.8,-0.9, 0.01), "Q", "C:w", -1.4);
-+ //#lenuq
-+ gr->Face(mglPoint(-1, -0.7), mglPoint(-1, -0.4), mglPoint(-0.6, -0.7), mglPoint(-0.6, -0.4), "l#");
-+ gr->Puts(mglPoint(-0.8,-0.6, 0.01), "l", "C:k", -1.4);
-+ gr->Face(mglPoint(-0.6,-0.7), mglPoint(-0.6, -0.4), mglPoint(-0.2, -0.7), mglPoint(-0.2, -0.4), "e#");
-+ gr->Puts(mglPoint(-0.4,-0.6, 0.01), "e", "C:k", -1.4);
-+ gr->Face(mglPoint(-0.2,-0.7), mglPoint(-0.2, -0.4), mglPoint(0.2, -0.7), mglPoint(0.2, -0.4), "n#");
-+ gr->Puts(mglPoint( 0, -0.6, 0.01), "n", "C:k", -1.4);
-+ gr->Face(mglPoint( 0.2,-0.7), mglPoint(0.2, -0.4), mglPoint(0.6, -0.7), mglPoint(0.6, -0.4), "u#");
-+ gr->Puts(mglPoint( 0.4,-0.6, 0.01), "u", "C:k", -1.4);
-+ gr->Face(mglPoint( 0.6,-0.7), mglPoint(0.6, -0.4), mglPoint(1, -0.7), mglPoint(1, -0.4), "q#");
-+ gr->Puts(mglPoint( 0.8,-0.6, 0.01), "q", "C:k", -1.4);
-+ //#CMYkP
-+ gr->Face(mglPoint(-1, -0.4), mglPoint(-1, -0.1), mglPoint(-0.6, -0.4), mglPoint(-0.6, -0.1), "C#");
-+ gr->Puts(mglPoint(-0.8,-0.3, 0.01), "C", "C:w", -1.4);
-+ gr->Face(mglPoint(-0.6,-0.4), mglPoint(-0.6, -0.1), mglPoint(-0.2, -0.4), mglPoint(-0.2, -0.1), "M#");
-+ gr->Puts(mglPoint(-0.4,-0.3, 0.01), "M", "C:w", -1.4);
-+ gr->Face(mglPoint(-0.2,-0.4), mglPoint(-0.2, -0.1), mglPoint(0.2, -0.4), mglPoint(0.2, -0.1), "Y#");
-+ gr->Puts(mglPoint( 0, -0.3, 0.01), "Y", "C:w", -1.4);
-+ gr->Face(mglPoint( 0.2,-0.4), mglPoint(0.2, -0.1), mglPoint(0.6, -0.4), mglPoint(0.6, -0.1), "k#");
-+ gr->Puts(mglPoint( 0.4,-0.3, 0.01), "k", "C:w", -1.4);
-+ gr->Face(mglPoint( 0.6,-0.4), mglPoint(0.6, -0.1), mglPoint(1, -0.4), mglPoint(1, -0.1), "P#");
-+ gr->Puts(mglPoint( 0.8,-0.3, 0.01), "P", "C:w", -1.4);
-+ //#cmywp
-+ gr->Face(mglPoint(-1, -0.1), mglPoint(-1, 0.2), mglPoint(-0.6, -0.1), mglPoint(-0.6, 0.2), "c#");
-+ gr->Puts(mglPoint(-0.8, 0, 0.01), "c", "C:k", -1.4);
-+ gr->Face(mglPoint(-0.6,-0.1), mglPoint(-0.6, 0.2), mglPoint(-0.2, -0.1), mglPoint(-0.2, 0.2), "m#");
-+ gr->Puts(mglPoint(-0.4, 0, 0.01), "m", "C:k", -1.4);
-+ gr->Face(mglPoint(-0.2,-0.1), mglPoint(-0.2, 0.2), mglPoint(0.2, -0.1), mglPoint(0.2, 0.2), "y#");
-+ gr->Puts(mglPoint( 0, 0, 0.01), "y", "C:k", -1.4);
-+ gr->Face(mglPoint( 0.2,-0.1), mglPoint(0.2, 0.2), mglPoint(0.6, -0.1), mglPoint(0.6, 0.2), "w#");
-+ gr->Puts(mglPoint( 0.4, 0, 0.01), "w", "C:k", -1.4);
-+ gr->Face(mglPoint( 0.6,-0.1), mglPoint(0.6, 0.2), mglPoint(1, -0.1), mglPoint(1, 0.2), "p#");
-+ gr->Puts(mglPoint( 0.8, 0, 0.01), "p", "C:k", -1.4);
-+ //#BGRHW
-+ gr->Face(mglPoint(-1, 0.2), mglPoint(-1, 0.5), mglPoint(-0.6, 0.2), mglPoint(-0.6, 0.5), "B#");
-+ gr->Puts(mglPoint(-0.8, 0.3, 0.01), "B", "C:w", -1.4);
-+ gr->Face(mglPoint(-0.6, 0.2), mglPoint(-0.6, 0.5), mglPoint(-0.2, 0.2), mglPoint(-0.2, 0.5), "G#");
-+ gr->Puts(mglPoint(-0.4, 0.3, 0.01), "G", "C:w", -1.4);
-+ gr->Face(mglPoint(-0.2, 0.2), mglPoint(-0.2, 0.5), mglPoint(0.2, 0.2), mglPoint(0.2, 0.5), "R#");
-+ gr->Puts(mglPoint( 0, 0.3, 0.01), "R", "C:w", -1.4);
-+ gr->Face(mglPoint( 0.2, 0.2), mglPoint(0.2, 0.5), mglPoint(0.6, 0.2), mglPoint(0.6, 0.5), "H#");
-+ gr->Puts(mglPoint( 0.4, 0.3, 0.01), "H", "C:w", -1.4);
-+ gr->Face(mglPoint( 0.6, 0.2), mglPoint(0.6, 0.5), mglPoint(1, 0.2), mglPoint(1, 0.5), "W#");
-+ gr->Puts(mglPoint( 0.8, 0.3, 0.01), "W", "C:w", -1.4);
-+ //#bgrhw
-+ gr->Face(mglPoint(-1, 0.5), mglPoint(-1, 0.8), mglPoint(-0.6, 0.5), mglPoint(-0.6, 0.8), "b#");
-+ gr->Puts(mglPoint(-0.8, 0.6, 0.01), "b", "C:k", -1.4);
-+ gr->Face(mglPoint(-0.6, 0.5), mglPoint(-0.6, 0.8), mglPoint(-0.2, 0.5), mglPoint(-0.2, 0.8), "g#");
-+ gr->Puts(mglPoint(-0.4, 0.6, 0.01), "g", "C:k", -1.4);
-+ gr->Face(mglPoint(-0.2, 0.5), mglPoint(-0.2, 0.8), mglPoint(0.2, 0.5), mglPoint(0.2, 0.8), "r#");
-+ gr->Puts(mglPoint( 0, 0.6, 0.01), "r", "C:k", -1.4);
-+ gr->Face(mglPoint( 0.2, 0.5), mglPoint(0.2, 0.8), mglPoint(0.6, 0.5), mglPoint(0.6, 0.8), "h#");
-+ gr->Puts(mglPoint( 0.4, 0.6, 0.01), "h", "C:k", -1.4);
-+ gr->Face(mglPoint( 0.6, 0.5), mglPoint(0.6, 0.8), mglPoint(1, 0.5), mglPoint(1, 0.8), "w#");
-+ gr->Puts(mglPoint( 0.8, 0.6, 0.01), "w", "C:k", -1.4);
-+ //#brighted
-+ gr->Face(mglPoint(-1, 0.8), mglPoint(-1, 1.1), mglPoint(-0.6, 0.8), mglPoint(-0.6, 1.1), "r1#");
-+ gr->Puts(mglPoint(-0.8, 0.9, 0.01), "r1", "C:w", -1.4);
-+ gr->Face(mglPoint(-0.6, 0.8), mglPoint(-0.6, 1.1), mglPoint(-0.2, 0.8), mglPoint(-0.2, 1.1), "r3#");
-+ gr->Puts(mglPoint(-0.4, 0.9, 0.01), "r3", "C:w", -1.4);
-+ gr->Face(mglPoint(-0.2, 0.8), mglPoint(-0.2, 1.1), mglPoint(0.2, 0.8), mglPoint(0.2, 1.1), "r5#");
-+ gr->Puts(mglPoint( 0, 0.9, 0.01), "r5", "C:k", -1.4);
-+ gr->Face(mglPoint( 0.2, 0.8), mglPoint(0.2, 1.1), mglPoint(0.6, 0.8), mglPoint(0.6, 1.1), "r7#");
-+ gr->Puts(mglPoint( 0.4, 0.9, 0.01), "r7", "C:k", -1.4);
-+ gr->Face(mglPoint( 0.6, 0.8), mglPoint(0.6, 1.1), mglPoint(1, 0.8), mglPoint(1, 1.1), "r9#");
-+ gr->Puts(mglPoint( 0.8, 0.9, 0.01), "r9", "C:k", -1.4);
-+ return 0;
-+}
-+//-----------------------------------------------------------------------------
-+void sample_ae(mglGraph *gr) // math text
-+{
-+ gr->StartGroup("Formula");
-+ gr->Puts(mglPoint(0), "\\sqrt{\\frac{\\alpha^{\\gamma^2}+\\overset 1{\\big\\infty}}{\\sqrt3{2+b}}}",
-+ 0, -4);
-+ gr->EndGroup();
-+}
-+//-----------------------------------------------------------------------------
-+void sample_ad(mglGraph *gr) // arrow styles
-+{
-+ gr->VertexColor(false); gr->Compression(false); // anything is black anyway and compression is bad for text
-+
-+ float a=0.1,b=0.4,c=0.5;
-+ gr->Line(mglPoint(a,1),mglPoint(b,1),"k-A"); gr->Puts(mglPoint(c,1),"Style 'A' or 'A\\_'","rL");
-+ gr->Line(mglPoint(a,0.8),mglPoint(b,0.8),"k-V"); gr->Puts(mglPoint(c,0.8),"Style 'V' or 'V\\_'","rL");
-+ gr->Line(mglPoint(a,0.6),mglPoint(b,0.6),"k-K"); gr->Puts(mglPoint(c,0.6),"Style 'K' or 'K\\_'","rL");
-+ gr->Line(mglPoint(a,0.4),mglPoint(b,0.4),"k-I"); gr->Puts(mglPoint(c,0.4),"Style 'I' or 'I\\_'","rL");
-+ gr->Line(mglPoint(a,0.2),mglPoint(b,0.2),"k-D"); gr->Puts(mglPoint(c,0.2),"Style 'D' or 'D\\_'","rL");
-+ gr->Line(mglPoint(a,0),mglPoint(b,0),"k-S"); gr->Puts(mglPoint(c,0),"Style 'S' or 'S\\_'","rL");
-+ gr->Line(mglPoint(a,-0.2),mglPoint(b,-0.2),"k-O"); gr->Puts(mglPoint(c,-0.2),"Style 'O' or 'O\\_'","rL");
-+ gr->Line(mglPoint(a,-0.4),mglPoint(b,-0.4),"k-T"); gr->Puts(mglPoint(c,-0.4),"Style 'T' or 'T\\_'","rL");
-+ gr->Line(mglPoint(a,-0.6),mglPoint(b,-0.6),"k-_"); gr->Puts(mglPoint(c,-0.6),"Style '\\_' or none","rL");
-+ gr->Line(mglPoint(a,-0.8),mglPoint(b,-0.8),"k-AS"); gr->Puts(mglPoint(c,-0.8),"Style 'AS'","rL");
-+ gr->Line(mglPoint(a,-1),mglPoint(b,-1),"k-_A"); gr->Puts(mglPoint(c,-1),"Style '\\_A'","rL");
-+
-+ a=-1; b=-0.7; c=-0.6;
-+ gr->Line(mglPoint(a,1),mglPoint(b,1),"kAA"); gr->Puts(mglPoint(c,1),"Style 'AA'","rL");
-+ gr->Line(mglPoint(a,0.8),mglPoint(b,0.8),"kVV"); gr->Puts(mglPoint(c,0.8),"Style 'VV'","rL");
-+ gr->Line(mglPoint(a,0.6),mglPoint(b,0.6),"kKK"); gr->Puts(mglPoint(c,0.6),"Style 'KK'","rL");
-+ gr->Line(mglPoint(a,0.4),mglPoint(b,0.4),"kII"); gr->Puts(mglPoint(c,0.4),"Style 'II'","rL");
-+ gr->Line(mglPoint(a,0.2),mglPoint(b,0.2),"kDD"); gr->Puts(mglPoint(c,0.2),"Style 'DD'","rL");
-+ gr->Line(mglPoint(a,0),mglPoint(b,0),"kSS"); gr->Puts(mglPoint(c,0),"Style 'SS'","rL");
-+ gr->Line(mglPoint(a,-0.2),mglPoint(b,-0.2),"kOO"); gr->Puts(mglPoint(c,-0.2),"Style 'OO'","rL");
-+ gr->Line(mglPoint(a,-0.4),mglPoint(b,-0.4),"kTT"); gr->Puts(mglPoint(c,-0.4),"Style 'TT'","rL");
-+ gr->Line(mglPoint(a,-0.6),mglPoint(b,-0.6),"k-__"); gr->Puts(mglPoint(c,-0.6),"Style '\\_\\_'","rL");
-+ gr->Line(mglPoint(a,-0.8),mglPoint(b,-0.8),"k-VA"); gr->Puts(mglPoint(c,-0.8),"Style 'VA'","rL");
-+ gr->Line(mglPoint(a,-1),mglPoint(b,-1),"k-AV"); gr->Puts(mglPoint(c,-1),"Style 'AV'","rL");
-+}
-+//-----------------------------------------------------------------------------
-+void sample_ac(mglGraph *gr) // error boxes
-+{
-+ mglData x(10), y(10), ex(10), ey(10), y0(50);
-+ x.Modify("2*x-1 + 0.2*rnd-0.1");
-+ y.Modify("(2*x-1)^2 + 0.2*rnd-0.1");
-+ y0.Modify("(2*x-1)^2");
-+ ex.Modify("0.2");
-+ ey.Modify("0.1");
-+
-+ gr->SubPlot(2,2,0);
-+ gr->StartGroup("Random y");
-+ gr->StartGroup("Random y Error"); gr->Error(y,ey,"ko"); gr->EndGroup();
-+ gr->StartGroup("Random y Plot"); gr->Plot(y0,"r"); gr->EndGroup();
-+ gr->StartGroup("Random y Axis"); gr->Axis(); gr->EndGroup();
-+ gr->StartGroup("Random y Label"); gr->Text(mglPoint(0,1.2,0),"Random {\\i y}"); gr->EndGroup();
-+ gr->EndGroup();
-+
-+ gr->SubPlot(2,2,1);
-+ gr->StartGroup("Random x,y");
-+ gr->StartGroup("Random x,y Error"); gr->Error(x,y,ex,"ko"); gr->EndGroup();
-+ gr->StartGroup("Random x,y Plot"); gr->Plot(y0,"r"); gr->EndGroup();
-+ gr->StartGroup("Random x,y Axis"); gr->Axis(); gr->EndGroup();
-+ gr->StartGroup("Random x,y Label"); gr->Text(mglPoint(0,1.2,0),"Random {\\i x, y}"); gr->EndGroup();
-+ gr->EndGroup();
-+
-+ gr->SubPlot(2,2,2);
-+ gr->StartGroup("Random x,y and 2d boxes");
-+ gr->StartGroup("Random x,y and 2d boxes Error"); gr->Error(x,y,ey,ey,"ko"); gr->EndGroup();
-+ gr->StartGroup("Random x,y and 2d boxes Plot"); gr->Plot(y0,"r"); gr->EndGroup();
-+ gr->StartGroup("Random x,y and 2d boxes Axis"); gr->Axis(); gr->EndGroup();
-+ gr->StartGroup("Random x,y and 2d boxes Label"); gr->Text(mglPoint(0,1.2,0),"Random {\\i x, y} and 2d boxes"); gr->EndGroup();
-+ gr->EndGroup();
-+
-+ gr->SubPlot(2,2,3);
-+ gr->StartGroup("Random point in 3d space");
-+ gr->StartGroup("Random point in 3d space Label"); gr->Text(mglPoint(0,1.2,0),"Random point in 3d space"); gr->EndGroup();
-+ gr->Rotate(40,60);
-+ gr->StartGroup("Random point in 3d space Error");
-+ for(int i=0;i<10;i++)
-+ gr->Error(mglPoint(mgl_rnd()-0.5,mgl_rnd()-0.5,mgl_rnd()-0.5),
-+ mglPoint(0.1,0.1,0.1),"bo");
-+ gr->EndGroup();
-+ gr->StartGroup("Random point in 3d space Axis"); gr->Axis(); gr->EndGroup();
-+ gr->EndGroup();
-+ gr->InPlot(0,1,0,1);
-+}
-+//-----------------------------------------------------------------------------
-+void sample_ab(mglGraph *gr) // Gaussian beam
-+{
-+ gr->VertexColor(false); gr->Compression(false); // vertex color prevents transparency (unless set in PDF) and compression is bad it
-+
-+ gr->Alpha(true); gr->Light(true); gr->Light(0,mglPoint(0,0,1));
-+
-+ mglData a(30,30,30),b(30,30,30);
-+ a.Modify("exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))");
-+ b.Modify("16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)");
-+ gr->CAxis(0,1);
-+
-+ gr->SubPlot(2,2,0); gr->Rotate(40,60);
-+ gr->StartGroup("Surf3 Group");
-+ gr->StartGroup("Surf3"); gr->Surf3(a,"wgk"); gr->EndGroup();
-+ gr->StartGroup("Surf3 Box"); gr->Box(); gr->EndGroup();
-+ gr->EndGroup();
-+
-+ gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1),mglPoint(0,0,0));
-+ gr->CAxis(0,1);
-+ // vertex color prevents transparency, unless u3dpreview sets it in PDF for the whole surface
-+ if (pdftransparency)
-+ {
-+ gr->VertexColor(true);
-+ gr->Alpha(false); // transparency will be set in PDF, not in u3d
-+ gr->Light(false); // IMHO lighting is not necessary for this model
-+ }
-+ gr->SubPlot(2,2,1); gr->Rotate(40,60);
-+ gr->StartGroup("DensA Group");
-+ gr->StartGroup("DensA"); gr->DensA(a); gr->EndGroup();
-+ gr->StartGroup("DensA Axis"); gr->Axis(); gr->EndGroup();
-+ gr->StartGroup("DensA Box"); gr->Box(); gr->EndGroup();
-+ gr->EndGroup();
-+ gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1));
-+ gr->CAxis(0,1);
-+ if (pdftransparency) // put settings back
-+ {
-+ gr->Alpha(true);
-+ gr->Light(true);
-+ }
-+
-+ gr->SubPlot(2,2,2); gr->Rotate(40,60);
-+ gr->StartGroup("ClodQ Group");
-+ // Clouds not supported in u3d
-+ if ( idtf_mode )
-+ gr->Text(mglPoint(0,0,0),"no clouds in u3d");
-+ else
-+ gr->CloudQ(a);
-+ gr->StartGroup("CloudQ Box"); gr->Box(); gr->EndGroup();
-+ gr->EndGroup();
-+
-+ gr->VertexColor(false); // for variable transparency the only way is to disable smooth (per-vertex) coloring
-+ gr->SubPlot(2,2,3); gr->Rotate(40,60);
-+ gr->StartGroup("Surf3A Group");
-+ gr->StartGroup("Surf3A"); gr->Surf3A(b,a,"q"); gr->EndGroup();
-+ gr->StartGroup("Surf3A Box"); gr->Box(); gr->EndGroup();
-+ gr->EndGroup();
-+}
-+//-----------------------------------------------------------------------------
-+void sample_aa(mglGraph *gr) // flag #
-+{
-+ gr->Alpha(true); gr->Light(true); gr->Light(0,mglPoint(0,0,1));
-+ mglData a(30,20);
-+ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-+
-+ gr->SubPlot(2,2,0); gr->Rotate(40,60);
-+ // vertex color prevents transparency, unless u3dpreview sets it in PDF for the whole surface
-+ if (idtf_mode && pdftransparency)
-+ {
-+ gr->VertexColor(true);
-+ gr->Alpha(false); // transparency will be set in PDF, not in u3d
-+ }
-+ else
-+ {
-+ gr->VertexColor(false);
-+ }
-+ gr->StartGroup("Surf"); gr->Surf(a,"BbcyrR#"); gr->EndGroup();
-+ gr->StartGroup("Surf Box"); gr->Box(); gr->EndGroup();
-+ gr->SubPlot(2,2,1); gr->Rotate(40,60);
-+ gr->Light(false); // IMHO lighting is not necessary for this model
-+ gr->StartGroup("Dens"); gr->Dens(a,"BbcyrR#"); gr->EndGroup();
-+ gr->StartGroup("Dens Box"); gr->Box(); gr->EndGroup();
-+ gr->SubPlot(2,2,2); gr->Rotate(40,60);
-+ gr->StartGroup("Cont"); gr->Cont(a,"BbcyrR#"); gr->EndGroup();
-+ gr->StartGroup("Cont Box"); gr->Box(); gr->EndGroup();
-+ gr->SubPlot(2,2,3); gr->Rotate(40,60);
-+ gr->StartGroup("Axial"); gr->Axial(a,"BbcyrR#"); gr->EndGroup();
-+ gr->StartGroup("Axial Box"); gr->Box(); gr->EndGroup();
-+ if (idtf_mode && !pdftransparency) // switch lighting back
-+ {
-+ gr->Light(true);
-+ gr->SubPlot(2,2,0); gr->Rotate(40,60);
-+ }
-+}
-+//-----------------------------------------------------------------------------
-+void sample_a9(mglGraph *gr) // 2d plot
-+{
-+ gr->Light(true); gr->Light(0,mglPoint(0,0,1));
-+
-+ gr->VertexColor(true);
-+ mglData a0(50,40);
-+ a0.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-+ gr->SubPlot(2,2,0); gr->Rotate(60,40);
-+ gr->Surf(a0);
-+ gr->StartGroup("UL Box"); gr->Box(); gr->EndGroup();
-+
-+ mglData x(50,40),y(50,40),z(50,40);
-+ x.Modify("0.8*sin(2*pi*x)*sin(pi*y)");
-+ y.Modify("0.8*cos(2*pi*x)*sin(pi*y)");
-+ z.Modify("0.8*cos(pi*y)");
-+ gr->SubPlot(2,2,1); gr->Rotate(60,40);
-+ gr->StartGroup("Sphere"); gr->Surf(x,y,z,"BbwrR"); gr->EndGroup();
-+ gr->StartGroup("UR Box"); gr->Box(); gr->EndGroup();
-+
-+ mglData a1(50,40,3);
-+ a1.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-+ a1.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*sin(3*pi*(x*y))",1);
-+ a1.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",2);
-+ gr->SubPlot(2,2,2); gr->Rotate(60,40);
-+ gr->Compression(false);
-+ if (idtf_mode && pdftransparency)
-+ {
-+ gr->VertexColor(true);
-+ gr->Alpha(false); // transparency will be set in PDF, not in u3d
-+ }
-+ else
-+ {
-+ gr->VertexColor(false);
-+ gr->Alpha(true);
-+ }
-+ gr->Surf(a1);
-+ gr->StartGroup("LL Box"); gr->Box(); gr->EndGroup();
-+
-+ gr->SubPlot(2,2,3); gr->Rotate(60,40);
-+ if (idtf_mode && pdftransparency)
-+ gr->Light(false); // IMHO lighting is not necessary for this model
-+ gr->Dens(a1);
-+ gr->StartGroup("LR Box"); gr->Box(); gr->EndGroup();
-+ if (idtf_mode && pdftransparency)
-+ gr->Light(true);
-+ if (idtf_mode && !pdftransparency)
-+ { gr->SubPlot(1,1,0); gr->Rotate(60,40); } // Position global light
-+}
-+//-----------------------------------------------------------------------------
-+void sample_a8(mglGraph *gr) // 1d plot
-+{
-+ mglData y0(50); y0.Modify("sin(pi*(2*x-1))");
-+
-+ gr->SubPlot(2,2,0);
-+ gr->Plot(y0);
-+ gr->StartGroup("UL Box"); gr->Box(); gr->EndGroup();
-+
-+ mglData y1(50,2);
-+ y1.Modify("sin(pi*2*x-pi)"); y1.Modify("cos(pi*2*x-pi)/2",1);
-+ mglData x(50); x.Modify("cos(pi*2*x-pi)");
-+
-+ gr->SubPlot(2,2,1);
-+ gr->Plot(y1);
-+ gr->Plot(x,y0,"Y+");
-+ gr->Plot2(y1,"q|");
-+ gr->StartGroup("UR Box"); gr->Box(); gr->EndGroup();
-+
-+ mglData z(50); z.Modify("2*x-1");
-+ mglData y2(10,3); y2.Modify("cos(pi*(2*x-1-y))");
-+ y2.Modify("2*x-1",2);
-+
-+ gr->SubPlot(2,2,2); gr->Rotate(60,40);
-+ gr->Plot(x,y0,z);
-+ gr->StartGroup("LL Box"); gr->Box(); gr->EndGroup();
-+ gr->Plot3(y2,"bo ");
-+
-+ gr->SubPlot(2,2,3); gr->Rotate(60,40);
-+ gr->Bars(x,y0,z,"ri");
-+ gr->StartGroup("LR Box"); gr->Box(); gr->EndGroup();
-+
-+ gr->InPlot(0,1,0,1);
-+}
-+//-----------------------------------------------------------------------------
-+void sample_a7(mglGraph *gr) // smoothing
-+{
-+ mglData y0(30),y1,y2,y3;
-+ y0.Modify("0.4*sin(2*pi*x) + 0.3*cos(3*pi*x) - 0.4*sin(4*pi*x)+0.2*rnd");
-+
-+ y1=y0; y1.Smooth(SMOOTH_LINE_3);
-+ y2=y0; y2.Smooth(SMOOTH_LINE_5);
-+ y3=y0; y3.Smooth(SMOOTH_QUAD_5);
-+
-+ gr->StartGroup("NONE"); gr->Plot(y0,"k"); gr->EndGroup(); gr->AddLegend("NONE","k");
-+ gr->StartGroup("LINE_3"); gr->Plot(y1,"r"); gr->EndGroup(); gr->AddLegend("LINE\\_3","r");
-+ gr->StartGroup("LINE_5"); gr->Plot(y2,"g"); gr->EndGroup(); gr->AddLegend("LINE\\_5","g");
-+ gr->StartGroup("QUAD_5"); gr->Plot(y3,"b"); gr->EndGroup(); gr->AddLegend("QUAD\\_5","b");
-+ if (idtf_mode) // Problem in idtf, the white background and tet take the same place
-+ gr->LegendBox = false;
-+ gr->StartGroup("Legend"); gr->Legend(); gr->EndGroup();
-+ gr->StartGroup("Box"); gr->Box(); gr->EndGroup();
-+}
-+//-----------------------------------------------------------------------------
-+void sample_a6(mglGraph *gr) // differentiate
-+{
-+ gr->VertexColor(true);
-+ mglData a(30,40); a.Modify("x*y");
-+ gr->Axis(mglPoint(0,0,0),mglPoint(1,1,1));
-+
-+ gr->SubPlot(2,2,0); gr->Rotate(60,40);
-+ gr->StartGroup("Function");
-+ gr->StartGroup("Function Surf"); gr->Surf(a); gr->EndGroup();
-+ gr->StartGroup("Function Box"); gr->Box(); gr->EndGroup();
-+ gr->StartGroup("Function Label"); gr->Text(mglPoint(0.7,1,1.2),"a(x,y)"); gr->EndGroup();
-+ gr->EndGroup();
-+
-+ gr->SubPlot(2,2,1); gr->Rotate(60,40);
-+ a.Diff("x");
-+ gr->StartGroup("Diff");
-+ gr->StartGroup("Diff Surf"); gr->Surf(a); gr->EndGroup();
-+ gr->StartGroup("Diff Box"); gr->Box(); gr->EndGroup();
-+ gr->StartGroup("Diff Label"); gr->Text(mglPoint(0.7,1,1.2),"da/dx"); gr->EndGroup();
-+ gr->EndGroup();
-+
-+ gr->SubPlot(2,2,2); gr->Rotate(60,40);
-+ a.Integral("xy");
-+ gr->StartGroup("Integral");
-+ gr->StartGroup("Integral Surf"); gr->Surf(a); gr->EndGroup();
-+ gr->StartGroup("Integral Box"); gr->Box(); gr->EndGroup();
-+ gr->StartGroup("Integral Label"); gr->Text(mglPoint(0.7,1,1.2),"\\int da/dx dxdy"); gr->EndGroup();
-+ gr->EndGroup();
-+
-+ gr->SubPlot(2,2,3); gr->Rotate(60,40);
-+ a.Diff2("y");
-+ gr->StartGroup("Diff2");
-+ gr->StartGroup("Diff2 Surf"); gr->Surf(a); gr->EndGroup();
-+ gr->StartGroup("Diff2 Box"); gr->Box(); gr->EndGroup();
-+ gr->StartGroup("Diff2 Label"); gr->Text(mglPoint(0.7,1,1.2),"\\int {d^2}a/dxdy dx"); gr->EndGroup();
-+ gr->EndGroup();
-+}
-+//-----------------------------------------------------------------------------
-+void sample_a5(mglGraph *gr) // pen styles
-+{
-+ if (idtf_mode)
-+ gr->Puts(mglPoint(0,1.2),"line styles not supported","rL");
-+ gr->Line(mglPoint(0, 1.0,0),mglPoint(0.3, 1.0,0),"k-"); gr->Puts(mglPoint(0.4, 1.0),"Solid '-'","rL");
-+ gr->Line(mglPoint(0, 0.7,0),mglPoint(0.3, 0.7,0),"k|"); gr->Puts(mglPoint(0.4, 0.7),"Dash '|'","rL");
-+ gr->Line(mglPoint(0, 0.4,0),mglPoint(0.3, 0.4,0),"k;"); gr->Puts(mglPoint(0.4, 0.4),"Small dash ';'","rL");
-+ gr->Line(mglPoint(0, 0.1,0),mglPoint(0.3, 0.1,0),"kj"); gr->Puts(mglPoint(0.4, 0.1),"Dash-dot 'j'","rL");
-+ gr->Line(mglPoint(0,-0.2,0),mglPoint(0.3,-0.2,0),"ki"); gr->Puts(mglPoint(0.4,-0.2),"Small dash-dot 'i'","rL");
-+ gr->Line(mglPoint(0,-0.5,0),mglPoint(0.3,-0.5,0),"k:"); gr->Puts(mglPoint(0.4,-0.5),"Dots ':'","rL");
-+ gr->Line(mglPoint(0,-0.8,0),mglPoint(0.3,-0.8,0),"k "); gr->Puts(mglPoint(0.4,-0.8),"None ' '","rL");
-+
-+ gr->Mark(mglPoint(-1, 1.2,0),'.'); gr->Puts(mglPoint(-0.7, 1.2),"'.'","rL");
-+ gr->Mark(mglPoint(-1, 0.9,0),'+'); gr->Puts(mglPoint(-0.7, 0.9),"'+'","rL");
-+ gr->Mark(mglPoint(-1, 0.6,0),'x'); gr->Puts(mglPoint(-0.7, 0.6),"'x'","rL");
-+ gr->Mark(mglPoint(-1, 0.3,0),'*'); gr->Puts(mglPoint(-0.7, 0.3),"'*'","rL");
-+ gr->Mark(mglPoint(-1, 0.0,0),'s'); gr->Puts(mglPoint(-0.7, 0.0),"'s'","rL");
-+ gr->Mark(mglPoint(-1,-0.3,0),'d'); gr->Puts(mglPoint(-0.7,-0.3),"'d'","rL");
-+ gr->Mark(mglPoint(-1,-0.6,0),'o'); gr->Puts(mglPoint(-0.7,-0.6),"'o'","rL");
-+ gr->Mark(mglPoint(-1,-0.9,0),'^'); gr->Puts(mglPoint(-0.7,-0.9),"'\\^'","rL");
-+ gr->Mark(mglPoint(-1,-1.2,0),'v'); gr->Puts(mglPoint(-0.7,-1.2),"'v'","rL");
-+}
-+//-----------------------------------------------------------------------------
-+void sample_a4(mglGraph *gr) // font features
-+{
-+// setlocale(LC_CTYPE, "ru_RU.cp1251");
-+// gr->Putsw(mglPoint(0,1),L"Text can be in english è â Þíèêîäå");
-+ gr->Putsw(mglPoint(0,1),L"Text can be in ASCII and in Unicode");
-+ gr->Puts(mglPoint(0,0.6),"It can be \\wire{wire} and \\big{big}");
-+ gr->Puts(mglPoint(0,0.2),"One can change style in string: "
-+ "\\b{bold}, \\i{italic, \\b{both}}");
-+ gr->Puts(mglPoint(0,-0.2),"Easy to \\a{overline} or "
-+ "\\u{underline}");
-+ gr->Puts(mglPoint(0,-0.6),"Easy to change indexes ^{up} _{down} @{center}");
-+ gr->Puts(mglPoint(0,-1),"It parse TeX: \\int \\alpha \\cdot "
-+ "\\sqrt3{sin(\\pi x)^2 + \\gamma_{i_k}} dx");
-+}
-+//-----------------------------------------------------------------------------
-+void sample_a3(mglGraph *gr) // curvilinear coordinates
-+{
-+ mglData x(50),y(50),z(50);
-+ y.Fill(0.5,0.5);
-+ x.Fill(-1,1); // create data arrays
-+
-+ gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1),mglPoint(-1,1,-1));
-+ gr->dx = gr->dy = -5; gr->dz = 0.5; // set tick step to 0.5
-+
-+ gr->SubPlot(2,2,0);
-+ gr->StartGroup("Cartesian");
-+ gr->Rotate(60,40);
-+ gr->StartGroup("Cartesian Plot"); gr->Plot(x,y,z,"r2"); gr->EndGroup();
-+ gr->StartGroup("Cartesian Axis"); gr->Axis(); gr->EndGroup();
-+ gr->StartGroup("Cartesian Grid"); gr->Grid(); gr->EndGroup();
-+ gr->StartGroup("Cartesian Label"); gr->Text(mglPoint(0,1.3,1),"Cartesian"); gr->EndGroup();
-+ gr->EndGroup();
-+
-+ gr->SubPlot(2,2,1);
-+ gr->StartGroup("Cylindrical");
-+ gr->Axis("y*sin(pi*x)","y*cos(pi*x)",0);
-+ gr->Rotate(60,40);
-+ gr->StartGroup("Cylindrical Plot"); gr->Plot(x,y,z,"r2"); gr->EndGroup();
-+ gr->StartGroup("Cylindrical Axis"); gr->Axis(); gr->EndGroup();
-+ gr->StartGroup("Cylindrical Grid"); gr->Grid(); gr->EndGroup();
-+ gr->StartGroup("Cylindrical Label"); gr->Text(mglPoint(0,1.3,1),"Cylindrical"); gr->EndGroup();
-+ gr->EndGroup();
-+
-+ gr->SubPlot(2,2,2);
-+ gr->StartGroup("Parabolic");
-+ gr->Rotate(60,40);
-+ gr->Axis("2*y*x","y*y - x*x",0);
-+ gr->StartGroup("Parabolic Plot"); gr->Plot(x,y,z,"r2"); gr->EndGroup();
-+ gr->StartGroup("Parabolic Axis"); gr->Axis(); gr->EndGroup();
-+ gr->StartGroup("Parabolic Grid"); gr->Grid(); gr->EndGroup();
-+ gr->StartGroup("Parabolic Label"); gr->Text(mglPoint(0,1.3,1),"Parabolic"); gr->EndGroup();
-+ gr->EndGroup();
-+
-+ gr->SubPlot(2,2,3);
-+ gr->StartGroup("Spiral");
-+ gr->Rotate(60,40);
-+ gr->Axis("y*sin(pi*x)","y*cos(pi*x)","x+z");
-+ gr->StartGroup("Spiral Plot"); gr->Plot(x,y,z,"r2"); gr->EndGroup();
-+ gr->StartGroup("Spiral Axis"); gr->Axis(); gr->EndGroup();
-+ gr->StartGroup("Spiral Grid"); gr->Grid(); gr->EndGroup();
-+ gr->StartGroup("Spiral Label"); gr->Text(mglPoint(0,1.3,1),"Spiral"); gr->EndGroup();
-+ gr->EndGroup();
-+}
-+//-----------------------------------------------------------------------------
-+void sample_a2(mglGraph *gr) // axis and grid
-+{
-+ gr->SubPlot(2,2,0);
-+ gr->dx = gr->dy = 0.5; // set tick step to 0.5
-+ gr->NSx = gr->NSy = 3; // and draw 3 subticks
-+ gr->Box(); // should be after change dx,dy,dz
-+ gr->Axis("xy");
-+ gr->Grid();
-+ gr->Text(mglPoint(0,1.3,1),"Axis and grid","rC");
-+
-+ gr->dx = gr->dy = -5; // restore back
-+ gr->NSx = gr->NSy = 0;
-+ gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1),mglPoint(0,0,0));
-+
-+ gr->dx = gr->dy = gr->dz = -5; // restore back
-+ gr->SubPlot(2,2,1);
-+ gr->Rotate(60,40);
-+ gr->Axis();
-+ gr->Label('x',"x"); gr->Flush();
-+ gr->Label('y',"y"); gr->Flush();
-+ gr->Label('z',"z"); gr->Flush();
-+ gr->Text(mglPoint(0,0,1.5),"Axis and labels");
-+
-+ gr->dx = gr->dy = gr->dz = 0.2; // too low step of ticks
-+ gr->SubPlot(2,2,2);
-+ gr->Rotate(60,40);
-+ gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1),mglPoint(-1,-1,-1));
-+ gr->Axis();
-+ gr->Grid();
-+ gr->Text(mglPoint(0,0,1.5),"Shift origin and add grid");
-+ gr->Text(mglPoint(0,0,1.2),"(note, too many ticks)");
-+
-+ gr->SubPlot(2,2,3);
-+ gr->Rotate(60,40);
-+ gr->dz = gr->dy = -5; // decrease number of ticks
-+ gr->Axis("yz");
-+ gr->Label('y',"Y axis",0); gr->Flush();
-+ gr->Label('z',"Z axis",0); gr->Flush();
-+ gr->Text(mglPoint(0,0,1.5),"Remove X axis, and","rC");
-+ gr->Text(mglPoint(0,0,1.2),"decrease number of ticks");
-+
-+ gr->InPlot(0,1,0,1);
-+}
-+//-----------------------------------------------------------------------------
-+void sample_a1(mglGraph *gr) // transformation
-+{
-+ gr->SubPlot(2,2,0); // just new axis without rotation and aspects
-+ gr->Box();
-+ gr->Text(mglPoint(-1,1.1,1),"Just box","rL");
-+ gr->InPlot(0.2,0.5,0.7,1);
-+ gr->Box();
-+ gr->Text(mglPoint(0,1.2,1),"InPlot example");
-+ gr->SubPlot(2,2,1); // new axis with aspect and rotation
-+ gr->Rotate(60,40);
-+ gr->Aspect(1,1,1);
-+ gr->Box();
-+ gr->Text(mglPoint(1,1,1.5),"Rotate only","rR");
-+ gr->SubPlot(2,2,2); // aspect in other direction
-+ gr->Rotate(60,40);
-+ gr->Aspect(1,1,2);
-+ gr->Box();
-+ gr->Text(mglPoint(0,0,2),"Aspect and Rotate");
-+ gr->SubPlot(2,2,3); // rotation before aspect. INCORRECT !!!
-+ gr->Rotate(60,40);
-+ gr->Aspect(1,2,2);
-+ gr->Box();
-+ gr->Text(mglPoint(0,0,1.5),"Aspect in other direction");
-+
-+ gr->InPlot(0,1,0,1);
-+}
-+
-+#define START(vertex_color) gr->Clf(); gr->VertexColor(vertex_color); \
-+ gr->StartGroup("Box"); gr->Box(); gr->EndGroup();
-+#define SAVE(name) save(gr,#name, suf,type);
-+
-+//-----------------------------------------------------------------------------
-+int full_test(mglGraph *gr, const void *s) // full test (in PNG)
-+{
-+ const char *suf = (const char *)s;
-+ mglData pnts("hotdogs.pts");
-+ pnts.Norm(-1,1,true);
-+ mglData a(50,40), b(50,40), c(60,50,40), d(60,50,40);
-+ mglData y(50,3), x(50), x2(50), y1(50), y2(50), f(50,3);
-+ mglData ex(10,10,10), ey(10,10,10), ez(10,10,10);
-+
-+/* int i,j,k;
-+ float xx,yy,zz,dd;
-+ for(i=0;i<10;i++) for(j=0;j<10;j++) for(k=0;k<10;k++)
-+{
-+ xx = i*0.1-0.5; yy = j*0.1-0.5; zz = k*0.1-0.35; dd = k*0.1-0.65;
-+ ex.a[i+10*(j+10*k)] = 0.1*xx/pow(xx*xx+yy*yy+zz*zz,1.5) - 0.1*xx/pow(xx*xx+yy*yy+dd*dd,1.5);
-+ ey.a[i+10*(j+10*k)] = 0.1*yy/pow(xx*xx+yy*yy+zz*zz,1.5) - 0.1*yy/pow(xx*xx+yy*yy+dd*dd,1.5);
-+ ez.a[i+10*(j+10*k)] = 0.1*zz/pow(xx*xx+yy*yy+zz*zz,1.5) - 0.1*dd/pow(xx*xx+yy*yy+dd*dd,1.5);
-+}
-+ for(i=0;i<60;i++) for(j=0;j<50;j++) for(k=0;k<40;k++)
-+{
-+ xx = i/30.-1; yy = j/25.-1; zz = k/20.-1;
-+ c.a[i+60*(j+50*k)] = -2*(xx*xx + yy*yy + zz*zz*zz*zz - zz*zz - 0.1);
-+ d.a[i+60*(j+50*k)] = 1-2*tanh((xx+yy)*(xx+yy));
-+}*/
-+ ex.Modify("0.1*(x-0.5)/pow((x-0.5)^2+(y-0.5)^2 + (z-0.35)^2,1.5) - 0.1*(x-0.5)/pow((x-0.5)^2 + (y-0.5)^2+(z-0.65)^2,1.5)");
-+ ey.Modify("0.1*(y-0.5)/pow((x-0.5)^2+(y-0.5)^2 + (z-0.35)^2,1.5) - 0.1*(y-0.5)/pow((x-0.5)^2 + (y-0.5)^2+(z-0.65)^2,1.5)");
-+ ez.Modify("0.1*(z-0.35)/pow((x-0.5)^2+(y-0.5)^2 + (z-0.35)^2,1.5) - 0.1*(z-0.65)/pow((x-0.5)^2+(y-0.5)^2 + (z-0.65)^2,1.5)");
-+ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-+ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-+ c.Modify("(-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1))");
-+ d.Modify("1-2*tanh(4*(x+y-1)^2)");
-+ y.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
-+ y.Modify("sin(2*pi*x)",1); y.Modify("cos(2*pi*x)",2);
-+ y1.Modify("0.5+0.3*cos(2*pi*x)");
-+ y2.Modify("0.3*sin(2*pi*x)");
-+ x.Fill(-1,1,'x');
-+ x2.Modify("0.05+0.03*cos(2*pi*x)");
-+
-+ mglData x0(10), y0(10), ex0(10), ey0(10),ch(7,2);
-+ x0.Modify("2*x-1 + 0.1*rnd-0.05");
-+ y0.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x) + 0.2*rnd-0.1");
-+ ey0.Modify("0.2"); ex0.Modify("0.1"); ch.Modify("rnd+0.1");
-+
-+ gr->SubPlot(1,1,0);
-+ gr->Alpha(false); gr->Compression(compression);
-+ START(false); gr->MeshNum=20; gr->Dew(a,b,"BbcyrR"); gr->MeshNum=0; SAVE(dew);
-+ gr->Rotate(40,60);
-+ START(false); gr->MeshNum=10; gr->Dew(a,b,"BbcyrR"); gr->MeshNum=0; SAVE(dew2);
-+ START(false); gr->Pipe(a,b,"BbcyrR"); SAVE(pipe);
-+ START(true); gr->Surf(a,"BbcyrR"); SAVE(surf);
-+ START(true); gr->Surf(a,"BbcyrR|"); SAVE(surf_sl);
-+ START(true); gr->Tile(a,"BbcyrR"); SAVE(tile);
-+ START(true); gr->Belt(a,"BbcyrR"); SAVE(belt);
-+ START(false); gr->Mesh(a,"BbcyrR"); SAVE(mesh);
-+ START(false); gr->Fall(a,"BbcyrR"); SAVE(fall);
-+ START(true); gr->SurfC(a,b,"BbcyrR"); SAVE(surfc);
-+ START(true); gr->Boxs(a,"BbcyrR"); SAVE(boxs);
-+ START(false); gr->Flow(ex,ey,ez,"bwr"); SAVE(flow3);
-+ START(false); gr->Vect(ex,ey,ez,"bwr"); SAVE(vect3);
-+ START(false); gr->VectC(ex,ey,ez,"bwr"); SAVE(vectc3);
-+ START(false); gr->Pipe(ex,ey,ez,"bwr"); SAVE(pipe3);
-+ START(false); gr->Torus(y1,y2,"pz"); SAVE(torus);
-+ START(false); gr->Crust(pnts,"BbcyrR"); SAVE(crust);
-+ START(false); gr->Dots(pnts,"BbcyrR"); SAVE(dots);
-+ START(false); gr->ContF(a,"BbcyrR"); SAVE(contf);
-+ START(false); gr->Cont(a,"BbcyrR"); SAVE(cont);
-+ START(false); gr->ContFA(c,"BbcyrR"); SAVE(contfa);
-+ if (idtf_mode)
-+ { START(false); gr->Text(mglPoint(0,0,0),"Fog not supported"); SAVE(surf_fog); }
-+ else
-+ { gr->Clf(); gr->Fog(1); gr->Box(); gr->Surf(a,"BbcyrR"); gr->Fog(0); SAVE(surf_fog); }
-+ START(false); gr->Tube(y,0.05); gr->Tube(y1,x,y2,x2); SAVE(tube);
-+ START(false); gr->Tube(y,0.05); gr->Tube(y1,x,y2,x2); SAVE(tube_3d);
-+ START(false); gr->Chart(ch,"#"); SAVE(chart);
-+ gr->Axis("(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)",0);
-+ START(false); gr->Chart(ch,"bgr cmy#"); SAVE(pie_chart); gr->Axis(0,0,0);
-+
-+ gr->Alpha(true); gr->Compression(false);
-+ START(pdftransparency); gr->Surf(a,"BbcyrR"); SAVE(surf_alpha);
-+ START(false); gr->Axial(a,"BbcyrR"); SAVE(axial);
-+ START(false); gr->SurfA(a,b,"BbcyrR"); SAVE(surfa);
-+ START(false); gr->Map(a,b,"brg"); SAVE(map);
-+ START(false); gr->Surf3(c,"BbcyrR"); SAVE(surf3);
-+ START(pdftransparency); gr->Surf3(c,"bgrd"); SAVE(surf3_rgbd_light);
-+ START(false); gr->Surf3A(c,d,"BbcyrR"); SAVE(surf3a);
-+ START(pdftransparency); gr->Surf3C(c,d,"BbcyrR"); SAVE(surf3c);
-+ START(false); gr->ContA(c,"BbcyrR"); SAVE(conta);
-+ gr->Light(false);
-+ if (idtf_mode)
-+ { START(false); gr->Text(mglPoint(0,0,0),"CloudQ not supported"); SAVE(cloudq); }
-+ else
-+ { START(false); gr->CloudQ(c,"wyrRk"); SAVE(cloudq); }
-+ if (idtf_mode)
-+ { START(false); gr->Text(mglPoint(0,0,0),"CloudP not supported"); SAVE(cloudp); }
-+ else
-+ { START(false); gr->CloudP(c,"wyrRk"); SAVE(cloudp); }
-+ START(pdftransparency); gr->Axis(); gr->DensA(c,"BbcyrR"); SAVE(densa);
-+ gr->Alpha(false); gr->Compression(compression);
-+ START(true); gr->Surf3(c,"bgrd"); SAVE(surf3_rgbd);
-+ START(true); gr->DensX(c.Sum("x"),"BbcyrR",-1); gr->DensY(c.Sum("y"),"BbcyrR",1);
-+ gr->DensZ(c.Sum("z"),"BbcyrR",-1); SAVE(dens_xyz);
-+ START(false); gr->ContX(c.Sum("x"),"BbcyrR",-1); gr->ContY(c.Sum("y"),"BbcyrR",1);
-+ gr->ContZ(c.Sum("z"),"BbcyrR",-1); SAVE(cont_xyz);
-+ gr->SubPlot(1,1,0); // 1D Plots
-+ START(false); gr->Plot(y); SAVE(plot);
-+ START(false); gr->Area(y); SAVE(area);
-+ START(false); gr->Stem(y); SAVE(stem);
-+ START(false); gr->Step(y); SAVE(step);
-+ START(false); gr->Bars(y); SAVE(bars);
-+ START(false); gr->Barh(y); SAVE(barh);
-+ START(false); gr->Region(y2,y1,"r"); gr->Plot(y1,"k2"); gr->Plot(y2,"k2"); SAVE(region);
-+ START(false); gr->Mark(y,y1,"bs"); SAVE(mark);
-+ START(false); gr->TextMark(y,y1,"\\gamma"); SAVE(textmark);
-+ START(false); gr->Plot(y.SubData(-1,0));
-+ gr->Text(y,"This is very very long string drawn along a curve",":k");
-+ gr->Text(y,"Another string drawn above a curve","T:r"); SAVE(text);
-+ START(false); gr->Plot(y.SubData(-1,0)); gr->Error(x0,y0,ex0,ey0,"ko"); SAVE(error);
-+
-+ START(true); gr->Dens(a,"BbcyrR"); gr->Colorbar(); SAVE(dens);
-+ START(true); gr->Tile(a,b,"BbcyrR"); SAVE(tiler);
-+ START(false); gr->Cont(a,"BbcyrRt"); SAVE(contt);
-+ START(false); gr->Vect(a,b,"BbcyrR"); SAVE(vect);
-+ START(false); gr->VectC(a,b,"BbcyrR"); SAVE(vectc);
-+ START(false); gr->Flow(a,b,"BbcyrR"); SAVE(flow);
-+ START(true); gr->Pipe(a,b,"BbcyrR"); SAVE(pipe2);
-+
-+ f.Modify("sin(2*pi*x*x)",0); f.Modify("sin(2*pi*x)",1); f.Modify("sin(2*pi*sqrt(x))",2);
-+ gr->Axis(mglPoint(0,-1,0),mglPoint(1,1,1));
-+ START(false); gr->Plot(f); gr->Axis("xy");
-+ if (idtf_mode) gr->LegendBox = false;
-+ gr->AddLegend("sin(\\pi {x^2})","b"); gr->AddLegend("sin(\\pi x)","g*"); gr->AddLegend("sin(\\pi \\sqrt{x})","r+");
-+ gr->Legend(); SAVE(legend);
-+ gr->ClearLegend(); // clear legend strings
-+ return 0;
-+}
-+//-----------------------------------------------------------------------------
-+int sample_crust(mglGraph *gr, const void *)
-+{
-+ mglData pnts("hotdogs.pts");
-+ pnts.Norm(-1,1,true);
-+
-+ gr->Rotate(40,60);
-+ gr->Light(true);
-+ gr->Alpha(true);
-+ gr->Box();
-+ gr->Crust(pnts);
-+ //gr->Dots(pnts,"k");
-+ return 0;
-+}
-+//-----------------------------------------------------------------------------
-+int sample_transp(mglGraph *gr, const void *s) // flag #
-+{
-+ const char *suf = (const char *)s;
-+ gr->Alpha(true); gr->Light(true); gr->Light(0,mglPoint(0,0,1));
-+ mglData a(30,20);
-+ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-+
-+ gr->SetScheme("BbcyrR");
-+ gr->TranspType = 0; gr->Clf();
-+ gr->SubPlot(2,2,0); gr->Rotate(40,60); gr->Surf(a); gr->Box();
-+ gr->SubPlot(2,2,1); gr->Rotate(40,60); gr->Dens(a); gr->Box();
-+ gr->SubPlot(2,2,2); gr->Rotate(40,60); gr->Cont(a); gr->Box();
-+ gr->SubPlot(2,2,3); gr->Rotate(40,60); gr->Axial(a); gr->Box();
-+ save(gr,"type0",suf,type);
-+
-+ gr->TranspType = 1; gr->Clf();
-+ gr->SubPlot(2,2,0); gr->Rotate(40,60); gr->Surf(a); gr->Box();
-+ gr->SubPlot(2,2,1); gr->Rotate(40,60); gr->Dens(a); gr->Box();
-+ gr->SubPlot(2,2,2); gr->Rotate(40,60); gr->Cont(a); gr->Box();
-+ gr->SubPlot(2,2,3); gr->Rotate(40,60); gr->Axial(a); gr->Box();
-+ save(gr,"type1",suf,type);
-+
-+ gr->TranspType = 2; gr->Clf();
-+ gr->SubPlot(2,2,0); gr->Rotate(40,60); gr->Surf(a); gr->Box();
-+ gr->SubPlot(2,2,1); gr->Rotate(40,60); gr->Dens(a); gr->Box();
-+ gr->SubPlot(2,2,2); gr->Rotate(40,60); gr->Cont(a); gr->Box();
-+ gr->SubPlot(2,2,3); gr->Rotate(40,60); gr->Axial(a); gr->Box();
-+ save(gr,"type2",suf,type);
-+ gr->TranspType = 0; gr->Clf();
-+ return 0;
-+}
-+//-----------------------------------------------------------------------------
-+int sample_hint(mglGraph *gr, const void *s)
-+{
-+ const char *suf = (const char *)s;
-+ mglData a(50,40), b(50,40), d(50,40), c(61,51,40), y(50,3), y1(50), y2(50);
-+ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-+ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-+ c.Modify("(-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1))");
-+ y.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
-+ y.Modify("sin(2*pi*x)",1); y.Modify("cos(2*pi*x)",2);
-+ y1.Modify("0.3*sin(2*pi*x)"); y2.Modify("0.5+0.3*cos(2*pi*x)");
-+ for(int i=0;i<a.nx*a.ny;i++) d.a[i] = hypot(a.a[i],b.a[i]);
-+
-+ gr->SubPlot(1,1,0); gr->Clf(); gr->Alpha(false); gr->Light(false);
-+ // 2-axis plot
-+ gr->Clf(); gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1),mglPoint(-1,-1,-1));
-+ gr->Axis(); gr->Label('y',"axis 1",0); gr->Plot(y1,"b");
-+ gr->Axis(mglPoint(0,0,0),mglPoint(1,1,1),mglPoint(1,1,1)); // set up second axis
-+ gr->Axis(); gr->Label('y',"axis 2",0); gr->Stem(y2,"r");
-+ SAVE(2_axis);
-+
-+ gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1));
-+ // contours under mesh
-+ START(true); gr->Flow(a,b,"br",5,true,-0.99); gr->Dens(d,"BbcyrR");
-+ SAVE(flow_dens);
-+
-+ gr->Rotate(40,60);
-+ // contours on the surface
-+ START(true); gr->Surf(a,"kw"); gr->CAxis(-1,0); gr->Cont(a,"w");
-+ gr->CAxis(0,1); gr->Cont(a,"k"); gr->CAxis(-1,1);
-+ SAVE(surf_cont);
-+ gr->Light(true);
-+ // contours under mesh
-+ START(true); gr->Mesh(a,"BbcyrR"); gr->Cont(a, 0, 7, -1);
-+ SAVE(mesh_cont);
-+ // contours on the surface
-+ START(true); gr->Surf(a,"BbcyrR"); gr->Cont(a,"y");
-+ SAVE(surf_cont_y);
-+ // caxis and the surface
-+ START(true); gr->CAxis(0,1); gr->Surf(a,"BbcyrR"); gr->CAxis(-1,1);
-+ SAVE(surf_caxis);
-+ // caxis and the surface
-+ START(true); gr->Axis(mglPoint(-1,-1,0),mglPoint(1,1,1)); gr->Cut=false;
-+ gr->Surf(a,"BbcyrR"); gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1));
-+ SAVE(surf_cut); gr->Cut = true;
-+
-+ // several light sources
-+ START(false);
-+ gr->Light(1,mglPoint(0,1,0),'c');
-+ gr->Light(2,mglPoint(1,0,0),'y');
-+ gr->Light(3,mglPoint(0,-1,0),'m');
-+ gr->Surf(a,"h");
-+ SAVE(several_light);
-+ gr->Light(1,false);
-+ gr->Light(2,false);
-+ gr->Light(3,false);
-+
-+ // CutMin CutMax example
-+ gr->CutMin = mglPoint(0,-1,-1); gr->CutMax = mglPoint(1,0,1.1);
-+ START(false); gr->Surf3(-0.5,c,"BbcyrR");
-+ mglData v(10); v.Fill(-0.5,1);
-+ gr->ContF3(v,c,'x',-1,"BbcyrR"); gr->ContF3(v,c,'y',-1,"BbcyrR");
-+ gr->ContF3(v,c,'z',0,"BbcyrR"); gr->ContF3(v,c,'z',39,"BbcyrR");
-+ SAVE(cutminmax2);
-+
-+ START(false); gr->Alpha(true);
-+ gr->Surf3(c,"BbcyrR");
-+ SAVE(cutminmax);
-+ gr->CutMax = gr->CutMin; // switch off cutting area
-+
-+ START(false);
-+ gr->CutOff("(z>(x+0.5*y-1)^2-1) & (z>(x-0.5*y-1)^2-1)");
-+ gr->Surf3(c); gr->CutOff(0);
-+ SAVE(surf3_cutoff);
-+
-+ return 0;
-+}
-+//-----------------------------------------------------------------------------
-+void sample_molecule(mglGraph *gr)
-+{
-+ gr->VertexColor(false); gr->Compression(false); // per-vertex colors and compression are detrimental to transparency
-+
-+ gr->Alpha(true); gr->Light(true);
-+
-+ gr->SubPlot(2,2,0);
-+ gr->StartGroup("Methane");
-+ gr->StartGroup("MetaneLabel");
-+ gr->Text(mglPoint(0,1.2),"Methane, CH_4",0,-3);
-+ gr->EndGroup();
-+ gr->Rotate(60,120);
-+ gr->Sphere(mglPoint(0,0,0),0.25,"k");
-+ gr->Drop(mglPoint(0,0,0),mglPoint(0,0,1),0.35,"h",1,2);
-+ gr->Sphere(mglPoint(0,0,0.7),0.25,"g");
-+ gr->Drop(mglPoint(0,0,0),mglPoint(-0.94,0,-0.33),0.35,"h",1,2);
-+ gr->Sphere(mglPoint(-0.66,0,-0.23),0.25,"g");
-+ gr->Drop(mglPoint(0,0,0),mglPoint(0.47,0.82,-0.33),0.35,"h",1,2);
-+ gr->Sphere(mglPoint(0.33,0.57,-0.23),0.25,"g");
-+ gr->Drop(mglPoint(0,0,0),mglPoint(0.47,-0.82,-0.33),0.35,"h",1,2);
-+ gr->Sphere(mglPoint(0.33,-0.57,-0.23),0.25,"g");
-+ gr->EndGroup();
-+
-+ gr->SubPlot(2,2,1);
-+ gr->StartGroup("Water");
-+ gr->StartGroup("WaterLabel");
-+ gr->Text(mglPoint(0,1.2),"Water, H{_2}O",0,-3);
-+ gr->EndGroup();
-+ gr->Rotate(60,100);
-+ gr->StartGroup("Water_O");
-+ gr->Sphere(mglPoint(0,0,0),0.25,"r");
-+ gr->EndGroup();
-+ gr->StartGroup("Water_Cloud_1");
-+ gr->Drop(mglPoint(0,0,0),mglPoint(0.3,0.5,0),0.3,"m",1,2);
-+ gr->EndGroup();
-+ gr->StartGroup("Water_H_1");
-+ gr->Sphere(mglPoint(0.3,0.5,0),0.25,"g");
-+ gr->EndGroup();
-+ gr->StartGroup("Water_Cloud_2");
-+ gr->Drop(mglPoint(0,0,0),mglPoint(0.3,-0.5,0),0.3,"m",1,2);
-+ gr->EndGroup();
-+ gr->StartGroup("Water_H_2");
-+ gr->Sphere(mglPoint(0.3,-0.5,0),0.25,"g");
-+ gr->EndGroup();
-+ gr->EndGroup();
-+
-+ gr->SubPlot(2,2,2);
-+ gr->StartGroup("Oxygen");
-+ gr->StartGroup("OxygenLabel");
-+ gr->Text(mglPoint(0,1.2),"Oxygen, O_2",0,-3);
-+ gr->EndGroup();
-+ gr->Rotate(60,120);
-+ gr->Drop(mglPoint(0,0.5,0),mglPoint(0,-0.3,0),0.3,"m",1,2);
-+ gr->Sphere(mglPoint(0,0.5,0),0.25,"r");
-+ gr->Drop(mglPoint(0,-0.5,0),mglPoint(0,0.3,0),0.3,"m",1,2);
-+ gr->Sphere(mglPoint(0,-0.5,0),0.25,"r");
-+ gr->EndGroup();
-+
-+ gr->SubPlot(2,2,3);
-+ gr->StartGroup("Ammonia");
-+ gr->StartGroup("AmmoniaLabel");
-+ gr->Text(mglPoint(0,1.2),"Ammonia, NH_3",0,-3);
-+ gr->EndGroup();
-+ gr->Rotate(60,120);
-+ gr->Sphere(mglPoint(0,0,0),0.25,"b");
-+ gr->Drop(mglPoint(0,0,0),mglPoint(0.33,0.57,0),0.32,"n",1,2);
-+ gr->Sphere(mglPoint(0.33,0.57,0),0.25,"g");
-+ gr->Drop(mglPoint(0,0,0),mglPoint(0.33,-0.57,0),0.32,"n",1,2);
-+ gr->Sphere(mglPoint(0.33,-0.57,0),0.25,"g");
-+ gr->Drop(mglPoint(0,0,0),mglPoint(-0.65,0,0),0.32,"n",1,2);
-+ gr->Sphere(mglPoint(-0.65,0,0),0.25,"g");
-+ gr->EndGroup();
-+
-+ gr->InPlot(0,1,0,1);
-+}
-+//-----------------------------------------------------------------------------
-+void sample_ternary(mglGraph *gr)
-+{
-+ gr->Light(false); gr->Alpha(false);
-+
-+ mglData x(50),y(50),rx(10),ry(10), a(20,30);
-+ a.Modify("4*x*y");
-+ x.Modify("0.25*(1+cos(2*pi*x))");
-+ y.Modify("0.25*(1+sin(2*pi*x))");
-+ rx.Modify("rnd"); ry.Modify("(1-v)*rnd",rx);
-+
-+ gr->StartGroup("Ternary plot (a+b+c=1)"); gr->Text(mglPoint(0,1.3), "Ternary plot (a+b+c=1)"); gr->EndGroup();
-+ gr->Ternary(true);
-+ gr->StartGroup("Plot r2"); gr->Plot(x,y,"r2"); gr->EndGroup();
-+ gr->StartGroup("Plot q^ "); gr->Plot(rx,ry,"q^ "); gr->EndGroup();
-+ gr->StartGroup("Cont"); gr->Cont(a,"BbcyrR"); gr->EndGroup();
-+ gr->StartGroup("Line"); gr->Line(mglPoint(0.5,0), mglPoint(0,0.75), "g2"); gr->EndGroup();
-+ gr->StartGroup("Axis"); gr->Axis(); gr->EndGroup();
-+ gr->StartGroup("Grid"); gr->Grid("xyz","B;"); gr->EndGroup();
-+ gr->StartGroup("a comp."); gr->Label('x',"a comp.", 0); gr->EndGroup();
-+ gr->StartGroup("b comp."); gr->Label('y',"b comp.", 0); gr->EndGroup();
-+ gr->StartGroup("c comp."); gr->Label('z',"c comp.", 0); gr->EndGroup();
-+}
-+//-----------------------------------------------------------------------------
-+void sample_drops(mglGraph *gr)
-+{
-+ gr->Light(true); gr->Alpha(false);
-+
-+ gr->StartGroup("sh=0");
-+ gr->StartGroup("text sh=0"); gr->Text(mglPoint(-1,1.2),"sh=0","rC",-1); gr->EndGroup();
-+ gr->StartGroup("drop sh=0"); gr->Drop(mglPoint(-1,0),mglPoint(0,1),0.5,"r",0); gr->EndGroup();
-+ gr->EndGroup();
-+ gr->StartGroup("sh=33");
-+ gr->StartGroup("text sh=33"); gr->Text(mglPoint(-0.33,1.2),"sh=0.33","rC",-1); gr->EndGroup();
-+ gr->StartGroup("drop sh=33"); gr->Drop(mglPoint(-0.33,0),mglPoint(0,1),0.5,"r",0.33); gr->EndGroup();
-+ gr->EndGroup();
-+ gr->StartGroup("sh=67");
-+ gr->StartGroup("text sh=67"); gr->Text(mglPoint(0.33,1.2),"sh=0.67","rC",-1); gr->EndGroup();
-+ gr->StartGroup("drop sh=67"); gr->Drop(mglPoint(0.33,0),mglPoint(0,1),0.5,"r",0.67); gr->EndGroup();
-+ gr->EndGroup();
-+ gr->StartGroup("sh=1");
-+ gr->StartGroup("text sh=1"); gr->Text(mglPoint(1,1.2),"sh=1","rC",-1); gr->EndGroup();
-+ gr->StartGroup("drop sh=1"); gr->Drop(mglPoint(1,0),mglPoint(0,1),0.5,"r",1); gr->EndGroup();
-+ gr->EndGroup();
-+ gr->StartGroup("Balls");
-+ gr->Ball(mglPoint(-1,0,1),'k');
-+ gr->Ball(mglPoint(-0.33,0,1),'k');
-+ gr->Ball(mglPoint(0.33,0,1),'k');
-+ gr->Ball(mglPoint(1,0,1),'k');
-+ gr->EndGroup();
-+ gr->StartGroup("Line");
-+ gr->Line(mglPoint(-1,0,1),mglPoint(1,0,1),"b");
-+ gr->EndGroup();
-+}
-+//-----------------------------------------------------------------------------
-+void sample_fish(mglGraph *gr)
-+{
-+ gr->Light(true); gr->Alpha(false);
-+
-+ gr->Axis(mglPoint(0,0),mglPoint(1.1,1.1));
-+
-+ mglData a(10,10), b(10,10), x(10,10), y(10,10);
-+ a.Modify("0.3*x+rnd"); x.Modify("x+0.1*rnd");
-+ b.Modify("0.3*y+rnd"); y.Modify("y+0.1*rnd");
-+
-+ gr->Dew(x,y,a,b,"BbcyrR");
-+}
-+//-----------------------------------------------------------------------------
-+void sample_mirror(mglGraph *gr)
-+{
-+ gr->Light(true); gr->Alpha(false);
-+
-+ mglData a(30,40),x(30),y1(40),y2(40);
-+ a.Modify("pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)");
-+ x.Fill(-1,1); y1.Fill(0,1); y2.Fill(0,-1);
-+
-+ gr->Rotate(40,60);
-+ gr->StartGroup("Box"); gr->Box(); gr->EndGroup();
-+ gr->StartGroup("Surf");
-+ gr->StartGroup("RedSurf"); gr->Surf(x,y1,a,"r"); gr->EndGroup();
-+ gr->StartGroup("BlueSurf"); gr->Surf(x,y2,a,"b"); gr->EndGroup();
-+ gr->EndGroup();
-+}
-+//-----------------------------------------------------------------------------
-+void sample_semilog(mglGraph *gr)
-+{
-+ gr->Light(false); gr->Alpha(false);
-+
-+ mglData x(2000), y(2000);
-+ x.Modify("0.01/(x+10^(-5))"); y.Modify("sin(1/v)",x);
-+
-+ gr->Axis(mglPoint(0.01,-1),mglPoint(1000,1),mglPoint(0.01,-1));
-+ gr->Axis("lg(x)",0,0); gr->dx = 0;
-+
-+ gr->StartGroup("Box"); gr->Box(); gr->EndGroup();
-+ gr->StartGroup("Plot"); gr->Plot(x,y,"b2"); gr->EndGroup();
-+ gr->StartGroup("Axis"); gr->Axis(); gr->EndGroup();
-+ gr->StartGroup("Grid"); gr->Grid("xy","g"); gr->EndGroup();
-+ gr->StartGroup("x"); gr->Label('x',"x",0); gr->EndGroup();
-+ gr->StartGroup("y = sin 1/x"); gr->Label('y', "y = sin 1/x",0); gr->EndGroup();
-+}
-+//-----------------------------------------------------------------------------
-+void sample_loglog(mglGraph *gr)
-+{
-+// Problem!
-+ gr->Light(false); gr->Alpha(false);
-+
-+ mglData x(2000), y(2000);
-+ x.Modify("pow(10,6*x-3)"); y.Modify("sqrt(1+v^2)",x);
-+
-+ gr->Axis(mglPoint(0.001,0.1),mglPoint(1000,1000),mglPoint(0.001,0.1));
-+ gr->Axis("lg(x)","lg(y)",0); gr->dx = gr->dy = 0;
-+
-+ gr->StartGroup("Box"); gr->Box(); gr->EndGroup();
-+ gr->StartGroup("Plot"); gr->Plot(x,y,"b2"); gr->EndGroup();
-+ gr->StartGroup("Axis"); gr->Axis(); gr->EndGroup();
-+ gr->StartGroup("Grid"); gr->Grid("xy","g"); gr->EndGroup();
-+ gr->StartGroup("x"); gr->Label('x',"x",0); gr->EndGroup();
-+ gr->StartGroup("y=(1+x^2)^(1/2)"); gr->Label('y', "y=\\sqrt{1+x^2}",0); gr->EndGroup();
-+}
-+//-----------------------------------------------------------------------------
-+int sample_fit(mglGraph *gr)
-+{
-+ mglData rnd(100), in(100), res;
-+ rnd.Modify("0.4*rnd+0.1+sin(4*pi*x)", 0);
-+ in.Modify("0.3+sin(4*pi*x)", 0);
-+
-+ gr->Axis(mglPoint(-1,-2), mglPoint(1,2));
-+ gr->StartGroup("data"); gr->Plot(rnd, ". "); gr->EndGroup();
-+ gr->StartGroup("Box"); gr->Box(); gr->EndGroup();
-+
-+ float ini[3] = {1,1,3};
-+ gr->Fit(res, rnd, "a+b*sin(c*x)", "abc", ini);
-+ gr->StartGroup("fitted trendline"); gr->Plot(res, "r"); gr->EndGroup();
-+ gr->StartGroup("real trendline"); gr->Plot(in, "b"); gr->EndGroup();
-+ gr->StartGroup("fitted equation");
-+ gr->Text(mglPoint(-1, -1.3), "fitted:", "L:r", -1);
-+ gr->PutsFit(mglPoint(0, -1.8), "y = ", "C:r", -1);
-+ gr->EndGroup();
-+ gr->StartGroup("initial equation"); gr->Text(mglPoint(0, 2.2), "initial: y = 0.3+sin(2\\pi x)", "C:b", -1); gr->EndGroup();
-+
-+ return 0;
-+}
-+//-----------------------------------------------------------------------------
-+#define SAMPLE( FUNC, FNAME) \
-+ gr->DefaultPlotParam(); gr->Compression(compression); gr->VertexColor(vertex_color); \
-+ sample_ ## FUNC(gr); save(gr,#FNAME,suf,type);
-+
-+int all_samples(mglGraph *gr, const void *s)
-+{
-+ const char *suf = (const char *)s;
-+ gr->DefaultPlotParam(); gr->Compression(false); gr->VertexColor(false);
-+ sample_colors(gr); save(gr,"colors",suf,type);
-+ gr->SetScheme("BbcyrR");
-+
-+ SAMPLE(a1, sample1);
-+ SAMPLE(a2, sample2);
-+ SAMPLE(a3, sample3);
-+ SAMPLE(a4, sample4);
-+ SAMPLE(a5, sample5);
-+ SAMPLE(a6, sample6);
-+ SAMPLE(a7, sample7);
-+ SAMPLE(a8, sample8);
-+ SAMPLE(a9, sample9);
-+ SAMPLE(aa, samplea);
-+ SAMPLE(ab, sampleb);
-+ SAMPLE(ac, samplec);
-+ SAMPLE(ad, sampled);
-+ SAMPLE(ae, samplee);
-+ SAMPLE(molecule,molecule);
-+ SAMPLE(ternary, ternary);
-+ SAMPLE(fit, fit);
-+ SAMPLE(drops, drops);
-+ SAMPLE(fish, fish);
-+ SAMPLE(semilog, semilog);
-+ SAMPLE(loglog, loglog);
-+ SAMPLE(mirror, mirror);
-+
-+ gr->DefaultPlotParam(); gr->Compression(compression); gr->VertexColor(vertex_color);
-+
-+ return 0;
-+}
-+#undef SAMPLE
-+
-+static struct option longopts[] = {
-+ { "idtf", no_argument, &type, IDTF_TYPE },
-+ { "png", no_argument, &type, 0 },
-+ { "enable-vertex-color", no_argument, &vertex_color, 1 },
-+ { "disable-vertex-color", no_argument, &vertex_color, 0 },
-+ { "enable-compression", no_argument, &compression, 1 },
-+ { "disable-compression", no_argument, &compression, 0 },
-+ { "enable-pdf-transparency", no_argument, &pdftransparency, 1 },
-+ { "disable-pdf-transparency", no_argument, &pdftransparency, 0 },
-+ { "help", no_argument, NULL, 'h' },
-+ { NULL, 0, NULL, 0 }
-+};
-+
-+void usage()
-+{
-+ puts( \
-+ "idtf - output idtf\n" \
-+ "png - output png\n" \
-+ " other options affect idtf mode only and take form enable-smth or disable-smth\n" \
-+ "vertex-color - use by default per-vertex coloring or not\n" \
-+ "compression - use by default compression or not\n" \
-+ "pdf-transparency - assume that the pdf making software can set transparency for surfaces\n" \
-+ );
-+ exit(0);
-+};
-+
-+
-+//-----------------------------------------------------------------------------
-+int main(int argc,char **argv)
-+{
-+ const char *suf = "";
-+ int ch;
-+ mglGraphIDTF u3d;
-+ mglGraphZB zb;
-+ mglGraph *gr = NULL;
-+ while ((ch = getopt_long_only(argc, argv, "", longopts, NULL)) != -1)
-+ switch (ch) {
-+ case 0:
-+ break;
-+ case 'h':
-+ default:
-+ usage();
-+ }
-+
-+ if (type==IDTF_TYPE)
-+ {
-+ gr = &u3d;
-+ idtf_mode = true;
-+ }
-+ else
-+ {
-+ gr = &zb;
-+ idtf_mode = false;
-+ gr->SetSize(300,300);
-+ }
-+
-+// gr.BaseLineWidth = 2;
-+ all_samples(gr,suf);
-+ sample_transp(gr,suf);
-+ u3d.unrotate_flag = true;
-+ sample_hint(gr,suf);
-+ u3d.unrotate_flag = false;
-+ gr->Org = mglPoint(0,0,0);
-+ full_test(gr,suf);
-+
-+ return 0;
-+}
-+//-----------------------------------------------------------------------------
++#include <time.h>
++#include <locale.h>
++#include <string.h>
++#include <stdio.h>
++#include <getopt.h>
++#include <mgl/mgl_zb.h>
++#include <mgl/mgl_eps.h>
++#include <mgl/mgl_idtf.h>
++#define IDTF_TYPE 5
++int type = IDTF_TYPE;
++bool idtf_mode = true;
++int pdftransparency = 1;
++int vertex_color = 0;
++int compression = 1;
++//-----------------------------------------------------------------------------
++mglData s;
++//-----------------------------------------------------------------------------
++void save(mglGraph *gr,const char *name,const char *suf="",int type=0)
++{
++// return;
++ char buf[128];
++ switch(type)
++{
++ case 1: // EPS
++ sprintf(buf,"%s%s.eps",name,suf);
++ gr->WriteEPS(buf); break;
++ case 2: // SVG
++ sprintf(buf,"%s%s.svg",name,suf);
++ gr->WriteSVG(buf); break;
++ case 3: // PNG
++ sprintf(buf,"%s%s.png",name,suf);
++ gr->WritePNG(buf,0,true); break;
++ case 4: // JPEG
++ sprintf(buf,"%s%s.jpg",name,suf);
++ gr->WriteJPEG(buf); break;
++ case 5: // IDTF
++ sprintf(buf,"%s%s.idtf",name,suf);
++ gr->WriteIDTF(buf); break;
++ default:// PNG (no alpha)
++ sprintf(buf,"%s%s.png",name,suf);
++ gr->WritePNG(buf,0,false); break;
++}
++ puts(buf);
++}
++//-----------------------------------------------------------------------------
++int sample_colors(mglGraph *gr) // arrow styles
++{
++ gr->Face(mglPoint(-1, -1), mglPoint(-1, -0.7), mglPoint(-0.6, -1), mglPoint(-0.6, -0.7), "L#");
++ gr->Puts(mglPoint(-0.8,-0.9, 0.01), "L", "C:w", -1.4);
++ gr->Face(mglPoint(-0.6,-1), mglPoint(-0.6, -0.7), mglPoint(-0.2, -1), mglPoint(-0.2, -0.7), "E#");
++ gr->Puts(mglPoint(-0.4,-0.9, 0.01), "E", "C:w", -1.4);
++ gr->Face(mglPoint(-0.2,-1), mglPoint(-0.2, -0.7), mglPoint(0.2, -1), mglPoint(0.2, -0.7), "N#");
++ gr->Puts(mglPoint( 0, -0.9, 0.01), "N", "C:w", -1.4);
++ gr->Face(mglPoint( 0.2,-1), mglPoint(0.2, -0.7), mglPoint(0.6, -1), mglPoint(0.6, -0.7), "U#");
++ gr->Puts(mglPoint( 0.4,-0.9, 0.01), "U", "C:w", -1.4);
++ gr->Face(mglPoint( 0.6,-1), mglPoint(0.6, -0.7), mglPoint(1, -1), mglPoint(1, -0.7), "Q#");
++ gr->Puts(mglPoint( 0.8,-0.9, 0.01), "Q", "C:w", -1.4);
++ //#lenuq
++ gr->Face(mglPoint(-1, -0.7), mglPoint(-1, -0.4), mglPoint(-0.6, -0.7), mglPoint(-0.6, -0.4), "l#");
++ gr->Puts(mglPoint(-0.8,-0.6, 0.01), "l", "C:k", -1.4);
++ gr->Face(mglPoint(-0.6,-0.7), mglPoint(-0.6, -0.4), mglPoint(-0.2, -0.7), mglPoint(-0.2, -0.4), "e#");
++ gr->Puts(mglPoint(-0.4,-0.6, 0.01), "e", "C:k", -1.4);
++ gr->Face(mglPoint(-0.2,-0.7), mglPoint(-0.2, -0.4), mglPoint(0.2, -0.7), mglPoint(0.2, -0.4), "n#");
++ gr->Puts(mglPoint( 0, -0.6, 0.01), "n", "C:k", -1.4);
++ gr->Face(mglPoint( 0.2,-0.7), mglPoint(0.2, -0.4), mglPoint(0.6, -0.7), mglPoint(0.6, -0.4), "u#");
++ gr->Puts(mglPoint( 0.4,-0.6, 0.01), "u", "C:k", -1.4);
++ gr->Face(mglPoint( 0.6,-0.7), mglPoint(0.6, -0.4), mglPoint(1, -0.7), mglPoint(1, -0.4), "q#");
++ gr->Puts(mglPoint( 0.8,-0.6, 0.01), "q", "C:k", -1.4);
++ //#CMYkP
++ gr->Face(mglPoint(-1, -0.4), mglPoint(-1, -0.1), mglPoint(-0.6, -0.4), mglPoint(-0.6, -0.1), "C#");
++ gr->Puts(mglPoint(-0.8,-0.3, 0.01), "C", "C:w", -1.4);
++ gr->Face(mglPoint(-0.6,-0.4), mglPoint(-0.6, -0.1), mglPoint(-0.2, -0.4), mglPoint(-0.2, -0.1), "M#");
++ gr->Puts(mglPoint(-0.4,-0.3, 0.01), "M", "C:w", -1.4);
++ gr->Face(mglPoint(-0.2,-0.4), mglPoint(-0.2, -0.1), mglPoint(0.2, -0.4), mglPoint(0.2, -0.1), "Y#");
++ gr->Puts(mglPoint( 0, -0.3, 0.01), "Y", "C:w", -1.4);
++ gr->Face(mglPoint( 0.2,-0.4), mglPoint(0.2, -0.1), mglPoint(0.6, -0.4), mglPoint(0.6, -0.1), "k#");
++ gr->Puts(mglPoint( 0.4,-0.3, 0.01), "k", "C:w", -1.4);
++ gr->Face(mglPoint( 0.6,-0.4), mglPoint(0.6, -0.1), mglPoint(1, -0.4), mglPoint(1, -0.1), "P#");
++ gr->Puts(mglPoint( 0.8,-0.3, 0.01), "P", "C:w", -1.4);
++ //#cmywp
++ gr->Face(mglPoint(-1, -0.1), mglPoint(-1, 0.2), mglPoint(-0.6, -0.1), mglPoint(-0.6, 0.2), "c#");
++ gr->Puts(mglPoint(-0.8, 0, 0.01), "c", "C:k", -1.4);
++ gr->Face(mglPoint(-0.6,-0.1), mglPoint(-0.6, 0.2), mglPoint(-0.2, -0.1), mglPoint(-0.2, 0.2), "m#");
++ gr->Puts(mglPoint(-0.4, 0, 0.01), "m", "C:k", -1.4);
++ gr->Face(mglPoint(-0.2,-0.1), mglPoint(-0.2, 0.2), mglPoint(0.2, -0.1), mglPoint(0.2, 0.2), "y#");
++ gr->Puts(mglPoint( 0, 0, 0.01), "y", "C:k", -1.4);
++ gr->Face(mglPoint( 0.2,-0.1), mglPoint(0.2, 0.2), mglPoint(0.6, -0.1), mglPoint(0.6, 0.2), "w#");
++ gr->Puts(mglPoint( 0.4, 0, 0.01), "w", "C:k", -1.4);
++ gr->Face(mglPoint( 0.6,-0.1), mglPoint(0.6, 0.2), mglPoint(1, -0.1), mglPoint(1, 0.2), "p#");
++ gr->Puts(mglPoint( 0.8, 0, 0.01), "p", "C:k", -1.4);
++ //#BGRHW
++ gr->Face(mglPoint(-1, 0.2), mglPoint(-1, 0.5), mglPoint(-0.6, 0.2), mglPoint(-0.6, 0.5), "B#");
++ gr->Puts(mglPoint(-0.8, 0.3, 0.01), "B", "C:w", -1.4);
++ gr->Face(mglPoint(-0.6, 0.2), mglPoint(-0.6, 0.5), mglPoint(-0.2, 0.2), mglPoint(-0.2, 0.5), "G#");
++ gr->Puts(mglPoint(-0.4, 0.3, 0.01), "G", "C:w", -1.4);
++ gr->Face(mglPoint(-0.2, 0.2), mglPoint(-0.2, 0.5), mglPoint(0.2, 0.2), mglPoint(0.2, 0.5), "R#");
++ gr->Puts(mglPoint( 0, 0.3, 0.01), "R", "C:w", -1.4);
++ gr->Face(mglPoint( 0.2, 0.2), mglPoint(0.2, 0.5), mglPoint(0.6, 0.2), mglPoint(0.6, 0.5), "H#");
++ gr->Puts(mglPoint( 0.4, 0.3, 0.01), "H", "C:w", -1.4);
++ gr->Face(mglPoint( 0.6, 0.2), mglPoint(0.6, 0.5), mglPoint(1, 0.2), mglPoint(1, 0.5), "W#");
++ gr->Puts(mglPoint( 0.8, 0.3, 0.01), "W", "C:w", -1.4);
++ //#bgrhw
++ gr->Face(mglPoint(-1, 0.5), mglPoint(-1, 0.8), mglPoint(-0.6, 0.5), mglPoint(-0.6, 0.8), "b#");
++ gr->Puts(mglPoint(-0.8, 0.6, 0.01), "b", "C:k", -1.4);
++ gr->Face(mglPoint(-0.6, 0.5), mglPoint(-0.6, 0.8), mglPoint(-0.2, 0.5), mglPoint(-0.2, 0.8), "g#");
++ gr->Puts(mglPoint(-0.4, 0.6, 0.01), "g", "C:k", -1.4);
++ gr->Face(mglPoint(-0.2, 0.5), mglPoint(-0.2, 0.8), mglPoint(0.2, 0.5), mglPoint(0.2, 0.8), "r#");
++ gr->Puts(mglPoint( 0, 0.6, 0.01), "r", "C:k", -1.4);
++ gr->Face(mglPoint( 0.2, 0.5), mglPoint(0.2, 0.8), mglPoint(0.6, 0.5), mglPoint(0.6, 0.8), "h#");
++ gr->Puts(mglPoint( 0.4, 0.6, 0.01), "h", "C:k", -1.4);
++ gr->Face(mglPoint( 0.6, 0.5), mglPoint(0.6, 0.8), mglPoint(1, 0.5), mglPoint(1, 0.8), "w#");
++ gr->Puts(mglPoint( 0.8, 0.6, 0.01), "w", "C:k", -1.4);
++ //#brighted
++ gr->Face(mglPoint(-1, 0.8), mglPoint(-1, 1.1), mglPoint(-0.6, 0.8), mglPoint(-0.6, 1.1), "r1#");
++ gr->Puts(mglPoint(-0.8, 0.9, 0.01), "r1", "C:w", -1.4);
++ gr->Face(mglPoint(-0.6, 0.8), mglPoint(-0.6, 1.1), mglPoint(-0.2, 0.8), mglPoint(-0.2, 1.1), "r3#");
++ gr->Puts(mglPoint(-0.4, 0.9, 0.01), "r3", "C:w", -1.4);
++ gr->Face(mglPoint(-0.2, 0.8), mglPoint(-0.2, 1.1), mglPoint(0.2, 0.8), mglPoint(0.2, 1.1), "r5#");
++ gr->Puts(mglPoint( 0, 0.9, 0.01), "r5", "C:k", -1.4);
++ gr->Face(mglPoint( 0.2, 0.8), mglPoint(0.2, 1.1), mglPoint(0.6, 0.8), mglPoint(0.6, 1.1), "r7#");
++ gr->Puts(mglPoint( 0.4, 0.9, 0.01), "r7", "C:k", -1.4);
++ gr->Face(mglPoint( 0.6, 0.8), mglPoint(0.6, 1.1), mglPoint(1, 0.8), mglPoint(1, 1.1), "r9#");
++ gr->Puts(mglPoint( 0.8, 0.9, 0.01), "r9", "C:k", -1.4);
++ return 0;
++}
++//-----------------------------------------------------------------------------
++void sample_ae(mglGraph *gr) // math text
++{
++ gr->StartGroup("Formula");
++ gr->Puts(mglPoint(0), "\\sqrt{\\frac{\\alpha^{\\gamma^2}+\\overset 1{\\big\\infty}}{\\sqrt3{2+b}}}",
++ 0, -4);
++ gr->EndGroup();
++}
++//-----------------------------------------------------------------------------
++void sample_ad(mglGraph *gr) // arrow styles
++{
++ gr->VertexColor(false); gr->Compression(false); // anything is black anyway and compression is bad for text
++
++ float a=0.1,b=0.4,c=0.5;
++ gr->Line(mglPoint(a,1),mglPoint(b,1),"k-A"); gr->Puts(mglPoint(c,1),"Style 'A' or 'A\\_'","rL");
++ gr->Line(mglPoint(a,0.8),mglPoint(b,0.8),"k-V"); gr->Puts(mglPoint(c,0.8),"Style 'V' or 'V\\_'","rL");
++ gr->Line(mglPoint(a,0.6),mglPoint(b,0.6),"k-K"); gr->Puts(mglPoint(c,0.6),"Style 'K' or 'K\\_'","rL");
++ gr->Line(mglPoint(a,0.4),mglPoint(b,0.4),"k-I"); gr->Puts(mglPoint(c,0.4),"Style 'I' or 'I\\_'","rL");
++ gr->Line(mglPoint(a,0.2),mglPoint(b,0.2),"k-D"); gr->Puts(mglPoint(c,0.2),"Style 'D' or 'D\\_'","rL");
++ gr->Line(mglPoint(a,0),mglPoint(b,0),"k-S"); gr->Puts(mglPoint(c,0),"Style 'S' or 'S\\_'","rL");
++ gr->Line(mglPoint(a,-0.2),mglPoint(b,-0.2),"k-O"); gr->Puts(mglPoint(c,-0.2),"Style 'O' or 'O\\_'","rL");
++ gr->Line(mglPoint(a,-0.4),mglPoint(b,-0.4),"k-T"); gr->Puts(mglPoint(c,-0.4),"Style 'T' or 'T\\_'","rL");
++ gr->Line(mglPoint(a,-0.6),mglPoint(b,-0.6),"k-_"); gr->Puts(mglPoint(c,-0.6),"Style '\\_' or none","rL");
++ gr->Line(mglPoint(a,-0.8),mglPoint(b,-0.8),"k-AS"); gr->Puts(mglPoint(c,-0.8),"Style 'AS'","rL");
++ gr->Line(mglPoint(a,-1),mglPoint(b,-1),"k-_A"); gr->Puts(mglPoint(c,-1),"Style '\\_A'","rL");
++
++ a=-1; b=-0.7; c=-0.6;
++ gr->Line(mglPoint(a,1),mglPoint(b,1),"kAA"); gr->Puts(mglPoint(c,1),"Style 'AA'","rL");
++ gr->Line(mglPoint(a,0.8),mglPoint(b,0.8),"kVV"); gr->Puts(mglPoint(c,0.8),"Style 'VV'","rL");
++ gr->Line(mglPoint(a,0.6),mglPoint(b,0.6),"kKK"); gr->Puts(mglPoint(c,0.6),"Style 'KK'","rL");
++ gr->Line(mglPoint(a,0.4),mglPoint(b,0.4),"kII"); gr->Puts(mglPoint(c,0.4),"Style 'II'","rL");
++ gr->Line(mglPoint(a,0.2),mglPoint(b,0.2),"kDD"); gr->Puts(mglPoint(c,0.2),"Style 'DD'","rL");
++ gr->Line(mglPoint(a,0),mglPoint(b,0),"kSS"); gr->Puts(mglPoint(c,0),"Style 'SS'","rL");
++ gr->Line(mglPoint(a,-0.2),mglPoint(b,-0.2),"kOO"); gr->Puts(mglPoint(c,-0.2),"Style 'OO'","rL");
++ gr->Line(mglPoint(a,-0.4),mglPoint(b,-0.4),"kTT"); gr->Puts(mglPoint(c,-0.4),"Style 'TT'","rL");
++ gr->Line(mglPoint(a,-0.6),mglPoint(b,-0.6),"k-__"); gr->Puts(mglPoint(c,-0.6),"Style '\\_\\_'","rL");
++ gr->Line(mglPoint(a,-0.8),mglPoint(b,-0.8),"k-VA"); gr->Puts(mglPoint(c,-0.8),"Style 'VA'","rL");
++ gr->Line(mglPoint(a,-1),mglPoint(b,-1),"k-AV"); gr->Puts(mglPoint(c,-1),"Style 'AV'","rL");
++}
++//-----------------------------------------------------------------------------
++void sample_ac(mglGraph *gr) // error boxes
++{
++ mglData x(10), y(10), ex(10), ey(10), y0(50);
++ x.Modify("2*x-1 + 0.2*rnd-0.1");
++ y.Modify("(2*x-1)^2 + 0.2*rnd-0.1");
++ y0.Modify("(2*x-1)^2");
++ ex.Modify("0.2");
++ ey.Modify("0.1");
++
++ gr->SubPlot(2,2,0);
++ gr->StartGroup("Random y");
++ gr->StartGroup("Random y Error"); gr->Error(y,ey,"ko"); gr->EndGroup();
++ gr->StartGroup("Random y Plot"); gr->Plot(y0,"r"); gr->EndGroup();
++ gr->StartGroup("Random y Axis"); gr->Axis(); gr->EndGroup();
++ gr->StartGroup("Random y Label"); gr->Text(mglPoint(0,1.2,0),"Random {\\i y}"); gr->EndGroup();
++ gr->EndGroup();
++
++ gr->SubPlot(2,2,1);
++ gr->StartGroup("Random x,y");
++ gr->StartGroup("Random x,y Error"); gr->Error(x,y,ex,"ko"); gr->EndGroup();
++ gr->StartGroup("Random x,y Plot"); gr->Plot(y0,"r"); gr->EndGroup();
++ gr->StartGroup("Random x,y Axis"); gr->Axis(); gr->EndGroup();
++ gr->StartGroup("Random x,y Label"); gr->Text(mglPoint(0,1.2,0),"Random {\\i x, y}"); gr->EndGroup();
++ gr->EndGroup();
++
++ gr->SubPlot(2,2,2);
++ gr->StartGroup("Random x,y and 2d boxes");
++ gr->StartGroup("Random x,y and 2d boxes Error"); gr->Error(x,y,ey,ey,"ko"); gr->EndGroup();
++ gr->StartGroup("Random x,y and 2d boxes Plot"); gr->Plot(y0,"r"); gr->EndGroup();
++ gr->StartGroup("Random x,y and 2d boxes Axis"); gr->Axis(); gr->EndGroup();
++ gr->StartGroup("Random x,y and 2d boxes Label"); gr->Text(mglPoint(0,1.2,0),"Random {\\i x, y} and 2d boxes"); gr->EndGroup();
++ gr->EndGroup();
++
++ gr->SubPlot(2,2,3);
++ gr->StartGroup("Random point in 3d space");
++ gr->StartGroup("Random point in 3d space Label"); gr->Text(mglPoint(0,1.2,0),"Random point in 3d space"); gr->EndGroup();
++ gr->Rotate(40,60);
++ gr->StartGroup("Random point in 3d space Error");
++ for(int i=0;i<10;i++)
++ gr->Error(mglPoint(mgl_rnd()-0.5,mgl_rnd()-0.5,mgl_rnd()-0.5),
++ mglPoint(0.1,0.1,0.1),"bo");
++ gr->EndGroup();
++ gr->StartGroup("Random point in 3d space Axis"); gr->Axis(); gr->EndGroup();
++ gr->EndGroup();
++ gr->InPlot(0,1,0,1);
++}
++//-----------------------------------------------------------------------------
++void sample_ab(mglGraph *gr) // Gaussian beam
++{
++ gr->VertexColor(false); gr->Compression(false); // vertex color prevents transparency (unless set in PDF) and compression is bad it
++
++ gr->Alpha(true); gr->Light(true); gr->Light(0,mglPoint(0,0,1));
++
++ mglData a(30,30,30),b(30,30,30);
++ a.Modify("exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))");
++ b.Modify("16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)");
++ gr->CAxis(0,1);
++
++ gr->SubPlot(2,2,0); gr->Rotate(40,60);
++ gr->StartGroup("Surf3 Group");
++ gr->StartGroup("Surf3"); gr->Surf3(a,"wgk"); gr->EndGroup();
++ gr->StartGroup("Surf3 Box"); gr->Box(); gr->EndGroup();
++ gr->EndGroup();
++
++ gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1),mglPoint(0,0,0));
++ gr->CAxis(0,1);
++ // vertex color prevents transparency, unless u3dpreview sets it in PDF for the whole surface
++ if (pdftransparency)
++ {
++ gr->VertexColor(true);
++ gr->Alpha(false); // transparency will be set in PDF, not in u3d
++ gr->Light(false); // IMHO lighting is not necessary for this model
++ }
++ gr->SubPlot(2,2,1); gr->Rotate(40,60);
++ gr->StartGroup("DensA Group");
++ gr->StartGroup("DensA"); gr->DensA(a); gr->EndGroup();
++ gr->StartGroup("DensA Axis"); gr->Axis(); gr->EndGroup();
++ gr->StartGroup("DensA Box"); gr->Box(); gr->EndGroup();
++ gr->EndGroup();
++ gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1));
++ gr->CAxis(0,1);
++ if (pdftransparency) // put settings back
++ {
++ gr->Alpha(true);
++ gr->Light(true);
++ }
++
++ gr->SubPlot(2,2,2); gr->Rotate(40,60);
++ gr->StartGroup("ClodQ Group");
++ // Clouds not supported in u3d
++ if ( idtf_mode )
++ gr->Text(mglPoint(0,0,0),"no clouds in u3d");
++ else
++ gr->CloudQ(a);
++ gr->StartGroup("CloudQ Box"); gr->Box(); gr->EndGroup();
++ gr->EndGroup();
++
++ gr->VertexColor(false); // for variable transparency the only way is to disable smooth (per-vertex) coloring
++ gr->SubPlot(2,2,3); gr->Rotate(40,60);
++ gr->StartGroup("Surf3A Group");
++ gr->StartGroup("Surf3A"); gr->Surf3A(b,a,"q"); gr->EndGroup();
++ gr->StartGroup("Surf3A Box"); gr->Box(); gr->EndGroup();
++ gr->EndGroup();
++}
++//-----------------------------------------------------------------------------
++void sample_aa(mglGraph *gr) // flag #
++{
++ gr->Alpha(true); gr->Light(true); gr->Light(0,mglPoint(0,0,1));
++ mglData a(30,20);
++ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
++
++ gr->SubPlot(2,2,0); gr->Rotate(40,60);
++ // vertex color prevents transparency, unless u3dpreview sets it in PDF for the whole surface
++ if (idtf_mode && pdftransparency)
++ {
++ gr->VertexColor(true);
++ gr->Alpha(false); // transparency will be set in PDF, not in u3d
++ }
++ else
++ {
++ gr->VertexColor(false);
++ }
++ gr->StartGroup("Surf"); gr->Surf(a,"BbcyrR#"); gr->EndGroup();
++ gr->StartGroup("Surf Box"); gr->Box(); gr->EndGroup();
++ gr->SubPlot(2,2,1); gr->Rotate(40,60);
++ gr->Light(false); // IMHO lighting is not necessary for this model
++ gr->StartGroup("Dens"); gr->Dens(a,"BbcyrR#"); gr->EndGroup();
++ gr->StartGroup("Dens Box"); gr->Box(); gr->EndGroup();
++ gr->SubPlot(2,2,2); gr->Rotate(40,60);
++ gr->StartGroup("Cont"); gr->Cont(a,"BbcyrR#"); gr->EndGroup();
++ gr->StartGroup("Cont Box"); gr->Box(); gr->EndGroup();
++ gr->SubPlot(2,2,3); gr->Rotate(40,60);
++ gr->StartGroup("Axial"); gr->Axial(a,"BbcyrR#"); gr->EndGroup();
++ gr->StartGroup("Axial Box"); gr->Box(); gr->EndGroup();
++ if (idtf_mode && !pdftransparency) // switch lighting back
++ {
++ gr->Light(true);
++ gr->SubPlot(2,2,0); gr->Rotate(40,60);
++ }
++}
++//-----------------------------------------------------------------------------
++void sample_a9(mglGraph *gr) // 2d plot
++{
++ gr->Light(true); gr->Light(0,mglPoint(0,0,1));
++
++ gr->VertexColor(true);
++ mglData a0(50,40);
++ a0.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
++ gr->SubPlot(2,2,0); gr->Rotate(60,40);
++ gr->Surf(a0);
++ gr->StartGroup("UL Box"); gr->Box(); gr->EndGroup();
++
++ mglData x(50,40),y(50,40),z(50,40);
++ x.Modify("0.8*sin(2*pi*x)*sin(pi*y)");
++ y.Modify("0.8*cos(2*pi*x)*sin(pi*y)");
++ z.Modify("0.8*cos(pi*y)");
++ gr->SubPlot(2,2,1); gr->Rotate(60,40);
++ gr->StartGroup("Sphere"); gr->Surf(x,y,z,"BbwrR"); gr->EndGroup();
++ gr->StartGroup("UR Box"); gr->Box(); gr->EndGroup();
++
++ mglData a1(50,40,3);
++ a1.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
++ a1.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*sin(3*pi*(x*y))",1);
++ a1.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",2);
++ gr->SubPlot(2,2,2); gr->Rotate(60,40);
++ gr->Compression(false);
++ if (idtf_mode && pdftransparency)
++ {
++ gr->VertexColor(true);
++ gr->Alpha(false); // transparency will be set in PDF, not in u3d
++ }
++ else
++ {
++ gr->VertexColor(false);
++ gr->Alpha(true);
++ }
++ gr->Surf(a1);
++ gr->StartGroup("LL Box"); gr->Box(); gr->EndGroup();
++
++ gr->SubPlot(2,2,3); gr->Rotate(60,40);
++ if (idtf_mode && pdftransparency)
++ gr->Light(false); // IMHO lighting is not necessary for this model
++ gr->Dens(a1);
++ gr->StartGroup("LR Box"); gr->Box(); gr->EndGroup();
++ if (idtf_mode && pdftransparency)
++ gr->Light(true);
++ if (idtf_mode && !pdftransparency)
++ { gr->SubPlot(1,1,0); gr->Rotate(60,40); } // Position global light
++}
++//-----------------------------------------------------------------------------
++void sample_a8(mglGraph *gr) // 1d plot
++{
++ mglData y0(50); y0.Modify("sin(pi*(2*x-1))");
++
++ gr->SubPlot(2,2,0);
++ gr->Plot(y0);
++ gr->StartGroup("UL Box"); gr->Box(); gr->EndGroup();
++
++ mglData y1(50,2);
++ y1.Modify("sin(pi*2*x-pi)"); y1.Modify("cos(pi*2*x-pi)/2",1);
++ mglData x(50); x.Modify("cos(pi*2*x-pi)");
++
++ gr->SubPlot(2,2,1);
++ gr->Plot(y1);
++ gr->Plot(x,y0,"Y+");
++ gr->Plot2(y1,"q|");
++ gr->StartGroup("UR Box"); gr->Box(); gr->EndGroup();
++
++ mglData z(50); z.Modify("2*x-1");
++ mglData y2(10,3); y2.Modify("cos(pi*(2*x-1-y))");
++ y2.Modify("2*x-1",2);
++
++ gr->SubPlot(2,2,2); gr->Rotate(60,40);
++ gr->Plot(x,y0,z);
++ gr->StartGroup("LL Box"); gr->Box(); gr->EndGroup();
++ gr->Plot3(y2,"bo ");
++
++ gr->SubPlot(2,2,3); gr->Rotate(60,40);
++ gr->Bars(x,y0,z,"ri");
++ gr->StartGroup("LR Box"); gr->Box(); gr->EndGroup();
++
++ gr->InPlot(0,1,0,1);
++}
++//-----------------------------------------------------------------------------
++void sample_a7(mglGraph *gr) // smoothing
++{
++ mglData y0(30),y1,y2,y3;
++ y0.Modify("0.4*sin(2*pi*x) + 0.3*cos(3*pi*x) - 0.4*sin(4*pi*x)+0.2*rnd");
++
++ y1=y0; y1.Smooth(SMOOTH_LINE_3);
++ y2=y0; y2.Smooth(SMOOTH_LINE_5);
++ y3=y0; y3.Smooth(SMOOTH_QUAD_5);
++
++ gr->StartGroup("NONE"); gr->Plot(y0,"k"); gr->EndGroup(); gr->AddLegend("NONE","k");
++ gr->StartGroup("LINE_3"); gr->Plot(y1,"r"); gr->EndGroup(); gr->AddLegend("LINE\\_3","r");
++ gr->StartGroup("LINE_5"); gr->Plot(y2,"g"); gr->EndGroup(); gr->AddLegend("LINE\\_5","g");
++ gr->StartGroup("QUAD_5"); gr->Plot(y3,"b"); gr->EndGroup(); gr->AddLegend("QUAD\\_5","b");
++ if (idtf_mode) // Problem in idtf, the white background and tet take the same place
++ gr->LegendBox = false;
++ gr->StartGroup("Legend"); gr->Legend(); gr->EndGroup();
++ gr->StartGroup("Box"); gr->Box(); gr->EndGroup();
++}
++//-----------------------------------------------------------------------------
++void sample_a6(mglGraph *gr) // differentiate
++{
++ gr->VertexColor(true);
++ mglData a(30,40); a.Modify("x*y");
++ gr->Axis(mglPoint(0,0,0),mglPoint(1,1,1));
++
++ gr->SubPlot(2,2,0); gr->Rotate(60,40);
++ gr->StartGroup("Function");
++ gr->StartGroup("Function Surf"); gr->Surf(a); gr->EndGroup();
++ gr->StartGroup("Function Box"); gr->Box(); gr->EndGroup();
++ gr->StartGroup("Function Label"); gr->Text(mglPoint(0.7,1,1.2),"a(x,y)"); gr->EndGroup();
++ gr->EndGroup();
++
++ gr->SubPlot(2,2,1); gr->Rotate(60,40);
++ a.Diff("x");
++ gr->StartGroup("Diff");
++ gr->StartGroup("Diff Surf"); gr->Surf(a); gr->EndGroup();
++ gr->StartGroup("Diff Box"); gr->Box(); gr->EndGroup();
++ gr->StartGroup("Diff Label"); gr->Text(mglPoint(0.7,1,1.2),"da/dx"); gr->EndGroup();
++ gr->EndGroup();
++
++ gr->SubPlot(2,2,2); gr->Rotate(60,40);
++ a.Integral("xy");
++ gr->StartGroup("Integral");
++ gr->StartGroup("Integral Surf"); gr->Surf(a); gr->EndGroup();
++ gr->StartGroup("Integral Box"); gr->Box(); gr->EndGroup();
++ gr->StartGroup("Integral Label"); gr->Text(mglPoint(0.7,1,1.2),"\\int da/dx dxdy"); gr->EndGroup();
++ gr->EndGroup();
++
++ gr->SubPlot(2,2,3); gr->Rotate(60,40);
++ a.Diff2("y");
++ gr->StartGroup("Diff2");
++ gr->StartGroup("Diff2 Surf"); gr->Surf(a); gr->EndGroup();
++ gr->StartGroup("Diff2 Box"); gr->Box(); gr->EndGroup();
++ gr->StartGroup("Diff2 Label"); gr->Text(mglPoint(0.7,1,1.2),"\\int {d^2}a/dxdy dx"); gr->EndGroup();
++ gr->EndGroup();
++}
++//-----------------------------------------------------------------------------
++void sample_a5(mglGraph *gr) // pen styles
++{
++ if (idtf_mode)
++ gr->Puts(mglPoint(0,1.2),"line styles not supported","rL");
++ gr->Line(mglPoint(0, 1.0,0),mglPoint(0.3, 1.0,0),"k-"); gr->Puts(mglPoint(0.4, 1.0),"Solid '-'","rL");
++ gr->Line(mglPoint(0, 0.7,0),mglPoint(0.3, 0.7,0),"k|"); gr->Puts(mglPoint(0.4, 0.7),"Dash '|'","rL");
++ gr->Line(mglPoint(0, 0.4,0),mglPoint(0.3, 0.4,0),"k;"); gr->Puts(mglPoint(0.4, 0.4),"Small dash ';'","rL");
++ gr->Line(mglPoint(0, 0.1,0),mglPoint(0.3, 0.1,0),"kj"); gr->Puts(mglPoint(0.4, 0.1),"Dash-dot 'j'","rL");
++ gr->Line(mglPoint(0,-0.2,0),mglPoint(0.3,-0.2,0),"ki"); gr->Puts(mglPoint(0.4,-0.2),"Small dash-dot 'i'","rL");
++ gr->Line(mglPoint(0,-0.5,0),mglPoint(0.3,-0.5,0),"k:"); gr->Puts(mglPoint(0.4,-0.5),"Dots ':'","rL");
++ gr->Line(mglPoint(0,-0.8,0),mglPoint(0.3,-0.8,0),"k "); gr->Puts(mglPoint(0.4,-0.8),"None ' '","rL");
++
++ gr->Mark(mglPoint(-1, 1.2,0),'.'); gr->Puts(mglPoint(-0.7, 1.2),"'.'","rL");
++ gr->Mark(mglPoint(-1, 0.9,0),'+'); gr->Puts(mglPoint(-0.7, 0.9),"'+'","rL");
++ gr->Mark(mglPoint(-1, 0.6,0),'x'); gr->Puts(mglPoint(-0.7, 0.6),"'x'","rL");
++ gr->Mark(mglPoint(-1, 0.3,0),'*'); gr->Puts(mglPoint(-0.7, 0.3),"'*'","rL");
++ gr->Mark(mglPoint(-1, 0.0,0),'s'); gr->Puts(mglPoint(-0.7, 0.0),"'s'","rL");
++ gr->Mark(mglPoint(-1,-0.3,0),'d'); gr->Puts(mglPoint(-0.7,-0.3),"'d'","rL");
++ gr->Mark(mglPoint(-1,-0.6,0),'o'); gr->Puts(mglPoint(-0.7,-0.6),"'o'","rL");
++ gr->Mark(mglPoint(-1,-0.9,0),'^'); gr->Puts(mglPoint(-0.7,-0.9),"'\\^'","rL");
++ gr->Mark(mglPoint(-1,-1.2,0),'v'); gr->Puts(mglPoint(-0.7,-1.2),"'v'","rL");
++}
++//-----------------------------------------------------------------------------
++void sample_a4(mglGraph *gr) // font features
++{
++// setlocale(LC_CTYPE, "ru_RU.cp1251");
++// gr->Putsw(mglPoint(0,1),L"Text can be in english � � �������");
++ gr->Putsw(mglPoint(0,1),L"Text can be in ASCII and in Unicode");
++ gr->Puts(mglPoint(0,0.6),"It can be \\wire{wire} and \\big{big}");
++ gr->Puts(mglPoint(0,0.2),"One can change style in string: "
++ "\\b{bold}, \\i{italic, \\b{both}}");
++ gr->Puts(mglPoint(0,-0.2),"Easy to \\a{overline} or "
++ "\\u{underline}");
++ gr->Puts(mglPoint(0,-0.6),"Easy to change indexes ^{up} _{down} @{center}");
++ gr->Puts(mglPoint(0,-1),"It parse TeX: \\int \\alpha \\cdot "
++ "\\sqrt3{sin(\\pi x)^2 + \\gamma_{i_k}} dx");
++}
++//-----------------------------------------------------------------------------
++void sample_a3(mglGraph *gr) // curvilinear coordinates
++{
++ mglData x(50),y(50),z(50);
++ y.Fill(0.5,0.5);
++ x.Fill(-1,1); // create data arrays
++
++ gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1),mglPoint(-1,1,-1));
++ gr->dx = gr->dy = -5; gr->dz = 0.5; // set tick step to 0.5
++
++ gr->SubPlot(2,2,0);
++ gr->StartGroup("Cartesian");
++ gr->Rotate(60,40);
++ gr->StartGroup("Cartesian Plot"); gr->Plot(x,y,z,"r2"); gr->EndGroup();
++ gr->StartGroup("Cartesian Axis"); gr->Axis(); gr->EndGroup();
++ gr->StartGroup("Cartesian Grid"); gr->Grid(); gr->EndGroup();
++ gr->StartGroup("Cartesian Label"); gr->Text(mglPoint(0,1.3,1),"Cartesian"); gr->EndGroup();
++ gr->EndGroup();
++
++ gr->SubPlot(2,2,1);
++ gr->StartGroup("Cylindrical");
++ gr->Axis("y*sin(pi*x)","y*cos(pi*x)",0);
++ gr->Rotate(60,40);
++ gr->StartGroup("Cylindrical Plot"); gr->Plot(x,y,z,"r2"); gr->EndGroup();
++ gr->StartGroup("Cylindrical Axis"); gr->Axis(); gr->EndGroup();
++ gr->StartGroup("Cylindrical Grid"); gr->Grid(); gr->EndGroup();
++ gr->StartGroup("Cylindrical Label"); gr->Text(mglPoint(0,1.3,1),"Cylindrical"); gr->EndGroup();
++ gr->EndGroup();
++
++ gr->SubPlot(2,2,2);
++ gr->StartGroup("Parabolic");
++ gr->Rotate(60,40);
++ gr->Axis("2*y*x","y*y - x*x",0);
++ gr->StartGroup("Parabolic Plot"); gr->Plot(x,y,z,"r2"); gr->EndGroup();
++ gr->StartGroup("Parabolic Axis"); gr->Axis(); gr->EndGroup();
++ gr->StartGroup("Parabolic Grid"); gr->Grid(); gr->EndGroup();
++ gr->StartGroup("Parabolic Label"); gr->Text(mglPoint(0,1.3,1),"Parabolic"); gr->EndGroup();
++ gr->EndGroup();
++
++ gr->SubPlot(2,2,3);
++ gr->StartGroup("Spiral");
++ gr->Rotate(60,40);
++ gr->Axis("y*sin(pi*x)","y*cos(pi*x)","x+z");
++ gr->StartGroup("Spiral Plot"); gr->Plot(x,y,z,"r2"); gr->EndGroup();
++ gr->StartGroup("Spiral Axis"); gr->Axis(); gr->EndGroup();
++ gr->StartGroup("Spiral Grid"); gr->Grid(); gr->EndGroup();
++ gr->StartGroup("Spiral Label"); gr->Text(mglPoint(0,1.3,1),"Spiral"); gr->EndGroup();
++ gr->EndGroup();
++}
++//-----------------------------------------------------------------------------
++void sample_a2(mglGraph *gr) // axis and grid
++{
++ gr->SubPlot(2,2,0);
++ gr->dx = gr->dy = 0.5; // set tick step to 0.5
++ gr->NSx = gr->NSy = 3; // and draw 3 subticks
++ gr->Box(); // should be after change dx,dy,dz
++ gr->Axis("xy");
++ gr->Grid();
++ gr->Text(mglPoint(0,1.3,1),"Axis and grid","rC");
++
++ gr->dx = gr->dy = -5; // restore back
++ gr->NSx = gr->NSy = 0;
++ gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1),mglPoint(0,0,0));
++
++ gr->dx = gr->dy = gr->dz = -5; // restore back
++ gr->SubPlot(2,2,1);
++ gr->Rotate(60,40);
++ gr->Axis();
++ gr->Label('x',"x"); gr->Flush();
++ gr->Label('y',"y"); gr->Flush();
++ gr->Label('z',"z"); gr->Flush();
++ gr->Text(mglPoint(0,0,1.5),"Axis and labels");
++
++ gr->dx = gr->dy = gr->dz = 0.2; // too low step of ticks
++ gr->SubPlot(2,2,2);
++ gr->Rotate(60,40);
++ gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1),mglPoint(-1,-1,-1));
++ gr->Axis();
++ gr->Grid();
++ gr->Text(mglPoint(0,0,1.5),"Shift origin and add grid");
++ gr->Text(mglPoint(0,0,1.2),"(note, too many ticks)");
++
++ gr->SubPlot(2,2,3);
++ gr->Rotate(60,40);
++ gr->dz = gr->dy = -5; // decrease number of ticks
++ gr->Axis("yz");
++ gr->Label('y',"Y axis",0); gr->Flush();
++ gr->Label('z',"Z axis",0); gr->Flush();
++ gr->Text(mglPoint(0,0,1.5),"Remove X axis, and","rC");
++ gr->Text(mglPoint(0,0,1.2),"decrease number of ticks");
++
++ gr->InPlot(0,1,0,1);
++}
++//-----------------------------------------------------------------------------
++void sample_a1(mglGraph *gr) // transformation
++{
++ gr->SubPlot(2,2,0); // just new axis without rotation and aspects
++ gr->Box();
++ gr->Text(mglPoint(-1,1.1,1),"Just box","rL");
++ gr->InPlot(0.2,0.5,0.7,1);
++ gr->Box();
++ gr->Text(mglPoint(0,1.2,1),"InPlot example");
++ gr->SubPlot(2,2,1); // new axis with aspect and rotation
++ gr->Rotate(60,40);
++ gr->Aspect(1,1,1);
++ gr->Box();
++ gr->Text(mglPoint(1,1,1.5),"Rotate only","rR");
++ gr->SubPlot(2,2,2); // aspect in other direction
++ gr->Rotate(60,40);
++ gr->Aspect(1,1,2);
++ gr->Box();
++ gr->Text(mglPoint(0,0,2),"Aspect and Rotate");
++ gr->SubPlot(2,2,3); // rotation before aspect. INCORRECT !!!
++ gr->Rotate(60,40);
++ gr->Aspect(1,2,2);
++ gr->Box();
++ gr->Text(mglPoint(0,0,1.5),"Aspect in other direction");
++
++ gr->InPlot(0,1,0,1);
++}
++
++#define START(vertex_color) gr->Clf(); gr->VertexColor(vertex_color); \
++ gr->StartGroup("Box"); gr->Box(); gr->EndGroup();
++#define SAVE(name) save(gr,#name, suf,type);
++
++//-----------------------------------------------------------------------------
++int full_test(mglGraph *gr, const void *s) // full test (in PNG)
++{
++ const char *suf = (const char *)s;
++ mglData pnts("hotdogs.pts");
++ pnts.Norm(-1,1,true);
++ mglData a(50,40), b(50,40), c(60,50,40), d(60,50,40);
++ mglData y(50,3), x(50), x2(50), y1(50), y2(50), f(50,3);
++ mglData ex(10,10,10), ey(10,10,10), ez(10,10,10);
++
++/* int i,j,k;
++ float xx,yy,zz,dd;
++ for(i=0;i<10;i++) for(j=0;j<10;j++) for(k=0;k<10;k++)
++{
++ xx = i*0.1-0.5; yy = j*0.1-0.5; zz = k*0.1-0.35; dd = k*0.1-0.65;
++ ex.a[i+10*(j+10*k)] = 0.1*xx/pow(xx*xx+yy*yy+zz*zz,1.5) - 0.1*xx/pow(xx*xx+yy*yy+dd*dd,1.5);
++ ey.a[i+10*(j+10*k)] = 0.1*yy/pow(xx*xx+yy*yy+zz*zz,1.5) - 0.1*yy/pow(xx*xx+yy*yy+dd*dd,1.5);
++ ez.a[i+10*(j+10*k)] = 0.1*zz/pow(xx*xx+yy*yy+zz*zz,1.5) - 0.1*dd/pow(xx*xx+yy*yy+dd*dd,1.5);
++}
++ for(i=0;i<60;i++) for(j=0;j<50;j++) for(k=0;k<40;k++)
++{
++ xx = i/30.-1; yy = j/25.-1; zz = k/20.-1;
++ c.a[i+60*(j+50*k)] = -2*(xx*xx + yy*yy + zz*zz*zz*zz - zz*zz - 0.1);
++ d.a[i+60*(j+50*k)] = 1-2*tanh((xx+yy)*(xx+yy));
++}*/
++ ex.Modify("0.1*(x-0.5)/pow((x-0.5)^2+(y-0.5)^2 + (z-0.35)^2,1.5) - 0.1*(x-0.5)/pow((x-0.5)^2 + (y-0.5)^2+(z-0.65)^2,1.5)");
++ ey.Modify("0.1*(y-0.5)/pow((x-0.5)^2+(y-0.5)^2 + (z-0.35)^2,1.5) - 0.1*(y-0.5)/pow((x-0.5)^2 + (y-0.5)^2+(z-0.65)^2,1.5)");
++ ez.Modify("0.1*(z-0.35)/pow((x-0.5)^2+(y-0.5)^2 + (z-0.35)^2,1.5) - 0.1*(z-0.65)/pow((x-0.5)^2+(y-0.5)^2 + (z-0.65)^2,1.5)");
++ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
++ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
++ c.Modify("(-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1))");
++ d.Modify("1-2*tanh(4*(x+y-1)^2)");
++ y.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
++ y.Modify("sin(2*pi*x)",1); y.Modify("cos(2*pi*x)",2);
++ y1.Modify("0.5+0.3*cos(2*pi*x)");
++ y2.Modify("0.3*sin(2*pi*x)");
++ x.Fill(-1,1,'x');
++ x2.Modify("0.05+0.03*cos(2*pi*x)");
++
++ mglData x0(10), y0(10), ex0(10), ey0(10),ch(7,2);
++ x0.Modify("2*x-1 + 0.1*rnd-0.05");
++ y0.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x) + 0.2*rnd-0.1");
++ ey0.Modify("0.2"); ex0.Modify("0.1"); ch.Modify("rnd+0.1");
++
++ gr->SubPlot(1,1,0);
++ gr->Alpha(false); gr->Compression(compression);
++ START(false); gr->MeshNum=20; gr->Dew(a,b,"BbcyrR"); gr->MeshNum=0; SAVE(dew);
++ gr->Rotate(40,60);
++ START(false); gr->MeshNum=10; gr->Dew(a,b,"BbcyrR"); gr->MeshNum=0; SAVE(dew2);
++ START(false); gr->Pipe(a,b,"BbcyrR"); SAVE(pipe);
++ START(true); gr->Surf(a,"BbcyrR"); SAVE(surf);
++ START(true); gr->Surf(a,"BbcyrR|"); SAVE(surf_sl);
++ START(true); gr->Tile(a,"BbcyrR"); SAVE(tile);
++ START(true); gr->Belt(a,"BbcyrR"); SAVE(belt);
++ START(false); gr->Mesh(a,"BbcyrR"); SAVE(mesh);
++ START(false); gr->Fall(a,"BbcyrR"); SAVE(fall);
++ START(true); gr->SurfC(a,b,"BbcyrR"); SAVE(surfc);
++ START(true); gr->Boxs(a,"BbcyrR"); SAVE(boxs);
++ START(false); gr->Flow(ex,ey,ez,"bwr"); SAVE(flow3);
++ START(false); gr->Vect(ex,ey,ez,"bwr"); SAVE(vect3);
++ START(false); gr->VectC(ex,ey,ez,"bwr"); SAVE(vectc3);
++ START(false); gr->Pipe(ex,ey,ez,"bwr"); SAVE(pipe3);
++ START(false); gr->Torus(y1,y2,"pz"); SAVE(torus);
++ START(false); gr->Crust(pnts,"BbcyrR"); SAVE(crust);
++ START(false); gr->Dots(pnts,"BbcyrR"); SAVE(dots);
++ START(false); gr->ContF(a,"BbcyrR"); SAVE(contf);
++ START(false); gr->Cont(a,"BbcyrR"); SAVE(cont);
++ START(false); gr->ContFA(c,"BbcyrR"); SAVE(contfa);
++ if (idtf_mode)
++ { START(false); gr->Text(mglPoint(0,0,0),"Fog not supported"); SAVE(surf_fog); }
++ else
++ { gr->Clf(); gr->Fog(1); gr->Box(); gr->Surf(a,"BbcyrR"); gr->Fog(0); SAVE(surf_fog); }
++ START(false); gr->Tube(y,0.05); gr->Tube(y1,x,y2,x2); SAVE(tube);
++ START(false); gr->Tube(y,0.05); gr->Tube(y1,x,y2,x2); SAVE(tube_3d);
++ START(false); gr->Chart(ch,"#"); SAVE(chart);
++ gr->Axis("(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)",0);
++ START(false); gr->Chart(ch,"bgr cmy#"); SAVE(pie_chart); gr->Axis(0,0,0);
++
++ gr->Alpha(true); gr->Compression(false);
++ START(pdftransparency); gr->Surf(a,"BbcyrR"); SAVE(surf_alpha);
++ START(false); gr->Axial(a,"BbcyrR"); SAVE(axial);
++ START(false); gr->SurfA(a,b,"BbcyrR"); SAVE(surfa);
++ START(false); gr->Map(a,b,"brg"); SAVE(map);
++ START(false); gr->Surf3(c,"BbcyrR"); SAVE(surf3);
++ START(pdftransparency); gr->Surf3(c,"bgrd"); SAVE(surf3_rgbd_light);
++ START(false); gr->Surf3A(c,d,"BbcyrR"); SAVE(surf3a);
++ START(pdftransparency); gr->Surf3C(c,d,"BbcyrR"); SAVE(surf3c);
++ START(false); gr->ContA(c,"BbcyrR"); SAVE(conta);
++ gr->Light(false);
++ if (idtf_mode)
++ { START(false); gr->Text(mglPoint(0,0,0),"CloudQ not supported"); SAVE(cloudq); }
++ else
++ { START(false); gr->CloudQ(c,"wyrRk"); SAVE(cloudq); }
++ if (idtf_mode)
++ { START(false); gr->Text(mglPoint(0,0,0),"CloudP not supported"); SAVE(cloudp); }
++ else
++ { START(false); gr->CloudP(c,"wyrRk"); SAVE(cloudp); }
++ START(pdftransparency); gr->Axis(); gr->DensA(c,"BbcyrR"); SAVE(densa);
++ gr->Alpha(false); gr->Compression(compression);
++ START(true); gr->Surf3(c,"bgrd"); SAVE(surf3_rgbd);
++ START(true); gr->DensX(c.Sum("x"),"BbcyrR",-1); gr->DensY(c.Sum("y"),"BbcyrR",1);
++ gr->DensZ(c.Sum("z"),"BbcyrR",-1); SAVE(dens_xyz);
++ START(false); gr->ContX(c.Sum("x"),"BbcyrR",-1); gr->ContY(c.Sum("y"),"BbcyrR",1);
++ gr->ContZ(c.Sum("z"),"BbcyrR",-1); SAVE(cont_xyz);
++ gr->SubPlot(1,1,0); // 1D Plots
++ START(false); gr->Plot(y); SAVE(plot);
++ START(false); gr->Area(y); SAVE(area);
++ START(false); gr->Stem(y); SAVE(stem);
++ START(false); gr->Step(y); SAVE(step);
++ START(false); gr->Bars(y); SAVE(bars);
++ START(false); gr->Barh(y); SAVE(barh);
++ START(false); gr->Region(y2,y1,"r"); gr->Plot(y1,"k2"); gr->Plot(y2,"k2"); SAVE(region);
++ START(false); gr->Mark(y,y1,"bs"); SAVE(mark);
++ START(false); gr->TextMark(y,y1,"\\gamma"); SAVE(textmark);
++ START(false); gr->Plot(y.SubData(-1,0));
++ gr->Text(y,"This is very very long string drawn along a curve",":k");
++ gr->Text(y,"Another string drawn above a curve","T:r"); SAVE(text);
++ START(false); gr->Plot(y.SubData(-1,0)); gr->Error(x0,y0,ex0,ey0,"ko"); SAVE(error);
++
++ START(true); gr->Dens(a,"BbcyrR"); gr->Colorbar(); SAVE(dens);
++ START(true); gr->Tile(a,b,"BbcyrR"); SAVE(tiler);
++ START(false); gr->Cont(a,"BbcyrRt"); SAVE(contt);
++ START(false); gr->Vect(a,b,"BbcyrR"); SAVE(vect);
++ START(false); gr->VectC(a,b,"BbcyrR"); SAVE(vectc);
++ START(false); gr->Flow(a,b,"BbcyrR"); SAVE(flow);
++ START(true); gr->Pipe(a,b,"BbcyrR"); SAVE(pipe2);
++
++ f.Modify("sin(2*pi*x*x)",0); f.Modify("sin(2*pi*x)",1); f.Modify("sin(2*pi*sqrt(x))",2);
++ gr->Axis(mglPoint(0,-1,0),mglPoint(1,1,1));
++ START(false); gr->Plot(f); gr->Axis("xy");
++ if (idtf_mode) gr->LegendBox = false;
++ gr->AddLegend("sin(\\pi {x^2})","b"); gr->AddLegend("sin(\\pi x)","g*"); gr->AddLegend("sin(\\pi \\sqrt{x})","r+");
++ gr->Legend(); SAVE(legend);
++ gr->ClearLegend(); // clear legend strings
++ return 0;
++}
++//-----------------------------------------------------------------------------
++int sample_crust(mglGraph *gr, const void *)
++{
++ mglData pnts("hotdogs.pts");
++ pnts.Norm(-1,1,true);
++
++ gr->Rotate(40,60);
++ gr->Light(true);
++ gr->Alpha(true);
++ gr->Box();
++ gr->Crust(pnts);
++ //gr->Dots(pnts,"k");
++ return 0;
++}
++//-----------------------------------------------------------------------------
++int sample_transp(mglGraph *gr, const void *s) // flag #
++{
++ const char *suf = (const char *)s;
++ gr->Alpha(true); gr->Light(true); gr->Light(0,mglPoint(0,0,1));
++ mglData a(30,20);
++ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
++
++ gr->SetScheme("BbcyrR");
++ gr->TranspType = 0; gr->Clf();
++ gr->SubPlot(2,2,0); gr->Rotate(40,60); gr->Surf(a); gr->Box();
++ gr->SubPlot(2,2,1); gr->Rotate(40,60); gr->Dens(a); gr->Box();
++ gr->SubPlot(2,2,2); gr->Rotate(40,60); gr->Cont(a); gr->Box();
++ gr->SubPlot(2,2,3); gr->Rotate(40,60); gr->Axial(a); gr->Box();
++ save(gr,"type0",suf,type);
++
++ gr->TranspType = 1; gr->Clf();
++ gr->SubPlot(2,2,0); gr->Rotate(40,60); gr->Surf(a); gr->Box();
++ gr->SubPlot(2,2,1); gr->Rotate(40,60); gr->Dens(a); gr->Box();
++ gr->SubPlot(2,2,2); gr->Rotate(40,60); gr->Cont(a); gr->Box();
++ gr->SubPlot(2,2,3); gr->Rotate(40,60); gr->Axial(a); gr->Box();
++ save(gr,"type1",suf,type);
++
++ gr->TranspType = 2; gr->Clf();
++ gr->SubPlot(2,2,0); gr->Rotate(40,60); gr->Surf(a); gr->Box();
++ gr->SubPlot(2,2,1); gr->Rotate(40,60); gr->Dens(a); gr->Box();
++ gr->SubPlot(2,2,2); gr->Rotate(40,60); gr->Cont(a); gr->Box();
++ gr->SubPlot(2,2,3); gr->Rotate(40,60); gr->Axial(a); gr->Box();
++ save(gr,"type2",suf,type);
++ gr->TranspType = 0; gr->Clf();
++ return 0;
++}
++//-----------------------------------------------------------------------------
++int sample_hint(mglGraph *gr, const void *s)
++{
++ const char *suf = (const char *)s;
++ mglData a(50,40), b(50,40), d(50,40), c(61,51,40), y(50,3), y1(50), y2(50);
++ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
++ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
++ c.Modify("(-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1))");
++ y.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
++ y.Modify("sin(2*pi*x)",1); y.Modify("cos(2*pi*x)",2);
++ y1.Modify("0.3*sin(2*pi*x)"); y2.Modify("0.5+0.3*cos(2*pi*x)");
++ for(int i=0;i<a.nx*a.ny;i++) d.a[i] = hypot(a.a[i],b.a[i]);
++
++ gr->SubPlot(1,1,0); gr->Clf(); gr->Alpha(false); gr->Light(false);
++ // 2-axis plot
++ gr->Clf(); gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1),mglPoint(-1,-1,-1));
++ gr->Axis(); gr->Label('y',"axis 1",0); gr->Plot(y1,"b");
++ gr->Axis(mglPoint(0,0,0),mglPoint(1,1,1),mglPoint(1,1,1)); // set up second axis
++ gr->Axis(); gr->Label('y',"axis 2",0); gr->Stem(y2,"r");
++ SAVE(2_axis);
++
++ gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1));
++ // contours under mesh
++ START(true); gr->Flow(a,b,"br",5,true,-0.99); gr->Dens(d,"BbcyrR");
++ SAVE(flow_dens);
++
++ gr->Rotate(40,60);
++ // contours on the surface
++ START(true); gr->Surf(a,"kw"); gr->CAxis(-1,0); gr->Cont(a,"w");
++ gr->CAxis(0,1); gr->Cont(a,"k"); gr->CAxis(-1,1);
++ SAVE(surf_cont);
++ gr->Light(true);
++ // contours under mesh
++ START(true); gr->Mesh(a,"BbcyrR"); gr->Cont(a, 0, 7, -1);
++ SAVE(mesh_cont);
++ // contours on the surface
++ START(true); gr->Surf(a,"BbcyrR"); gr->Cont(a,"y");
++ SAVE(surf_cont_y);
++ // caxis and the surface
++ START(true); gr->CAxis(0,1); gr->Surf(a,"BbcyrR"); gr->CAxis(-1,1);
++ SAVE(surf_caxis);
++ // caxis and the surface
++ START(true); gr->Axis(mglPoint(-1,-1,0),mglPoint(1,1,1)); gr->Cut=false;
++ gr->Surf(a,"BbcyrR"); gr->Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1));
++ SAVE(surf_cut); gr->Cut = true;
++
++ // several light sources
++ START(false);
++ gr->Light(1,mglPoint(0,1,0),'c');
++ gr->Light(2,mglPoint(1,0,0),'y');
++ gr->Light(3,mglPoint(0,-1,0),'m');
++ gr->Surf(a,"h");
++ SAVE(several_light);
++ gr->Light(1,false);
++ gr->Light(2,false);
++ gr->Light(3,false);
++
++ // CutMin CutMax example
++ gr->CutMin = mglPoint(0,-1,-1); gr->CutMax = mglPoint(1,0,1.1);
++ START(false); gr->Surf3(-0.5,c,"BbcyrR");
++ mglData v(10); v.Fill(-0.5,1);
++ gr->ContF3(v,c,'x',-1,"BbcyrR"); gr->ContF3(v,c,'y',-1,"BbcyrR");
++ gr->ContF3(v,c,'z',0,"BbcyrR"); gr->ContF3(v,c,'z',39,"BbcyrR");
++ SAVE(cutminmax2);
++
++ START(false); gr->Alpha(true);
++ gr->Surf3(c,"BbcyrR");
++ SAVE(cutminmax);
++ gr->CutMax = gr->CutMin; // switch off cutting area
++
++ START(false);
++ gr->CutOff("(z>(x+0.5*y-1)^2-1) & (z>(x-0.5*y-1)^2-1)");
++ gr->Surf3(c); gr->CutOff(0);
++ SAVE(surf3_cutoff);
++
++ return 0;
++}
++//-----------------------------------------------------------------------------
++void sample_molecule(mglGraph *gr)
++{
++ gr->VertexColor(false); gr->Compression(false); // per-vertex colors and compression are detrimental to transparency
++
++ gr->Alpha(true); gr->Light(true);
++
++ gr->SubPlot(2,2,0);
++ gr->StartGroup("Methane");
++ gr->StartGroup("MetaneLabel");
++ gr->Text(mglPoint(0,1.2),"Methane, CH_4",0,-3);
++ gr->EndGroup();
++ gr->Rotate(60,120);
++ gr->Sphere(mglPoint(0,0,0),0.25,"k");
++ gr->Drop(mglPoint(0,0,0),mglPoint(0,0,1),0.35,"h",1,2);
++ gr->Sphere(mglPoint(0,0,0.7),0.25,"g");
++ gr->Drop(mglPoint(0,0,0),mglPoint(-0.94,0,-0.33),0.35,"h",1,2);
++ gr->Sphere(mglPoint(-0.66,0,-0.23),0.25,"g");
++ gr->Drop(mglPoint(0,0,0),mglPoint(0.47,0.82,-0.33),0.35,"h",1,2);
++ gr->Sphere(mglPoint(0.33,0.57,-0.23),0.25,"g");
++ gr->Drop(mglPoint(0,0,0),mglPoint(0.47,-0.82,-0.33),0.35,"h",1,2);
++ gr->Sphere(mglPoint(0.33,-0.57,-0.23),0.25,"g");
++ gr->EndGroup();
++
++ gr->SubPlot(2,2,1);
++ gr->StartGroup("Water");
++ gr->StartGroup("WaterLabel");
++ gr->Text(mglPoint(0,1.2),"Water, H{_2}O",0,-3);
++ gr->EndGroup();
++ gr->Rotate(60,100);
++ gr->StartGroup("Water_O");
++ gr->Sphere(mglPoint(0,0,0),0.25,"r");
++ gr->EndGroup();
++ gr->StartGroup("Water_Cloud_1");
++ gr->Drop(mglPoint(0,0,0),mglPoint(0.3,0.5,0),0.3,"m",1,2);
++ gr->EndGroup();
++ gr->StartGroup("Water_H_1");
++ gr->Sphere(mglPoint(0.3,0.5,0),0.25,"g");
++ gr->EndGroup();
++ gr->StartGroup("Water_Cloud_2");
++ gr->Drop(mglPoint(0,0,0),mglPoint(0.3,-0.5,0),0.3,"m",1,2);
++ gr->EndGroup();
++ gr->StartGroup("Water_H_2");
++ gr->Sphere(mglPoint(0.3,-0.5,0),0.25,"g");
++ gr->EndGroup();
++ gr->EndGroup();
++
++ gr->SubPlot(2,2,2);
++ gr->StartGroup("Oxygen");
++ gr->StartGroup("OxygenLabel");
++ gr->Text(mglPoint(0,1.2),"Oxygen, O_2",0,-3);
++ gr->EndGroup();
++ gr->Rotate(60,120);
++ gr->Drop(mglPoint(0,0.5,0),mglPoint(0,-0.3,0),0.3,"m",1,2);
++ gr->Sphere(mglPoint(0,0.5,0),0.25,"r");
++ gr->Drop(mglPoint(0,-0.5,0),mglPoint(0,0.3,0),0.3,"m",1,2);
++ gr->Sphere(mglPoint(0,-0.5,0),0.25,"r");
++ gr->EndGroup();
++
++ gr->SubPlot(2,2,3);
++ gr->StartGroup("Ammonia");
++ gr->StartGroup("AmmoniaLabel");
++ gr->Text(mglPoint(0,1.2),"Ammonia, NH_3",0,-3);
++ gr->EndGroup();
++ gr->Rotate(60,120);
++ gr->Sphere(mglPoint(0,0,0),0.25,"b");
++ gr->Drop(mglPoint(0,0,0),mglPoint(0.33,0.57,0),0.32,"n",1,2);
++ gr->Sphere(mglPoint(0.33,0.57,0),0.25,"g");
++ gr->Drop(mglPoint(0,0,0),mglPoint(0.33,-0.57,0),0.32,"n",1,2);
++ gr->Sphere(mglPoint(0.33,-0.57,0),0.25,"g");
++ gr->Drop(mglPoint(0,0,0),mglPoint(-0.65,0,0),0.32,"n",1,2);
++ gr->Sphere(mglPoint(-0.65,0,0),0.25,"g");
++ gr->EndGroup();
++
++ gr->InPlot(0,1,0,1);
++}
++//-----------------------------------------------------------------------------
++void sample_ternary(mglGraph *gr)
++{
++ gr->Light(false); gr->Alpha(false);
++
++ mglData x(50),y(50),rx(10),ry(10), a(20,30);
++ a.Modify("4*x*y");
++ x.Modify("0.25*(1+cos(2*pi*x))");
++ y.Modify("0.25*(1+sin(2*pi*x))");
++ rx.Modify("rnd"); ry.Modify("(1-v)*rnd",rx);
++
++ gr->StartGroup("Ternary plot (a+b+c=1)"); gr->Text(mglPoint(0,1.3), "Ternary plot (a+b+c=1)"); gr->EndGroup();
++ gr->Ternary(true);
++ gr->StartGroup("Plot r2"); gr->Plot(x,y,"r2"); gr->EndGroup();
++ gr->StartGroup("Plot q^ "); gr->Plot(rx,ry,"q^ "); gr->EndGroup();
++ gr->StartGroup("Cont"); gr->Cont(a,"BbcyrR"); gr->EndGroup();
++ gr->StartGroup("Line"); gr->Line(mglPoint(0.5,0), mglPoint(0,0.75), "g2"); gr->EndGroup();
++ gr->StartGroup("Axis"); gr->Axis(); gr->EndGroup();
++ gr->StartGroup("Grid"); gr->Grid("xyz","B;"); gr->EndGroup();
++ gr->StartGroup("a comp."); gr->Label('x',"a comp.", 0); gr->EndGroup();
++ gr->StartGroup("b comp."); gr->Label('y',"b comp.", 0); gr->EndGroup();
++ gr->StartGroup("c comp."); gr->Label('z',"c comp.", 0); gr->EndGroup();
++}
++//-----------------------------------------------------------------------------
++void sample_drops(mglGraph *gr)
++{
++ gr->Light(true); gr->Alpha(false);
++
++ gr->StartGroup("sh=0");
++ gr->StartGroup("text sh=0"); gr->Text(mglPoint(-1,1.2),"sh=0","rC",-1); gr->EndGroup();
++ gr->StartGroup("drop sh=0"); gr->Drop(mglPoint(-1,0),mglPoint(0,1),0.5,"r",0); gr->EndGroup();
++ gr->EndGroup();
++ gr->StartGroup("sh=33");
++ gr->StartGroup("text sh=33"); gr->Text(mglPoint(-0.33,1.2),"sh=0.33","rC",-1); gr->EndGroup();
++ gr->StartGroup("drop sh=33"); gr->Drop(mglPoint(-0.33,0),mglPoint(0,1),0.5,"r",0.33); gr->EndGroup();
++ gr->EndGroup();
++ gr->StartGroup("sh=67");
++ gr->StartGroup("text sh=67"); gr->Text(mglPoint(0.33,1.2),"sh=0.67","rC",-1); gr->EndGroup();
++ gr->StartGroup("drop sh=67"); gr->Drop(mglPoint(0.33,0),mglPoint(0,1),0.5,"r",0.67); gr->EndGroup();
++ gr->EndGroup();
++ gr->StartGroup("sh=1");
++ gr->StartGroup("text sh=1"); gr->Text(mglPoint(1,1.2),"sh=1","rC",-1); gr->EndGroup();
++ gr->StartGroup("drop sh=1"); gr->Drop(mglPoint(1,0),mglPoint(0,1),0.5,"r",1); gr->EndGroup();
++ gr->EndGroup();
++ gr->StartGroup("Balls");
++ gr->Ball(mglPoint(-1,0,1),'k');
++ gr->Ball(mglPoint(-0.33,0,1),'k');
++ gr->Ball(mglPoint(0.33,0,1),'k');
++ gr->Ball(mglPoint(1,0,1),'k');
++ gr->EndGroup();
++ gr->StartGroup("Line");
++ gr->Line(mglPoint(-1,0,1),mglPoint(1,0,1),"b");
++ gr->EndGroup();
++}
++//-----------------------------------------------------------------------------
++void sample_fish(mglGraph *gr)
++{
++ gr->Light(true); gr->Alpha(false);
++
++ gr->Axis(mglPoint(0,0),mglPoint(1.1,1.1));
++
++ mglData a(10,10), b(10,10), x(10,10), y(10,10);
++ a.Modify("0.3*x+rnd"); x.Modify("x+0.1*rnd");
++ b.Modify("0.3*y+rnd"); y.Modify("y+0.1*rnd");
++
++ gr->Dew(x,y,a,b,"BbcyrR");
++}
++//-----------------------------------------------------------------------------
++void sample_mirror(mglGraph *gr)
++{
++ gr->Light(true); gr->Alpha(false);
++
++ mglData a(30,40),x(30),y1(40),y2(40);
++ a.Modify("pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)");
++ x.Fill(-1,1); y1.Fill(0,1); y2.Fill(0,-1);
++
++ gr->Rotate(40,60);
++ gr->StartGroup("Box"); gr->Box(); gr->EndGroup();
++ gr->StartGroup("Surf");
++ gr->StartGroup("RedSurf"); gr->Surf(x,y1,a,"r"); gr->EndGroup();
++ gr->StartGroup("BlueSurf"); gr->Surf(x,y2,a,"b"); gr->EndGroup();
++ gr->EndGroup();
++}
++//-----------------------------------------------------------------------------
++void sample_semilog(mglGraph *gr)
++{
++ gr->Light(false); gr->Alpha(false);
++
++ mglData x(2000), y(2000);
++ x.Modify("0.01/(x+10^(-5))"); y.Modify("sin(1/v)",x);
++
++ gr->Axis(mglPoint(0.01,-1),mglPoint(1000,1),mglPoint(0.01,-1));
++ gr->Axis("lg(x)",0,0); gr->dx = 0;
++
++ gr->StartGroup("Box"); gr->Box(); gr->EndGroup();
++ gr->StartGroup("Plot"); gr->Plot(x,y,"b2"); gr->EndGroup();
++ gr->StartGroup("Axis"); gr->Axis(); gr->EndGroup();
++ gr->StartGroup("Grid"); gr->Grid("xy","g"); gr->EndGroup();
++ gr->StartGroup("x"); gr->Label('x',"x",0); gr->EndGroup();
++ gr->StartGroup("y = sin 1/x"); gr->Label('y', "y = sin 1/x",0); gr->EndGroup();
++}
++//-----------------------------------------------------------------------------
++void sample_loglog(mglGraph *gr)
++{
++// Problem!
++ gr->Light(false); gr->Alpha(false);
++
++ mglData x(2000), y(2000);
++ x.Modify("pow(10,6*x-3)"); y.Modify("sqrt(1+v^2)",x);
++
++ gr->Axis(mglPoint(0.001,0.1),mglPoint(1000,1000),mglPoint(0.001,0.1));
++ gr->Axis("lg(x)","lg(y)",0); gr->dx = gr->dy = 0;
++
++ gr->StartGroup("Box"); gr->Box(); gr->EndGroup();
++ gr->StartGroup("Plot"); gr->Plot(x,y,"b2"); gr->EndGroup();
++ gr->StartGroup("Axis"); gr->Axis(); gr->EndGroup();
++ gr->StartGroup("Grid"); gr->Grid("xy","g"); gr->EndGroup();
++ gr->StartGroup("x"); gr->Label('x',"x",0); gr->EndGroup();
++ gr->StartGroup("y=(1+x^2)^(1/2)"); gr->Label('y', "y=\\sqrt{1+x^2}",0); gr->EndGroup();
++}
++//-----------------------------------------------------------------------------
++int sample_fit(mglGraph *gr)
++{
++ mglData rnd(100), in(100), res;
++ rnd.Modify("0.4*rnd+0.1+sin(4*pi*x)", 0);
++ in.Modify("0.3+sin(4*pi*x)", 0);
++
++ gr->Axis(mglPoint(-1,-2), mglPoint(1,2));
++ gr->StartGroup("data"); gr->Plot(rnd, ". "); gr->EndGroup();
++ gr->StartGroup("Box"); gr->Box(); gr->EndGroup();
++
++ float ini[3] = {1,1,3};
++ gr->Fit(res, rnd, "a+b*sin(c*x)", "abc", ini);
++ gr->StartGroup("fitted trendline"); gr->Plot(res, "r"); gr->EndGroup();
++ gr->StartGroup("real trendline"); gr->Plot(in, "b"); gr->EndGroup();
++ gr->StartGroup("fitted equation");
++ gr->Text(mglPoint(-1, -1.3), "fitted:", "L:r", -1);
++ gr->PutsFit(mglPoint(0, -1.8), "y = ", "C:r", -1);
++ gr->EndGroup();
++ gr->StartGroup("initial equation"); gr->Text(mglPoint(0, 2.2), "initial: y = 0.3+sin(2\\pi x)", "C:b", -1); gr->EndGroup();
++
++ return 0;
++}
++//-----------------------------------------------------------------------------
++#define SAMPLE( FUNC, FNAME) \
++ gr->DefaultPlotParam(); gr->Compression(compression); gr->VertexColor(vertex_color); \
++ sample_ ## FUNC(gr); save(gr,#FNAME,suf,type);
++
++int all_samples(mglGraph *gr, const void *s)
++{
++ const char *suf = (const char *)s;
++ gr->DefaultPlotParam(); gr->Compression(false); gr->VertexColor(false);
++ sample_colors(gr); save(gr,"colors",suf,type);
++ gr->SetScheme("BbcyrR");
++
++ SAMPLE(a1, sample1);
++ SAMPLE(a2, sample2);
++ SAMPLE(a3, sample3);
++ SAMPLE(a4, sample4);
++ SAMPLE(a5, sample5);
++ SAMPLE(a6, sample6);
++ SAMPLE(a7, sample7);
++ SAMPLE(a8, sample8);
++ SAMPLE(a9, sample9);
++ SAMPLE(aa, samplea);
++ SAMPLE(ab, sampleb);
++ SAMPLE(ac, samplec);
++ SAMPLE(ad, sampled);
++ SAMPLE(ae, samplee);
++ SAMPLE(molecule,molecule);
++ SAMPLE(ternary, ternary);
++ SAMPLE(fit, fit);
++ SAMPLE(drops, drops);
++ SAMPLE(fish, fish);
++ SAMPLE(semilog, semilog);
++ SAMPLE(loglog, loglog);
++ SAMPLE(mirror, mirror);
++
++ gr->DefaultPlotParam(); gr->Compression(compression); gr->VertexColor(vertex_color);
++
++ return 0;
++}
++#undef SAMPLE
++
++static struct option longopts[] = {
++ { "idtf", no_argument, &type, IDTF_TYPE },
++ { "png", no_argument, &type, 0 },
++ { "enable-vertex-color", no_argument, &vertex_color, 1 },
++ { "disable-vertex-color", no_argument, &vertex_color, 0 },
++ { "enable-compression", no_argument, &compression, 1 },
++ { "disable-compression", no_argument, &compression, 0 },
++ { "enable-pdf-transparency", no_argument, &pdftransparency, 1 },
++ { "disable-pdf-transparency", no_argument, &pdftransparency, 0 },
++ { "help", no_argument, NULL, 'h' },
++ { NULL, 0, NULL, 0 }
++};
++
++void usage()
++{
++ puts( \
++ "idtf - output idtf\n" \
++ "png - output png\n" \
++ " other options affect idtf mode only and take form enable-smth or disable-smth\n" \
++ "vertex-color - use by default per-vertex coloring or not\n" \
++ "compression - use by default compression or not\n" \
++ "pdf-transparency - assume that the pdf making software can set transparency for surfaces\n" \
++ );
++ exit(0);
++};
++
++
++//-----------------------------------------------------------------------------
++int main(int argc,char **argv)
++{
++ const char *suf = "";
++ int ch;
++ mglGraphIDTF u3d;
++ mglGraphZB zb;
++ mglGraph *gr = NULL;
++ while ((ch = getopt_long_only(argc, argv, "", longopts, NULL)) != -1)
++ switch (ch) {
++ case 0:
++ break;
++ case 'h':
++ default:
++ usage();
++ }
++
++ if (type==IDTF_TYPE)
++ {
++ gr = &u3d;
++ idtf_mode = true;
++ }
++ else
++ {
++ gr = &zb;
++ idtf_mode = false;
++ gr->SetSize(300,300);
++ }
++
++// gr.BaseLineWidth = 2;
++ all_samples(gr,suf);
++ sample_transp(gr,suf);
++ u3d.unrotate_flag = true;
++ sample_hint(gr,suf);
++ u3d.unrotate_flag = false;
++ gr->Org = mglPoint(0,0,0);
++ full_test(gr,suf);
++
++ return 0;
++}
++//-----------------------------------------------------------------------------
--- mathgl-1.10.2.1.orig/mgl/Makefile.in
+++ mathgl-1.10.2.1/mgl/Makefile.in
@@ -1,4 +1,4 @@
diff --git a/debian/patches/series b/debian/patches/series
index 21c68de..132f03f 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -4,4 +4,4 @@ mglview-ldflags.patch
#parallel-build-png.patch
upstream-svg-namespace.patch
upstream-mgl-memleak.patch
-debian-changes-1.10.2.1-1.1
+debian-changes-1.10.2.1-1
--
Packaging for mathgl
More information about the debian-science-commits
mailing list