summaryrefslogtreecommitdiff
path: root/graphics/epix/doc
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/epix/doc
Initial commit
Diffstat (limited to 'graphics/epix/doc')
-rw-r--r--graphics/epix/doc/Makefile.am45
-rw-r--r--graphics/epix/doc/Makefile.in364
-rw-r--r--graphics/epix/doc/alignment.eepic19
-rw-r--r--graphics/epix/doc/alignment.xp26
-rw-r--r--graphics/epix/doc/alignment_lr.eepic17
-rw-r--r--graphics/epix/doc/alignment_lr.xp24
-rw-r--r--graphics/epix/doc/arrow.eepic22
-rw-r--r--graphics/epix/doc/arrow.xp18
-rw-r--r--graphics/epix/doc/arrow25.eepic22
-rw-r--r--graphics/epix/doc/arrow50.eepic22
-rw-r--r--graphics/epix/doc/basepoint.eepic16
-rw-r--r--graphics/epix/doc/basepoint.xp36
-rw-r--r--graphics/epix/doc/camera.eepic285
-rw-r--r--graphics/epix/doc/camera.xp86
-rw-r--r--graphics/epix/doc/cb.eepic25
-rw-r--r--graphics/epix/doc/cb.xp22
-rw-r--r--graphics/epix/doc/color_density.eepic139
-rw-r--r--graphics/epix/doc/color_density.xp42
-rw-r--r--graphics/epix/doc/dots.eepic19
-rw-r--r--graphics/epix/doc/dots.xp28
-rw-r--r--graphics/epix/doc/ePiX.eepic1099
-rw-r--r--graphics/epix/doc/ePiX.xp156
-rw-r--r--graphics/epix/doc/epix.info4696
-rw-r--r--graphics/epix/doc/graphpaper.eepic101
-rw-r--r--graphics/epix/doc/graphpaper.xp24
-rw-r--r--graphics/epix/doc/hello.eepic15
-rw-r--r--graphics/epix/doc/hello.xp20
-rw-r--r--graphics/epix/doc/koch.eepic160
-rw-r--r--graphics/epix/doc/koch.xp24
-rw-r--r--graphics/epix/doc/layout.eepic1511
-rw-r--r--graphics/epix/doc/layout.xp36
-rw-r--r--graphics/epix/doc/manual.pdfbin0 -> 710725 bytes
-rw-r--r--graphics/epix/doc/manual.tex5030
-rw-r--r--graphics/epix/doc/marker.eepic39
-rw-r--r--graphics/epix/doc/marker.xp68
-rw-r--r--graphics/epix/doc/my_code.cc15
-rw-r--r--graphics/epix/doc/my_code.h10
-rw-r--r--graphics/epix/doc/objects.eepic412
-rw-r--r--graphics/epix/doc/objects.xp33
-rw-r--r--graphics/epix/doc/pathstyle.eepic225
-rw-r--r--graphics/epix/doc/pathstyle.xp24
-rw-r--r--graphics/epix/doc/plot_a.eepic95
-rw-r--r--graphics/epix/doc/plot_a.xp27
-rw-r--r--graphics/epix/doc/plot_b.eepic225
-rw-r--r--graphics/epix/doc/plot_b.xp27
-rw-r--r--graphics/epix/doc/plotting.eepic82
-rw-r--r--graphics/epix/doc/plotting.xp26
-rw-r--r--graphics/epix/doc/plotting2.eepic1766
-rw-r--r--graphics/epix/doc/plotting2.xp29
-rw-r--r--graphics/epix/doc/plotting3.eepic146
-rw-r--r--graphics/epix/doc/plotting3.xp43
-rw-r--r--graphics/epix/doc/scaling.eepic56
-rw-r--r--graphics/epix/doc/scaling.xp37
-rw-r--r--graphics/epix/doc/sgn.eepic30
-rw-r--r--graphics/epix/doc/sgn.xp28
-rw-r--r--graphics/epix/doc/sinx.eepic40
-rw-r--r--graphics/epix/doc/sinx.xp23
-rw-r--r--graphics/epix/doc/slices.eepic45
-rw-r--r--graphics/epix/doc/slices.xp39
59 files changed, 17739 insertions, 0 deletions
diff --git a/graphics/epix/doc/Makefile.am b/graphics/epix/doc/Makefile.am
new file mode 100644
index 0000000000..ec9ac95e5f
--- /dev/null
+++ b/graphics/epix/doc/Makefile.am
@@ -0,0 +1,45 @@
+# Makefile.am for ePiX v1.x "doc" directory
+#
+
+EPIXFLAGS = --no-defaults -I.. -L.. -lepix -v
+
+%.eepic: %.xp
+ ../epix-local $(EPIXFLAGS) $<
+
+XPS := $(wildcard *.xp)
+
+EEPICS = $(XPS:.xp=.eepic)
+
+CLEANFILES = *~ *.aux *.dvi *.log *.out *.idx *.ilg *.ind *.toc \
+ epix.info.bz2 manual_src.tar manual.pdf manual.ps \
+ manual_src.tar.gz manual.pdf.gz manual.ps.gz manual-stamp
+
+MAINTAINERCLEANFILES = *.eepic *.aux *.dvi *.log *.out *.toc *.idx *.ind *.ilg
+
+## Targets ##
+doc_DATA = manual.pdf.gz manual.ps.gz manual_src.tar.gz epix.info.bz2
+
+
+# tar up tex, xp, and eepic files; build ps, pdf
+manual-stamp: manual.tex $(XPS) $(EEPICS)
+ latex -interaction=batchmode manual &>/dev/null
+ latex -interaction=batchmode manual &>/dev/null
+ makeindex manual.idx &>/dev/null
+ ../laps-local --pdf manual.tex
+ touch manual-stamp
+
+manual_src.tar.gz: manual-stamp
+ tar -cf manual_src.tar manual.aux manual.ind manual.tex manual.toc \
+ $(XPS) $(EEPICS)
+ gzip -9 manual_src.tar
+
+#PS
+manual.ps.gz: manual-stamp
+ gzip -9 -c manual.ps > manual.ps.gz
+
+#PDF
+manual.pdf.gz: manual-stamp
+ gzip -9 -c manual.pdf > manual.pdf.gz
+
+epix.info.bz2: manual-stamp epix.info
+ bzip2 -fk epix.info
diff --git a/graphics/epix/doc/Makefile.in b/graphics/epix/doc/Makefile.in
new file mode 100644
index 0000000000..293c547251
--- /dev/null
+++ b/graphics/epix/doc/Makefile.in
@@ -0,0 +1,364 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Makefile.am for ePiX v1.x "doc" directory
+#
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = doc
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(docdir)"
+docDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(doc_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASH_PATH = @BASH_PATH@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_EPIX_EL_FALSE = @ENABLE_EPIX_EL_FALSE@
+ENABLE_EPIX_EL_TRUE = @ENABLE_EPIX_EL_TRUE@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+RUNTIME_COMPILER = @RUNTIME_COMPILER@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+EPIXFLAGS = --no-defaults -I.. -L.. -lepix -v
+XPS := $(wildcard *.xp)
+EEPICS = $(XPS:.xp=.eepic)
+CLEANFILES = *~ *.aux *.dvi *.log *.out *.idx *.ilg *.ind *.toc \
+ epix.info.bz2 manual_src.tar manual.pdf manual.ps \
+ manual_src.tar.gz manual.pdf.gz manual.ps.gz manual-stamp
+
+MAINTAINERCLEANFILES = *.eepic *.aux *.dvi *.log *.out *.toc *.idx *.ind *.ilg
+doc_DATA = manual.pdf.gz manual.ps.gz manual_src.tar.gz epix.info.bz2
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+uninstall-info-am:
+install-docDATA: $(doc_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(docdir)" || $(mkdir_p) "$(DESTDIR)$(docdir)"
+ @list='$(doc_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(docDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(docdir)/$$f'"; \
+ $(docDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(docdir)/$$f"; \
+ done
+
+uninstall-docDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(doc_DATA)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(docdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(docdir)/$$f"; \
+ done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(docdir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-docDATA
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-docDATA uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+ distclean-generic distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am \
+ install-docDATA install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am uninstall uninstall-am uninstall-docDATA \
+ uninstall-info-am
+
+
+%.eepic: %.xp
+ ../epix-local $(EPIXFLAGS) $<
+
+# tar up tex, xp, and eepic files; build ps, pdf
+manual-stamp: manual.tex $(XPS) $(EEPICS)
+ latex -interaction=batchmode manual &>/dev/null
+ latex -interaction=batchmode manual &>/dev/null
+ makeindex manual.idx &>/dev/null
+ ../laps-local --pdf manual.tex
+ touch manual-stamp
+
+manual_src.tar.gz: manual-stamp
+ tar -cf manual_src.tar manual.aux manual.ind manual.tex manual.toc \
+ $(XPS) $(EEPICS)
+ gzip -9 manual_src.tar
+
+#PS
+manual.ps.gz: manual-stamp
+ gzip -9 -c manual.ps > manual.ps.gz
+
+#PDF
+manual.pdf.gz: manual-stamp
+ gzip -9 -c manual.pdf > manual.pdf.gz
+
+epix.info.bz2: manual-stamp epix.info
+ bzip2 -fk epix.info
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/graphics/epix/doc/alignment.eepic b/graphics/epix/doc/alignment.eepic
new file mode 100644
index 0000000000..1c5d93bd48
--- /dev/null
+++ b/graphics/epix/doc/alignment.eepic
@@ -0,0 +1,19 @@
+%% Generated from alignment.xp on Fri Jan 7 14:18:43 EST 2005 by
+%% ePiX-1.0.3
+%%
+%% Cartesian bounding box: [-1,1] x [-1,1]
+%% Actual size: 72pt x 24pt
+%% Figure offset: right by 0pt, up by 0pt
+%%
+\setlength{\unitlength}{1pt}
+\begin{picture}(72,24)(-0,-0)
+%% ---
+\path(0.00140226,12)(12.001,12)(24.0006,12)(36.0002,12)(47.9998,12)
+ (59.9994,12)(71.999,12)
+\path(36,0.00046742)(36,12.0001)(36,23.9997)
+\put(36,12){\makebox(0,0)[bl]{\texttt{[tr]}}}
+\put(36,12){\makebox(0,0)[c]{{\circle*{3}}}}
+\put(36,12){\makebox(0,0)[br]{\texttt{[tl]}}}
+\put(36,12){\makebox(0,0)[tl]{\texttt{[br]}}}
+\put(36,12){\makebox(0,0)[tr]{\texttt{[bl]}}}
+\end{picture}
diff --git a/graphics/epix/doc/alignment.xp b/graphics/epix/doc/alignment.xp
new file mode 100644
index 0000000000..e6bfc3c298
--- /dev/null
+++ b/graphics/epix/doc/alignment.xp
@@ -0,0 +1,26 @@
+/* -*-ePiX-*- */
+/* alignment.c -- ePiX's reverse-LaTeX label alignment option */
+#include "epix.h"
+using namespace ePiX;
+
+P O(0,0);
+
+int main()
+{
+ bounding_box(P(-1,-1), P(1,1));
+ picture(P(72,24));
+ unitlength("1pt");
+
+ begin();
+
+ Line(O, E_1);
+ Line(O, E_2);
+
+ font_face("tt");
+ dot(O, P(0,0), "[tr]", tr);
+ label(O, P(0,0), "[tl]", tl);
+ label(O, P(0,0), "[br]", br);
+ label(O, P(0,0), "[bl]", bl);
+
+ end();
+}
diff --git a/graphics/epix/doc/alignment_lr.eepic b/graphics/epix/doc/alignment_lr.eepic
new file mode 100644
index 0000000000..111098caf3
--- /dev/null
+++ b/graphics/epix/doc/alignment_lr.eepic
@@ -0,0 +1,17 @@
+%% Generated from alignment_lr.xp on Fri Jan 7 14:18:31 EST 2005 by
+%% ePiX-1.0.3
+%%
+%% Cartesian bounding box: [-1,1] x [-1,1]
+%% Actual size: 72pt x 24pt
+%% Figure offset: right by 0pt, up by 0pt
+%%
+\setlength{\unitlength}{1pt}
+\begin{picture}(72,24)(-0,-0)
+%% ---
+\put(0,12){\makebox(0,0)[r]{\texttt{[l]}}}
+\put(0,12){\makebox(0,0)[c]{{\circle*{3}}}}
+\put(0,12){\makebox(0,0)[l]{\texttt{[r]}}}
+\put(72,12){\makebox(0,0)[b]{\texttt{[t]}}}
+\put(72,12){\makebox(0,0)[c]{{\circle*{3}}}}
+\put(72,12){\makebox(0,0)[t]{\texttt{[b]}}}
+\end{picture}
diff --git a/graphics/epix/doc/alignment_lr.xp b/graphics/epix/doc/alignment_lr.xp
new file mode 100644
index 0000000000..a6871278e3
--- /dev/null
+++ b/graphics/epix/doc/alignment_lr.xp
@@ -0,0 +1,24 @@
+/* -*-ePiX-*- */
+/* alignment_lr.c -- ePiX's reverse-LaTeX label alignment option */
+#include "epix.h"
+using namespace ePiX;
+
+P p1(-1,0), p2(1,0);
+
+int main()
+{
+ bounding_box(P(-1,-1), P(1,1));
+ picture(P(72,24));
+ unitlength("1pt");
+
+ begin();
+
+ font_face("tt");
+ dot(p1, P(0,0), "[l]", l);
+ label(p1, P(0,0), "[r]", r);
+
+ dot(p2, P(0,0), "[t]", t);
+ label(p2, P(0,0), "[b]", b);
+
+ end();
+}
diff --git a/graphics/epix/doc/arrow.eepic b/graphics/epix/doc/arrow.eepic
new file mode 100644
index 0000000000..98adf21b49
--- /dev/null
+++ b/graphics/epix/doc/arrow.eepic
@@ -0,0 +1,22 @@
+%% Generated from arrows.xp on Mon Jul 2 20:38:11 EDT 2007 by
+%% ePiX-1.1.6
+%%
+%% Cartesian bounding box: [-2,2] x [-1,1]
+%% Actual size: 24 x 12pt
+%% Figure offset: left by 0pt, down by 0pt
+%%
+\xdefinecolor{rgb_000000}{rgb}{0,0,0}
+\setlength{\unitlength}{1pt}
+\begin{picture}(24,12)(-0,-0)
+\path(0,6)(24,6)
+%%
+\path(17.8125,4.875)(15.75,4.875)
+\path(19.875,5.25)(15.75,5.25)
+\path(21.9375,5.625)(15.75,5.625)
+\path(24,6)(15.75,6)
+\path(21.9375,6.375)(15.75,6.375)
+\path(19.875,6.75)(15.75,6.75)
+\path(17.8125,7.125)(15.75,7.125)
+\path(15.75,6)(15.75,4.5)(24,6)(15.75,7.5)(15.75,6)
+%%
+\end{picture}
diff --git a/graphics/epix/doc/arrow.xp b/graphics/epix/doc/arrow.xp
new file mode 100644
index 0000000000..34c47ad5e0
--- /dev/null
+++ b/graphics/epix/doc/arrow.xp
@@ -0,0 +1,18 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+int main()
+{
+ picture(P(-2,-1),P(2,1), "24x12pt");
+
+ begin();
+#ifdef CAMBER25
+ arrow_camber(0.25);
+#elif CAMBER50
+ arrow_camber(0.5);
+#endif
+
+ arrow(P(xmin(),0), P(xmax(),0));
+ end();
+}
diff --git a/graphics/epix/doc/arrow25.eepic b/graphics/epix/doc/arrow25.eepic
new file mode 100644
index 0000000000..196889e2b2
--- /dev/null
+++ b/graphics/epix/doc/arrow25.eepic
@@ -0,0 +1,22 @@
+%% Generated from arrows.xp on Mon Jul 2 20:38:23 EDT 2007 by
+%% ePiX-1.1.6
+%%
+%% Cartesian bounding box: [-2,2] x [-1,1]
+%% Actual size: 24 x 12pt
+%% Figure offset: left by 0pt, down by 0pt
+%%
+\xdefinecolor{rgb_000000}{rgb}{0,0,0}
+\setlength{\unitlength}{1pt}
+\begin{picture}(24,12)(-0,-0)
+\path(0,6)(24,6)
+%%
+\path(17.8125,4.875)(16.2656,4.875)
+\path(19.875,5.25)(16.7813,5.25)
+\path(21.9375,5.625)(17.2969,5.625)
+\path(24,6)(17.8125,6)
+\path(21.9375,6.375)(17.2969,6.375)
+\path(19.875,6.75)(16.7813,6.75)
+\path(17.8125,7.125)(16.2656,7.125)
+\path(17.8125,6)(15.75,4.5)(24,6)(15.75,7.5)(17.8125,6)
+%%
+\end{picture}
diff --git a/graphics/epix/doc/arrow50.eepic b/graphics/epix/doc/arrow50.eepic
new file mode 100644
index 0000000000..e22fec0fd0
--- /dev/null
+++ b/graphics/epix/doc/arrow50.eepic
@@ -0,0 +1,22 @@
+%% Generated from arrows.xp on Mon Jul 2 20:38:34 EDT 2007 by
+%% ePiX-1.1.6
+%%
+%% Cartesian bounding box: [-2,2] x [-1,1]
+%% Actual size: 24 x 12pt
+%% Figure offset: left by 0pt, down by 0pt
+%%
+\xdefinecolor{rgb_000000}{rgb}{0,0,0}
+\setlength{\unitlength}{1pt}
+\begin{picture}(24,12)(-0,-0)
+\path(0,6)(24,6)
+%%
+\path(17.8125,4.875)(16.7813,4.875)
+\path(19.875,5.25)(17.8125,5.25)
+\path(21.9375,5.625)(18.8438,5.625)
+\path(24,6)(19.875,6)
+\path(21.9375,6.375)(18.8438,6.375)
+\path(19.875,6.75)(17.8125,6.75)
+\path(17.8125,7.125)(16.7813,7.125)
+\path(19.875,6)(15.75,4.5)(24,6)(15.75,7.5)(19.875,6)
+%%
+\end{picture}
diff --git a/graphics/epix/doc/basepoint.eepic b/graphics/epix/doc/basepoint.eepic
new file mode 100644
index 0000000000..efd76dfaa5
--- /dev/null
+++ b/graphics/epix/doc/basepoint.eepic
@@ -0,0 +1,16 @@
+%% Generated from basepoint.xp on Tue Jan 4 15:32:04 EST 2005 by
+%% ePiX-1.0.3
+%%
+%% Cartesian bounding box: [0,3.75] x [0,1]
+%% Actual size: 3.75pc x 1pc
+%% Figure offset: right by 0pc, up by 0pc
+%%
+\setlength{\unitlength}{1pc}
+\begin{picture}(3.75,1)(-0,-0)
+%% ---
+\path(0,-0.375)(3.75,-0.375)(3.75,1)(0,1)(0,-0.375)
+\allinethickness{0.15pt}%
+\path(0,0)(3.75,0)
+\put(0,0){$y=f(x)$}
+\put(0,0){\makebox(0,0)[c]{{\circle*{0.111111}}}}
+\end{picture}
diff --git a/graphics/epix/doc/basepoint.xp b/graphics/epix/doc/basepoint.xp
new file mode 100644
index 0000000000..7fc15f6cb1
--- /dev/null
+++ b/graphics/epix/doc/basepoint.xp
@@ -0,0 +1,36 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+int main() {
+ bounding_box(P(0,0),P(3.75,1));
+ unitlength("1pc");
+ picture(3.75,1);
+ // offset(-0.5,0);
+
+ begin();
+
+ rect(P(x_min, y_min-0.375), P(x_max, y_max));
+
+ pen(0.15);
+ line(P(x_min,0), P(x_max,0));
+
+ dot_size(2);
+
+ // std::cout << "\n\\LARGE";
+ /*
+ label(P(0,0), P(0,0), "$b$");
+ ddot(P(0,0));
+
+ label(P(1,0), P(0,0), "$f$");
+ ddot(P(1,0));
+
+ label(P(2,0), P(0,0), "$p$");
+ ddot(P(2,0));
+ */
+
+ label(P(0,0), P(0,0), "$y=f(x)$");
+ ddot(P(0,0));
+
+ end();
+}
diff --git a/graphics/epix/doc/camera.eepic b/graphics/epix/doc/camera.eepic
new file mode 100644
index 0000000000..7da56f9987
--- /dev/null
+++ b/graphics/epix/doc/camera.eepic
@@ -0,0 +1,285 @@
+%% Generated from camera.xp on Sat Sep 22 17:10:34 EDT 2007 by
+%% ePiX-1.2.0
+%%
+%% Cartesian bounding box: [-3.5,3.5] x [-3.5,2.5]
+%% Actual size: 2.625 x 2.25in
+%% Figure offset: left by 0in, down by 0in
+%%
+%% usepackages epic,eepic,xcolor
+%%
+\xdefinecolor{rgb_000000}{rgb}{0,0,0}%
+\xdefinecolor{rgb_7f7f7f}{rgb}{0.498039,0.498039,0.498039}%
+\xdefinecolor{rgb_e5e5e5}{rgb}{0.898039,0.898039,0.898039}%
+\xdefinecolor{rgb_ffffff}{rgb}{1,1,1}%
+\setlength{\unitlength}{1in}%
+\begin{picture}(2.625,2.25)(0,0)%
+\path(1.42243,1.30711)(1.4086,1.26997)(1.29561,1.27568)
+\path(1.3125,1.3125)(1.4523,1.30564)(1.59359,1.29871)
+\path(1.3125,1.3125)(1.3125,1.44704)(1.3125,1.58496)
+\path(0.307912,0.721822)(0.173332,2.09409)(2.55902,2.04543)
+ (2.39965,0.566596)(0.307912,0.721822)
+\put(1.58249,0.490175){\makebox(0,0)[l]{\colorbox{rgb_ffffff}{\hbox{\color{rgb_000000}\footnotesize \textbf{Sea}}}}}
+\put(0.937572,1.11972){\makebox(0,0)[b]{\colorbox{rgb_ffffff}{\hbox{\color{rgb_000000}\footnotesize \textbf{Sky}}}}}
+\put(0.735053,0.174015){\makebox(0,0)[r]{\colorbox{rgb_ffffff}{\hbox{\color{rgb_000000}\footnotesize \textbf{Eye}}}}}
+\put(0.929482,0.537641){\makebox(0,0)[r]{\colorbox{rgb_ffffff}{\hbox{\color{rgb_000000}\footnotesize Viewpoint}}}}
+\put(0.957156,0.537641){\color{rgb_000000}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\put(2.476,2.01776){\makebox(0,0)[tr]{\colorbox{rgb_ffffff}{\hbox{\color{rgb_000000}\footnotesize Canvas}}}}
+\path(0.957156,0.537641)(1.17567,1.01413)(1.3125,1.3125)
+\color{rgb_7f7f7f}%
+\path(1.83216,0.911179)(1.84054,0.911179)
+\path(1.82052,0.916691)(1.83729,0.916691)
+\path(1.80888,0.922203)(1.83404,0.922203)
+\path(1.79724,0.927715)(1.83079,0.927715)
+\path(1.7856,0.933227)(1.82754,0.933227)
+\path(1.77396,0.938739)(1.82429,0.938739)
+\path(1.76232,0.944251)(1.82104,0.944251)
+\path(1.75068,0.949763)(1.81779,0.949763)
+\path(1.73904,0.955275)(1.81454,0.955275)
+\path(1.7274,0.960787)(1.81129,0.960787)
+\path(1.71576,0.966299)(1.80804,0.966299)
+\path(1.70412,0.971811)(1.80479,0.971811)
+\path(1.69248,0.977323)(1.80154,0.977323)
+\path(1.68084,0.982835)(1.79829,0.982835)
+\path(1.6692,0.988347)(1.79503,0.988347)
+\path(1.65756,0.993859)(1.79178,0.993859)
+\path(1.64592,0.999371)(1.78853,0.999371)
+\path(1.63428,1.00488)(1.78528,1.00488)
+\path(1.62264,1.0104)(1.78203,1.0104)
+\path(1.611,1.01591)(1.77878,1.01591)
+\path(1.60612,1.02142)(1.77553,1.02142)
+\path(1.60892,1.02693)(1.77228,1.02693)
+\path(1.61172,1.03244)(1.76903,1.03244)
+\path(1.61452,1.03796)(1.76578,1.03796)
+\path(1.61732,1.04347)(1.76253,1.04347)
+\path(1.62012,1.04898)(1.75928,1.04898)
+\path(1.62292,1.05449)(1.75603,1.05449)
+\path(1.62572,1.06)(1.75278,1.06)
+\path(1.62852,1.06551)(1.74952,1.06551)
+\path(1.63132,1.07103)(1.74627,1.07103)
+\path(1.63412,1.07654)(1.74302,1.07654)
+\path(1.63692,1.08205)(1.73977,1.08205)
+\path(1.63972,1.08756)(1.73652,1.08756)
+\path(1.64252,1.09307)(1.73327,1.09307)
+\path(1.64532,1.09859)(1.73002,1.09859)
+\path(1.64812,1.1041)(1.72677,1.1041)
+\path(1.65091,1.10961)(1.72352,1.10961)
+\path(1.65371,1.11512)(1.72027,1.11512)
+\path(1.65651,1.12063)(1.71702,1.12063)
+\path(1.65931,1.12615)(1.71377,1.12615)
+\path(1.66211,1.13166)(1.71052,1.13166)
+\path(1.66491,1.13717)(1.70726,1.13717)
+\path(1.66771,1.14268)(1.70401,1.14268)
+\path(1.67051,1.14819)(1.70076,1.14819)
+\path(1.67331,1.15371)(1.69751,1.15371)
+\path(1.67611,1.15922)(1.69426,1.15922)
+\path(1.67891,1.16473)(1.69101,1.16473)
+\path(1.68171,1.17024)(1.68776,1.17024)
+\path(1.83836,0.908239)(1.83836,0.914877)
+\path(1.83293,0.910811)(1.83293,0.924087)
+\path(1.8275,0.913384)(1.8275,0.933297)
+\path(1.82207,0.915956)(1.82207,0.942506)
+\path(1.81664,0.918528)(1.81664,0.951716)
+\path(1.81121,0.9211)(1.81121,0.960926)
+\path(1.80577,0.923672)(1.80577,0.970136)
+\path(1.80034,0.926244)(1.80034,0.979345)
+\path(1.79491,0.928816)(1.79491,0.988555)
+\path(1.78948,0.931388)(1.78948,0.997765)
+\path(1.78405,0.93396)(1.78405,1.00697)
+\path(1.77862,0.936532)(1.77862,1.01618)
+\path(1.77319,0.939104)(1.77319,1.02539)
+\path(1.76775,0.941676)(1.76775,1.0346)
+\path(1.76232,0.944248)(1.76232,1.04381)
+\path(1.75689,0.94682)(1.75689,1.05302)
+\path(1.75146,0.949392)(1.75146,1.06223)
+\path(1.74603,0.951964)(1.74603,1.07144)
+\path(1.7406,0.954536)(1.7406,1.08065)
+\path(1.73517,0.957108)(1.73517,1.08986)
+\path(1.72973,0.95968)(1.72973,1.09907)
+\path(1.7243,0.962252)(1.7243,1.10828)
+\path(1.71887,0.964824)(1.71887,1.11749)
+\path(1.71344,0.967396)(1.71344,1.1267)
+\path(1.70801,0.969968)(1.70801,1.13591)
+\path(1.70258,0.97254)(1.70258,1.14512)
+\path(1.69715,0.975112)(1.69715,1.15433)
+\path(1.69171,0.977684)(1.69171,1.16354)
+\path(1.68628,0.980256)(1.68628,1.17275)
+\path(1.68085,0.982828)(1.68085,1.16855)
+\path(1.67542,0.9854)(1.67542,1.15786)
+\path(1.66999,0.987972)(1.66999,1.14716)
+\path(1.66456,0.990544)(1.66456,1.13647)
+\path(1.65912,0.993116)(1.65912,1.12577)
+\path(1.65369,0.995689)(1.65369,1.11508)
+\path(1.64826,0.998261)(1.64826,1.10439)
+\path(1.64283,1.00083)(1.64283,1.09369)
+\path(1.6374,1.0034)(1.6374,1.083)
+\path(1.63197,1.00598)(1.63197,1.07231)
+\path(1.62654,1.00855)(1.62654,1.06161)
+\path(1.6211,1.01112)(1.6211,1.05092)
+\path(1.61567,1.01369)(1.61567,1.04022)
+\path(1.61024,1.01626)(1.61024,1.02953)
+\color{rgb_000000}%
+\path(1.68451,1.17575)(1.8438,0.905667)(1.60481,1.01884)(1.68451,1.17575)
+\path(1.55858,1.06528)(1.62462,1.12321)(1.68451,1.17575)
+\path(1.64966,0.825085)(1.75291,0.867943)(1.8438,0.905667)
+\path(1.42984,0.888834)(1.52409,0.958865)(1.60481,1.01884)
+\path(0.957156,0.537641)(1.4039,0.929569)(1.68451,1.17575)
+\path(0.957156,0.537641)(1.50556,0.765274)(1.8438,0.905667)
+\path(0.957156,0.537641)(1.35769,0.835234)(1.60481,1.01884)
+\color{rgb_e5e5e5}%
+\path(1.64572,0.826226)(1.5548,1.06009)
+\path(1.63918,0.828123)(1.55101,1.0549)
+\path(1.63264,0.830021)(1.54722,1.04971)
+\path(1.6261,0.831918)(1.54344,1.04452)
+\path(1.61955,0.833815)(1.53965,1.03933)
+\path(1.61301,0.835712)(1.53586,1.03414)
+\path(1.60647,0.837609)(1.53208,1.02895)
+\path(1.59993,0.839507)(1.52829,1.02376)
+\path(1.59339,0.841404)(1.5245,1.01857)
+\path(1.58684,0.843301)(1.52072,1.01338)
+\path(1.5803,0.845198)(1.51693,1.00819)
+\path(1.57376,0.847095)(1.51314,1.003)
+\path(1.56722,0.848993)(1.50936,0.997814)
+\path(1.56068,0.85089)(1.50557,0.992624)
+\path(1.55413,0.852787)(1.50178,0.987435)
+\path(1.54759,0.854684)(1.498,0.982245)
+\path(1.54105,0.856581)(1.49421,0.977056)
+\path(1.53451,0.858479)(1.49042,0.971866)
+\path(1.52797,0.860376)(1.48664,0.966677)
+\path(1.52142,0.862273)(1.48285,0.961487)
+\path(1.51488,0.86417)(1.47906,0.956298)
+\path(1.50834,0.866067)(1.47528,0.951108)
+\path(1.5018,0.867965)(1.47149,0.945919)
+\path(1.49526,0.869862)(1.4677,0.940729)
+\path(1.48871,0.871759)(1.46392,0.93554)
+\path(1.48217,0.873656)(1.46013,0.93035)
+\path(1.47563,0.875553)(1.45634,0.925161)
+\path(1.46909,0.877451)(1.45256,0.919971)
+\path(1.46255,0.879348)(1.44877,0.914781)
+\path(1.456,0.881245)(1.44498,0.909592)
+\path(1.44946,0.883142)(1.4412,0.904402)
+\path(1.44292,0.885039)(1.43741,0.899213)
+\path(1.43638,0.886937)(1.43362,0.894023)
+\path(1.56052,1.06017)(1.55261,1.05709)
+\path(1.56246,1.05506)(1.54664,1.04891)
+\path(1.5644,1.04995)(1.54066,1.04072)
+\path(1.56633,1.04484)(1.53469,1.03253)
+\path(1.56827,1.03973)(1.52872,1.02435)
+\path(1.57021,1.03461)(1.52274,1.01616)
+\path(1.57215,1.0295)(1.51677,1.00797)
+\path(1.57409,1.02439)(1.5108,0.999787)
+\path(1.57602,1.01928)(1.50482,0.991601)
+\path(1.57796,1.01417)(1.49885,0.983414)
+\path(1.5799,1.00906)(1.49288,0.975228)
+\path(1.58184,1.00395)(1.4869,0.967042)
+\path(1.58377,0.998841)(1.48093,0.958855)
+\path(1.58571,0.993731)(1.47496,0.950669)
+\path(1.58765,0.988621)(1.46898,0.942483)
+\path(1.58959,0.98351)(1.46301,0.934296)
+\path(1.59152,0.9784)(1.45704,0.92611)
+\path(1.59346,0.973289)(1.45106,0.917923)
+\path(1.5954,0.968179)(1.44509,0.909737)
+\path(1.59734,0.963068)(1.43911,0.901551)
+\path(1.59928,0.957958)(1.43314,0.893364)
+\path(1.60121,0.952847)(1.43369,0.887715)
+\path(1.60315,0.947737)(1.44233,0.88521)
+\path(1.60509,0.942626)(1.45097,0.882705)
+\path(1.60703,0.937516)(1.45961,0.880199)
+\path(1.60896,0.932405)(1.46825,0.877694)
+\path(1.6109,0.927295)(1.47689,0.875189)
+\path(1.61284,0.922184)(1.48552,0.872684)
+\path(1.61478,0.917074)(1.49416,0.870179)
+\path(1.61672,0.911963)(1.5028,0.867673)
+\path(1.61865,0.906853)(1.51144,0.865168)
+\path(1.62059,0.901742)(1.52008,0.862663)
+\path(1.62253,0.896632)(1.52872,0.860158)
+\path(1.62447,0.891521)(1.53736,0.857653)
+\path(1.6264,0.886411)(1.54599,0.855147)
+\path(1.62834,0.8813)(1.55463,0.852642)
+\path(1.63028,0.87619)(1.56327,0.850137)
+\path(1.63222,0.871079)(1.57191,0.847632)
+\path(1.63416,0.865969)(1.58055,0.845127)
+\path(1.63609,0.860858)(1.58919,0.842621)
+\path(1.63803,0.855748)(1.59783,0.840116)
+\path(1.63997,0.850637)(1.60646,0.837611)
+\path(1.64191,0.845527)(1.6151,0.835106)
+\path(1.64384,0.840416)(1.62374,0.8326)
+\path(1.64578,0.835306)(1.63238,0.830095)
+\path(1.64772,0.830195)(1.64102,0.82759)
+\color{rgb_000000}%
+\path(1.55858,1.06528)(1.64966,0.825085)(1.42984,0.888834)(1.55858,1.06528)
+\path(1.69177,1.3845)(1.6229,1.16677)(1.54714,0.927292)
+\put(1.69177,1.3845){\makebox(0,0)[b]{\colorbox{rgb_ffffff}{\hbox{\color{rgb_000000}\footnotesize Object}}}}
+\path(2.05075,0.923554)(1.88188,0.980517)(1.71366,1.03726)
+\put(2.05075,0.923554){\makebox(0,0)[l]{\colorbox{rgb_ffffff}{\hbox{\color{rgb_000000}\footnotesize Shadow}}}}
+\put(1.12218,1.68556){\makebox(0,0)[b]{\colorbox{rgb_ffffff}{\hbox{\color{rgb_000000}\footnotesize Target}}}}
+\path(1.12218,1.68556)(1.29391,1.34894)
+\path(1.27634,1.40359)(1.2621,1.39054)
+\path(1.27896,1.39892)(1.26528,1.38638)
+\path(1.28062,1.39336)(1.26846,1.38222)
+\path(1.28229,1.38781)(1.27164,1.37806)
+\path(1.28395,1.38226)(1.27482,1.3739)
+\path(1.28561,1.3767)(1.278,1.36974)
+\path(1.28727,1.37115)(1.28118,1.36558)
+\path(1.28893,1.3656)(1.28437,1.36142)
+\path(1.29059,1.36005)(1.28755,1.35726)
+\path(1.29225,1.35449)(1.29073,1.3531)
+\path(1.25949,1.39395)(1.29061,1.35998)
+\path(1.26348,1.39703)(1.28731,1.37102)
+\path(1.26812,1.39939)(1.28401,1.38205)
+\path(1.27276,1.40176)(1.28071,1.39309)
+\path(1.26816,1.39941)(1.25892,1.3947)(1.29391,1.34894)
+ (1.2774,1.40413)(1.26816,1.39941)
+\put(1.3125,1.3125){\color{rgb_000000}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\allinethickness{0.8pt}%
+\path(0.957156,0.537641)(1.55482,0.490175)
+\allinethickness{0.0055348in}%
+\path(1.4989,0.489651)(1.50786,0.485229)
+\path(1.49933,0.495061)(1.51726,0.486218)
+\path(1.49976,0.500472)(1.52665,0.487207)
+\path(1.50454,0.503736)(1.53604,0.488197)
+\path(1.52968,0.496955)(1.54543,0.489186)
+\path(1.54888,0.489549)(1.54985,0.491516)
+\path(1.54293,0.488923)(1.54487,0.492858)
+\path(1.53699,0.488297)(1.5399,0.494199)
+\path(1.53104,0.487671)(1.53493,0.495541)
+\path(1.5251,0.487045)(1.52995,0.496882)
+\path(1.51916,0.486419)(1.52498,0.498223)
+\path(1.51321,0.485792)(1.52001,0.499565)
+\path(1.50727,0.485166)(1.51504,0.500906)
+\path(1.50133,0.48454)(1.51006,0.502247)
+\path(1.49903,0.491318)(1.50509,0.503589)
+\allinethickness{0.8pt}%
+\path(1.49929,0.494585)(1.49847,0.48424)(1.55482,0.490175)
+ (1.50012,0.50493)(1.49929,0.494585)
+\path(0.957156,0.537641)(0.790401,0.174015)
+\allinethickness{0.0055348in}%
+\path(0.807364,0.192334)(0.808098,0.200697)
+\path(0.80171,0.186228)(0.803178,0.202954)
+\path(0.796055,0.180122)(0.798257,0.20521)
+\path(0.807022,0.201191)(0.793617,0.202367)
+\path(0.810836,0.196084)(0.793081,0.197642)
+\path(0.806749,0.19167)(0.792545,0.192917)
+\path(0.802662,0.187256)(0.792009,0.188191)
+\path(0.798575,0.182843)(0.791473,0.183466)
+\path(0.794488,0.178429)(0.790937,0.178741)
+\allinethickness{0.8pt}%
+\path(0.803586,0.202767)(0.794153,0.207092)(0.790401,0.174015)
+ (0.813019,0.198441)(0.803586,0.202767)
+\path(0.957156,0.537641)(0.937572,1.09205)
+\allinethickness{0.0055348in}%
+\path(0.938782,1.08718)(0.936611,1.08655)
+\path(0.939993,1.08231)(0.935649,1.08104)
+\path(0.941204,1.07743)(0.934688,1.07554)
+\path(0.942414,1.07256)(0.933727,1.07003)
+\path(0.943625,1.06769)(0.932765,1.06453)
+\path(0.944835,1.06282)(0.931804,1.05902)
+\path(0.946046,1.05794)(0.930842,1.05352)
+\path(0.947256,1.05307)(0.929881,1.04801)
+\path(0.948467,1.0482)(0.929251,1.04261)
+\path(0.931094,1.05496)(0.934635,1.0428)
+\path(0.933253,1.06732)(0.940334,1.043)
+\path(0.935413,1.07969)(0.946034,1.0432)
+\allinethickness{0.8pt}%
+\path(0.939306,1.04296)(0.949677,1.04333)(0.937572,1.09205)
+ (0.928935,1.0426)(0.939306,1.04296)
+\end{picture}%
diff --git a/graphics/epix/doc/camera.xp b/graphics/epix/doc/camera.xp
new file mode 100644
index 0000000000..66f8fdb334
--- /dev/null
+++ b/graphics/epix/doc/camera.xp
@@ -0,0 +1,86 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+const double ht(4);
+
+const P target(0,0,0);
+const P observer(0,-4,0);
+const P dtarg(-0.5,0,1);
+const double dx(0.375);
+
+// location of label
+const P obj_loc(1,0,0.25);
+
+P F(P arg)
+{
+ double x(arg.x2());
+ return (ht/(ht+x))*P(arg.x1(), 0, arg.x3());
+}
+
+P P1(0.75, -1, -0.25);
+P P2(1, -1.25, -0.75);
+P P3(0.5, -1.5, -0.5 );
+P midpt((1.0/3)*(P1+P2+P3));
+
+int main() {
+ bounding_box(P(-3.5,-3.5),P(3.5,2.5));
+ unitlength("0.375in");
+ picture(P(7,6));
+
+ begin();
+
+ camera.at(P(1.5,-10,3.5));
+ camera.range(10);
+
+ font_size("footnotesize");
+ right_angle(target, E_1, -E_2);
+
+ line(target, target+2*dx*E_1);
+ line(target, target+2*dx*E_3);
+
+ // grid(P(-3,0,-2), P(3,0,2), 6, 8);
+ grid(P(-3,0,-2), P(3,0,2));
+
+ masklabel(observer+E_1, P(2,0), "\\textbf{Sea}", r);
+ masklabel(observer+E_3, P(0,2), "\\textbf{Sky}", t);
+ masklabel(observer-E_2, P(-4,0), "\\textbf{Eye}", l);
+
+ masklabel(observer, P(-2,0), "Viewpoint", l);
+ dot(observer);
+
+ masklabel(P(3,0,2), P(-6,-2), "Canvas", bl);
+
+ line(observer, target);
+
+ fill(Black(0.5));
+ triangle(F(P1), F(P2), F(P3));
+
+ line(P1, F(P1));
+ line(P2, F(P2));
+ line(P3, F(P3));
+
+ line(observer, F(P1));
+ line(observer, F(P2));
+ line(observer, F(P3));
+
+ fill(Black(0.1));
+ triangle(P1, P2, P3);
+
+ line(obj_loc, midpt);
+ masklabel(obj_loc, P(0,0), "Object", t);
+
+ line(P(2,0,-1), F(midpt));
+ masklabel(P(2,0,-1), P(0,0), "Shadow", r);
+
+ masklabel(target+dtarg, P(0,0), "Target", t);
+ arrow(target+dtarg, target+0.1*dtarg, 0.5);
+ dot(target);
+
+ bold();
+ arrow(observer, observer+E_1, 0.5);
+ arrow(observer, observer-E_2, 0.5);
+ arrow(observer, observer+E_3, 0.5);
+
+ end();
+}
diff --git a/graphics/epix/doc/cb.eepic b/graphics/epix/doc/cb.eepic
new file mode 100644
index 0000000000..7df0354645
--- /dev/null
+++ b/graphics/epix/doc/cb.eepic
@@ -0,0 +1,25 @@
+%% Generated from cb.xp on Tue Jan 4 15:32:10 EST 2005 by
+%% ePiX-1.0.3
+%%
+%% Cartesian bounding box: [-2,2] x [-1,1]
+%% Actual size: 1.5in x 0.75in
+%% Figure offset: right by 0in, up by 0in
+%%
+\setlength{\unitlength}{1in}
+\begin{picture}(1.5,0.75)(-0,-0)
+%% ---
+\path(0,0.375)(1.5,0.375)
+\put(0,0.375){\makebox(0,0)[c]{\rule{0.5pt}{4pt}}}
+\put(0.375,0.375){\makebox(0,0)[c]{\rule{0.5pt}{4pt}}}
+\put(0.75,0.375){\makebox(0,0)[c]{\rule{0.5pt}{4pt}}}
+\put(1.125,0.375){\makebox(0,0)[c]{\rule{0.5pt}{4pt}}}
+\put(1.5,0.375){\makebox(0,0)[c]{\rule{0.5pt}{4pt}}}
+%% ---
+\path(0.75,0)(0.75,0.75)
+\put(0.75,0){\makebox(0,0)[c]{\rule{4pt}{0.5pt}}}
+\put(0.75,0.75){\makebox(0,0)[c]{\rule{4pt}{0.5pt}}}
+%% ---
+\thicklines
+\path(0,0.375)(0.375,0.75)(0.75,0.375)(1.125,0.75)(1.5,0.375)
+\put(0.75,-0.055348){\makebox(0,0)[t]{\code{cb}}}
+\end{picture}
diff --git a/graphics/epix/doc/cb.xp b/graphics/epix/doc/cb.xp
new file mode 100644
index 0000000000..e0434b483e
--- /dev/null
+++ b/graphics/epix/doc/cb.xp
@@ -0,0 +1,22 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+int main()
+{
+ bounding_box(P(-2,-1),P(2,1));
+ unitlength("1in");
+ picture(1.5,0.75);
+
+ begin();
+
+ h_axis(4);
+ v_axis(1);
+
+ bold();
+ plot(cb, x_min, x_max, 4);
+
+ label(P(0,y_min), P(0,-4), "\\code{cb}", b);
+
+ end();
+}
diff --git a/graphics/epix/doc/color_density.eepic b/graphics/epix/doc/color_density.eepic
new file mode 100644
index 0000000000..1b0ee79028
--- /dev/null
+++ b/graphics/epix/doc/color_density.eepic
@@ -0,0 +1,139 @@
+%% Generated from color_density.xp on Thu Jul 5 10:01:14 EDT 2007 by
+%% ePiX-1.1.6
+%%
+%% Cartesian bounding box: [-2,2] x [0,1.375]
+%% Actual size: 4 x 1.5in
+%% Figure offset: left by 0in, down by 0in
+%%
+\newrgbcolor{rgb_000000}{0 0 0}
+\newrgbcolor{rgb_005454}{0 0.329412 0.329412}
+\newrgbcolor{rgb_00a9a9}{0 0.662745 0.662745}
+\newrgbcolor{rgb_00fefe}{0 0.996078 0.996078}
+\newrgbcolor{rgb_00ffff}{0 1 1}
+\newrgbcolor{rgb_540000}{0.329412 0 0}
+\newrgbcolor{rgb_54ffff}{0.329412 1 1}
+\newrgbcolor{rgb_a90000}{0.662745 0 0}
+\newrgbcolor{rgb_a9ffff}{0.662745 1 1}
+\newrgbcolor{rgb_fe0000}{0.996078 0 0}
+\newrgbcolor{rgb_feffff}{0.996078 1 1}
+\newrgbcolor{rgb_ff0000}{1 0 0}
+\newrgbcolor{rgb_ff5454}{1 0.329412 0.329412}
+\newrgbcolor{rgb_ffa9a9}{1 0.662745 0.662745}
+\newrgbcolor{rgb_fffefe}{1 0.996078 0.996078}
+\psset{unit=1in,linewidth=0.4pt}
+\begin{pspicture}(4,1.5)(-0,-0)
+\psset{fillcolor=rgb_feffff}%
+\psline[fillstyle=solid]
+ (-0.123,1.22727)(0.127,1.22727)(0.127,1.5)(-0.123,1.5)(-0.123,1.22727)
+%%
+\psline(-0.123,1.22727)(0.127,1.22727)(0.127,1.5)(-0.123,1.5)(-0.123,1.22727)
+%%
+\psset{fillcolor=rgb_a9ffff}%
+\psline[fillstyle=solid]
+ (0.21,1.22727)(0.46,1.22727)(0.46,1.5)(0.21,1.5)(0.21,1.22727)
+%%
+\psline(0.21,1.22727)(0.46,1.22727)(0.46,1.5)(0.21,1.5)(0.21,1.22727)
+%%
+\psset{fillcolor=rgb_54ffff}%
+\psline[fillstyle=solid]
+ (0.543,1.22727)(0.793,1.22727)(0.793,1.5)(0.543,1.5)(0.543,1.22727)
+%%
+\psline(0.543,1.22727)(0.793,1.22727)(0.793,1.5)(0.543,1.5)(0.543,1.22727)
+%%
+\psset{fillcolor=rgb_00fefe}%
+\psline[fillstyle=solid]
+ (0.876,1.22727)(1.126,1.22727)(1.126,1.5)(0.876,1.5)(0.876,1.22727)
+%%
+\psline(0.876,1.22727)(1.126,1.22727)(1.126,1.5)(0.876,1.5)(0.876,1.22727)
+%%
+\psset{fillcolor=rgb_00a9a9}%
+\psline[fillstyle=solid]
+ (1.209,1.22727)(1.459,1.22727)(1.459,1.5)(1.209,1.5)(1.209,1.22727)
+%%
+\psline(1.209,1.22727)(1.459,1.22727)(1.459,1.5)(1.209,1.5)(1.209,1.22727)
+%%
+\psset{fillcolor=rgb_005454}%
+\psline[fillstyle=solid]
+ (1.542,1.22727)(1.792,1.22727)(1.792,1.5)(1.542,1.5)(1.542,1.22727)
+%%
+\psline(1.542,1.22727)(1.792,1.22727)(1.792,1.5)(1.542,1.5)(1.542,1.22727)
+%%
+\psset{fillcolor=rgb_000000}%
+\psline[fillstyle=solid]
+ (1.875,1.22727)(2.125,1.22727)(2.125,1.5)(1.875,1.5)(1.875,1.22727)
+%%
+\psline(1.875,1.22727)(2.125,1.22727)(2.125,1.5)(1.875,1.5)(1.875,1.22727)
+%%
+\psset{fillcolor=rgb_540000}%
+\psline[fillstyle=solid]
+ (2.208,1.22727)(2.458,1.22727)(2.458,1.5)(2.208,1.5)(2.208,1.22727)
+%%
+\psline(2.208,1.22727)(2.458,1.22727)(2.458,1.5)(2.208,1.5)(2.208,1.22727)
+%%
+\psset{fillcolor=rgb_a90000}%
+\psline[fillstyle=solid]
+ (2.541,1.22727)(2.791,1.22727)(2.791,1.5)(2.541,1.5)(2.541,1.22727)
+%%
+\psline(2.541,1.22727)(2.791,1.22727)(2.791,1.5)(2.541,1.5)(2.541,1.22727)
+%%
+\psset{fillcolor=rgb_fe0000}%
+\psline[fillstyle=solid]
+ (2.874,1.22727)(3.124,1.22727)(3.124,1.5)(2.874,1.5)(2.874,1.22727)
+%%
+\psline(2.874,1.22727)(3.124,1.22727)(3.124,1.5)(2.874,1.5)(2.874,1.22727)
+%%
+\psset{fillcolor=rgb_ff5454}%
+\psline[fillstyle=solid]
+ (3.207,1.22727)(3.457,1.22727)(3.457,1.5)(3.207,1.5)(3.207,1.22727)
+%%
+\psline(3.207,1.22727)(3.457,1.22727)(3.457,1.5)(3.207,1.5)(3.207,1.22727)
+%%
+\psset{fillcolor=rgb_ffa9a9}%
+\psline[fillstyle=solid]
+ (3.54,1.22727)(3.79,1.22727)(3.79,1.5)(3.54,1.5)(3.54,1.22727)
+%%
+\psline(3.54,1.22727)(3.79,1.22727)(3.79,1.5)(3.54,1.5)(3.54,1.22727)
+%%
+\psset{fillcolor=rgb_fffefe}%
+\psline[fillstyle=solid]
+ (3.873,1.22727)(4.123,1.22727)(4.123,1.5)(3.873,1.5)(3.873,1.22727)
+%%
+\psline(3.873,1.22727)(4.123,1.22727)(4.123,1.5)(3.873,1.5)(3.873,1.22727)
+%%
+\psline(0,0)(4,0)
+%%
+\rput(0,0){\makebox(0,0){{$\rule{0.5pt}{4pt}$}}}
+\rput(1,0){\makebox(0,0){{$\rule{0.5pt}{4pt}$}}}
+\rput(2,0){\makebox(0,0){{$\rule{0.5pt}{4pt}$}}}
+\rput(3,0){\makebox(0,0){{$\rule{0.5pt}{4pt}$}}}
+\rput(4,0){\makebox(0,0){{$\rule{0.5pt}{4pt}$}}}
+\psline(2,0)(2,1.09091)
+%%
+\rput(2,0){\makebox(0,0){{$\rule{4pt}{0.5pt}$}}}
+\rput(2,1.09091){\makebox(0,0){{$\rule{4pt}{0.5pt}$}}}
+\rput(0,-0.055348){\makebox(0,0)[t]{{$-2$}}}
+\rput(1,-0.055348){\makebox(0,0)[t]{{$-1$}}}
+\rput(2,-0.055348){\makebox(0,0)[t]{{$\phantom{-}0$}}}
+\rput(3,-0.055348){\makebox(0,0)[t]{{$\phantom{-}1$}}}
+\rput(4,-0.055348){\makebox(0,0)[t]{{$\phantom{-}2$}}}
+\psset{linecolor=rgb_00ffff}%
+\psline(0,1.09091)(1,1.09091)
+%%
+\psline(1,1.09091)(2,0)
+%%
+\psline(2,0)(3,0)
+%%
+\psline(3,0)(4,1.09091)
+%%
+\psset{linewidth=0.8pt}%
+\psset{linecolor=rgb_ff0000}%
+\psline
+ (0,1.09091)(1,0)
+%%
+\psline(1,0)(2,0)
+%%
+\psline(2,0)(3,1.09091)
+%%
+\psline(3,1.09091)(4,1.09091)
+%%
+\end{pspicture}
diff --git a/graphics/epix/doc/color_density.xp b/graphics/epix/doc/color_density.xp
new file mode 100644
index 0000000000..f561fa43e3
--- /dev/null
+++ b/graphics/epix/doc/color_density.xp
@@ -0,0 +1,42 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+double dX(0.125), dY(0.25);
+
+int main()
+{
+ picture(P(-2, 0), P(2, 1.125 + dY), "4 x 1.5in");
+
+ begin();
+
+ fill();
+ for (int i=-6; i<=6; ++i)
+ {
+ const double x(0.333*i);
+ fill(Red(x));
+ rect(P(x-dX, 1.125), P(x+dX, 1.125+dY));
+ }
+ nofill();
+
+ h_axis(4);
+ v_axis(P(0,0), P(0,1), 1);
+
+ h_axis_labels(4, P(0,-4), b);
+ red(-1);
+ line(P(-2,1), P(-1,1));
+ line(P(-1,1), P(0,0));
+ line(P(0,0), P(1,0));
+ line(P(1,0), P(2,1));
+
+ red();
+ bold();
+ line(P(-2,1), P(-1,0));
+ line(P(-1,0), P(0,0));
+
+ line(P(0,0), P(1,1));
+ line(P(1,1), P(2,1));
+
+ pst_format();
+ end();
+}
diff --git a/graphics/epix/doc/dots.eepic b/graphics/epix/doc/dots.eepic
new file mode 100644
index 0000000000..839663481d
--- /dev/null
+++ b/graphics/epix/doc/dots.eepic
@@ -0,0 +1,19 @@
+%% Generated from dots.xp on Tue Jan 4 15:32:12 EST 2005 by
+%% ePiX-1.0.3
+%%
+%% Cartesian bounding box: [0,8] x [0,1]
+%% Actual size: 72pt x 12pt
+%% Figure offset: right by 10pt, up by 2pt
+%%
+\setlength{\unitlength}{1pt}
+\begin{picture}(72,12)(-10,-2)
+%% ---
+\put(0,0){\makebox(0,0)[c]{{\circle*{4.5}}}}
+\put(9,0){\makebox(0,0)[c]{{\circle*{3}}}}
+\put(18,0){\makebox(0,0)[c]{{\circle*{2}}}}
+\put(36,0){\makebox(0,0)[c]{\rule{3pt}{3pt}}}
+\put(45,0){\makebox(0,0)[c]{\rule{2pt}{2pt}}}
+\path(58.5,0)(78.75,0)
+\put(63,0){\makebox(0,0)[c]{{\circle{4.5}}}}
+\whiten\put(72,0){\makebox(0,0)[c]{{\circle{3}}}}
+\end{picture}
diff --git a/graphics/epix/doc/dots.xp b/graphics/epix/doc/dots.xp
new file mode 100644
index 0000000000..1f13fb6099
--- /dev/null
+++ b/graphics/epix/doc/dots.xp
@@ -0,0 +1,28 @@
+/* -*-ePiX-*- */
+/* dots.c -- Dot primitives */
+#include "epix.h"
+using namespace ePiX;
+
+int main()
+{
+ unitlength("1pt");
+ bounding_box(P(0,0), P(8,1));
+ picture(P(72,12));
+ offset(P(10,2));
+
+ begin();
+
+ spot(P(0,0));
+ dot(P(1,0));
+ ddot(P(2,0));
+
+ box(P(4,0));
+ bbox(P(5,0));
+
+ line(P(6.5,0), P(8.75,0));
+
+ ring(P(7,0));
+ circ(P(8,0));
+
+ end();
+}
diff --git a/graphics/epix/doc/ePiX.eepic b/graphics/epix/doc/ePiX.eepic
new file mode 100644
index 0000000000..4bdec31118
--- /dev/null
+++ b/graphics/epix/doc/ePiX.eepic
@@ -0,0 +1,1099 @@
+%% Generated from ePiX.xp on Sat Sep 22 20:16:03 EDT 2007 by
+%% ePiX-1.2.0
+%%
+%% Cartesian bounding box: [-0.5,5.75] x [2,10]
+%% Actual size: 4 x 7.5in
+%% Figure offset: left by 0in, down by 0in
+%%
+%% usepackages epic,eepic,xcolor
+%%
+\xdefinecolor{cmy_000019}{cmyk}{0,0,0.0980392,0}%
+\xdefinecolor{rgb_0000ff}{rgb}{0,0,1}%
+\xdefinecolor{rgb_009800}{rgb}{0,0.596078,0}%
+\xdefinecolor{rgb_7f7f7f}{rgb}{0.498039,0.498039,0.498039}%
+\xdefinecolor{rgb_ff0000}{rgb}{1,0,0}%
+\setlength{\unitlength}{1in}%
+\begin{picture}(4,7.5)(0,0)%
+\color{rgb_7f7f7f}%
+\path(0.32,7.03125)(0.96,7.03125)
+\path(0.902922,7.02606)(0.931461,7.02606)
+\path(0.902922,7.03125)(0.96,7.03125)
+\path(0.902922,7.03644)(0.931461,7.03644)
+\path(0.954811,7.03031)(0.954811,7.03219)
+\path(0.949622,7.02936)(0.949622,7.03314)
+\path(0.944433,7.02842)(0.944433,7.03408)
+\path(0.939244,7.02748)(0.939244,7.03502)
+\path(0.934056,7.02653)(0.934056,7.03597)
+\path(0.928867,7.02559)(0.928867,7.03691)
+\path(0.923678,7.02465)(0.923678,7.03785)
+\path(0.918489,7.0237)(0.918489,7.0388)
+\path(0.9133,7.02276)(0.9133,7.03974)
+\path(0.908111,7.02182)(0.908111,7.04068)
+\path(0.902922,7.02087)(0.902922,7.04163)
+\path(0.902922,7.03125)(0.902922,7.02087)(0.96,7.03125)
+ (0.902922,7.04163)(0.902922,7.03125)
+\put(0.32,7.0866){\makebox(0,0)[b]{\hbox{\color{rgb_7f7f7f}\footnotesize \texttt{xp}, \texttt{flx}}}}
+\put(0.32,7.03125){\color{rgb_7f7f7f}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\put(0.97999,7.08981){\makebox(0,0)[b]{\hbox{\color{rgb_7f7f7f}\footnotesize \texttt{eepic}}}}
+\put(0.96,7.03125){\color{rgb_7f7f7f}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\allinethickness{1.2pt}%
+\color{rgb_ff0000}%
+\path(0.96,7.03125)(0.963187,7.03115)(0.966347,7.03086)
+ (0.969482,7.03039)(0.972591,7.02972)(0.975676,7.02888)
+ (0.978736,7.02785)(0.981772,7.02665)(0.984785,7.02528)
+ (0.987774,7.02374)(0.990741,7.02203)(0.993685,7.02016)
+ (0.996608,7.01813)(0.999509,7.01594)(1.00239,7.0136)
+ (1.00525,7.01111)(1.00809,7.00847)(1.01091,7.00569)
+ (1.01371,7.00277)(1.01649,6.99972)(1.01926,6.99653)
+ (1.02201,6.99321)(1.02474,6.98976)(1.02745,6.98619)(1.03014,6.9825)
+ (1.03282,6.97869)(1.03549,6.97477)(1.03814,6.97074)(1.04077,6.9666)
+ (1.04339,6.96235)(1.046,6.95801)(1.04859,6.95356)(1.05117,6.94903)
+ (1.05374,6.9444)(1.0563,6.93968)(1.05884,6.93488)(1.06138,6.93)
+ (1.0639,6.92504)(1.06641,6.92)(1.06891,6.9149)(1.07141,6.90972)
+ (1.07389,6.90448)(1.07637,6.89918)(1.07884,6.89382)(1.0813,6.8884)
+ (1.08375,6.88293)(1.0862,6.87742)(1.08864,6.87185)(1.09107,6.86625)
+ (1.0935,6.86061)(1.09593,6.85493)(1.09835,6.84921)(1.10076,6.84347)
+ (1.10317,6.8377)(1.10558,6.83191)(1.10799,6.8261)(1.1104,6.82028)
+ (1.1128,6.81444)(1.1152,6.80859)(1.1176,6.80273)(1.12,6.79688)
+ (1.1224,6.79102)(1.1248,6.78516)(1.1272,6.77931)(1.1296,6.77347)
+ (1.13201,6.76765)(1.13442,6.76184)(1.13683,6.75605)
+ (1.13924,6.75028)(1.14165,6.74454)(1.14407,6.73882)(1.1465,6.73314)
+ (1.14893,6.7275)(1.15136,6.7219)(1.1538,6.71633)(1.15625,6.71082)
+ (1.1587,6.70535)(1.16116,6.69993)(1.16363,6.69457)(1.16611,6.68927)
+ (1.16859,6.68403)(1.17109,6.67885)(1.17359,6.67375)(1.1761,6.66871)
+ (1.17862,6.66375)(1.18116,6.65887)(1.1837,6.65407)(1.18626,6.64935)
+ (1.18883,6.64472)(1.19141,6.64019)(1.194,6.63574)(1.19661,6.6314)
+ (1.19923,6.62715)(1.20186,6.62301)(1.20451,6.61898)
+ (1.20718,6.61506)(1.20986,6.61125)(1.21255,6.60756)
+ (1.21526,6.60399)(1.21799,6.60054)(1.22074,6.59722)
+ (1.22351,6.59403)(1.22629,6.59098)(1.22909,6.58806)
+ (1.23191,6.58528)(1.23475,6.58264)(1.23761,6.58015)
+ (1.24049,6.57781)(1.24339,6.57562)(1.24631,6.57359)
+ (1.24926,6.57172)(1.25223,6.57001)(1.25522,6.56847)(1.25823,6.5671)
+ (1.26126,6.5659)(1.26432,6.56487)(1.26741,6.56403)(1.27052,6.56336)
+ (1.27365,6.56289)(1.27681,6.5626)(1.28,6.5625)
+\path(1.28,6.5625)(1.6,6.5625)
+\allinethickness{0.0055348in}%
+\path(1.59481,6.56156)(1.59402,6.56359)
+\path(1.58962,6.56061)(1.58804,6.56467)
+\path(1.58443,6.55967)(1.58207,6.56576)
+\path(1.57924,6.55873)(1.57609,6.56685)
+\path(1.57406,6.55778)(1.57011,6.56793)
+\path(1.56887,6.55684)(1.56413,6.56902)
+\path(1.56368,6.5559)(1.55815,6.57011)
+\path(1.55849,6.55495)(1.55217,6.5712)
+\path(1.5533,6.55401)(1.5462,6.57228)
+\path(1.54811,6.55307)(1.54292,6.56641)
+\path(1.55244,6.57115)(1.54292,6.56745)
+\path(1.56195,6.56942)(1.54292,6.56202)
+\path(1.57146,6.56769)(1.54292,6.55659)
+\path(1.58097,6.56596)(1.54755,6.55296)
+\path(1.59049,6.56423)(1.57377,6.55773)
+\allinethickness{1.2pt}%
+\path(1.54292,6.5625)(1.54292,6.55212)(1.6,6.5625)(1.54292,6.57288)(1.54292,6.5625)
+\path(1.6,6.5625)(2.24,6.5625)
+\allinethickness{0.0055348in}%
+\path(2.18926,6.57172)(2.18292,6.56591)
+\path(2.19561,6.57057)(2.18292,6.55895)
+\path(2.20195,6.56942)(2.1831,6.55216)
+\path(2.20829,6.56827)(2.19259,6.55388)
+\path(2.21463,6.56711)(2.20207,6.5556)
+\path(2.22097,6.56596)(2.21155,6.55733)
+\path(2.22732,6.56481)(2.22103,6.55905)
+\path(2.23366,6.56365)(2.23052,6.56078)
+\path(2.18292,6.5602)(2.18926,6.55328)
+\path(2.18292,6.56827)(2.19561,6.55443)
+\path(2.18674,6.57218)(2.20195,6.55558)
+\path(2.19562,6.57057)(2.20829,6.55673)
+\path(2.20449,6.56896)(2.21463,6.55789)
+\path(2.21337,6.56734)(2.22097,6.55904)
+\path(2.22225,6.56573)(2.22732,6.56019)
+\path(2.23112,6.56411)(2.23366,6.56135)
+\allinethickness{1.2pt}%
+\path(2.18292,6.5625)(2.18292,6.55212)(2.24,6.5625)
+ (2.18292,6.57288)(2.18292,6.5625)
+\put(1.6,6.61785){\makebox(0,0)[b]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\footnotesize \texttt{dvi}}}}}
+\put(1.6,6.5625){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\put(2.21793,6.59482){\makebox(0,0)[br]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\footnotesize \texttt{ps}}}}}
+\put(2.24,6.5625){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\path(0.96,6.09375)(0.963187,6.09385)(0.966347,6.09414)
+ (0.969482,6.09461)(0.972591,6.09528)(0.975676,6.09612)
+ (0.978736,6.09715)(0.981772,6.09835)(0.984785,6.09972)
+ (0.987774,6.10126)(0.990741,6.10297)(0.993685,6.10484)
+ (0.996608,6.10687)(0.999509,6.10906)(1.00239,6.1114)
+ (1.00525,6.11389)(1.00809,6.11653)(1.01091,6.11931)
+ (1.01371,6.12223)(1.01649,6.12528)(1.01926,6.12847)
+ (1.02201,6.13179)(1.02474,6.13524)(1.02745,6.13881)(1.03014,6.1425)
+ (1.03282,6.14631)(1.03549,6.15023)(1.03814,6.15426)(1.04077,6.1584)
+ (1.04339,6.16265)(1.046,6.16699)(1.04859,6.17144)(1.05117,6.17597)
+ (1.05374,6.1806)(1.0563,6.18532)(1.05884,6.19012)(1.06138,6.195)
+ (1.0639,6.19996)(1.06641,6.205)(1.06891,6.2101)(1.07141,6.21528)
+ (1.07389,6.22052)(1.07637,6.22582)(1.07884,6.23118)(1.0813,6.2366)
+ (1.08375,6.24207)(1.0862,6.24758)(1.08864,6.25315)(1.09107,6.25875)
+ (1.0935,6.26439)(1.09593,6.27007)(1.09835,6.27579)(1.10076,6.28153)
+ (1.10317,6.2873)(1.10558,6.29309)(1.10799,6.2989)(1.1104,6.30472)
+ (1.1128,6.31056)(1.1152,6.31641)(1.1176,6.32227)(1.12,6.32812)
+ (1.1224,6.33398)(1.1248,6.33984)(1.1272,6.34569)(1.1296,6.35153)
+ (1.13201,6.35735)(1.13442,6.36316)(1.13683,6.36895)
+ (1.13924,6.37472)(1.14165,6.38046)(1.14407,6.38618)(1.1465,6.39186)
+ (1.14893,6.3975)(1.15136,6.4031)(1.1538,6.40867)(1.15625,6.41418)
+ (1.1587,6.41965)(1.16116,6.42507)(1.16363,6.43043)(1.16611,6.43573)
+ (1.16859,6.44097)(1.17109,6.44615)(1.17359,6.45125)(1.1761,6.45629)
+ (1.17862,6.46125)(1.18116,6.46613)(1.1837,6.47093)(1.18626,6.47565)
+ (1.18883,6.48028)(1.19141,6.48481)(1.194,6.48926)(1.19661,6.4936)
+ (1.19923,6.49785)(1.20186,6.50199)(1.20451,6.50602)
+ (1.20718,6.50994)(1.20986,6.51375)(1.21255,6.51744)
+ (1.21526,6.52101)(1.21799,6.52446)(1.22074,6.52778)
+ (1.22351,6.53097)(1.22629,6.53402)(1.22909,6.53694)
+ (1.23191,6.53972)(1.23475,6.54236)(1.23761,6.54485)
+ (1.24049,6.54719)(1.24339,6.54938)(1.24631,6.55141)
+ (1.24926,6.55328)(1.25223,6.55499)(1.25522,6.55653)(1.25823,6.5579)
+ (1.26126,6.5591)(1.26432,6.56013)(1.26741,6.56097)(1.27052,6.56164)
+ (1.27365,6.56211)(1.27681,6.5624)(1.28,6.5625)
+\put(0.97999,6.03519){\makebox(0,0)[t]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\footnotesize \texttt{tex}}}}}
+\put(0.96,6.09375){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\path(2.24,6.5625)(2.24533,6.55472)(2.25067,6.54701)(2.256,6.53936)
+ (2.26133,6.53177)(2.26667,6.52425)(2.272,6.5168)(2.27733,6.50941)
+ (2.28267,6.50208)(2.288,6.49482)(2.29333,6.48763)(2.29867,6.4805)
+ (2.304,6.47344)(2.30933,6.46644)(2.31467,6.45951)(2.32,6.45264)
+ (2.32533,6.44583)(2.33067,6.4391)(2.336,6.43242)(2.34133,6.42581)
+ (2.34667,6.41927)(2.352,6.41279)(2.35733,6.40638)(2.36267,6.40003)
+ (2.368,6.39375)(2.37333,6.38753)(2.37867,6.38138)(2.384,6.37529)
+ (2.38933,6.36927)(2.39467,6.36331)(2.4,6.35742)(2.40533,6.3516)
+ (2.41067,6.34583)(2.416,6.34014)(2.42133,6.33451)(2.42667,6.32894)
+ (2.432,6.32344)(2.43733,6.318)(2.44267,6.31263)(2.448,6.30732)
+ (2.45333,6.30208)(2.45867,6.29691)(2.464,6.2918)(2.46933,6.28675)
+ (2.47467,6.28177)(2.48,6.27686)(2.48533,6.27201)(2.49067,6.26722)
+ (2.496,6.2625)(2.50133,6.25785)(2.50667,6.25326)(2.512,6.24873)
+ (2.51733,6.24427)(2.52267,6.23988)(2.528,6.23555)(2.53333,6.23128)
+ (2.53867,6.22708)(2.544,6.22295)(2.54933,6.21888)(2.55467,6.21488)
+ (2.56,6.21094)(2.56533,6.20706)(2.57067,6.20326)(2.576,6.19951)
+ (2.58133,6.19583)(2.58667,6.19222)(2.592,6.18867)(2.59733,6.18519)
+ (2.60267,6.18177)(2.608,6.17842)(2.61333,6.17513)(2.61867,6.17191)
+ (2.624,6.16875)(2.62933,6.16566)(2.63467,6.16263)(2.64,6.15967)
+ (2.64533,6.15677)(2.65067,6.15394)(2.656,6.15117)(2.66133,6.14847)
+ (2.66667,6.14583)(2.672,6.14326)(2.67733,6.14076)(2.68267,6.13831)
+ (2.688,6.13594)(2.69333,6.13363)(2.69867,6.13138)(2.704,6.1292)
+ (2.70933,6.12708)(2.71467,6.12503)(2.72,6.12305)(2.72533,6.12113)
+ (2.73067,6.11927)(2.736,6.11748)(2.74133,6.11576)(2.74667,6.1141)
+ (2.752,6.1125)(2.75733,6.11097)(2.76267,6.10951)(2.768,6.10811)
+ (2.77333,6.10677)(2.77867,6.1055)(2.784,6.1043)(2.78933,6.10316)
+ (2.79467,6.10208)(2.8,6.10107)(2.80533,6.10013)(2.81067,6.09925)
+ (2.816,6.09844)(2.82133,6.09769)(2.82667,6.09701)(2.832,6.09639)
+ (2.83733,6.09583)(2.84267,6.09535)(2.848,6.09492)(2.85333,6.09456)
+ (2.85867,6.09427)(2.864,6.09404)(2.86933,6.09388)(2.87467,6.09378)(2.88,6.09375)
+\allinethickness{0.0055348in}%
+\path(2.82289,6.08916)(2.83102,6.08515)
+\path(2.82293,6.09461)(2.83919,6.08659)
+\path(2.82296,6.10005)(2.84735,6.08802)
+\path(2.82634,6.10385)(2.85551,6.08945)
+\path(2.84423,6.10048)(2.86367,6.09088)
+\path(2.86211,6.09712)(2.87184,6.09232)
+\path(2.8738,6.09266)(2.87482,6.09473)
+\path(2.8676,6.09157)(2.86963,6.0957)
+\path(2.8614,6.09048)(2.86445,6.09668)
+\path(2.8552,6.0894)(2.85927,6.09765)
+\path(2.84899,6.08831)(2.85408,6.09863)
+\path(2.84279,6.08722)(2.8489,6.0996)
+\path(2.83659,6.08613)(2.84372,6.10058)
+\path(2.83039,6.08504)(2.83854,6.10155)
+\path(2.82419,6.08395)(2.83335,6.10253)
+\path(2.82292,6.09285)(2.82817,6.1035)
+\allinethickness{1.2pt}%
+\path(2.82292,6.0941)(2.82286,6.08372)(2.88,6.09375)
+ (2.82299,6.10448)(2.82292,6.0941)
+\put(2.93535,6.09375){\makebox(0,0)[l]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\footnotesize \texttt{pdf}}}}}
+\put(2.88,6.09375){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\allinethickness{0.4pt}%
+\color{rgb_7f7f7f}%
+\path(2.24,6.5625)(2.24533,6.57028)(2.25067,6.57799)(2.256,6.58564)
+ (2.26133,6.59323)(2.26667,6.60075)(2.272,6.6082)(2.27733,6.61559)
+ (2.28267,6.62292)(2.288,6.63018)(2.29333,6.63737)(2.29867,6.6445)
+ (2.304,6.65156)(2.30933,6.65856)(2.31467,6.66549)(2.32,6.67236)
+ (2.32533,6.67917)(2.33067,6.6859)(2.336,6.69258)(2.34133,6.69919)
+ (2.34667,6.70573)(2.352,6.71221)(2.35733,6.71862)(2.36267,6.72497)
+ (2.368,6.73125)(2.37333,6.73747)(2.37867,6.74362)(2.384,6.74971)
+ (2.38933,6.75573)(2.39467,6.76169)(2.4,6.76758)(2.40533,6.7734)
+ (2.41067,6.77917)(2.416,6.78486)(2.42133,6.79049)(2.42667,6.79606)
+ (2.432,6.80156)(2.43733,6.807)(2.44267,6.81237)(2.448,6.81768)
+ (2.45333,6.82292)(2.45867,6.82809)(2.464,6.8332)(2.46933,6.83825)
+ (2.47467,6.84323)(2.48,6.84814)(2.48533,6.85299)(2.49067,6.85778)
+ (2.496,6.8625)(2.50133,6.86715)(2.50667,6.87174)(2.512,6.87627)
+ (2.51733,6.88073)(2.52267,6.88512)(2.528,6.88945)(2.53333,6.89372)
+ (2.53867,6.89792)(2.544,6.90205)(2.54933,6.90612)(2.55467,6.91012)
+ (2.56,6.91406)(2.56533,6.91794)(2.57067,6.92174)(2.576,6.92549)
+ (2.58133,6.92917)(2.58667,6.93278)(2.592,6.93633)(2.59733,6.93981)
+ (2.60267,6.94323)(2.608,6.94658)(2.61333,6.94987)(2.61867,6.95309)
+ (2.624,6.95625)(2.62933,6.95934)(2.63467,6.96237)(2.64,6.96533)
+ (2.64533,6.96823)(2.65067,6.97106)(2.656,6.97383)(2.66133,6.97653)
+ (2.66667,6.97917)(2.672,6.98174)(2.67733,6.98424)(2.68267,6.98669)
+ (2.688,6.98906)(2.69333,6.99137)(2.69867,6.99362)(2.704,6.9958)
+ (2.70933,6.99792)(2.71467,6.99997)(2.72,7.00195)(2.72533,7.00387)
+ (2.73067,7.00573)(2.736,7.00752)(2.74133,7.00924)(2.74667,7.0109)
+ (2.752,7.0125)(2.75733,7.01403)(2.76267,7.01549)(2.768,7.01689)
+ (2.77333,7.01823)(2.77867,7.0195)(2.784,7.0207)(2.78933,7.02184)
+ (2.79467,7.02292)(2.8,7.02393)(2.80533,7.02487)(2.81067,7.02575)
+ (2.816,7.02656)(2.82133,7.02731)(2.82667,7.02799)(2.832,7.02861)
+ (2.83733,7.02917)(2.84267,7.02965)(2.848,7.03008)(2.85333,7.03044)
+ (2.85867,7.03073)(2.864,7.03096)(2.86933,7.03112)(2.87467,7.03122)(2.88,7.03125)
+\path(2.87464,7.03024)(2.87481,7.03216)
+\path(2.86927,7.02923)(2.86961,7.03307)
+\path(2.86391,7.02822)(2.86442,7.03399)
+\path(2.85855,7.02721)(2.85922,7.0349)
+\path(2.85318,7.02621)(2.85403,7.03581)
+\path(2.84782,7.0252)(2.84883,7.03672)
+\path(2.84246,7.02419)(2.84364,7.03763)
+\path(2.8371,7.02318)(2.83844,7.03854)
+\path(2.83173,7.02217)(2.83325,7.03946)
+\path(2.82637,7.02116)(2.82805,7.04037)
+\path(2.87938,7.03113)(2.82289,7.03609)
+\path(2.86058,7.0276)(2.82292,7.0309)
+\path(2.84178,7.02406)(2.82296,7.02571)
+\path(2.82292,7.0309)(2.82299,7.02052)(2.88,7.03125)
+ (2.82286,7.04128)(2.82292,7.0309)
+\put(2.86001,7.08981){\makebox(0,0)[b]{\hbox{\color{rgb_7f7f7f}\footnotesize \texttt{eps}}}}
+\put(2.88,7.03125){\color{rgb_7f7f7f}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\path(2.88,7.03125)(3.52,7.03125)
+\path(3.47434,7.03955)(3.46292,7.03623)
+\path(3.48575,7.03748)(3.46292,7.03083)
+\path(3.49717,7.0354)(3.46292,7.02543)
+\path(3.50858,7.03333)(3.4706,7.02227)
+\path(3.46292,7.03964)(3.46811,7.02182)
+\path(3.46808,7.04069)(3.4733,7.02276)
+\path(3.47385,7.03964)(3.47849,7.0237)
+\path(3.47962,7.03859)(3.48368,7.02465)
+\path(3.48539,7.03754)(3.48887,7.02559)
+\path(3.49116,7.03649)(3.49406,7.02653)
+\path(3.49692,7.03545)(3.49924,7.02748)
+\path(3.50269,7.0344)(3.50443,7.02842)
+\path(3.50846,7.03335)(3.50962,7.02936)
+\path(3.51423,7.0323)(3.51481,7.03031)
+\path(3.46292,7.03125)(3.46292,7.02087)(3.52,7.03125)
+ (3.46292,7.04163)(3.46292,7.03125)
+\put(3.57535,7.03125){\makebox(0,0)[l]{\hbox{\color{rgb_7f7f7f}\footnotesize \begin{minipage}{0.225in}\texttt{png mng gif}\end{minipage}}}}
+\put(3.52,7.03125){\color{rgb_7f7f7f}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\put(1.92,6.09375){\makebox(0,0)[c]{\hbox{\color{rgb_009800}\texttt{\Large laps}}}}
+\allinethickness{1.2pt}%
+\color{rgb_ff0000}%
+\path(0.32,5.15625)(0.96,5.15625)
+\allinethickness{0.0055348in}%
+\path(0.902922,5.15435)(0.90863,5.14691)
+\path(0.902922,5.16284)(0.914338,5.14795)
+\path(0.907102,5.16587)(0.920046,5.14899)
+\path(0.914659,5.16449)(0.925753,5.15002)
+\path(0.922216,5.16312)(0.931461,5.15106)
+\path(0.929773,5.16175)(0.937169,5.1521)
+\path(0.93733,5.16037)(0.942877,5.15314)
+\path(0.944886,5.159)(0.948584,5.15417)
+\path(0.952443,5.15762)(0.954292,5.15521)
+\path(0.948429,5.15415)(0.952865,5.15755)
+\path(0.936859,5.15204)(0.945731,5.15884)
+\path(0.925288,5.14994)(0.938596,5.16014)
+\path(0.913717,5.14783)(0.931461,5.16144)
+\path(0.902922,5.14633)(0.924326,5.16274)
+\path(0.902922,5.15309)(0.917192,5.16403)
+\path(0.902922,5.15986)(0.910057,5.16533)
+\allinethickness{1.2pt}%
+\path(0.902922,5.15625)(0.902922,5.14587)(0.96,5.15625)
+ (0.902922,5.16663)(0.902922,5.15625)
+\put(0.32,5.2116){\makebox(0,0)[b]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\texttt{\footnotesize \texttt{xp}, \texttt{flx}}}}}}
+\put(0.32,5.15625){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\put(0.97999,5.21481){\makebox(0,0)[b]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\texttt{\footnotesize \texttt{eepic}}}}}}
+\put(0.96,5.15625){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\allinethickness{0.4pt}%
+\color{rgb_7f7f7f}%
+\path(0.96,5.15625)(0.963187,5.15615)(0.966347,5.15586)
+ (0.969482,5.15539)(0.972591,5.15472)(0.975676,5.15388)
+ (0.978736,5.15285)(0.981772,5.15165)(0.984785,5.15028)
+ (0.987774,5.14874)(0.990741,5.14703)(0.993685,5.14516)
+ (0.996608,5.14313)(0.999509,5.14094)(1.00239,5.1386)
+ (1.00525,5.13611)(1.00809,5.13347)(1.01091,5.13069)
+ (1.01371,5.12777)(1.01649,5.12472)(1.01926,5.12153)
+ (1.02201,5.11821)(1.02474,5.11476)(1.02745,5.11119)(1.03014,5.1075)
+ (1.03282,5.10369)(1.03549,5.09977)(1.03814,5.09574)(1.04077,5.0916)
+ (1.04339,5.08735)(1.046,5.08301)(1.04859,5.07856)(1.05117,5.07403)
+ (1.05374,5.0694)(1.0563,5.06468)(1.05884,5.05988)(1.06138,5.055)
+ (1.0639,5.05004)(1.06641,5.045)(1.06891,5.0399)(1.07141,5.03472)
+ (1.07389,5.02948)(1.07637,5.02418)(1.07884,5.01882)(1.0813,5.0134)
+ (1.08375,5.00793)(1.0862,5.00242)(1.08864,4.99685)(1.09107,4.99125)
+ (1.0935,4.98561)(1.09593,4.97993)(1.09835,4.97421)(1.10076,4.96847)
+ (1.10317,4.9627)(1.10558,4.95691)(1.10799,4.9511)(1.1104,4.94528)
+ (1.1128,4.93944)(1.1152,4.93359)(1.1176,4.92773)(1.12,4.92188)
+ (1.1224,4.91602)(1.1248,4.91016)(1.1272,4.90431)(1.1296,4.89847)
+ (1.13201,4.89265)(1.13442,4.88684)(1.13683,4.88105)
+ (1.13924,4.87528)(1.14165,4.86954)(1.14407,4.86382)(1.1465,4.85814)
+ (1.14893,4.8525)(1.15136,4.8469)(1.1538,4.84133)(1.15625,4.83582)
+ (1.1587,4.83035)(1.16116,4.82493)(1.16363,4.81957)(1.16611,4.81427)
+ (1.16859,4.80903)(1.17109,4.80385)(1.17359,4.79875)(1.1761,4.79371)
+ (1.17862,4.78875)(1.18116,4.78387)(1.1837,4.77907)(1.18626,4.77435)
+ (1.18883,4.76972)(1.19141,4.76519)(1.194,4.76074)(1.19661,4.7564)
+ (1.19923,4.75215)(1.20186,4.74801)(1.20451,4.74398)
+ (1.20718,4.74006)(1.20986,4.73625)(1.21255,4.73256)
+ (1.21526,4.72899)(1.21799,4.72554)(1.22074,4.72222)
+ (1.22351,4.71903)(1.22629,4.71598)(1.22909,4.71306)
+ (1.23191,4.71028)(1.23475,4.70764)(1.23761,4.70515)
+ (1.24049,4.70281)(1.24339,4.70063)(1.24631,4.69859)
+ (1.24926,4.69672)(1.25223,4.69501)(1.25522,4.69347)(1.25823,4.6921)
+ (1.26126,4.6909)(1.26432,4.68987)(1.26741,4.68903)(1.27052,4.68836)
+ (1.27365,4.68789)(1.27681,4.6876)(1.28,4.6875)
+\path(1.28,4.6875)(1.6,4.6875)
+\path(1.59287,4.6862)(1.59429,4.68854)
+\path(1.58575,4.68491)(1.58858,4.68958)
+\path(1.57862,4.68361)(1.58288,4.69061)
+\path(1.5715,4.68232)(1.57717,4.69165)
+\path(1.56437,4.68102)(1.57146,4.69269)
+\path(1.55725,4.67973)(1.56575,4.69373)
+\path(1.55012,4.67843)(1.56005,4.69476)
+\path(1.543,4.67714)(1.55434,4.6958)
+\path(1.54292,4.68744)(1.54863,4.69684)
+\path(1.59185,4.68602)(1.58488,4.69025)
+\path(1.58369,4.68453)(1.56976,4.693)
+\path(1.57554,4.68305)(1.55464,4.69575)
+\path(1.56738,4.68157)(1.54292,4.69643)
+\path(1.55923,4.68009)(1.54292,4.68999)
+\path(1.55108,4.6786)(1.54292,4.68356)
+\path(1.54292,4.6875)(1.54292,4.67712)(1.6,4.6875)(1.54292,4.69788)(1.54292,4.6875)
+\path(1.6,4.6875)(2.24,4.6875)
+\path(2.22632,4.68501)(2.18292,4.69269)
+\path(2.21185,4.68238)(2.18292,4.6875)
+\path(2.19739,4.67975)(2.18292,4.68231)
+\path(2.18811,4.69693)(2.18466,4.67744)
+\path(2.1933,4.69599)(2.1902,4.67844)
+\path(2.19849,4.69505)(2.19573,4.67945)
+\path(2.20368,4.6941)(2.20126,4.68046)
+\path(2.20887,4.69316)(2.2068,4.68146)
+\path(2.21406,4.69222)(2.21233,4.68247)
+\path(2.21924,4.69127)(2.21787,4.68348)
+\path(2.22443,4.69033)(2.2234,4.68448)
+\path(2.22962,4.68939)(2.22893,4.68549)
+\path(2.23481,4.68844)(2.23447,4.68649)
+\path(2.18292,4.6875)(2.18292,4.67712)(2.24,4.6875)
+ (2.18292,4.69788)(2.18292,4.6875)
+\put(1.6,4.74285){\makebox(0,0)[b]{\hbox{\color{rgb_7f7f7f}\texttt{\footnotesize \texttt{dvi}}}}}
+\put(1.6,4.6875){\color{rgb_7f7f7f}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\put(2.21793,4.71982){\makebox(0,0)[br]{\hbox{\color{rgb_7f7f7f}\texttt{\footnotesize \texttt{ps}}}}}
+\put(2.24,4.6875){\color{rgb_7f7f7f}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\path(0.96,4.21875)(0.963187,4.21885)(0.966347,4.21914)
+ (0.969482,4.21961)(0.972591,4.22028)(0.975676,4.22112)
+ (0.978736,4.22215)(0.981772,4.22335)(0.984785,4.22472)
+ (0.987774,4.22626)(0.990741,4.22797)(0.993685,4.22984)
+ (0.996608,4.23188)(0.999509,4.23406)(1.00239,4.2364)
+ (1.00525,4.23889)(1.00809,4.24153)(1.01091,4.24431)
+ (1.01371,4.24723)(1.01649,4.25028)(1.01926,4.25347)
+ (1.02201,4.25679)(1.02474,4.26024)(1.02745,4.26381)(1.03014,4.2675)
+ (1.03282,4.27131)(1.03549,4.27523)(1.03814,4.27926)(1.04077,4.2834)
+ (1.04339,4.28765)(1.046,4.29199)(1.04859,4.29644)(1.05117,4.30097)
+ (1.05374,4.3056)(1.0563,4.31032)(1.05884,4.31512)(1.06138,4.32)
+ (1.0639,4.32496)(1.06641,4.33)(1.06891,4.3351)(1.07141,4.34028)
+ (1.07389,4.34552)(1.07637,4.35082)(1.07884,4.35618)(1.0813,4.3616)
+ (1.08375,4.36707)(1.0862,4.37258)(1.08864,4.37815)(1.09107,4.38375)
+ (1.0935,4.38939)(1.09593,4.39507)(1.09835,4.40079)(1.10076,4.40653)
+ (1.10317,4.4123)(1.10558,4.41809)(1.10799,4.4239)(1.1104,4.42972)
+ (1.1128,4.43556)(1.1152,4.44141)(1.1176,4.44727)(1.12,4.45312)
+ (1.1224,4.45898)(1.1248,4.46484)(1.1272,4.47069)(1.1296,4.47653)
+ (1.13201,4.48235)(1.13442,4.48816)(1.13683,4.49395)
+ (1.13924,4.49972)(1.14165,4.50546)(1.14407,4.51118)(1.1465,4.51686)
+ (1.14893,4.5225)(1.15136,4.5281)(1.1538,4.53367)(1.15625,4.53918)
+ (1.1587,4.54465)(1.16116,4.55007)(1.16363,4.55543)(1.16611,4.56073)
+ (1.16859,4.56597)(1.17109,4.57115)(1.17359,4.57625)(1.1761,4.58129)
+ (1.17862,4.58625)(1.18116,4.59113)(1.1837,4.59593)(1.18626,4.60065)
+ (1.18883,4.60528)(1.19141,4.60981)(1.194,4.61426)(1.19661,4.6186)
+ (1.19923,4.62285)(1.20186,4.62699)(1.20451,4.63102)
+ (1.20718,4.63494)(1.20986,4.63875)(1.21255,4.64244)
+ (1.21526,4.64601)(1.21799,4.64946)(1.22074,4.65278)
+ (1.22351,4.65597)(1.22629,4.65902)(1.22909,4.66194)
+ (1.23191,4.66472)(1.23475,4.66736)(1.23761,4.66985)
+ (1.24049,4.67219)(1.24339,4.67437)(1.24631,4.67641)
+ (1.24926,4.67828)(1.25223,4.67999)(1.25522,4.68153)(1.25823,4.6829)
+ (1.26126,4.6841)(1.26432,4.68513)(1.26741,4.68597)(1.27052,4.68664)
+ (1.27365,4.68711)(1.27681,4.6874)(1.28,4.6875)
+\put(0.97999,4.16019){\makebox(0,0)[t]{\hbox{\color{rgb_7f7f7f}\texttt{\footnotesize \texttt{tex}}}}}
+\put(0.96,4.21875){\color{rgb_7f7f7f}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\path(2.24,4.6875)(2.24533,4.67972)(2.25067,4.67201)(2.256,4.66436)
+ (2.26133,4.65677)(2.26667,4.64925)(2.272,4.6418)(2.27733,4.63441)
+ (2.28267,4.62708)(2.288,4.61982)(2.29333,4.61263)(2.29867,4.6055)
+ (2.304,4.59844)(2.30933,4.59144)(2.31467,4.58451)(2.32,4.57764)
+ (2.32533,4.57083)(2.33067,4.5641)(2.336,4.55742)(2.34133,4.55081)
+ (2.34667,4.54427)(2.352,4.53779)(2.35733,4.53138)(2.36267,4.52503)
+ (2.368,4.51875)(2.37333,4.51253)(2.37867,4.50638)(2.384,4.50029)
+ (2.38933,4.49427)(2.39467,4.48831)(2.4,4.48242)(2.40533,4.4766)
+ (2.41067,4.47083)(2.416,4.46514)(2.42133,4.45951)(2.42667,4.45394)
+ (2.432,4.44844)(2.43733,4.443)(2.44267,4.43763)(2.448,4.43232)
+ (2.45333,4.42708)(2.45867,4.42191)(2.464,4.4168)(2.46933,4.41175)
+ (2.47467,4.40677)(2.48,4.40186)(2.48533,4.39701)(2.49067,4.39222)
+ (2.496,4.3875)(2.50133,4.38285)(2.50667,4.37826)(2.512,4.37373)
+ (2.51733,4.36927)(2.52267,4.36488)(2.528,4.36055)(2.53333,4.35628)
+ (2.53867,4.35208)(2.544,4.34795)(2.54933,4.34388)(2.55467,4.33988)
+ (2.56,4.33594)(2.56533,4.33206)(2.57067,4.32826)(2.576,4.32451)
+ (2.58133,4.32083)(2.58667,4.31722)(2.592,4.31367)(2.59733,4.31019)
+ (2.60267,4.30677)(2.608,4.30342)(2.61333,4.30013)(2.61867,4.29691)
+ (2.624,4.29375)(2.62933,4.29066)(2.63467,4.28763)(2.64,4.28467)
+ (2.64533,4.28177)(2.65067,4.27894)(2.656,4.27617)(2.66133,4.27347)
+ (2.66667,4.27083)(2.672,4.26826)(2.67733,4.26576)(2.68267,4.26331)
+ (2.688,4.26094)(2.69333,4.25863)(2.69867,4.25638)(2.704,4.2542)
+ (2.70933,4.25208)(2.71467,4.25003)(2.72,4.24805)(2.72533,4.24613)
+ (2.73067,4.24427)(2.736,4.24248)(2.74133,4.24076)(2.74667,4.2391)
+ (2.752,4.2375)(2.75733,4.23597)(2.76267,4.23451)(2.768,4.23311)
+ (2.77333,4.23177)(2.77867,4.2305)(2.784,4.2293)(2.78933,4.22816)
+ (2.79467,4.22708)(2.8,4.22607)(2.80533,4.22513)(2.81067,4.22425)
+ (2.816,4.22344)(2.82133,4.22269)(2.82667,4.22201)(2.832,4.22139)
+ (2.83733,4.22083)(2.84267,4.22035)(2.848,4.21992)(2.85333,4.21956)
+ (2.85867,4.21927)(2.864,4.21904)(2.86933,4.21888)(2.87467,4.21878)(2.88,4.21875)
+\path(2.82416,4.22925)(2.82805,4.20963)
+\path(2.82975,4.2282)(2.83325,4.21054)
+\path(2.83533,4.22715)(2.83844,4.21146)
+\path(2.84091,4.2261)(2.84364,4.21237)
+\path(2.8465,4.22505)(2.84883,4.21328)
+\path(2.85208,4.224)(2.85403,4.21419)
+\path(2.85767,4.22295)(2.85922,4.2151)
+\path(2.86325,4.2219)(2.86442,4.21601)
+\path(2.86883,4.22085)(2.86961,4.21693)
+\path(2.87442,4.2198)(2.87481,4.21784)
+\path(2.82289,4.21293)(2.86575,4.22143)
+\path(2.82292,4.21845)(2.85149,4.22411)
+\path(2.82295,4.22396)(2.83724,4.22679)
+\path(2.82292,4.2191)(2.82286,4.20872)(2.88,4.21875)
+ (2.82299,4.22948)(2.82292,4.2191)
+\put(2.93535,4.21875){\makebox(0,0)[l]{\hbox{\color{rgb_7f7f7f}\texttt{\footnotesize \texttt{pdf}}}}}
+\put(2.88,4.21875){\color{rgb_7f7f7f}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\path(2.24,4.6875)(2.24533,4.69528)(2.25067,4.70299)(2.256,4.71064)
+ (2.26133,4.71823)(2.26667,4.72575)(2.272,4.7332)(2.27733,4.74059)
+ (2.28267,4.74792)(2.288,4.75518)(2.29333,4.76237)(2.29867,4.7695)
+ (2.304,4.77656)(2.30933,4.78356)(2.31467,4.79049)(2.32,4.79736)
+ (2.32533,4.80417)(2.33067,4.8109)(2.336,4.81758)(2.34133,4.82419)
+ (2.34667,4.83073)(2.352,4.83721)(2.35733,4.84362)(2.36267,4.84997)
+ (2.368,4.85625)(2.37333,4.86247)(2.37867,4.86862)(2.384,4.87471)
+ (2.38933,4.88073)(2.39467,4.88669)(2.4,4.89258)(2.40533,4.8984)
+ (2.41067,4.90417)(2.416,4.90986)(2.42133,4.91549)(2.42667,4.92106)
+ (2.432,4.92656)(2.43733,4.932)(2.44267,4.93737)(2.448,4.94268)
+ (2.45333,4.94792)(2.45867,4.95309)(2.464,4.9582)(2.46933,4.96325)
+ (2.47467,4.96823)(2.48,4.97314)(2.48533,4.97799)(2.49067,4.98278)
+ (2.496,4.9875)(2.50133,4.99215)(2.50667,4.99674)(2.512,5.00127)
+ (2.51733,5.00573)(2.52267,5.01012)(2.528,5.01445)(2.53333,5.01872)
+ (2.53867,5.02292)(2.544,5.02705)(2.54933,5.03112)(2.55467,5.03512)
+ (2.56,5.03906)(2.56533,5.04294)(2.57067,5.04674)(2.576,5.05049)
+ (2.58133,5.05417)(2.58667,5.05778)(2.592,5.06133)(2.59733,5.06481)
+ (2.60267,5.06823)(2.608,5.07158)(2.61333,5.07487)(2.61867,5.07809)
+ (2.624,5.08125)(2.62933,5.08434)(2.63467,5.08737)(2.64,5.09033)
+ (2.64533,5.09323)(2.65067,5.09606)(2.656,5.09883)(2.66133,5.10153)
+ (2.66667,5.10417)(2.672,5.10674)(2.67733,5.10924)(2.68267,5.11169)
+ (2.688,5.11406)(2.69333,5.11637)(2.69867,5.11862)(2.704,5.1208)
+ (2.70933,5.12292)(2.71467,5.12497)(2.72,5.12695)(2.72533,5.12887)
+ (2.73067,5.13073)(2.736,5.13252)(2.74133,5.13424)(2.74667,5.1359)
+ (2.752,5.1375)(2.75733,5.13903)(2.76267,5.14049)(2.768,5.14189)
+ (2.77333,5.14323)(2.77867,5.1445)(2.784,5.1457)(2.78933,5.14684)
+ (2.79467,5.14792)(2.8,5.14893)(2.80533,5.14987)(2.81067,5.15075)
+ (2.816,5.15156)(2.82133,5.15231)(2.82667,5.15299)(2.832,5.15361)
+ (2.83733,5.15417)(2.84267,5.15465)(2.848,5.15508)(2.85333,5.15544)
+ (2.85867,5.15573)(2.864,5.15596)(2.86933,5.15612)(2.87467,5.15622)(2.88,5.15625)
+\path(2.86706,5.15382)(2.87286,5.1575)
+\path(2.85412,5.15138)(2.86572,5.15876)
+\path(2.84118,5.14895)(2.85857,5.16001)
+\path(2.82824,5.14651)(2.85143,5.16126)
+\path(2.82297,5.14896)(2.84429,5.16252)
+\path(2.82293,5.15473)(2.83715,5.16377)
+\path(2.8229,5.1605)(2.83,5.16503)
+\path(2.8743,5.15518)(2.87281,5.15751)
+\path(2.8686,5.1541)(2.86563,5.15877)
+\path(2.8629,5.15303)(2.85844,5.16003)
+\path(2.85719,5.15196)(2.85126,5.1613)
+\path(2.85149,5.15089)(2.84407,5.16256)
+\path(2.84579,5.14981)(2.83688,5.16382)
+\path(2.84009,5.14874)(2.8297,5.16508)
+\path(2.83439,5.14767)(2.82286,5.16579)
+\path(2.82869,5.1466)(2.82292,5.15566)
+\path(2.82292,5.1559)(2.82299,5.14552)(2.88,5.15625)
+ (2.82286,5.16628)(2.82292,5.1559)
+\put(2.86001,5.21481){\makebox(0,0)[b]{\hbox{\color{rgb_7f7f7f}\texttt{\footnotesize \texttt{eps}}}}}
+\put(2.88,5.15625){\color{rgb_7f7f7f}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\path(2.88,5.15625)(3.52,5.15625)
+\path(3.51287,5.15495)(3.50817,5.1584)
+\path(3.50573,5.15366)(3.49634,5.16055)
+\path(3.4986,5.15236)(3.48451,5.1627)
+\path(3.49146,5.15106)(3.47268,5.16485)
+\path(3.48433,5.14976)(3.46292,5.16548)
+\path(3.47719,5.14847)(3.46292,5.15895)
+\path(3.47006,5.14717)(3.46292,5.15241)
+\path(3.46863,5.16559)(3.46292,5.15782)
+\path(3.47434,5.16455)(3.46292,5.14901)
+\path(3.48005,5.16351)(3.46773,5.14675)
+\path(3.48575,5.16248)(3.4752,5.1481)
+\path(3.49146,5.16144)(3.48267,5.14946)
+\path(3.49717,5.1604)(3.49013,5.15082)
+\path(3.50288,5.15936)(3.4976,5.15218)
+\path(3.50858,5.15833)(3.50507,5.15353)
+\path(3.51429,5.15729)(3.51253,5.15489)
+\path(3.46292,5.15625)(3.46292,5.14587)(3.52,5.15625)
+ (3.46292,5.16663)(3.46292,5.15625)
+\put(3.57535,5.15625){\makebox(0,0)[l]{\hbox{\color{rgb_7f7f7f}\texttt{\footnotesize \begin{minipage}{0.225in}\texttt{png mng gif}\end{minipage}}}}}
+\put(3.52,5.15625){\color{rgb_7f7f7f}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\put(1.92,4.21875){\makebox(0,0)[c]{\hbox{\color{rgb_009800}\texttt{\Large epix}}}}
+\allinethickness{1.2pt}%
+\color{rgb_ff0000}%
+\path(0.32,3.28125)(0.96,3.28125)
+\allinethickness{0.0055348in}%
+\path(0.908111,3.29068)(0.902922,3.27138)
+\path(0.9133,3.28974)(0.9085,3.27189)
+\path(0.918489,3.2888)(0.914223,3.27293)
+\path(0.923678,3.28785)(0.919945,3.27397)
+\path(0.928867,3.28691)(0.925667,3.27501)
+\path(0.934056,3.28597)(0.931389,3.27605)
+\path(0.939244,3.28502)(0.937111,3.27709)
+\path(0.944433,3.28408)(0.942833,3.27813)
+\path(0.949622,3.28314)(0.948556,3.27917)
+\path(0.954811,3.28219)(0.954278,3.28021)
+\path(0.902922,3.27602)(0.914338,3.27295)
+\path(0.902922,3.28116)(0.925753,3.27502)
+\path(0.902922,3.28631)(0.937169,3.2771)
+\path(0.902922,3.29145)(0.948584,3.27917)
+\allinethickness{1.2pt}%
+\path(0.902922,3.28125)(0.902922,3.27087)(0.96,3.28125)
+ (0.902922,3.29163)(0.902922,3.28125)
+\put(0.32,3.3366){\makebox(0,0)[b]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\texttt{\footnotesize \texttt{xp}, \texttt{flx}}}}}}
+\put(0.32,3.28125){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\put(0.97999,3.33981){\makebox(0,0)[b]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\texttt{\footnotesize \texttt{eepic}}}}}}
+\put(0.96,3.28125){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\path(0.96,3.28125)(0.963187,3.28115)(0.966347,3.28086)
+ (0.969482,3.28039)(0.972591,3.27972)(0.975676,3.27888)
+ (0.978736,3.27785)(0.981772,3.27665)(0.984785,3.27528)
+ (0.987774,3.27374)(0.990741,3.27203)(0.993685,3.27016)
+ (0.996608,3.26813)(0.999509,3.26594)(1.00239,3.2636)
+ (1.00525,3.26111)(1.00809,3.25847)(1.01091,3.25569)
+ (1.01371,3.25277)(1.01649,3.24972)(1.01926,3.24653)
+ (1.02201,3.24321)(1.02474,3.23976)(1.02745,3.23619)(1.03014,3.2325)
+ (1.03282,3.22869)(1.03549,3.22477)(1.03814,3.22074)(1.04077,3.2166)
+ (1.04339,3.21235)(1.046,3.20801)(1.04859,3.20356)(1.05117,3.19903)
+ (1.05374,3.1944)(1.0563,3.18968)(1.05884,3.18488)(1.06138,3.18)
+ (1.0639,3.17504)(1.06641,3.17)(1.06891,3.1649)(1.07141,3.15972)
+ (1.07389,3.15448)(1.07637,3.14918)(1.07884,3.14382)(1.0813,3.1384)
+ (1.08375,3.13293)(1.0862,3.12742)(1.08864,3.12185)(1.09107,3.11625)
+ (1.0935,3.11061)(1.09593,3.10493)(1.09835,3.09921)(1.10076,3.09347)
+ (1.10317,3.0877)(1.10558,3.08191)(1.10799,3.0761)(1.1104,3.07028)
+ (1.1128,3.06444)(1.1152,3.05859)(1.1176,3.05273)(1.12,3.04688)
+ (1.1224,3.04102)(1.1248,3.03516)(1.1272,3.02931)(1.1296,3.02347)
+ (1.13201,3.01765)(1.13442,3.01184)(1.13683,3.00605)
+ (1.13924,3.00028)(1.14165,2.99454)(1.14407,2.98882)(1.1465,2.98314)
+ (1.14893,2.9775)(1.15136,2.9719)(1.1538,2.96633)(1.15625,2.96082)
+ (1.1587,2.95535)(1.16116,2.94993)(1.16363,2.94457)(1.16611,2.93927)
+ (1.16859,2.93403)(1.17109,2.92885)(1.17359,2.92375)(1.1761,2.91871)
+ (1.17862,2.91375)(1.18116,2.90887)(1.1837,2.90407)(1.18626,2.89935)
+ (1.18883,2.89472)(1.19141,2.89019)(1.194,2.88574)(1.19661,2.8814)
+ (1.19923,2.87715)(1.20186,2.87301)(1.20451,2.86898)
+ (1.20718,2.86506)(1.20986,2.86125)(1.21255,2.85756)
+ (1.21526,2.85399)(1.21799,2.85054)(1.22074,2.84722)
+ (1.22351,2.84403)(1.22629,2.84098)(1.22909,2.83806)
+ (1.23191,2.83528)(1.23475,2.83264)(1.23761,2.83015)
+ (1.24049,2.82781)(1.24339,2.82563)(1.24631,2.82359)
+ (1.24926,2.82172)(1.25223,2.82001)(1.25522,2.81847)(1.25823,2.8171)
+ (1.26126,2.8159)(1.26432,2.81487)(1.26741,2.81403)(1.27052,2.81336)
+ (1.27365,2.81289)(1.27681,2.8126)(1.28,2.8125)
+\path(1.28,2.8125)(1.6,2.8125)
+\allinethickness{0.0055348in}%
+\path(1.54292,2.80731)(1.59652,2.81313)
+\path(1.54292,2.8125)(1.57865,2.81638)
+\path(1.54292,2.81769)(1.56079,2.81963)
+\path(1.59481,2.81156)(1.5946,2.81348)
+\path(1.58962,2.81061)(1.5892,2.81446)
+\path(1.58443,2.80967)(1.58381,2.81544)
+\path(1.57924,2.80873)(1.57841,2.81643)
+\path(1.57406,2.80778)(1.57301,2.81741)
+\path(1.56887,2.80684)(1.56761,2.81839)
+\path(1.56368,2.8059)(1.56221,2.81937)
+\path(1.55849,2.80495)(1.55682,2.82035)
+\path(1.5533,2.80401)(1.55142,2.82133)
+\path(1.54811,2.80307)(1.54602,2.82231)
+\allinethickness{1.2pt}%
+\path(1.54292,2.8125)(1.54292,2.80212)(1.6,2.8125)(1.54292,2.82288)(1.54292,2.8125)
+\path(1.6,2.8125)(2.24,2.8125)
+\allinethickness{0.0055348in}%
+\path(2.23481,2.81156)(2.23373,2.81364)
+\path(2.22962,2.81061)(2.22746,2.81478)
+\path(2.22443,2.80967)(2.22119,2.81592)
+\path(2.21924,2.80873)(2.21492,2.81706)
+\path(2.21406,2.80778)(2.20864,2.8182)
+\path(2.20887,2.80684)(2.20237,2.81934)
+\path(2.20368,2.8059)(2.1961,2.82048)
+\path(2.19849,2.80495)(2.18983,2.82162)
+\path(2.1933,2.80401)(2.18356,2.82276)
+\path(2.18811,2.80307)(2.18292,2.81306)
+\path(2.19108,2.8214)(2.18292,2.81716)
+\path(2.19923,2.81991)(2.18292,2.81144)
+\path(2.20738,2.81843)(2.18292,2.80573)
+\path(2.21554,2.81695)(2.18919,2.80326)
+\path(2.22369,2.81547)(2.20612,2.80634)
+\path(2.23185,2.81398)(2.22306,2.80942)
+\allinethickness{1.2pt}%
+\path(2.18292,2.8125)(2.18292,2.80212)(2.24,2.8125)
+ (2.18292,2.82288)(2.18292,2.8125)
+\put(1.6,2.86785){\makebox(0,0)[b]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\texttt{\footnotesize \texttt{dvi}}}}}}
+\put(1.6,2.8125){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\put(2.21793,2.84482){\makebox(0,0)[br]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\texttt{\footnotesize \texttt{ps}}}}}}
+\put(2.24,2.8125){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\allinethickness{0.4pt}%
+\color{rgb_7f7f7f}%
+\path(0.96,2.34375)(0.963187,2.34385)(0.966347,2.34414)
+ (0.969482,2.34461)(0.972591,2.34528)(0.975676,2.34612)
+ (0.978736,2.34715)(0.981772,2.34835)(0.984785,2.34972)
+ (0.987774,2.35126)(0.990741,2.35297)(0.993685,2.35484)
+ (0.996608,2.35688)(0.999509,2.35906)(1.00239,2.3614)
+ (1.00525,2.36389)(1.00809,2.36653)(1.01091,2.36931)
+ (1.01371,2.37223)(1.01649,2.37528)(1.01926,2.37847)
+ (1.02201,2.38179)(1.02474,2.38524)(1.02745,2.38881)(1.03014,2.3925)
+ (1.03282,2.39631)(1.03549,2.40023)(1.03814,2.40426)(1.04077,2.4084)
+ (1.04339,2.41265)(1.046,2.41699)(1.04859,2.42144)(1.05117,2.42597)
+ (1.05374,2.4306)(1.0563,2.43532)(1.05884,2.44012)(1.06138,2.445)
+ (1.0639,2.44996)(1.06641,2.455)(1.06891,2.4601)(1.07141,2.46528)
+ (1.07389,2.47052)(1.07637,2.47582)(1.07884,2.48118)(1.0813,2.4866)
+ (1.08375,2.49207)(1.0862,2.49758)(1.08864,2.50315)(1.09107,2.50875)
+ (1.0935,2.51439)(1.09593,2.52007)(1.09835,2.52579)(1.10076,2.53153)
+ (1.10317,2.5373)(1.10558,2.54309)(1.10799,2.5489)(1.1104,2.55472)
+ (1.1128,2.56056)(1.1152,2.56641)(1.1176,2.57227)(1.12,2.57812)
+ (1.1224,2.58398)(1.1248,2.58984)(1.1272,2.59569)(1.1296,2.60153)
+ (1.13201,2.60735)(1.13442,2.61316)(1.13683,2.61895)
+ (1.13924,2.62472)(1.14165,2.63046)(1.14407,2.63618)(1.1465,2.64186)
+ (1.14893,2.6475)(1.15136,2.6531)(1.1538,2.65867)(1.15625,2.66418)
+ (1.1587,2.66965)(1.16116,2.67507)(1.16363,2.68043)(1.16611,2.68573)
+ (1.16859,2.69097)(1.17109,2.69615)(1.17359,2.70125)(1.1761,2.70629)
+ (1.17862,2.71125)(1.18116,2.71613)(1.1837,2.72093)(1.18626,2.72565)
+ (1.18883,2.73028)(1.19141,2.73481)(1.194,2.73926)(1.19661,2.7436)
+ (1.19923,2.74785)(1.20186,2.75199)(1.20451,2.75602)
+ (1.20718,2.75994)(1.20986,2.76375)(1.21255,2.76744)
+ (1.21526,2.77101)(1.21799,2.77446)(1.22074,2.77778)
+ (1.22351,2.78097)(1.22629,2.78402)(1.22909,2.78694)
+ (1.23191,2.78972)(1.23475,2.79236)(1.23761,2.79485)
+ (1.24049,2.79719)(1.24339,2.79937)(1.24631,2.80141)
+ (1.24926,2.80328)(1.25223,2.80499)(1.25522,2.80653)(1.25823,2.8079)
+ (1.26126,2.8091)(1.26432,2.81013)(1.26741,2.81097)(1.27052,2.81164)
+ (1.27365,2.81211)(1.27681,2.8124)(1.28,2.8125)
+\put(0.97999,2.28519){\makebox(0,0)[t]{\hbox{\color{rgb_7f7f7f}\texttt{\footnotesize \texttt{tex}}}}}
+\put(0.96,2.34375){\color{rgb_7f7f7f}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\allinethickness{1.2pt}%
+\color{rgb_ff0000}%
+\path(2.24,2.8125)(2.24533,2.80472)(2.25067,2.79701)(2.256,2.78936)
+ (2.26133,2.78177)(2.26667,2.77425)(2.272,2.7668)(2.27733,2.75941)
+ (2.28267,2.75208)(2.288,2.74482)(2.29333,2.73763)(2.29867,2.7305)
+ (2.304,2.72344)(2.30933,2.71644)(2.31467,2.70951)(2.32,2.70264)
+ (2.32533,2.69583)(2.33067,2.6891)(2.336,2.68242)(2.34133,2.67581)
+ (2.34667,2.66927)(2.352,2.66279)(2.35733,2.65638)(2.36267,2.65003)
+ (2.368,2.64375)(2.37333,2.63753)(2.37867,2.63138)(2.384,2.62529)
+ (2.38933,2.61927)(2.39467,2.61331)(2.4,2.60742)(2.40533,2.6016)
+ (2.41067,2.59583)(2.416,2.59014)(2.42133,2.58451)(2.42667,2.57894)
+ (2.432,2.57344)(2.43733,2.568)(2.44267,2.56263)(2.448,2.55732)
+ (2.45333,2.55208)(2.45867,2.54691)(2.464,2.5418)(2.46933,2.53675)
+ (2.47467,2.53177)(2.48,2.52686)(2.48533,2.52201)(2.49067,2.51722)
+ (2.496,2.5125)(2.50133,2.50785)(2.50667,2.50326)(2.512,2.49873)
+ (2.51733,2.49427)(2.52267,2.48988)(2.528,2.48555)(2.53333,2.48128)
+ (2.53867,2.47708)(2.544,2.47295)(2.54933,2.46888)(2.55467,2.46488)
+ (2.56,2.46094)(2.56533,2.45706)(2.57067,2.45326)(2.576,2.44951)
+ (2.58133,2.44583)(2.58667,2.44222)(2.592,2.43867)(2.59733,2.43519)
+ (2.60267,2.43177)(2.608,2.42842)(2.61333,2.42513)(2.61867,2.42191)
+ (2.624,2.41875)(2.62933,2.41566)(2.63467,2.41263)(2.64,2.40967)
+ (2.64533,2.40677)(2.65067,2.40394)(2.656,2.40117)(2.66133,2.39847)
+ (2.66667,2.39583)(2.672,2.39326)(2.67733,2.39076)(2.68267,2.38831)
+ (2.688,2.38594)(2.69333,2.38363)(2.69867,2.38138)(2.704,2.3792)
+ (2.70933,2.37708)(2.71467,2.37503)(2.72,2.37305)(2.72533,2.37113)
+ (2.73067,2.36927)(2.736,2.36748)(2.74133,2.36576)(2.74667,2.3641)
+ (2.752,2.3625)(2.75733,2.36097)(2.76267,2.35951)(2.768,2.35811)
+ (2.77333,2.35677)(2.77867,2.3555)(2.784,2.3543)(2.78933,2.35316)
+ (2.79467,2.35208)(2.8,2.35107)(2.80533,2.35013)(2.81067,2.34925)
+ (2.816,2.34844)(2.82133,2.34769)(2.82667,2.34701)(2.832,2.34639)
+ (2.83733,2.34583)(2.84267,2.34535)(2.848,2.34492)(2.85333,2.34456)
+ (2.85867,2.34427)(2.864,2.34404)(2.86933,2.34388)(2.87467,2.34378)(2.88,2.34375)
+\allinethickness{0.0055348in}%
+\path(2.82869,2.3534)(2.82294,2.34686)
+\path(2.83439,2.35233)(2.82289,2.33925)
+\path(2.84009,2.35126)(2.82501,2.3341)
+\path(2.84579,2.35019)(2.83287,2.33548)
+\path(2.85149,2.34911)(2.84072,2.33686)
+\path(2.85719,2.34804)(2.84858,2.33823)
+\path(2.8629,2.34697)(2.85643,2.33961)
+\path(2.8686,2.3459)(2.86429,2.34099)
+\path(2.8743,2.34482)(2.87214,2.34237)
+\path(2.8229,2.34038)(2.82921,2.33484)
+\path(2.82294,2.34704)(2.83556,2.33595)
+\path(2.82298,2.35369)(2.84191,2.33706)
+\path(2.83154,2.35287)(2.84826,2.33818)
+\path(2.84123,2.35104)(2.8546,2.33929)
+\path(2.85092,2.34922)(2.86095,2.34041)
+\path(2.86062,2.3474)(2.8673,2.34152)
+\path(2.87031,2.34557)(2.87365,2.34264)
+\allinethickness{1.2pt}%
+\path(2.82292,2.3441)(2.82286,2.33372)(2.88,2.34375)
+ (2.82299,2.35448)(2.82292,2.3441)
+\put(2.93535,2.34375){\makebox(0,0)[l]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\texttt{\footnotesize \texttt{pdf}}}}}}
+\put(2.88,2.34375){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\path(2.24,2.8125)(2.24533,2.82028)(2.25067,2.82799)(2.256,2.83564)
+ (2.26133,2.84323)(2.26667,2.85075)(2.272,2.8582)(2.27733,2.86559)
+ (2.28267,2.87292)(2.288,2.88018)(2.29333,2.88737)(2.29867,2.8945)
+ (2.304,2.90156)(2.30933,2.90856)(2.31467,2.91549)(2.32,2.92236)
+ (2.32533,2.92917)(2.33067,2.9359)(2.336,2.94258)(2.34133,2.94919)
+ (2.34667,2.95573)(2.352,2.96221)(2.35733,2.96862)(2.36267,2.97497)
+ (2.368,2.98125)(2.37333,2.98747)(2.37867,2.99362)(2.384,2.99971)
+ (2.38933,3.00573)(2.39467,3.01169)(2.4,3.01758)(2.40533,3.0234)
+ (2.41067,3.02917)(2.416,3.03486)(2.42133,3.04049)(2.42667,3.04606)
+ (2.432,3.05156)(2.43733,3.057)(2.44267,3.06237)(2.448,3.06768)
+ (2.45333,3.07292)(2.45867,3.07809)(2.464,3.0832)(2.46933,3.08825)
+ (2.47467,3.09323)(2.48,3.09814)(2.48533,3.10299)(2.49067,3.10778)
+ (2.496,3.1125)(2.50133,3.11715)(2.50667,3.12174)(2.512,3.12627)
+ (2.51733,3.13073)(2.52267,3.13512)(2.528,3.13945)(2.53333,3.14372)
+ (2.53867,3.14792)(2.544,3.15205)(2.54933,3.15612)(2.55467,3.16012)
+ (2.56,3.16406)(2.56533,3.16794)(2.57067,3.17174)(2.576,3.17549)
+ (2.58133,3.17917)(2.58667,3.18278)(2.592,3.18633)(2.59733,3.18981)
+ (2.60267,3.19323)(2.608,3.19658)(2.61333,3.19987)(2.61867,3.20309)
+ (2.624,3.20625)(2.62933,3.20934)(2.63467,3.21237)(2.64,3.21533)
+ (2.64533,3.21823)(2.65067,3.22106)(2.656,3.22383)(2.66133,3.22653)
+ (2.66667,3.22917)(2.672,3.23174)(2.67733,3.23424)(2.68267,3.23669)
+ (2.688,3.23906)(2.69333,3.24137)(2.69867,3.24362)(2.704,3.2458)
+ (2.70933,3.24792)(2.71467,3.24997)(2.72,3.25195)(2.72533,3.25387)
+ (2.73067,3.25573)(2.736,3.25752)(2.74133,3.25924)(2.74667,3.2609)
+ (2.752,3.2625)(2.75733,3.26403)(2.76267,3.26549)(2.768,3.26689)
+ (2.77333,3.26823)(2.77867,3.2695)(2.784,3.2707)(2.78933,3.27184)
+ (2.79467,3.27292)(2.8,3.27393)(2.80533,3.27487)(2.81067,3.27575)
+ (2.816,3.27656)(2.82133,3.27731)(2.82667,3.27799)(2.832,3.27861)
+ (2.83733,3.27917)(2.84267,3.27965)(2.848,3.28008)(2.85333,3.28044)
+ (2.85867,3.28073)(2.864,3.28096)(2.86933,3.28112)(2.87467,3.28122)(2.88,3.28125)
+\allinethickness{0.0055348in}%
+\path(2.82295,3.27579)(2.83249,3.27231)
+\path(2.82292,3.28106)(2.84199,3.2741)
+\path(2.82289,3.28633)(2.85149,3.27589)
+\path(2.82456,3.29098)(2.861,3.27767)
+\path(2.85228,3.28612)(2.8705,3.27946)
+\path(2.87406,3.28013)(2.87481,3.28216)
+\path(2.86813,3.27902)(2.86961,3.28307)
+\path(2.86219,3.2779)(2.86442,3.28399)
+\path(2.85626,3.27678)(2.85922,3.2849)
+\path(2.85032,3.27567)(2.85403,3.28581)
+\path(2.84439,3.27455)(2.84883,3.28672)
+\path(2.83845,3.27343)(2.84364,3.28763)
+\path(2.83252,3.27232)(2.83844,3.28854)
+\path(2.82658,3.2712)(2.83325,3.28946)
+\path(2.82295,3.27639)(2.82805,3.29037)
+\allinethickness{1.2pt}%
+\path(2.82292,3.2809)(2.82299,3.27052)(2.88,3.28125)
+ (2.82286,3.29128)(2.82292,3.2809)
+\put(2.86001,3.33981){\makebox(0,0)[b]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\texttt{\footnotesize \texttt{eps}}}}}}
+\put(2.88,3.28125){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\allinethickness{0.4pt}%
+\color{rgb_7f7f7f}%
+\path(2.88,3.28125)(3.52,3.28125)
+\path(3.51481,3.28031)(3.51477,3.2822)
+\path(3.50962,3.27936)(3.50954,3.28315)
+\path(3.50443,3.27842)(3.50432,3.2841)
+\path(3.49924,3.27748)(3.49909,3.28505)
+\path(3.49406,3.27653)(3.49386,3.286)
+\path(3.48887,3.27559)(3.48863,3.28695)
+\path(3.48368,3.27465)(3.4834,3.2879)
+\path(3.47849,3.2737)(3.47818,3.28885)
+\path(3.4733,3.27276)(3.47295,3.2898)
+\path(3.46811,3.27182)(3.46772,3.29076)
+\path(3.48855,3.28697)(3.46292,3.28644)
+\path(3.51417,3.28231)(3.46292,3.28125)
+\path(3.49512,3.27673)(3.46292,3.27606)
+\path(3.46292,3.28125)(3.46292,3.27087)(3.52,3.28125)
+ (3.46292,3.29163)(3.46292,3.28125)
+\put(3.57535,3.28125){\makebox(0,0)[l]{\hbox{\color{rgb_7f7f7f}\texttt{\footnotesize \begin{minipage}{0.225in}\texttt{png mng gif}\end{minipage}}}}}
+\put(3.52,3.28125){\color{rgb_7f7f7f}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\put(1.92,2.34375){\makebox(0,0)[c]{\hbox{\color{rgb_009800}\texttt{\Large elaps}}}}
+\allinethickness{1.2pt}%
+\color{rgb_ff0000}%
+\path(0.32,1.40625)(0.96,1.40625)
+\allinethickness{0.0055348in}%
+\path(0.912435,1.4149)(0.902922,1.41097)
+\path(0.921948,1.41317)(0.902922,1.40531)
+\path(0.931461,1.41144)(0.902922,1.39966)
+\path(0.940974,1.40971)(0.91102,1.39734)
+\path(0.950487,1.40798)(0.93551,1.4018)
+\path(0.902922,1.40939)(0.908111,1.39682)
+\path(0.905721,1.41612)(0.9133,1.39776)
+\path(0.911752,1.41502)(0.918489,1.3987)
+\path(0.917783,1.41393)(0.923678,1.39965)
+\path(0.923814,1.41283)(0.928867,1.40059)
+\path(0.929845,1.41173)(0.934056,1.40153)
+\path(0.935876,1.41064)(0.939244,1.40248)
+\path(0.941907,1.40954)(0.944433,1.40342)
+\path(0.947938,1.40844)(0.949622,1.40436)
+\path(0.953969,1.40735)(0.954811,1.40531)
+\allinethickness{1.2pt}%
+\path(0.902922,1.40625)(0.902922,1.39587)(0.96,1.40625)
+ (0.902922,1.41663)(0.902922,1.40625)
+\put(0.32,1.4616){\makebox(0,0)[b]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\texttt{\footnotesize \texttt{xp}, \texttt{flx}}}}}}
+\put(0.32,1.40625){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\put(0.97999,1.46481){\makebox(0,0)[b]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\texttt{\footnotesize \texttt{eepic}}}}}}
+\put(0.96,1.40625){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\path(0.96,1.40625)(0.963187,1.40615)(0.966347,1.40586)
+ (0.969482,1.40539)(0.972591,1.40472)(0.975676,1.40388)
+ (0.978736,1.40285)(0.981772,1.40165)(0.984785,1.40028)
+ (0.987774,1.39874)(0.990741,1.39703)(0.993685,1.39516)
+ (0.996608,1.39313)(0.999509,1.39094)(1.00239,1.3886)
+ (1.00525,1.38611)(1.00809,1.38347)(1.01091,1.38069)
+ (1.01371,1.37777)(1.01649,1.37472)(1.01926,1.37153)
+ (1.02201,1.36821)(1.02474,1.36476)(1.02745,1.36119)(1.03014,1.3575)
+ (1.03282,1.35369)(1.03549,1.34977)(1.03814,1.34574)(1.04077,1.3416)
+ (1.04339,1.33735)(1.046,1.33301)(1.04859,1.32856)(1.05117,1.32403)
+ (1.05374,1.3194)(1.0563,1.31468)(1.05884,1.30988)(1.06138,1.305)
+ (1.0639,1.30004)(1.06641,1.295)(1.06891,1.2899)(1.07141,1.28472)
+ (1.07389,1.27948)(1.07637,1.27418)(1.07884,1.26882)(1.0813,1.2634)
+ (1.08375,1.25793)(1.0862,1.25242)(1.08864,1.24685)(1.09107,1.24125)
+ (1.0935,1.23561)(1.09593,1.22993)(1.09835,1.22421)(1.10076,1.21847)
+ (1.10317,1.2127)(1.10558,1.20691)(1.10799,1.2011)(1.1104,1.19528)
+ (1.1128,1.18944)(1.1152,1.18359)(1.1176,1.17773)(1.12,1.17188)
+ (1.1224,1.16602)(1.1248,1.16016)(1.1272,1.15431)(1.1296,1.14847)
+ (1.13201,1.14265)(1.13442,1.13684)(1.13683,1.13105)
+ (1.13924,1.12528)(1.14165,1.11954)(1.14407,1.11382)(1.1465,1.10814)
+ (1.14893,1.1025)(1.15136,1.0969)(1.1538,1.09133)(1.15625,1.08582)
+ (1.1587,1.08035)(1.16116,1.07493)(1.16363,1.06957)(1.16611,1.06427)
+ (1.16859,1.05903)(1.17109,1.05385)(1.17359,1.04875)(1.1761,1.04371)
+ (1.17862,1.03875)(1.18116,1.03387)(1.1837,1.02907)(1.18626,1.02435)
+ (1.18883,1.01972)(1.19141,1.01519)(1.194,1.01074)(1.19661,1.0064)
+ (1.19923,1.00215)(1.20186,0.998013)(1.20451,0.99398)
+ (1.20718,0.990058)(1.20986,0.98625)(1.21255,0.982559)
+ (1.21526,0.978989)(1.21799,0.975542)(1.22074,0.972222)
+ (1.22351,0.969033)(1.22629,0.965977)(1.22909,0.963057)
+ (1.23191,0.960278)(1.23475,0.957642)(1.23761,0.955152)
+ (1.24049,0.952812)(1.24339,0.950625)(1.24631,0.948594)
+ (1.24926,0.946723)(1.25223,0.945015)(1.25522,0.943472)
+ (1.25823,0.942099)(1.26126,0.940898)(1.26432,0.939874)
+ (1.26741,0.939028)(1.27052,0.938364)(1.27365,0.937886)
+ (1.27681,0.937597)(1.28,0.9375)
+\path(1.28,0.9375)(1.6,0.9375)
+\allinethickness{0.0055348in}%
+\path(1.54292,0.934917)(1.54926,0.928275)
+\path(1.54292,0.942712)(1.55561,0.929428)
+\path(1.54596,0.947325)(1.56195,0.930581)
+\path(1.55497,0.945688)(1.56829,0.931735)
+\path(1.56397,0.94405)(1.57463,0.932888)
+\path(1.57298,0.942413)(1.58097,0.934041)
+\path(1.58199,0.940775)(1.58732,0.935194)
+\path(1.59099,0.939138)(1.59366,0.936347)
+\path(1.59067,0.935804)(1.59366,0.938653)
+\path(1.58135,0.934109)(1.58732,0.939806)
+\path(1.57202,0.932413)(1.58097,0.940959)
+\path(1.5627,0.930718)(1.57463,0.942112)
+\path(1.55337,0.929022)(1.56829,0.943265)
+\path(1.54405,0.927327)(1.56195,0.944419)
+\path(1.54292,0.933461)(1.55561,0.945572)
+\path(1.54292,0.940669)(1.54926,0.946725)
+\allinethickness{1.2pt}%
+\path(1.54292,0.9375)(1.54292,0.927122)(1.6,0.9375)
+ (1.54292,0.947878)(1.54292,0.9375)
+\path(1.6,0.9375)(2.24,0.9375)
+\allinethickness{0.0055348in}%
+\path(2.23385,0.936381)(2.23481,0.938443)
+\path(2.22769,0.935262)(2.22962,0.939387)
+\path(2.22154,0.934143)(2.22443,0.94033)
+\path(2.21538,0.933024)(2.21924,0.941274)
+\path(2.20923,0.931905)(2.21406,0.942217)
+\path(2.20308,0.930787)(2.20887,0.943161)
+\path(2.19692,0.929668)(2.20368,0.944104)
+\path(2.19077,0.928549)(2.19849,0.945047)
+\path(2.18461,0.92743)(2.1933,0.945991)
+\path(2.18292,0.935846)(2.18811,0.946934)
+\path(2.23185,0.936017)(2.22148,0.940867)
+\path(2.22369,0.934535)(2.20297,0.944233)
+\path(2.21554,0.933052)(2.18445,0.9476)
+\path(2.20738,0.93157)(2.18292,0.943017)
+\path(2.19923,0.930087)(2.18292,0.937719)
+\path(2.19108,0.928605)(2.18292,0.93242)
+\allinethickness{1.2pt}%
+\path(2.18292,0.9375)(2.18292,0.927122)(2.24,0.9375)
+ (2.18292,0.947878)(2.18292,0.9375)
+\put(1.6,0.992848){\makebox(0,0)[b]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\texttt{\footnotesize \texttt{dvi}}}}}}
+\put(1.6,0.9375){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\put(2.21793,0.969823){\makebox(0,0)[br]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\texttt{\footnotesize \texttt{ps}}}}}}
+\put(2.24,0.9375){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\allinethickness{0.4pt}%
+\color{rgb_7f7f7f}%
+\path(0.96,0.46875)(0.963187,0.468847)(0.966347,0.469136)
+ (0.969482,0.469614)(0.972591,0.470278)(0.975676,0.471124)
+ (0.978736,0.472148)(0.981772,0.473349)(0.984785,0.474722)
+ (0.987774,0.476265)(0.990741,0.477973)(0.993685,0.479844)
+ (0.996608,0.481875)(0.999509,0.484062)(1.00239,0.486402)
+ (1.00525,0.488892)(1.00809,0.491528)(1.01091,0.494307)
+ (1.01371,0.497227)(1.01649,0.500283)(1.01926,0.503472)
+ (1.02201,0.506792)(1.02474,0.510239)(1.02745,0.513809)
+ (1.03014,0.5175)(1.03282,0.521308)(1.03549,0.52523)
+ (1.03814,0.529263)(1.04077,0.533403)(1.04339,0.537647)
+ (1.046,0.541992)(1.04859,0.546435)(1.05117,0.550972)
+ (1.05374,0.555601)(1.0563,0.560317)(1.05884,0.565118)(1.06138,0.57)
+ (1.0639,0.57496)(1.06641,0.579996)(1.06891,0.585103)
+ (1.07141,0.590278)(1.07389,0.595518)(1.07637,0.60082)
+ (1.07884,0.606181)(1.0813,0.611597)(1.08375,0.617065)
+ (1.0862,0.622582)(1.08864,0.628145)(1.09107,0.63375)
+ (1.0935,0.639394)(1.09593,0.645074)(1.09835,0.650786)
+ (1.10076,0.656528)(1.10317,0.662295)(1.10558,0.668086)
+ (1.10799,0.673896)(1.1104,0.679722)(1.1128,0.685562)
+ (1.1152,0.691411)(1.1176,0.697266)(1.12,0.703125)(1.1224,0.708984)
+ (1.1248,0.714839)(1.1272,0.720688)(1.1296,0.726528)
+ (1.13201,0.732354)(1.13442,0.738164)(1.13683,0.743955)
+ (1.13924,0.749722)(1.14165,0.755464)(1.14407,0.761176)
+ (1.1465,0.766856)(1.14893,0.7725)(1.15136,0.778105)
+ (1.1538,0.783668)(1.15625,0.789185)(1.1587,0.794653)
+ (1.16116,0.800069)(1.16363,0.80543)(1.16611,0.810732)
+ (1.16859,0.815972)(1.17109,0.821147)(1.17359,0.826254)
+ (1.1761,0.83129)(1.17862,0.83625)(1.18116,0.841132)
+ (1.1837,0.845933)(1.18626,0.850649)(1.18883,0.855278)
+ (1.19141,0.859815)(1.194,0.864258)(1.19661,0.868603)
+ (1.19923,0.872847)(1.20186,0.876987)(1.20451,0.88102)
+ (1.20718,0.884942)(1.20986,0.88875)(1.21255,0.892441)
+ (1.21526,0.896011)(1.21799,0.899458)(1.22074,0.902778)
+ (1.22351,0.905967)(1.22629,0.909023)(1.22909,0.911943)
+ (1.23191,0.914722)(1.23475,0.917358)(1.23761,0.919848)
+ (1.24049,0.922188)(1.24339,0.924375)(1.24631,0.926406)
+ (1.24926,0.928277)(1.25223,0.929985)(1.25522,0.931528)
+ (1.25823,0.932901)(1.26126,0.934102)(1.26432,0.935126)
+ (1.26741,0.935972)(1.27052,0.936636)(1.27365,0.937114)
+ (1.27681,0.937403)(1.28,0.9375)
+\put(0.97999,0.410187){\makebox(0,0)[t]{\hbox{\color{rgb_7f7f7f}\texttt{\footnotesize \texttt{tex}}}}}
+\put(0.96,0.46875){\color{rgb_7f7f7f}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\path(2.24,0.9375)(2.24533,0.92972)(2.25067,0.922005)
+ (2.256,0.914355)(2.26133,0.906771)(2.26667,0.899251)
+ (2.272,0.891797)(2.27733,0.884408)(2.28267,0.877083)
+ (2.288,0.869824)(2.29333,0.86263)(2.29867,0.855501)(2.304,0.848438)
+ (2.30933,0.841439)(2.31467,0.834505)(2.32,0.827637)
+ (2.32533,0.820833)(2.33067,0.814095)(2.336,0.807422)
+ (2.34133,0.800814)(2.34667,0.794271)(2.352,0.787793)
+ (2.35733,0.78138)(2.36267,0.775033)(2.368,0.76875)
+ (2.37333,0.762533)(2.37867,0.75638)(2.384,0.750293)
+ (2.38933,0.744271)(2.39467,0.738314)(2.4,0.732422)
+ (2.40533,0.726595)(2.41067,0.720833)(2.416,0.715137)
+ (2.42133,0.709505)(2.42667,0.703939)(2.432,0.698438)
+ (2.43733,0.693001)(2.44267,0.68763)(2.448,0.682324)
+ (2.45333,0.677083)(2.45867,0.671908)(2.464,0.666797)
+ (2.46933,0.661751)(2.47467,0.656771)(2.48,0.651855)
+ (2.48533,0.647005)(2.49067,0.64222)(2.496,0.6375)(2.50133,0.632845)
+ (2.50667,0.628255)(2.512,0.62373)(2.51733,0.619271)
+ (2.52267,0.614876)(2.528,0.610547)(2.53333,0.606283)
+ (2.53867,0.602083)(2.544,0.597949)(2.54933,0.59388)
+ (2.55467,0.589876)(2.56,0.585938)(2.56533,0.582064)
+ (2.57067,0.578255)(2.576,0.574512)(2.58133,0.570833)
+ (2.58667,0.56722)(2.592,0.563672)(2.59733,0.560189)
+ (2.60267,0.556771)(2.608,0.553418)(2.61333,0.55013)
+ (2.61867,0.546908)(2.624,0.54375)(2.62933,0.540658)
+ (2.63467,0.53763)(2.64,0.534668)(2.64533,0.531771)
+ (2.65067,0.528939)(2.656,0.526172)(2.66133,0.52347)
+ (2.66667,0.520833)(2.672,0.518262)(2.67733,0.515755)
+ (2.68267,0.513314)(2.688,0.510937)(2.69333,0.508626)
+ (2.69867,0.50638)(2.704,0.504199)(2.70933,0.502083)
+ (2.71467,0.500033)(2.72,0.498047)(2.72533,0.496126)
+ (2.73067,0.494271)(2.736,0.49248)(2.74133,0.490755)
+ (2.74667,0.489095)(2.752,0.4875)(2.75733,0.48597)(2.76267,0.484505)
+ (2.768,0.483105)(2.77333,0.481771)(2.77867,0.480501)
+ (2.784,0.479297)(2.78933,0.478158)(2.79467,0.477083)(2.8,0.476074)
+ (2.80533,0.47513)(2.81067,0.474251)(2.816,0.473437)
+ (2.82133,0.472689)(2.82667,0.472005)(2.832,0.471387)
+ (2.83733,0.470833)(2.84267,0.470345)(2.848,0.469922)
+ (2.85333,0.469564)(2.85867,0.469271)(2.864,0.469043)
+ (2.86933,0.46888)(2.87467,0.468783)(2.88,0.46875)
+\path(2.86583,0.471416)(2.82296,0.474287)
+\path(2.86567,0.466235)(2.82292,0.469098)
+\path(2.84427,0.462478)(2.82289,0.46391)
+\path(2.82817,0.478501)(2.82689,0.459429)
+\path(2.83335,0.477526)(2.8322,0.460361)
+\path(2.83854,0.476551)(2.83751,0.461293)
+\path(2.84372,0.475576)(2.84282,0.462225)
+\path(2.8489,0.474601)(2.84814,0.463157)
+\path(2.85408,0.473625)(2.85345,0.464089)
+\path(2.85927,0.47265)(2.85876,0.465021)
+\path(2.86445,0.471675)(2.86407,0.465954)
+\path(2.86963,0.4707)(2.86938,0.466886)
+\path(2.87482,0.469725)(2.87469,0.467818)
+\path(2.82292,0.469098)(2.82286,0.458721)(2.88,0.46875)
+ (2.82299,0.479476)(2.82292,0.469098)
+\put(2.93535,0.46875){\makebox(0,0)[l]{\hbox{\color{rgb_7f7f7f}\texttt{\footnotesize \texttt{pdf}}}}}
+\put(2.88,0.46875){\color{rgb_7f7f7f}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\allinethickness{1.2pt}%
+\color{rgb_ff0000}%
+\path(2.24,0.9375)(2.24533,0.94528)(2.25067,0.952995)
+ (2.256,0.960645)(2.26133,0.968229)(2.26667,0.975749)
+ (2.272,0.983203)(2.27733,0.990592)(2.28267,0.997917)(2.288,1.00518)
+ (2.29333,1.01237)(2.29867,1.0195)(2.304,1.02656)(2.30933,1.03356)
+ (2.31467,1.04049)(2.32,1.04736)(2.32533,1.05417)(2.33067,1.0609)
+ (2.336,1.06758)(2.34133,1.07419)(2.34667,1.08073)(2.352,1.08721)
+ (2.35733,1.09362)(2.36267,1.09997)(2.368,1.10625)(2.37333,1.11247)
+ (2.37867,1.11862)(2.384,1.12471)(2.38933,1.13073)(2.39467,1.13669)
+ (2.4,1.14258)(2.40533,1.1484)(2.41067,1.15417)(2.416,1.15986)
+ (2.42133,1.16549)(2.42667,1.17106)(2.432,1.17656)(2.43733,1.182)
+ (2.44267,1.18737)(2.448,1.19268)(2.45333,1.19792)(2.45867,1.20309)
+ (2.464,1.2082)(2.46933,1.21325)(2.47467,1.21823)(2.48,1.22314)
+ (2.48533,1.22799)(2.49067,1.23278)(2.496,1.2375)(2.50133,1.24215)
+ (2.50667,1.24674)(2.512,1.25127)(2.51733,1.25573)(2.52267,1.26012)
+ (2.528,1.26445)(2.53333,1.26872)(2.53867,1.27292)(2.544,1.27705)
+ (2.54933,1.28112)(2.55467,1.28512)(2.56,1.28906)(2.56533,1.29294)
+ (2.57067,1.29674)(2.576,1.30049)(2.58133,1.30417)(2.58667,1.30778)
+ (2.592,1.31133)(2.59733,1.31481)(2.60267,1.31823)(2.608,1.32158)
+ (2.61333,1.32487)(2.61867,1.32809)(2.624,1.33125)(2.62933,1.33434)
+ (2.63467,1.33737)(2.64,1.34033)(2.64533,1.34323)(2.65067,1.34606)
+ (2.656,1.34883)(2.66133,1.35153)(2.66667,1.35417)(2.672,1.35674)
+ (2.67733,1.35924)(2.68267,1.36169)(2.688,1.36406)(2.69333,1.36637)
+ (2.69867,1.36862)(2.704,1.3708)(2.70933,1.37292)(2.71467,1.37497)
+ (2.72,1.37695)(2.72533,1.37887)(2.73067,1.38073)(2.736,1.38252)
+ (2.74133,1.38424)(2.74667,1.3859)(2.752,1.3875)(2.75733,1.38903)
+ (2.76267,1.39049)(2.768,1.39189)(2.77333,1.39323)(2.77867,1.3945)
+ (2.784,1.3957)(2.78933,1.39684)(2.79467,1.39792)(2.8,1.39893)
+ (2.80533,1.39987)(2.81067,1.40075)(2.816,1.40156)(2.82133,1.40231)
+ (2.82667,1.40299)(2.832,1.40361)(2.83733,1.40417)(2.84267,1.40465)
+ (2.848,1.40508)(2.85333,1.40544)(2.85867,1.40573)(2.864,1.40596)
+ (2.86933,1.40612)(2.87467,1.40622)(2.88,1.40625)
+\allinethickness{0.0055348in}%
+\path(2.82288,1.41337)(2.82817,1.3965)
+\path(2.82772,1.41543)(2.83335,1.39747)
+\path(2.83353,1.41441)(2.83854,1.39845)
+\path(2.83934,1.41339)(2.84372,1.39942)
+\path(2.84515,1.41237)(2.8489,1.4004)
+\path(2.85096,1.41135)(2.85408,1.40137)
+\path(2.85677,1.41033)(2.85927,1.40235)
+\path(2.86257,1.40931)(2.86445,1.40332)
+\path(2.86838,1.40829)(2.86963,1.4043)
+\path(2.87419,1.40727)(2.87482,1.40527)
+\path(2.83547,1.39787)(2.86857,1.40826)
+\path(2.82296,1.39954)(2.85714,1.41026)
+\path(2.82293,1.40512)(2.84572,1.41227)
+\path(2.82289,1.4107)(2.83429,1.41427)
+\allinethickness{1.2pt}%
+\path(2.82292,1.4059)(2.82299,1.39552)(2.88,1.40625)
+ (2.82286,1.41628)(2.82292,1.4059)
+\put(2.86001,1.46481){\makebox(0,0)[b]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\texttt{\footnotesize \texttt{eps}}}}}}
+\put(2.88,1.40625){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\path(2.88,1.40625)(3.52,1.40625)
+\allinethickness{0.0055348in}%
+\path(3.50867,1.40419)(3.51287,1.40755)
+\path(3.49734,1.40213)(3.50573,1.40884)
+\path(3.48601,1.40007)(3.4986,1.41014)
+\path(3.47467,1.39801)(3.49146,1.41144)
+\path(3.46334,1.39595)(3.48433,1.41274)
+\path(3.46292,1.40262)(3.47719,1.41403)
+\path(3.46292,1.40962)(3.47006,1.41533)
+\path(3.51429,1.40521)(3.51235,1.40764)
+\path(3.50858,1.40417)(3.5047,1.40903)
+\path(3.50288,1.40314)(3.49705,1.41042)
+\path(3.49717,1.4021)(3.4894,1.41181)
+\path(3.49146,1.40106)(3.48175,1.41321)
+\path(3.48575,1.40002)(3.47409,1.4146)
+\path(3.48005,1.39899)(3.46644,1.41599)
+\path(3.47434,1.39795)(3.46292,1.41222)
+\path(3.46863,1.39691)(3.46292,1.40404)
+\allinethickness{1.2pt}%
+\path(3.46292,1.40625)(3.46292,1.39587)(3.52,1.40625)
+ (3.46292,1.41663)(3.46292,1.40625)
+\put(3.57535,1.40625){\makebox(0,0)[l]{\fboxrule0.1pt%
+\fcolorbox{rgb_ff0000}{cmy_000019}{\hbox{\color{rgb_0000ff}\texttt{\footnotesize \begin{minipage}{0.225in}\texttt{png mng gif}\end{minipage}}}}}}
+\put(3.52,1.40625){\color{rgb_0000ff}$\allinethickness{0.0207555in}\circle{0.0207555}$}%
+\put(1.92,0.46875){\makebox(0,0)[c]{\hbox{\color{rgb_009800}\texttt{\Large flix}}}}
+\end{picture}%
diff --git a/graphics/epix/doc/ePiX.xp b/graphics/epix/doc/ePiX.xp
new file mode 100644
index 0000000000..c39e6b2ac0
--- /dev/null
+++ b/graphics/epix/doc/ePiX.xp
@@ -0,0 +1,156 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+void emph(const std::string& prog)
+{
+ if (prog == "all")
+ black();
+ else
+ {
+ bbold(Red());
+ label_color(Blue());
+ label_mask(Yellow(0.1));
+ label_border(Red(), "0.1pt");
+ }
+}
+
+void restore(const std::string& prog)
+{
+ if (prog == "all")
+ emph(prog);
+
+ else
+ {
+ plain();
+ black(0.5);
+ label_mask(Neutral());
+ }
+}
+
+void diagram(const std::string& prog)
+{
+ font_size("footnotesize");
+ arrow_width(1.5);
+ restore(prog);
+
+ if (prog != "laps")
+ emph(prog);
+
+ arrow(P(0,1), P(1,1));
+
+ dot(P(0,1), P(0,4), "\\texttt{xp}, \\texttt{flx}", t);
+ dot(P(1,1), P(2,4), "\\texttt{eepic}", t);
+ restore(prog);
+
+ if (prog != "epix")
+ emph(prog);
+
+ spline(P(1,1), P(1.2,1), P(1.3,0.5), P(1.5,0.5));
+ arrow(P(1.5,0.5), P(2,0.5));
+ arrow(P(2,0.5), P(3,0.5));
+
+ dot(P(2,0.5), P(0,4), "\\texttt{dvi}", t);
+ dot(P(3,0.5), P(-2,2), "\\texttt{ps}", tl);
+ restore(prog);
+
+ if(prog == "laps")
+ emph(prog);
+
+ spline(P(1,0), P(1.2,0), P(1.3,0.5), P(1.5,0.5));
+
+ dot(P(1,0), P(2,-4), "\\texttt{tex}", b);
+
+ if (prog == "elaps") // and laps
+ emph(prog);
+
+ arrow(P(3,0.5), P(3.5,0), P(4,0));
+
+ dot(P(4,0), P(4,0), "\\texttt{pdf}", r);
+ restore(prog);
+
+ if (prog == "elaps" || prog == "flix")
+ emph(prog);
+
+ arrow(P(3,0.5), P(3.5,1), P(4,1));
+
+ dot(P(4,1), P(-2,4), "\\texttt{eps}", t);
+ restore(prog);
+
+ if(prog == "flix")
+ emph(prog);
+
+ arrow(P(4,1), P(5,1));
+
+ dot(P(5,1), P(4,0),
+ "\\begin{minipage}{0.225in}\\texttt{png mng gif}\\end{minipage}", r);
+ restore(prog);
+
+ if (prog != "all")
+ {
+ font_size("Large");
+ font_face("tt");
+ label_color(Green(0.6));
+ label(P(2.5,0), prog);
+ }
+
+}
+
+int main()
+{
+#ifdef SHOW_ALL
+ picture(P(-0.5,0), P(5.75,10), "4 x 7.5 in");
+#else
+ picture(P(-0.5,2), P(5.75,10), "4 x 7.5 in");
+#endif
+
+ begin();
+ // border();
+
+ screen laps(P(0,0), P(5,1));
+ activate(laps);
+
+ diagram("laps");
+ laps.v_scale(0.5, P(0,0.5));
+ inset(laps, P(0,8), P(5,10));
+ deactivate(laps);
+
+
+ screen epix(P(0,0), P(5,1));
+ activate(epix);
+
+ diagram("epix");
+ epix.v_scale(0.5, P(0,0.5));
+ inset(epix, P(0,6), P(5,8));
+ deactivate(epix);
+
+
+ screen elaps(P(0,0), P(5,1));
+ activate(elaps);
+
+ diagram("elaps");
+ elaps.v_scale(0.5, P(0,0.5));
+ inset(elaps, P(0,4), P(5,6));
+ deactivate(elaps);
+
+
+ screen flix(P(0,0), P(5,1));
+ activate(flix);
+
+ diagram("flix");
+ flix.v_scale(0.5, P(0,0.5));
+ inset(flix, P(0,2), P(5,4));
+ deactivate(flix);
+
+#ifdef SHOW_ALL
+ screen all(P(0,0), P(5,1));
+ activate(all);
+
+ diagram("all");
+ all.v_scale(0.5, P(0,0.5));
+ inset(all, P(0,0), P(5,2));
+ deactivate(all);
+#endif
+
+ end();
+}
diff --git a/graphics/epix/doc/epix.info b/graphics/epix/doc/epix.info
new file mode 100644
index 0000000000..3b30c42c39
--- /dev/null
+++ b/graphics/epix/doc/epix.info
@@ -0,0 +1,4696 @@
+This is epix.info, produced by makeinfo version 4.9 from epix.texi.
+
+ This is the manual for ePiX, Version 1.2 Copyright (C) 2001, 2002,
+2003, 2004, 2005, 2006, 2007 Andrew D. Hwang
+
+
+File: epix.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
+
+ePiX manual
+***********
+
+This is the manual for ePiX, Version 1.2 Copyright (C) 2001, 2002,
+2003, 2004, 2005, 2006, 2007 Andrew D. Hwang
+
+* Menu:
+
+* Introduction ::
+* Getting Started ::
+* Reference Manual ::
+* Advanced Topics ::
+* Software Freedom::
+* Acknowledgments::
+* Function Index::
+* Concept Index::
+
+ --- The Detailed Node Listing ---
+
+Introduction
+
+* Changes in Version 1.2::
+* Software Dependencies::
+* Installation::
+
+Getting Started
+
+* Running `ePiX'::
+* The Drawing Model::
+* Tutorial::
+* `C++' Basics::
+* Animation::
+* Layout Tricks::
+
+Reference Manual
+
+* File Structure::
+* Picture Size and Aspect Ratio::
+* Color::
+* Scene Attributes::
+* Drawing Attributes::
+* Creating and Drawing Objects::
+* More About `C++'::
+* Attribute Quick Reference::
+
+Advanced Topics
+
+* Hidden Object Removal::
+* Extensions::
+* Programmer's Guide::
+
+
+File: epix.info, Node: Introduction, Next: Getting Started, Prev: Top, Up: Top
+
+1 Introduction
+**************
+
+`ePiX', a collection of batch utilities, creates mathematically
+accurate figures, plots, and animations containing `LaTeX' typography.
+The input syntax is easy to learn, and the user interface resembles
+that of `LaTeX' itself: You prepare a scene description in a text
+editor, then "compile" the input file into a picture. `LaTeX'- and
+web-compatible output types include a `LaTeX' picture-like environment
+written with `PSTricks', `tikz', or `eepic' macros; vector images
+(`eps', `ps', and `pdf'); and bitmapped images and movies (`png',
+`mng', and `gif').
+
+ `ePiX''s strengths include:
+
+ * Quality of output: `ePiX' creates accurate, publication-quality
+ figures whose appearance matches that of `LaTeX'. Typography may
+ be put in a figure as easily as in an ordinary `LaTeX' document.
+
+ * Ease of use: Figure objects and their attributes are specified
+ by simple, descriptive commands.
+
+ * Flexibility: Objects are described by attributes and Cartesian
+ location; as in `LaTeX', printed appearance is determined when the
+ figure is compiled. A well-designed figure can be altered
+ dramatically, yet precisely, with command-line switches or minor
+ changes to the input file.
+
+ * Power and extendibility: `ePiX' inherits the power of `C++' as a
+ programming language; variables, data structures, loops, and
+ recursion can be used to draw complicated plots and figures with
+ just a few lines of input. External code can be incorporated in a
+ figure with a command line option or by using a Makefile.
+
+ * Economy of storage and transmission: For a document containing
+ many figures, a compressed tar file of the `LaTeX' sources and
+ `ePiX' files is typically a few percent the size of the compressed
+ PostScript file.
+
+ * License: `ePiX' is _free software_. You are granted the right to
+ use the program for whatever purpose, and to inspect, modify,
+ and re-distribute the source code, so long as you do not
+ restrict the rights of others to do the same. In short, the
+ license is similar to the terms under which theorems are
+ published.
+
+
+ `ePiX' facilitates logical, as opposed to visual, structuring of
+mathematical figures, analogous to the relationship between `LaTeX' and
+a word processor. A few stylistic defaults streamline the creation of
+simple figures, but there are few internal restrictions on the contents
+or appearance of a figure; aesthetic and practical decisions are left
+to you.
+
+ If you are a:
+
+ * Potential user, you may wish to skip immediately to "Software
+ Dependencies" before investing additional time.
+
+ * New user, proceed from here until you have enough understanding
+ to run the software, then experiment with the samples files while
+ reading Chapter *Note chapter:started::, , or return to the
+ manual as needed.
+
+ * More advanced user, browse at will, probably starting with
+ Chapter *Note chapter:ref-man::, .
+
+
+ This manual is relatively conversational, and occasionally redundant,
+especially between portions meant for readers at different levels of
+familiarity. Throughout, you are assumed to be familiar with `LaTeX'
+and basic linear algebra: the description of points, vectors, lines,
+and planes in three-dimensional space. Other material, such as `C++'
+syntax, is introduced as needed.
+
+* Menu:
+
+* Changes in Version 1.2::
+* Software Dependencies::
+* Installation::
+
+
+File: epix.info, Node: Changes in Version 1.2, Next: Software Dependencies, Prev: Introduction, Up: Introduction
+
+1.1 Changes in Version 1.2
+==========================
+
+`ePiX' 1.2.x has been written almost entirely from scratch. The
+conceptual model is unchanged, but there are a few changes of syntax.
+If you're new to `ePiX', please skip straight to Section *Note
+section:software_deps::, .
+
+
+
+Except as noted below, `ePiX' 1.0 files will compile under Version 1.2.
+Generally, global variables have been deprecated or removed, and should
+be replaced by function calls in new files. The following changes are
+either required, or else strongly recommended (and may become
+mandatory).
+
+ * (Mandatory) The global variable tix in a `flix' file must be
+ manipulated through the function tix().
+
+ * (Mandatory) The command `use_pstricks()' is obsolete. PSTricks
+ output is obtained systematically as an output format.
+
+ * (Mandatory) Deprecated "aliases" no longer exist: `triple' (for
+ the `P' class), `D' (for `Deriv'), and `I' (for `Integral').
+ Lowercase trig function names conflicted with the standard
+ namespace and have been removed.
+
+ * (Mandatory) Geometric object commands (`circle', `plane',
+ `segment', and `sphere'), which formerly created class objects,
+ now perform drawing just as `ellipse', `line', `rect', etc., do.
+ The classes are available with capitalized names (`Circle',
+ etc.).
+
+ * (Mandatory) Camera orientation is controlled with functions
+ named `tilt', `pan', and `roll'; each rotates the camera about
+ an axis through the viewpoint, not through the target.
+
+ * (Recommended) The global size variables x_min, x_max, y_min,
+ y_max, x_size, and y_size should be replaced by the function
+ calls xmin(), etc. (No underscores.)
+
+ * (Suggested) The camera may be accessed through the function
+ `cam()'.
+
+ * (Suggested) The size and bounding box are given in one command,
+ such as `picture(P(-1,0), P(1,1), "4x3in")'. The old syntax will
+ be retained indefinitely.
+
+
+
+
+ * Output is cleanly separated from the internal representation.
+ Figures may be written with a choice of macros--`PSTricks',
+ `tikz', and `eepic' at present--and new output types are easily
+ coded so long as the format supports arbitrary line segments,
+ color, and the ability to place a `LaTeX' box at a specified
+ location.
+
+ * Colors are a manipulable data type, available in RGB, CMY, CMYK,
+ and Gray models. `xcolor'-style operations, such as color model
+ conversion, blending, superposition, and inversion are provided.
+
+ The camera has a filter which affects the colors of all scene
+ elements. Filters performing CMYK separation are provided.
+
+ * Color filling is controlled with declarations, similarly to line
+ colors in `ePiX' 1.0. Arrows and markers of type spot, dot, ddot,
+ and circ are now colored like other markers. Parametric surfaces
+ may be color-shaded.
+
+ If a figure contains many shaded elements, a color-capable output
+ format (e.g.\ `PSTricks' or `tikz') should be used for
+ efficiency. Filled regions are implemented as fine hatching in
+ `eepic'.
+
+ * An `axis' class provides coordinate axes with labels in a
+ variety of styles: decimals or scientific notation of specified
+ precision, fractions, trig fractions, logarithmic labels in
+ arbitrary (integer) base, and user-supplied styles.
+
+ * `ePiX' 1.2.x performs page layout. Sub-figures may be manipulated
+ flexibly. The sample files give several applications.
+
+ * Non-member intersection operators for circles, planes, spheres,
+ and segments are provided. A "non-generic" intersection does not
+ throw an exception, but instead returns an undrawable "malformed"
+ object.
+
+
+
+File: epix.info, Node: Software Dependencies, Next: Installation, Prev: Changes in Version 1.2, Up: Introduction
+
+1.2 Software Dependencies
+=========================
+
+If you run GNU/Linux, a BSD, or Solaris, you probably have (and can
+surely install) all the external software needed to use `ePiX'. On Mac
+OS X, you will need the Apple developer tools and an X server (XCode
+and XDarwin on the Tiger disks), and the free `fink' package manager to
+build a GNU environment. For Windows, you'll need to install Cygwin
+and several packages. Detailed instructions are given below.
+
+ "Under the hood", an input file is successively converted to a
+`LaTeX' picture; `dvi'; PostScript, `pdf' or `eps'; and if desired, to
+a bitmapped image or movie. Four shell scripts--`epix', `laps',
+`elaps', and `flix'--automate the various file format conversions.
+
+ `ePiX' consists of a `C++' library, header, and shell scripts, and
+requires GNU `bash' and a compiler _for normal use_. For complete
+functionality, you need `g++' (Version 3.2 or later), `bash', a text
+editor (`ePiX' works particularly well with `emacs'), a `LaTeX'
+distribution, `Ghostscript', `gv' (or your favorite PS/PDF previewer),
+and `ImageMagick'. GNU `grep' and `sed' are good to have. You may need
+additional "developer packages" (`binutils', `make') in order to build
+`ePiX'. The more up to date your software is, the better your
+experience is likely to be, but bleeding edge versions are not
+necessary, or even always desirable.
+
+ Aside from their reliance on specific programs, `ePiX''s shell
+scripts are written using Unix-style pathnames. Thus, the most
+straightforward way to use `ePiX' is to install a GNU environment.
+
+ Jay Belanger's `emacs' mode allows you to write, compile, and view
+`ePiX' figures without leaving `emacs'. If you use another editor,
+you'll want to create template source files so you don't have to type
+boilerplate code each time you write a new figure.
+
+
+
+Cygwin can be used to run `ePiX' under Windows. Download `setup.exe'
+from `http://www.cygwin.com', then install the packages you need. The
+following are recommended, and sufficient for the actions described in
+this manual.
+
+(Archive) bzip2, tar
+(Devel) binutils, coreutils, gcc, gcc-g++, make, sed
+(Editors) emacs, emacs-X11, vim
+(Graphics) ImageMagick, ghostscript-base, ghostscript-x11, gv
+(Publishing) tetex (all)
+(Shells) bash, bash-completion
+(X11) X-start-menu-icons, X-startup-scripts,
+ XFree86-lib-compat, xorg-x11-fscl, xorg-x11-fsrv
+
+
+
+File: epix.info, Node: Installation, Prev: Software Dependencies, Up: Introduction
+
+1.3 Installation
+================
+
+`ePiX' is distributed over the World-Wide Web as source code. Packages
+may be found at `http://mathcs.holycross.edu/~ahwang/epix/ePiX.html'
+The latest stable release is also on the CTAN mirrors, in the
+`graphics' directory. (Some users of Red Hat have reported file
+permission problems when unpacking the CTAN tarballs. If you encounter
+this difficulty, please try downloading the sources from the project
+main page.) Unpack the compressed tar file with the appropriate
+command:
+
+ tar -zxvf epix-x.y.z.tar.gz
+ tar -jxvf epix-x.y.z.tar.bz2
+ (`x.y.z' is the version number) or, if your `tar' doesn't do
+decompression,
+
+ gunzip -c epix-x.y.z.tar.gz | tar -xvf -
+ bzcat epix-x.y.z.tar.bz2 | tar -xvf -
+ `cd' to the source directory, `epix-x.y.z'. The `INSTALL' file
+contains detailed installation instructions. If you're impatient, the
+short of it is `./configure [--options]; make; make install'. Run
+`./configure --help' for a list of options.
+
+ By default, `ePiX' installs in subdirectories of `/usr/local'; if
+you want to install elsewhere, supply `./configure' with the
+appropriate `--prefix'. You may also want to consult `POST-INSTALL' for
+information on setting your `PATH' variable so your shell can find
+`ePiX'. The manual and sample files are in `/usr/local/share/doc/epix'.
+
+
+
+There are two mailing lists, one for user questions, one for
+development discussion. Please visit
+`http://savannah.nongnu.org/mail/?group=epix' to subscribe.
+
+
+File: epix.info, Node: Getting Started, Next: Reference Manual, Prev: Introduction, Up: Top
+
+2 Getting Started
+*****************
+
+This chapter describes the basics of creating figures in `ePiX' for
+readers familiar with `LaTeX' but completely new to `C++'. No detailed
+knowledge of `C++' is needed to use `ePiX', only a bit of grammar that
+is easily absorbed by example.
+
+ Section *Note section:running::, describes the commands (shell
+scripts) comprising `ePiX', and explains how to set up a graphical
+environment using standard *nix programs. Section *Note
+section:overview::, briefly describes figure creation. Section *Note
+section:tutorial::, presents a few files side-by-side with their
+output, and should be read at a computer so you can run the exercises.
+
+* Menu:
+
+* Running `ePiX'::
+* The Drawing Model::
+* Tutorial::
+* `C++' Basics::
+* Animation::
+* Layout Tricks::
+
+
+File: epix.info, Node: Running `ePiX', Next: The Drawing Model, Prev: Getting Started, Up: Getting Started
+
+2.1 Running `ePiX'
+==================
+
+An "input file" is a human-written figure specification containing
+`ePiX' commands. An "output file" is machine-created, and is included
+directly into a `LaTeX' document with the appropriate packages.
+
+ Conversion ("compiling" a figure) is accomplished with four shell
+scripts, `laps', `epix', `elaps', and `flix'. Each script has a
+preferred extension for its input files, and is invoked with a command
+of the form
+
+ <script> [options] <input file(s)>
+ Often, no options are necessary. `<script> --help' describes
+`<script>''s options.
+
+ By default, output file names are constructed by replacing the input
+extension with the (preferred) output extension. For brevity,
+extensions may be omitted. If the script has doubts about your intent,
+it proceeds with default behavior and prints a warning message.
+
+ The author is a great fan of <TAB> completion, under which a shell,
+based on what has been typed so far, automatically fills in a command
+when the <TAB> key is pressed. `ePiX' comes with code snippets that
+complete intelligently when the first part of a command is one of the
+shell scripts. For example, if command completion is active, typing
+`epix' <TAB> prints only names of `epix' input files. To use this
+feature, you must install Ian MacDonald's `bash completion' package.
+The `INSTALL' and `POST_INSTALL' files contain details.
+
+
+
+`laps' performs `LaTeX' to PostScript/PDF conversion, and is
+independent of the rest of `ePiX'. By default, `laps' invokes `LaTeX'
+and `dvips'. The option `--pdf' creates a PDF file by post-processing
+the PostScript with `ps2pdf'. Other `TeX'-family processors
+(`pslatex', `pdftex', etc.) may be used instead of `LaTeX' by invoking
+`laps' with an appropriate option.
+
+
+
+`epix' compiles an input file into a `LaTeX' picture. The input file
+should have extension `xp' (for eXtended Picture). Jay Belanger's
+`emacs' mode is Highly Recommended; the installation procedure can be
+found in the `POST_INSTALL' file. When this mode is active, `emacs'
+automatically inserts a preamble template when a new `xp' file is
+created. In addition, you can peruse `ePiX''s info file, or format,
+compile, and preview files, all from within `emacs'.
+
+ Output files from the script `epix' have extension `eepic', after
+Conrad Kwok's enhancements to the `LaTeX' picture environment. In
+Version 1.2, however, an output file need not contain `eepic' macros at
+all.
+
+ An output file is `input' directly into a `LaTeX' document whose
+preamble contains appropriate `usepackage' lines. Rotated text
+requires the `rotating' package.
+
+
+
+`elaps' creates stand-alone vector images (`eps' or `pdf') from `epix'
+input files or `eepic' figures, even those not produced with `epix'.
+`elaps' automatically loads the `LaTeX' packages needed for features
+described in this manual. Additional `LaTeX' packages and `dvips'
+options may be specified on the command line.
+
+
+
+`flix' creates bitmapped images and movies, Section *Note
+section:animation::, . Input files should have extension `flx', and
+must contain a valid `epix' header as well as additional code. Jay
+Belanger's `emacs' mode facilitates creation of `flix' files.
+
+
+File: epix.info, Node: The Drawing Model, Next: Tutorial, Prev: Running `ePiX', Up: Getting Started
+
+2.2 The Drawing Model
+=====================
+
+To draw a figure manually, you select a sheet of paper of appropriate
+size and add paths, markers, and labels. These scene elements have
+attributes (line color, line width, fill color, font size, etc.)
+affecting their appearance.
+
+ `ePiX''s drawing model behaves similarly. A `picture' command sets
+the _canvas_ (or logical drawing area, a Cartesian rectangle) and the
+true size of the final figure. A `begin' command initializes the
+"virtual paper" for drawing. Subsequent _drawing commands_ add objects
+to the scene: lines, curves, function plots, labels, and the like. The
+printed appearance of scene elements is determined by the current
+"attribute state" and controlled by _style declaration_ which remain in
+effect until superseded. Finally, an `end' command closes the figure and
+prints it to the output file.
+
+ In this manual, command descriptions follow a few conventions.
+Optional arguments are enclosed in square brackets. A `len' argument is
+either a number (representing a length in `pt') or a double-quoted
+string containing a number and a two-letter `LaTeX' length unit, such
+as `"1.5pt"' or `"6cm"'. A `color' argument is a named primary
+(`Red()', `Cyan()', `White()', etc.), or a `Color' specified by
+densities (`RGB(r,g,b)', `CMY(c,m,y)', etc.)
+
+ * Fill color: `fill(color)', `nofill()'.
+
+ * Line color and width: `plain([color])', `bold([color])'.
+
+ * Text size: `font_size([size])', returns to `normalsize' if no
+ argument is given.
+
+
+ \noindent A complete list of style commands is found in Section
+*Note section:quickref::, , starting on page *Note section:quickref::.
+
+ To handle three-dimensional scenes, a `camera' performs point
+projection from a selected spatial location to the canvas. As a user,
+you'll need to control relatively few of the `camera''s parameters.
+Keep in mind, however, that elements are added to a scene in the same
+order their commands appear in the output file, and that later elements
+generally cover earlier ones. Some three-dimensional scenes require
+manual ordering of the input file; such ordering is dependent on the
+`camera''s location.
+
+ By default, `ePiX' draws thin, solid, black lines, performs no
+filling of regions, prints text in a 12 pt Roman font, and looks down
+the z axis from a large distance, giving orthogonal projection on the
+(x,y) plane. When the `camera' is moved, the z axis points vertically
+up on the page.
+
+
+File: epix.info, Node: Tutorial, Next: `C++' Basics, Prev: The Drawing Model, Up: Getting Started
+
+2.3 Tutorial
+============
+
+This section presents sample input files side-by-side with their output
+so you can compare what you write with what you'll see on the screen or
+page. `ePiX' provides standard drawing capabilities, but like all
+software has its own idioms and personality. The basic syntax, which
+comes from `C'/`C++', should be mostly self-explanatory. One-line
+comments begin with the string "//".
+
+ To use the sample files interactively, you'll need working software:
+`bash', `emacs', `ePiX', `g++', `gv', and a running X server. To
+complete your "GUI", start `gv' and select "Watch file" from the "State"
+menu. The loaded file will update automatically when it changes.
+
+ Create a "scratch" directory, `cd' into it, and run the command
+
+ tar -zxf /usr/local/share/doc/epix/sample_src.tar.gz
+ (Change the path as appropriate for your installation.) This unpacks
+copies of the sample files into your scratch directory, including all
+the files mentioned in this manual. The `README' file serves as a table
+of contents.
+
+ Open a sample file in `emacs', compile it from the drop-down menu
+(or with the keyboard command), then open the `EPS' file in `gv'. Now
+you're ready to follow the tutorial interactively. A few suggested
+exercises are included with each file. Naturally, as you study more
+files, you'll be able to make more interesting changes on your own.
+
+
+
+The first sample, `hello.xp', contains code needed to specify the
+figure's size, followed by the classic greeting. The `border' command
+draws a box around the figure in the specified color and width, and
+serves here merely to delimit the output from the surrounding page.
+
+/* -*-ePiX-*- */
+#include "epix.h" // These lines are analogous
+using namespace ePiX; // to a usepackage command.
+
+int main()
+{
+ picture(P(-1,-1), P(1,1), "2 x 1in"); // corners, true size
+
+ begin(); // ---- Figure body starts here ----
+
+ border(Black(), "1pt"); // color, line width
+
+ font_size("Huge"); // May be any font size, e.g. "scriptsize"
+ label(P(0,0), "Hello, world!");
+
+ end(); // ---- End figure; write output file ----
+}
+
+
+[Image]
+
+ * Change the color and width of the border. (`RGB(r,g,b);' creates
+ an RGB color, CMY colors are analogous. Named primaries are
+ available. The densities should be between 0 and 1 for
+ "expected" behavior.)
+
+ * Add `backing(Cyan());' after the `border' command.
+
+ * Put the command `crop_ellipse();' before the `border' command.
+ Permute the `crop_ellipse' command with the `border' and
+ `backing' lines, and note how the attribute (`crop') affects
+ objects (`border', `backing').
+
+
+
+
+Our next file uses simple objects to draw a 2-D house-and-sun scene.
+
+
+int main()
+{
+ picture(P(0,0), P(5,2), "3.75 x 1.5in");
+
+ begin();
+
+ triangle(P(0.9, 1), P(3.1, 1), P(2, 1.5)); // vertices
+ circle(P(4,1.5), 0.25); // center and radius
+
+ rect(P(1,0), P(3,1)); // opposite corners
+
+ fill(Black(0.1)); // light gray
+ rect(P(2.3,0), P(2.7,0.8)); // the door
+ nofill();
+
+ bold(); // draw thicker lines
+ grid(P(1.4, 0.2), P(2, 0.6), 2, 2); // corners, number of squares
+
+ line(P(xmin(), 0), P(xmax(), 0)); // endpoints
+
+ end();
+}
+
+
+[Image]
+
+ * Add declarations such as `bold(RGB(1,0.9,0.5))' or
+ `fill(Yellow())' to color the scene. (Color and filling are
+ orthogonal attributes.)
+
+ \noindent The sample file `house.flx' uses loops to draw gradient
+fills of the lawn, sky, and sun, and animates a sunset.
+
+
+
+Plotted functions must be defined in the "preamble", before `main'.
+"High-level" elements--coordinate axes and grids, axis labels, and
+graphs--are drawn with mnemonically-named commands.
+
+// double = double-precision floating point
+double f(double x) { return 0.75*Sin(x) - 0.25*Sin(2*x); }
+
+int main()
+{
+ picture(P(-2,-1), P(2,1), "5 x 1in"); // [-2,2] x [-1,1]
+
+ begin();
+ revolutions(); // set angle units, [0,1] = one turn
+
+ h_axis(16); // axes w/default endpts
+ v_axis(4);
+ h_axis_labels(4, P(0,-4), b); // shift down 4pt, align below
+
+ plain(Red());
+ plot(f, xmin(), xmax(), 120); // use 120 intervals
+
+ end();
+}
+
+
+[Image]
+
+ * Define and plot some different functions; adjust the bounding
+ box as necessary. (Use repeated multiplication for polynomials.
+ The `polarplot' command graphs r=f(\theta).)
+
+ * Change the arguments to `h_axis_labels'. The first specifies the
+ number of intervals to label; the second gives the label offset
+ in `pt'. The last puts each label below (`b') its Cartesian
+ location.
+
+
+
+
+Functions of two or three variables are defined just like functions of
+one variable, but for plotting the return type must be a point (`P'),
+not a real number (`double'). The `domain' class specifies the set of
+inputs to plot.
+
+
+P f(double r, double th)
+{
+ return P(r*Cos(th), r*Sin(th), pow(r, 3)*Cos(3*th));
+}
+
+int main()
+{
+ picture(P(-1,-1), P(1, 1), "2 x 1in");
+ begin();
+ pst_format(); // use PSTricks macros for output
+
+ // corners ([0,1] x [0,2\pi]) and fineness
+ // (8x40 rectangles, plotted at 16x120 resolution)
+ domain R(P(0,0), P(1, 2*M_PI), mesh(8,40), mesh(16,120));
+
+ camera.at(P(3,1,2)); // set the viewpoint
+ arrow(P(0,0,0), P(1.25,0,0)); // coordinate axes
+ arrow(P(0,0,0), P(0,1.25,0));
+
+ plain(Blue(1.2)); // line color and width
+ fill(Yellow()); // shading color
+ surface(f, R);
+
+ end();
+}
+
+
+[Image]
+
+
+
+A function can be defined by an arbitrary algorithm, and a `domain' may
+be used to plot a family of functions for several values of one
+variable.
+
+
+P sin_n(double x, double n) // Taylor polynomial of sin x
+{
+ const int N((int) floor(n)); // convert n to an index bound
+ const double sqx(-pow(x, 2)); // -x^2
+ double val(x), summand(x);
+
+ for (int i=1; i <= 2*N+1; i += 2)
+ {
+ summand *= (sqx/((i+1)*(i+2))); // (-1)^i x^{2i+1}/(2i+1)!
+ val += summand;
+ }
+
+ return P(x, val); // return (x, y)
+}
+
+int main()
+{
+ picture(P(0, -1), P(6*M_PI, 1), "5 x 1in");
+
+ begin();
+
+ set_crop();
+ bold(Green());
+ plot(Sin, 0, xmax(), 120);
+
+ domain R(P(0,1), P(6*M_PI, 41), mesh(60, 40), mesh(120, 40));
+ for (int i=3; 0 <= i; --i) // print in descending degree
+ {
+ bold(RGB(0.25*i, 0, 1-0.25*i)); // degree-dependent color
+ plot(sin_n, R.slice2(5*i+1)); // plot for n = 5i+1
+ }
+ end();
+}
+
+
+[Image]
+
+
+
+Page layout can be composed from sub-pages with `screen' objects. In
+the loop body below, objects are added to the "active" `screen', then
+`inset' into the "canvas", the screen representing the entire figure.
+
+
+P f(double u, double v)
+{
+ return P((u-v)*(u+v), 2*u*v, u);
+}
+
+int main()
+{
+ picture(P(0,0), P(2,3), "5x7.5in"); // overall size
+
+ begin();
+
+ domain R(P(-1,-1), P(1,1), mesh(12,12), mesh(24,24));
+
+ for (int i=0; i<2; ++i)
+ for (int j=0; j<3; ++j)
+ {
+ screen my(P(-3,-3), P(3,3));
+ activate(my);
+ border(Red(0.6), "1pt");
+ // frame-dependent viewpoint
+ camera.at(sph(10, (2*j+i+1)*M_PI/8, M_PI/6));
+
+ plot(f, R);
+ arrow(P(0,0,0), 2*E_1);
+ arrow(P(0,0,0), 2*E_2);
+ // SW corner at (i, 2-j), padded by 0.05 on all sides
+ inset(P(i+0.05,2.05-j), P(i+0.95,2.95-j));
+ }
+
+ end();
+}
+
+
+[Image]
+
+
+File: epix.info, Node: `C++' Basics, Next: Animation, Prev: Tutorial, Up: Getting Started
+
+2.4 `C++' Basics
+================
+
+An `ePiX' source file is a `C++' program. If you've successfully
+modified and compiled the sample files, you know enough `C++' to use
+`ePiX'. In the author's experience, `C' grammar suffices for most
+applications. An excellent introduction to definitions of functions
+and variables, control statements, and overall program structure is
+Kernighan and Ritchie's _The `C' Programming Language_, second edition
+`KnR'.
+
+
+
+Jay Belanger's `emacs' mode for `ePiX' inserts a file template when an
+empty buffer is opened with the extension `xp'. This section explains
+the purposes served by the template. A few additional remarks may help
+you avoid basic syntax pitfalls.
+
+ A `C++' file consists of "statements", analogous to ordinary
+sentences. Common types include _declarations_ (which "register" a
+function, variable, or type name with the compiler), _definitions_
+(which assign meaning to declared names), and _function calls_ (which
+cause a named function to execute). Most statements in an `ePiX' input
+file are function calls ("commands"). Plain declarations are
+relatively rare in user files, since a definition serves to declare any
+new names that it contains.
+
+ Every statement ends with a semicolon, and conventionally a file
+contains at most one statement per line. The compiler ignores nearly
+all whitespace (spaces, tabs, and newlines), which should be used
+freely to make files easy to read. Other punctuation (periods, commas,
+(semi)colons, parentheses, braces, and quotes) dictates file parsing,
+and must adhere stringently to grammar.
+
+ An `ePiX' file always begins with the lines
+
+#include "epix.h" // N.B. pre-processor directive, no semicolon
+using namespace ePiX;
+ The first line is analogous to a `LaTeX' `usepackage' command: It
+loads the contents of the "header" file `epix.h', importing the names
+of commands provided by `ePiX'. To avoid name conflicts, `ePiX''s
+commands are enclosed in a "namespace". For example, the `label'
+command is actually known to the compiler as `ePiX::label'. The second
+line above tells the compiler to apply the prefix tacitly.
+
+
+
+Definitions of variables and functions play the same role in a figure
+that macro definitions play in a `LaTeX' document: gathering and
+organizing information on which the figure depends. A variable is
+defined by supplying its type, name, and initial value. By far the most
+common data types in `ePiX' are `double' (double-precision floating
+point number), `P', and `int'. The name of a variable may consist
+(only) of letters (including the underscore character) and digits, and
+must begin with a letter:
+
+my_var, var2, MY_var, aLongVariableName; // valid
+my-var, 2var, \v@@riable, $x, ${MY_VARIABLE}; // not valid
+ Variable names are case-sensitive, and numerous (non-universal)
+conventions govern the significance of capitalization. Generally, make
+names descriptive but not unwieldy, and avoid language keywords (such
+as `const', `true', `double', `class', or `public') and names that
+begin with an underscore.
+
+ A function accepts "arguments" and "returns a value". To define a
+function in `C++', you must specify the return type, the name of the
+function, the types of the arguments, and the algorithm by which the
+value is computed from the inputs. The code block
+
+double f(double x)
+{
+ return sqrt(1-x*x);
+}
+ specifies the `double'-valued function f of one `double' variable
+defined by the formula f(x)=\sqrt1-x^2.
+
+
+
+`C++' has two types of comments. `C'-style comments, which may span
+several lines, are delimited by the strings `/*' and `*/'. One-line
+comments, analogous to the `LaTeX' `\%', are begun with `//'. A
+one-line comment may appear within a multi-line comment, but a
+`C'-style comment may not; the compiler will mistake the first `*/' it
+encounters as the end of the current multi-line comment.
+
+
+
+All the "action" in a `C++' program occurs inside the special function
+`main'. Running a compiled `C++' program is viewed by the operating
+system as calling the program's `main' function. The return value (an
+`int') is the program's exit status. The contents of the output file
+start with `begin()' and terminate with `end()'. Intervening
+statements constitute the _body_ of the file.
+
+ In `C++', a function may not be defined inside another function.
+Thus, variables may be defined inside `main', but functions cannot be.
+
+
+
+In `C++', a `string' is a sequence of characters. Most `string's in
+`ePiX' input files are _literals_, double-quoted `string's whose value
+is read from the input. In a string literal, backslash is an escape
+character; a single backslash is produced by a double backslash in the
+input file. Certain letters have special meanings when
+backslash-escaped, including "\n" (newline) and "\t" (<TAB>). Unlike
+`LaTeX', `C++' does not require a space to separate an escape sequence
+from following text; the string "\\textwidth" literally represents a
+`LaTeX' command, while "\textwidth" is read "`TABextwidth'" by the
+compiler.
+
+ Though not commonly needed, raw text can be printed to the output
+file. The functions `write', `pre_write', and `post_write' accept
+`string' arguments. `write' prints its argument where the call appears
+in the input file. The other functions print their arguments before or
+after the completed picture, respectively. These commands must be in
+the file body. As an application, a complete `LaTeX' `figure'
+environment (with caption and label) can be produced by an `ePiX' file,
+Figure *Note fig:captioned::, .
+
+
+#include "epix.h"
+using namespace ePiX;
+
+int main()
+{
+ picture(P(-1,-1), P(1,1), "10cm x 3in);
+ begin();
+ pre_write("\@float Figure[hbt]"); // comes before the picture
+
+ post_write("\@caption{A \@code{LaTeX}\ figure.}"); // and after
+ post_write("\@end float");
+
+ < ... other ePiX commands ... >
+ write("%% A comment near the end, but inside the picture.");
+ end();
+} // End of main()
+
+Figure: Generating a self-contained figure in `ePiX'.
+
+
+
+An algorithm's behavior usually depends on internal state. A
+_conditional statement_ causes blocks of code to be executed according
+to criteria. A _loop_ repeatedly executes a code block, usually
+changing the values of variables in a predictable way, so that the loop
+exits after finitely many traversals.
+
+
+File: epix.info, Node: Animation, Next: Layout Tricks, Prev: `C++' Basics, Up: Getting Started
+
+2.5 Animation
+=============
+
+`ePiX' is well-suited to the creation of mathematically accurate
+animations: If a figure depends suitably upon a "time" parameter, then
+a loop can be used to draw the entire figure for multiple time values,
+yielding successive "snapshots" of the figure as time progresses. The
+shell script `flix' automates the process of compiling a suitable input
+file into a collection of `png's and assembling these frames into a
+`mng' or `gif' animation. ImageMagick is the image-handling engine.
+
+ A `flix' file is an `epix' file with two restrictions:
+ * The `double' variable `tix()' is used as "clock".
+
+ * `main' accepts two command line arguments and sets `tix()'
+ accordingly.
+ Jay Belanger's `emacs' mode recognizes the file extension `.flx' and
+inserts template code if an empty buffer is opened. Creation of `flix'
+files is as easy as creation of `epix' files. The `samples' directory
+contains a handful of `flix' files that may be consulted for ideas.
+
+ By default, `flix' creates movies with 24 frames, in which `tix()'
+runs from 0 to 1, and animates at 0.08 sec/frame. These and other
+parameters can be changed with command-line options.
+
+ A "typical" `.flx' file may take 30 seconds to a few minutes to
+compile, depending on the number of frames and the complexity of each
+frame. To facilitate debugging, `elaps' can be run on a `flix' file.
+`elaps' runs in a fraction of the time, and if `elaps' can't produce a
+viewable image, `flix' will surely fail. While running, `flix' prints
+a progress bar counting the number of `eps' files that have been
+created. There will be a delay of a few seconds (or more) after the
+last frame is produced, during which ImageMagick's `convert' utility
+assembles the movie.
+
+
+File: epix.info, Node: Layout Tricks, Prev: Animation, Up: Getting Started
+
+2.6 Layout Tricks
+=================
+
+
+
+Stereograms are created by drawing a single scene twice from slightly
+different points of view. To create a stereogram with `ePiX', write a
+"scene" function containing the necessary drawing commands, then set
+the camera appropriately and call the scene function twice, once for
+each frame.
+
+
+
+The sample files `lorenz.xp' and `twisted_cubic.xp' use page layout to
+draw crossed-eyes stereograms. For each frame, create and activate a
+`screen', set the camera, and call the scene function. The frames are
+inset side by side in the final picture. For a crossed-eyes stereogram,
+the frame from the "rightmost" camera position is placed on the left.
+
+
+
+The sample files `cube.flx' and `mirrorball.flx' contain animated
+red-cyan stereograms, suitable for viewing with 3-D glasses. The
+technique works best with black-and-white line drawings, but the basic
+approach is the same as for crossed-eyes stereograms: Create a scene
+function and call it twice, setting the camera appropriately. Layout is
+unnecessary since the frames are superposed. Pen colors should be
+close to red and cyan, but "optimal" choices depend on one's eyes and
+3-D glasses.
+
+
+
+Either form of stereogram can be animated in a `.flx' file, but keeping
+one's eyes properly crossed requires practice while most people can
+instantly see depth with 3-D glasses. As always when using `flix',
+debug the scene with `elaps' before compiling a movie. If a
+stereoscopic effect is difficult to see in a still image, it will be
+even harder to perceive in a movie.
+
+
+
+`ePiX' can place external images into a figure, similarly to Rolf
+Niepraschk's `overpic' package. You provide the Cartesian center point,
+the file name, and optionally the true height and/or width of the image:
+
+ label(P(a,b), "\\includegraphics[width=w,height=h]{file}");
+ This effect requires the `graphicx' package. When compiling a
+stand-alone graphic containing an external image, you must specify the
+`graphicx' package on the command line: `elaps -p graphicx <file>'
+
+
+File: epix.info, Node: Reference Manual, Next: Advanced Topics, Prev: Getting Started, Up: Top
+
+3 Reference Manual
+******************
+
+This chapter details `ePiX''s capabilities, discussing attributes and
+data types, and listing available commands in the form
+
+ label(P posn, [P offset], string text, [align]);
+ circle(P ctr, double rad=1, normal=P(0,0,1));
+ As in Chapter *Note chapter:started::, , function arguments are given
+by type (`P', `double', `string', etc.)\ and name, or by name alone if
+the type is clear. Optional arguments are enclosed in square brackets.
+A few argument types, such as `[align]' above, admit only a small
+number of values; these cases are explained when the corresponding
+command is first introduced.
+
+ A name followed by an equals sign and a value indicates a default
+argument; if omitted in an input file, the compiler substitutes the
+default value. Only trailing arguments may be specified this way. For
+example, if the `rad' argument of the `circle' command is omitted, the
+`normal' argument _must_ be omitted as well.
+
+ In an input file, only an argument's value is given, not the type:
+
+ label(P(0,0), P(0,-4), "Hello world", b);
+ circle(P(0,-0.25), sqrt(2)); // use default normal
+
+ Generally, `len' signifies either a number (representing a length in
+`pt') or a double-quoted string containing a number and a two-letter
+`LaTeX' length unit, such as `"1.5pt"' or `"6cm"'. `color' represents a
+`Color' object constructed from a named primary (`Blue()',
+`Magenta(0.7)', etc.), a color specification (`RGB(r,g,b)',
+`CMY(c,m,y)', etc.), or an operator applied to an existing `Color'.
+
+* Menu:
+
+* File Structure::
+* Picture Size and Aspect Ratio::
+* Color::
+* Scene Attributes::
+* Drawing Attributes::
+* Creating and Drawing Objects::
+* More About `C++'::
+* Attribute Quick Reference::
+
+
+File: epix.info, Node: File Structure, Next: Picture Size and Aspect Ratio, Prev: Reference Manual, Up: Reference Manual
+
+3.1 File Structure
+==================
+
+An `ePiX' input file constitutes a short `C++' program. When this
+program is compiled and run by one of the shell scripts, it creates a
+figure file suitable for inclusion in `LaTeX'.
+
+ Like a `LaTeX' document, an `ePiX' file contains a _preamble_, which
+sets up a drawing environment, and a _body_, which contains actual
+figure-generating commands. The minimal file has the form
+
+#include "epix.h" // N.B. no semicolon
+using namespace ePiX;
+
+int main() {
+ picture(P(a1,b1), P(a2,b2), "n1 [unit1] x n2 unit2");
+ begin(); // end of preamble, start of body
+ end(); // end of body
+}
+ `ePiX' commands are of four general types: drawing, attribute setting,
+definitions (of data and functions), and operations on existing
+objects. Except as noted below, drawing and attribute commands must
+appear in the body, between `begin()' and `end()'. Function definitions
+must come in the preamble, before `main()'. Data definitions may appear
+in the preamble or body.
+
+
+
+The `end()' command writes the output file to `stdout', using `eepic'
+macros by default. The shell scripts redirect `stdout' to an
+appropriate disk file.
+
+ The attribute-setting command `pst_format()' causes the output file
+to be written using `PSTricks' macros when `end' is called. Similarly,
+`tikz_format()' causes the file to be written using `tikz' macros, and
+`eepic_format()' causes the file to be written using `eepic' macros.
+These commands may appear anywhere in the figure body. There is no
+reason for a file to contain more than one such command.
+
+ The output format may be selected on the command line, overriding any
+explicit request in the input file. Supplying `epix', `elaps', or
+`flix' with one of the options `--pst', `--tikz', or `--eepic' is
+tantamount to issuing a `pst_format()' (etc.)\ command just before the
+end of the file. These options are listed in decreasing precedence. If
+more than one is given, the "strongest" applies, regardless of the
+command line order.
+
+ A figure may be written directly to a specified disk file, in a
+format unaffected by the command line flags above. The command
+
+ print_eepic("file.tex");
+ writes the figure to the named file using `eepic' macros. Analogous
+commands exist for the formats `pst' and `tikz'. These commands perform
+an immediate action. Consequently, the command's location in the input
+file is significant, and multiple commands may appear in a single file,
+so long as distinct file name arguments are provided. Applications
+include writing the same figure in multiple formats, or creating
+successive "snapshots" of a lengthy computation.
+
+
+File: epix.info, Node: Picture Size and Aspect Ratio, Next: Color, Prev: File Structure, Up: Reference Manual
+
+3.2 Picture Size and Aspect Ratio
+=================================
+
+The `picture' command specifies a figure's logical and true sizes. In
+the "minimal file" snippet above, the _canvas_ is the Cartesian
+rectangle [a_1,a_2]\times[b_1,b_2] whose corners are given. Either pair
+of opposite corners is acceptable, but confusion is less likely when
+the SW and NE corners are given, in this order.
+
+ The true (printed) width and height are read from `picture''s third
+argument, a "size `string'" such as "4cm x 1in", containing a number
+and optional `LaTeX' length unit, an `x', another number, and a
+mandatory length unit. Spaces may be used for legibility. The
+mandatory length unit becomes the `LaTeX' `unitlength'. The argument
+"4cm x 1in" creates a picture 4 cm wide and 1 in high, but internally
+converts 4 cm to inches. Recognized length units are `pt' (points, the
+default), `cm' (centimeters), `in' (inches), `mm' (millimeters), `pc'
+(picas), and `bp' (big points). (`1in = 2.54cm = 72bp = 72.27pt', `1pc
+= 12pt'.)
+
+ The logical and true sizes may be defined separately with the
+commands
+
+ bounding_box(P(a1,b1), P(a2,b2));
+ picture(n1, n2);
+ unitlength(len); // len a length string, not a double
+ One way or another, the logical and true dimensions _must_ have
+positive values when the `begin()' command is issued.
+
+ `LaTeX' treats the contents of a picture environment as a single box,
+aligned by default on its lower left corner. An `offset' command
+accepts two `double' arguments or a size `string' and shifts the page
+location accordingly. The command `offset("0.25 x -0.5cm")' shifts the
+picture right 0.25 cm and down 0.5 cm. If the `unitlength' is 1 cm,
+the command `offset(0.25, -0.5)' has the same effect.
+
+ A non-zero `offset' causes a picture's contents to appear in a
+location where `LaTeX' does not expect them. This can be useful in a
+`LaTeX' document, but should be avoided when compiling a stand-alone
+image, since `dvips' may crop according to rules of its own.
+
+ The canvas's corners are `(xmin(),ymin())' and `(xmax(),ymax())',
+while its width and height are `xsize()' and `ysize()'. The canvas is a
+virtual, advisory data structure; its dimensions are not directly
+related to the figure's printed size, and picture elements may lie
+outside the canvas. Affine scaling maps the canvas to the page when the
+output file is written.
+[Image]
+
+ The figure's aspect ratio is controlled by sizing the canvas. The
+aspect ratio is "true" if the canvas and page rectangles are
+geometrically similar, e.g., if both boxes are 1.5 times as wide as
+they are tall.
+
+
+File: epix.info, Node: Color, Next: Scene Attributes, Prev: Picture Size and Aspect Ratio, Up: Reference Manual
+
+3.3 Color
+=========
+
+`ePiX' provides a `Color' data type. Four models are implemented:
+`RGB', `CMY', `CMYK', and `Gray'. A `Color' holds primary color
+"channels", each carrying an intensity between 0 (no color) and 1 (full
+saturation). "No color" means black in `RGB' and `Gray', white in
+`CMY(K)'. `RGB', `CMY', and `CMYK' colors are written to the output
+file as commands in the corresponding model. `Gray' shades are written
+in `RGB'.
+
+ Operations on red-green-blue colors are described below.
+Functionally, colors are converted to `RGB', operated upon, then
+converted back to the original model. Conversions are as described in
+Uwe Kern's `xcolor' manual `xcolor'.
+
+
+
+Each color model has a "constructor" creating a color of specified
+densities. The `RGB' and `CMY' models have named "primary"
+constructors; the density argument is optional and defaults to 1.
+
+ // red-green-blue colors
+ RGB(double r=0, double g=0, double b=0);
+ Red(d=1); Green(d=1); Blue(d=1);
+ White(d=1); Black(d=1);
+
+
+ // cyan-magenta-yellow colors
+ CMY(double c=0, double m=0, double y=0);
+ Cyan(d=1); Magenta(d=1); Yellow(d=1);
+ CMY_White(d=1); CMY_Black(d=1);
+
+ // gray
+ Gray(double d=0); // equivalent to RGB(d, d, d)
+ Each `CMY' constructor has a corresponding `CMYK' function, e.g.\
+`CyanK()' or `CMYK_White()'.
+
+ Though color densities lie between 0 and 1, `ePiX''s primary color
+constructors take arguments mod 4, viewed as elements of [-2,2].
+Consider `Red(d)', "red with density d". For integer values of d, the
+constructor has the following meanings: `Red(0)' is black, `Red(1)' is
+red, `Red(2)'=`Red(-2)' is white, and `Red(-1)' is anti-red, or cyan.
+For non-integer d, the constructor interpolates between the bracketing
+integer values, Figure *Note fig:densities::, . Other primary
+constructors work analogously.
+
+
+[Image]
+
+Figure[hbt]
+
+ Let \delta:[-2,2]\to[0,1] be the piecewise-linear function that
+converts real numbers to primary color densities, \clip:R\to[0,1] the
+clipping function. The non-primary constructor `RGB(r, g, b)' computes
+the density of the red channel as
+\clip\bigl(\delta(r)+\delta(-g)+\delta(-b)\bigr); the green and blue
+channel densities are computed similarly. Every color can be created
+with arguments between 0 and 1, but the constructor accepts arbitrary
+real arguments and returns colors varying "continuously and
+periodically".
+
+ Colors possess an "alpha-channel" for transparency. Except as
+supported by the output format, this feature is a stub.
+
+
+
+Colors can be scaled, inverted, blended, superposed, and filtered. In
+the code below, `tint' is a `Color'. The effect of each operation is
+described in the `rgb' model; the visual result is the same in all
+models.
+
+ tint *= double c; // multiply channels by c, rebuild
+ tint.invert(); // (r, g, b) -> (1-r, 1-g, 1-b)
+ tint.blend(Color col, double t); // (1-t)*tint + t*col
+ tint.superpose(col); // add channels, then clip to [0,1]
+ tint.alpha(double d); // set alpha channel to clip(d)
+
+ tint.filter(col); // return min density in each channel
+ Except for `filter', these operators modify their object. `filter'
+simulates the effect of viewing `col' through a transparent sheet of
+`tint', and returns a new `Color' object having the same model as
+`tint' without modifying `tint' itself.
+
+
+File: epix.info, Node: Scene Attributes, Next: Drawing Attributes, Prev: Color, Up: Reference Manual
+
+3.4 Scene Attributes
+====================
+
+Objects in a scene sit in 3-dimensional space. A _camera_ maps objects
+to the _active screen_. The active `screen' may, in turn crop its
+contents. Each drawing command creates an object, "photographs" it, and
+adds the image to the active `screen'. This section describes the
+`Camera' and `screen' classes and a few associated concepts.
+
+
+
+By default, angles are measured in `radian's. Two other angular modes
+are available: `degrees' and `revolutions'. The angular mode is set
+with a named command, `radians()', `degrees()', or `revolutions()'. The
+current angular mode affects all trigonometric functions and operations.
+
+
+
+Three-dimensional scenes are drawn on flat paper by applying a
+mathematical transformation. By default, `ePiX' uses _point
+projection_, the technique used by art students when they trace on a
+window with grease pencil, Figure *Note fig:camera::, .
+
+
+[Image]
+
+Figure[hbt]
+
+ `ePiX' depicts a Cartesian world by projecting mathematically to a
+screen plane, then affinely scaling to a printed page. The camera,
+which maps the world to the screen, consists of a _body_ (data that
+determines the position and orientation of the camera), a _lens_ (the
+actual mapping to the screen plane), and a _filter_ (a color through
+which the scene is viewed).
+
+
+
+The camera's spatial orientation is described by a triple of mutually
+perpendicular unit vectors. In memory of happy days at the beach,
+these vectors are called _sea_, _sky_, and _eye_. The screen plane is
+parallel to the sea-sky plane; the sea vector points horizontally to
+the right, sky points vertically upward. The eye is their cross
+product, which points directly at the viewer.
+
+ The sea-sky-eye basis is located at the _viewpoint_, the camera's
+spatial location. The _target_, the origin of the screen plane, lies on
+the line through the viewpoint in the direction opposite the eye
+vector. The distance from the viewpoint to the target is the _range_.
+The _camera sphere_ is centered at the viewpoint and passes through the
+target. The orientation, viewpoint, target, and range completely (and
+redundantly) determine the camera's geometric situation in the world.
+
+
+
+A _lens_ maps the world to the screen. `ePiX' comes with four lenses:
+_shadow_ (the default), _orthogonal_, _fisheye_, and _bubble_. Each
+lens simulates the appearance of world objects as seen by an observer
+at the viewpoint. The shadow lens is point projection from the
+viewpoint to the screen plane. The orthogonal lens projects from
+infinite distance. Each of the other lenses performs radial projection
+to the camera sphere, then maps the sphere to the screen plane; the
+fisheye lens does orthogonal projection (so the entire image lies
+inside the disk centered at the target whose radius is the range) while
+the bubble lens does stereographic projection from the target's
+antipode.
+
+ An input file normally uses a single camera, so a global object named
+`camera' is defined automatically. At the start of a figure, the
+`camera' looks down on the (x_1,x_2)-plane from a distant point on the
+x_3-axis. The resulting view, essentially projection along the axis, is
+suitable for 2-dimensional figures.
+
+ The `camera' is manipulated similarly to a real camera:
+
+ camera.at(P posn); // set viewpoint to posn
+ camera.look_at(P targ); // set target to targ
+ camera.range(double dist); // fix target, move viewpoint
+ camera.focus(double dist); // fix viewpoint, move target
+ camera.tilt(double angle); // rotate about the sea axis
+ camera.pan(double angle); // rotate about the sky axis
+ camera.roll(double angle); // rotate about the eye axis
+ camera.clip_range(dist); // cull scenery closer than dist
+ Explicitly setting the viewpoint or target makes the sky vector
+parallel to the projection of the x_3 axis when possible; otherwise the
+x_2-axis is used. Setting the range or focus moves the `camera'
+parallel along the eye line. Each command re-sizes the image; note that
+increasing the focus _enlarges_ the image. The three rotation
+operations fix the viewpoint, but only roll fixes the target.
+
+
+
+The `camera' has a _filter_ through which all scene `Color's pass. For
+uniformity, the filter should only be set at the start of the file
+body, before any visible elements have been placed in the scene. The
+filter has two primary uses--model conversion and color separation--but
+can also be used for special effects.
+
+ There is a `Neutral' color, for which filtering has no effect at
+all. The `camera''s default filter is `Neutral'. In addition, each
+color model has a _neutral_ representative, `RGB_Neutral', etc. Passing
+`Color's through a neutral filter preserves their appearance but
+converts them to the neutral `Color''s model.
+
+ Filtering can be used to "split" a `Color' into primary
+constituents. For `RGB' channels, the primaries themselves are suitable
+filters. For `CMYK' channels, there are special _process_ filters,
+named C_Process, etc.
+
+ camera.filter(CMY_Neutral()); // convert all colors to CMY
+ camera.filter(Gray_Neutral()); // black and white photography
+ camera.filter(Green()); // the green channel
+ camera.filter(M_Process()); // the magenta channel
+ camera.filter(Red(1.4)); // la vie en rose?
+
+
+
+
+Two operations handle elements lying far from the target. _Cropping_
+culls elements based on their screen location, and is described later.
+_Clipping_ removes objects whose spatial location lies outside the
+"clip region".
+
+ Initially, the clip region is a very large box centered at the
+origin. Commands are provided to resize this box, keeping the faces
+parallel to coordinate planes.
+
+ clip_box(P pt1, P pt2); // opposite corners
+ clip_box(P pt); // opposite corners pt and -pt
+ clip_to (P pt); // pt and P(0,0,0)
+ clip_box(); // very large box
+ Additional "clippers" may be added manually. Individual clipping
+planes are specified by a point and inward-pointing normal vector.
+Parallel planes cutting a "slice" or "slab" are described by a
+location, direction, and a distance. The location lies halfway between
+the clipping planes, and the planes' normals point toward the location.
+
+ clip_face(P loc, P perp); // perp points inward
+ clip_slice(loc, perp); // very close parallel planes
+ clip_slice(loc, perp, dist); // planes separated by dist
+ clip_restore(); // remove manually-added clip planes
+ Like `clip_restore', the `clip_box' and `clip_to' commands remove all
+user-specified half spaces.
+
+
+
+By default, drawing occurs in the Cartesian coordinate system of the
+`canvas'. However, insets and subfigures are most naturally composed in
+"local" coordinates, then placed into their final location as a unit, a
+process called _layout_. `ePiX' implements layout with the `screen'
+class.
+
+
+
+A `screen' is a Cartesian plane containing a distinguished coordinate
+rectangle, its _bounding box_. The `canvas' of a figure is a `screen',
+as is the internal representation of the printed page. At any point of
+a file body, some `screen' is _active_, or "open for drawing". A new
+`screen' is created from a pair of opposite corners, but is not used
+until explicitly activated.
+
+ screen subfig(P(a1,b1), P(a2,b2)); // [a1, a2] x [b1, b2]
+ activate(subfig); // open subfig for drawing
+ // commands to draw in subfig
+ deactivate(subfig); // re-activate the previous screen
+
+ The `canvas' is automatically drawn at the `end' of the input file.
+The contents of other `screen's must be incorporated into the `canvas'
+explicitly with an `import' or `inset' command. `import' affinely
+scales the bounding box of the "child" `screen' to the `canvas'. `inset'
+specifies corners in the "parent" where the child is placed.
+
+ import(); // active screen to canvas
+ import(subfig); // subfig to canvas
+ inset(P sw, P ne); // active screen to specified rectangle
+ inset(subfig, sw, ne); // subfig to specified rectangle
+ inset(subfig); // inset to subfig's corners
+
+
+
+The portion of a `screen' enclosed by a specified rectangle can be
+_extracted_. Each of the commands
+
+ subfig.extract(P sw, P ne);
+ canvas().extract(P sw, P ne);
+ returns the `screen' having stated corners and containing part of
+`subfig' or the `canvas', respectively. Elliptical and diamond-shaped
+portions of a `screen' may be extracted. The contents occupy the
+ellipse or diamond inscribed in the given rectangle.
+
+ subfig.extract_ellipse(sw, ne);
+ canvas().extract_diamond(sw, ne);
+ The `screen' returned by `extract' (or its variants) may be used just
+like a manually-constructed `screen', for example to construct a
+magnified inset.
+
+
+
+On occasion, it is necessary to draw at known page size, independently
+of the unit length. For 2-dimensional drawing in the (x_1,x_2)-plane
+with the `camera' in its default location, the coordinates (horizontal,
+vertical, or both) of a `screen' may be interpreted as true pt offsets
+relative to a specified point rather than as Cartesian coordinates.
+
+ inlay(subfig, P loc);
+ inlay_horizontal(subfig, loc);
+ inlay_vertical(subfig, loc);
+ Each command maps the origin of `subfig' to the specified location in
+the active `screen'. The first performs affine scaling so that one
+Cartesian unit in `subfig' maps to one true pt on the page. The second
+and third commands perform this scaling only in the named direction.
+
+ The `inlay' functions are suitable only for 2-dimensional effects.
+For 3-dimensional true-size drawing, the function `pt_to_screen'
+converts a true length of 1 pt into Cartesian coordinates in the active
+`screen'. For example, the command `line(P(0,0),
+P(pt_to_screen(12),0))' draws a line segment 12 pt long with its left
+endpoint at the Cartesian origin. True size drawing is unusual in an
+input file, but has definite uses in library code; `ePiX''s right angle
+marker is a typical application.
+
+ Either type of true-size drawing works as described when drawing in
+the `canvas', and _only_ when drawing in a `screen' imported to the
+`canvas' at "true Cartesian" size (one `screen' unit maps to one
+Cartesian unit in the `canvas'). In other situations, the true size
+coordinate(s) will be scaled by additional affine transformation(s).
+
+
+
+A `screen' has a _crop mask_: rectangular (default), elliptical, or
+diamond-shaped. If cropping is switched on in the active `screen',
+added elements are cropped to the crop mask. For example, cropping by
+the default crop mask in the `canvas' ensures the figure lies inside
+the printed region allocated by `LaTeX'.
+
+ The `crop' commands below affect the active `screen' only. Cropping
+is not a "global" attribute, but must be set or unset explicitly for
+each `screen'. By default, cropping is switched off.
+
+ set_crop(); // activate cropping
+ set_crop(false); // deactivate cropping
+ crop_diamond(); // <>-shaped mask, set crop state
+ crop_ellipse(); // etc...
+ crop(); // crop active screen's contents
+ Normally the crop mask is inscribed in the `screen''s bounding box.
+The commands `crop_diamond' and `crop_ellipse' also accept a pair of
+`P' arguments, which are treated as corners of the crop box.
+
+ The active `screen' may be decorated with a `border' (outline of
+specified color and line width) and `backing' (solid fill color). The
+crop mask determines the shape of the `border' and `backing'.
+
+ border(color, len);
+ backing(color);
+ Identically-named member functions can be applied to an arbitrary
+`screen' whether or not it is active:
+
+ scr.crop_rectangle().backing(Blue(1.8));
+ canvas().crop();
+
+
+
+A _plane affine map_ has the form T(x) = Ax+b for some invertible
+2\times2 matrix A and a constant vector b. `ePiX''s `affine' class
+allows affine maps to be built and applied to `screen's' contents.
+
+ An affine map is uniquely determined by the images of three
+non-collinear points. The constructor returns the affine map sending
+the points (1,0), (0,1), and (0,0) to `pt1', `pt2', and `pt0',
+respectively.
+
+ affine af(P pt1, P pt2, P pt0=P(0,0));
+ To emphasize, the arguments are locations, not displacements, and the
+image of the origin comes last. There is also a `void' constructor
+(taking no arguments) which returns the identity map.
+
+ To facilitate construction of affine maps, an existing `affine' may
+be post-composed with a variety of "elementary" affine transformations.
+In the commands below, `th' is an angle (in current units), `sc' is a
+non-zero `double', and `ctr' is a point fixed by the composing
+transformation. In each command, `ctr' defaults to (0,0).
+
+ affine af; // the identity map
+ af.shift(P arg); // translate by arg
+ af.rotate(th, [ctr]); // counterclockwise rotation about ctr
+ af.reflect(th, [ctr]); // reflect across line through ctr
+
+ af.h_scale(sc, [ctr]); // horizontal scaling
+ af.v_scale(sc, [ctr]); // vertical scaling
+ af.scale(sc, [ctr]); // dilatation
+
+ af.h_shear(sc, [ctr]); // shear preserving horizontals
+ af.v_shear(sc, [ctr]); // shear preserving verticals
+
+ af.invert(); // the inverse
+ af.postcomp(affine f); // post-compose with f
+ af(f); // pre-compose, af not modified
+ A non-invertible `affine' can be created _only_ by shearing or scaling
+with an extremely large or extremely small argument, or by supplying
+three collinear points to the constructor. Calling `invert' on a
+non-invertible map merely issues a warning and performs no action.
+
+ An `affine' may be applied to a `screen''s current contents. The
+`screen' class has eight member functions (`shift' through `shear')
+with syntax identical to the affine map functions. In addition, an
+arbitrary `affine' may be applied to a `screen':
+
+ scr.shift(arg); // shift scr's contents by arg; etc.
+ scr.apply(f); // apply f to scr's contents
+ To apply a composition of several maps to a `screen', it's best to
+build an `affine' map by composition, then `apply' the map. Composing
+`affine's is cheap; `apply'ing an `affine' is costly in proportion to
+the number of elements in the `screen'.
+
+ Applying an `affine' to a `screen' has no effect on the bounding
+box, `border', or `backing', and may move elements outside the bounding
+box even if cropping is active. To ensure a `screen''s contents lie
+inside the bounding box, `crop' the `screen' _after_ `apply'ing the
+`affine'(s).
+
+ The sample file `inverse.xp' uses `affine' maps to depict branches
+of inverse functions in one variable, `symmetry.xp' depicts the
+permutation group S_3 by its action on a regular hexagon.
+
+
+File: epix.info, Node: Drawing Attributes, Next: Creating and Drawing Objects, Prev: Scene Attributes, Up: Reference Manual
+
+3.5 Drawing Attributes
+======================
+
+`ePiX' maintains drawing states for filled regions, paths, and text
+objects.
+
+
+
+Filling is either on or off. When filling is active, closed paths are
+filled with the current _fill color_.
+
+ fill(); // turn filling on
+ fill(color); // turn filling on, specify color
+ nofill(); // turn filling off, same as fill(false);
+
+
+
+Paths and borders of filled regions are drawn with two _pen_s, each
+described by color and line width. The _line pen_ draws all path-like
+objects. The _base pen_ does nothing unless it is wider then the line
+pen, in which case it draws an "underlayer" or "border" on the line pen.
+
+ pen(len); // set line pen width
+ pen(color); // set line color, keep width
+ pen(color, len); // set color and width
+ As usual, `len' may be either a length string or a `double',
+interpreted as a width in `pt'. There are `base' functions with the
+same signatures and analogous meanings for the base pen.
+
+ The line width can be set with named declarations; the optional
+argument sets the line color:
+
+ plain([color]); // 0.4pt
+ bold([color]); // 0.8pt
+ bbold([color]); // 1.6pt
+
+
+
+By default, path-like objects are drawn with solid lines. Dashed,
+dotted, and free-form path style patterns are also available. (The
+`base' underlayer is always solid.) The page length of a pattern
+defaults to 12 pt, but can be set.
+
+ line_style(string);
+ dash_size(len=12);
+ The path style is set with a WYSIWYG string of dashes, spaces, and
+periods, representing a pattern of dashes, gaps, and dots. In the
+sample styles below, the repeating units have the same page size, 12 pt.
+[Image]
+
+ For brevity and uniformity, named commands are provided.
+
+ solid(); "-" dashed(); "- -" dotted(); " . "
+ A sequence of n dashes, spaces, and dots corresponds to a dash/dot
+pattern in an interval divided into n subintervals of equal length. If
+the ith character is a dash or space, the ith subinterval is drawn
+solid or empty, respectively. If the ith character is a period, a dot is
+placed at the midpoint of the ith subinterval.
+
+ This pattern is applied to a path-like object as follows. The page
+length of each edge is divided by the current `dash_size' and the
+ceiling (next largest integer) taken. This many copies of the current
+path style are scaled onto the edge. The first and last characters are
+adjacent in repeated units.
+
+ There are three inequivalent ways to adjust the dash length/dot
+spacing in a non-line path: Change the `dash_length', create a path
+with a different number of points, or use a longer, repetitive pattern.
+For best results, the style string should not be longer than about a
+dozen characters.
+
+ If you need several dashed/dotted line styles in multiple figures,
+it's best to define a custom header instead of hard-coding line styles.
+See Section *Note section:extensions::, for guidance.
+
+
+
+Two types of textual element may appear in a file: _labels_ (text
+boxes) and _markers_ (`LaTeX' symbols). A marker occupies a box of zero
+size, and is placed at a specified Cartesian location. A label has
+typographical size, and is usually offset from its Cartesian location.
+For placement, an _alignment point_ is attached to each label, and
+Cartesian coordinates position the alignment point.
+
+
+
+A label is printed as a `LaTeX' box. By default, the alignment point
+is its reference point, the intersection of the left edge and the
+baseline, which is used by `LaTeX' to position the box on the
+page:[Image]
+
+ The alignment point may be _offset_ manually by a specified number
+of `pt'. Additionally, a label's location with respect to the alignment
+point can be chosen with an optional `LaTeX'-style alignment option.
+This scheme allows labels to be placed easily where they will not
+overlap other parts of the figure, and ensures labels stay properly
+positioned when the size or aspect ratio of a figure changes.
+
+ label(P posn, P offset, string msg, [align]);
+ label(posn, msg);
+ The first two components of the `offset' argument are numbers of `pt'
+to shift the alignment point right and up. The optional `align'
+argument may be one--or an appropriate pair--of `t', `b', `r', or `l'
+(top, bottom, right, left), or `c' (center). These alignment options
+specify the position of the label _relative to the Cartesian location_
+`posn', namely they work _opposite_ to the way they work in `LaTeX'.
+[Image]\qquad [Image]
+
+ The `msg' argument is usually a snippet of `LaTeX' code enclosed in
+double quotes. `C++' treats "\" as an escape character, so a double
+backslash is needed in the source to get a single backslash in the
+output. For example,
+
+ label(P(0,0), P(2,-1), "$\\rho = \\sin\\theta$", br);
+ positions an alignment point `2pt' right and `1pt' below the
+(Cartesian) origin, and typesets the equation \rho=\sin\theta below and
+to the right.
+
+ Labels can be rotated; the (counterclockwise) angle is set in current
+angle units with the command `label_angle(theta)'. For example, a
+rotation angle of 90 degrees prints labels along a vertical axis.
+Though label rotation has legitimate uses, it can make labels more
+difficult to read, defeating their purpose. Do not use rotated labels
+merely because they are available. As a practical matter, if an output
+file contains rotated labels, the enclosing document must use the
+`rotating' package. `elaps' automatically loads this package.
+
+ An `affine' behaves moderately intelligently when acting on a marker
+or label. The mapping is applied to the label's location, and the
+"linear part" is used to adjust the offset and label angle. No attempt
+is made to treat alignment. For best results, if a `screen' will have
+an `affine' applied to it, label positions should be fine-tuned only
+with offsets, not alignment arguments. In all situations, the font
+itself is unchanged; no attempt is made to print sheared, scaled, or
+reflected text. The sample file `inverse.xp' illustrates the effect of
+affine maps on labels.
+
+
+
+By default, the font in an `ePiX' figure is that of the enclosing
+document. The font size and face are changed with "declaration-style"
+commands such as
+
+font_size("Large");
+font_face("sc");
+ The argument of font_size is a valid `LaTeX' size. If no argument is
+given, `normalsize' is understood. font_face accepts a two-letter
+string, appended to the string "`text'" to give a `LaTeX' font
+declaration command ("`textsc'" above). Finer-grained control is
+accomplished by placing `LaTeX' commands into the label text.
+
+
+
+Each label command has a corresponding "mask" version (`masklabel')
+that draws an opaque rectangle under the label text. The mask size
+exceeds the label's size by an amount of _padding_, and the mask is
+itself surrounded by a rectangular _border_, of specified color and
+width.
+
+ label_color(color); // set label text color
+ label_mask(color=White()); // set mask color
+ label_pad(string len);
+
+ label_border(color, [len]); // set color (and line width)
+ label_border(len); // set line width only
+ no_label_border(); // turn off label borders
+
+
+
+`ePiX''s marker types, listed in Table *Note table:marker::, , are
+obtained with the command marker(P pt, <MARKER TYPE>); Several
+"dot-like" marker types are available by name: [Image]
+
+ spot(P pt); dot(P pt); ddot(P pt);
+ --- box(P pt); bbox(P pt);
+ ring(P pt); circ(P pt); ---
+ A `circ' is filled with the current `mask_color', and a `ring' is
+"hollow". Each dot-like marker can also be called with label syntax,
+generating a labeled marker with one command.
+
+ dot(P posn, offset=P(0,0), msg="", align=none); // etc.
+
+ By default, `spot' and `ring' are 4 pt in diameter; `dot', `box',
+and `circ' are 3 pt in diameter; `ddot' and `bbox' are 2 pt in
+diameter. At arbitrary diameter, a `spot' is 4/3 the diameter of a `dot'
+and a `ddot' is 2/3 the diameter. The command `dot_size(diam=3)' sets
+the diameter of a `dot', and hence the size of all dot-like markers.
+
+
+[Image]
+
+Table[tb]
+
+
+
+When constructing and placing a label,
+ * Offsets are specified in `pt' (true length), not Cartesian
+ units: A label's location relative to its alignment point should
+ not depend on the logical or printed size of the figure.
+
+ * The label text is enclosed in double quotes (the single
+ character `"'), and contains the `LaTeX' code to generate the
+ label. Backslashes are doubled.
+
+
+
+Old-style color declarations set the fill color, line color, and text
+color.
+
+ rgb(r, g, b); cmyk(c, m, y, k);
+ rgb(P); cmyk(P); // for function-controlled colors
+ red(d); // similarly for other primaries
+
+
+
+File: epix.info, Node: Creating and Drawing Objects, Next: More About `C++', Prev: Drawing Attributes, Up: Reference Manual
+
+3.6 Creating and Drawing Objects
+================================
+
+Scene elements include geometric objects, coordinate grids, axis
+labels, and function plots. A few commands create an object (a point,
+line segment, circle, sphere, or plane) that can be used in subsequent
+computations, but most drawing commands automatically create, draw, and
+discard objects.
+
+
+
+The simplest object in the world, and by far the most common named data
+structure, is `P', an ordered triple of real numbers (double-precision
+floats). The function `P(x1,x2,x3)' creates the point (x_1,x_2,x_3). If
+only two arguments are provided, x_3=0 by default. This convention
+allows `ePiX' to treat 2- and 3-dimensional figures uniformly. The
+standard basis is available: `E_1=P(1,0,0)', etc.
+
+ Depending on context, a `P' may represent either a _location_
+(point) or a _displacement_ (vector). Almost all `ePiX' functions treat
+a `P' as a point. However, algebraic operators and commands that plot
+vector fields treat `P' arguments as displacements.
+
+ Polar, cylindrical, and spherical coordinate `P' constructors are
+sensitive to the current angular mode.
+
+ P pt=polar(r,t); // (r*Cos(t), r*Sin(t), 0)
+ P pt=cis(t); // (Cos(t), Sin(t), 0) = polar(1, t)
+ P pt=cyl(r,t,z); // (r*Cos(t), r*Sin(t), z)
+ P pt=sph(r,t,phi); // polar(r,t)*Cos(phi) + (0,0,r*Sin(phi))
+
+ Algebraic operations--addition/subtraction, scalar multiplication;
+scalar, cross, and componentwise products; orthogonalization--can be
+performed on `P's. In compound expressions, the binary operators below
+should be enclosed in parentheses, and scalars must be collected at
+left, `P's at right.
+
+ double u=pt.x1(); // first coordinate of pt, etc.
+ P(a,b,c)|P(x,y,z); // scalar product, ax+by+cz
+ P(a,b,c)&P(x,y,z); // componentwise product (ax, by, cz)
+ P(a,b,c)*P(x,y,z); // cross product (bz-cy, cx-az, ay-bx)
+ J(p); // quarter turn about the x3-axis
+ p%q; // orthogonalization, p (mod q)
+ Explicitly, `p\%q' is the unique vector `p+k*q' perpendicular to `q'.
+
+ `P' operations express mathematical relationships, and therefore
+imbue a figure with logical structure, making the input file easier to
+read, modify, and maintain. Commonly, a file preamble will define a few
+named points with hard-coded coordinates, then define additional points
+of interest using `P' operators.
+
+
+
+In addition to `P', objects of type `Circle', `Plane', `Segment', and
+`Sphere' can be used for Euclidean geometry constructions. Simple
+affine operations are supplied for each type, as is a `draw()'
+function, which represents the object as a path in the screen.
+
+ obj.shift(P arg); // translate by arg
+ obj.move_to(P arg); // move center to arg
+ obj.scale(double c); // scale about center by c
+ obj.draw();
+ A `Segment''s "center" is its midpoint. A `Plane' has no center;
+`move_to' translates the `Plane' to pass through `arg', and `scale' has
+no effect.
+
+ A `Circle' data structure consists of a center, radius, and a
+perpendicular unit vector. Three constructors are provided:
+
+ Circle(center=P(0,0,0), double rad=1, normal=E_3);
+ Circle(P center, P point);
+ Circle(P p1, P p2, P p3);
+ The second constructor creates the `Circle' parallel to the (x_1,x_2)
+plane, with given center, and radius equal to the distance between the
+arguments. (A warning is printed if the second argument does not lie on
+the circle, namely, if the arguments do not lie in a plane parallel to
+the (x_1,x_2) plane.) The third returns the `Circle' passing through
+the given points; the points must not be collinear.
+
+ The data defining a `Circle' are recovered with member functions
+named `center()', `radius()', and `perp()'.
+
+ A `Plane' is specified by a point and normal vector, or by three
+non-collinear points. The `draw()' function clips the plane and draws
+the resulting polygon. Unless the clip box has been set manually, the
+clipped polygon's vertices will have large coordinates.
+
+ A `Segment' is constructed from its endpoints. The member function
+`midpoint()' returns the center.
+
+ A `Sphere' is specified by a point and a radius--by default the
+origin and unity, or by the center and a point on the sphere. Member
+functions `center()' and `radius()' return the defining data.
+Capabilities specific to geography and spherical geometry are described
+below, pp. *Note non-eucl::ff.
+
+ The `draw()' function of a `Sphere' draws the horizon visible from
+the current viewpoint. While this horizon is a circle in object space,
+its image in the screen is generally an ellipse. Antipodal points are
+not generally mapped to points symmetrically placed with respect to the
+center of this ellipse. These effects are most pronounced when the
+viewpoint is close to the `Sphere' and the center is not close to the
+`target'.
+
+
+
+To facilitate geometric computation, `ePiX''s `Circle', `Plane',
+`Segment', and `Sphere' classes can be intersected with the `*'
+operator.
+
+ A `Circle' has a center, radius, and unit normal; a `Plane' has a
+distinguished point and unit normal; a `Segment' has two endpoints; a
+`Sphere' has a center and radius. An object is _malformed_ if these
+conditions are not met. The constructors return well-formed objects
+with two exceptions: `Circle' and `Plane' create malformed objects if
+called with three collinear points. The operator `*' returns a
+malformed object if either argument is malformed, or if the operands
+are disjoint, tangent, or coincident. Malformedness is benign: Calling
+`draw()' on a malformed object does nothing.
+
+
+
+A `frame' comprises three mutually perpendicular unit vectors. The
+constructor takes three vectors. The `frame''s third vector e_3 is
+positively proportional to `v3', the second vector e_2 is positively
+proportional to `v2\%v3', and the first is the cross product,
+e_1=e_2\times e_3. Thus, a `frame' is right-handed, and does not depend
+on `v1'.
+
+ The elements of a `frame' are named `sea', `sky', and `eye', just as
+for the `camera'. A `frame' can be rotated through an arbitrary angle
+about any of its elements.
+
+ frame(); // the standard basis {E_1, E_2, E_3}
+ frame fr(v1, v2, v3); // orthonormalize {v1, v2, v3}
+ fr.sea(); // the first element of fr, etc.
+ fr.rot1(theta); // rotate fr through theta about sea, etc.
+
+
+
+Basic path-like objects are drawn with named commands. Arguments of
+polygon commands are endpoints/vertices. Except for `line' and `Line',
+the following are subject to filling.
+
+ line(P p1, P p2, [double expand]);
+ Line(p1, p2); // draw line through p1, p2 (crop required)
+ triangle(P p1, P p2, P p3);
+ rect(P p1, P p2);
+ quad(P p1, P p2, P p3, P p4); // quadrilateral
+ circle(ctr=P(0,0,0), rad=1, normal=E_3);
+ circle(ctr, pt);
+ circle(pt1, pt2, pt3);
+ The optional `line' argument is an expansion parameter:
+`line(p1,p2,t);' draws a segment centered at the midpoint of `p1' and
+`p2', with length scaled by 2^t/100. (Setting t=100 doubles the length,
+while t=-100 halves the length.) The arguments of `rect()' must lie in
+a plane parallel to a coordinate plane. The arguments to `circle'
+commands are the same as for `Circle' constructors.
+
+ Quadratic and cubic splines are described by their control points. A
+list of `P' is drawn as a "natural" spline (the C^2 piecewise cubic
+curve with vanishing second derivatives at the endpoints); the number
+of points per cubic segment must be specified. Circular and elliptical
+arcs are given by center, a basis, angular range, and an optional
+number of intervals.
+
+ spline(P p1, P p2, P p3, [int n]); // quadratic
+ spline(P p1, P p2, P p3, P p4, [int n]); // cubic
+ spline(vector<P>, int n); // natural spline
+
+ arc(P ctr, rad, t_min, t_max); // parallel to (x1,x2)-plane
+ ellipse(P ctr, P v1, P v2); // in plane spanned by v1, v2
+ ellipse(P ctr, P v1, P v2, t_min, t_max, [int n]);
+ If parameter bounds are omitted in an `ellipse' command, the entire
+ellipse is drawn. When the angular range subtends one or more full
+turns in an `arc' or `ellipse' the curve is subject to filling.
+
+ Commands for planar (half-)ellipses remain from `ePiX''s early days:
+
+ ellipse(P ctr, P radius);
+ ellipse_left(P ctr, P radius);
+ ellipse_right(P ctr, P radius);
+ ellipse_top(P ctr, P radius);
+ ellipse_bottom(P ctr, P radius);
+ If `radius' is `P(a,b)', these commands draw all or half of the
+ellipse with given center in the (x_1,x_2) plane, axes parallel to the
+coordinate axes, and axis lengths 2a and 2b.
+
+ Two commands are available to mark off right angles or a subtended
+angle. Each accepts a spatial location and two non-zero directions, and
+draws a scene element in the plane spanned by the vectors.
+
+ right_angle(P loc, P v1, P v2, scale=8);
+ arc_measure(P loc, P v1, P v2, scale=8);
+ arc_measure(P loc, P v1, P v2, offset, text, align, scale=8);
+ The `right_angle' command does not check its arguments for
+perpendicularity. The `arc_measure' commands mark the _small_ angle
+subtended by the directions; the label form places a label at the
+midpoint of the arc. The (optional) `scale' argument is the true size
+in `pt' of the marker.
+
+
+
+Consider a path made up of equal-length segments that can point at any
+angle of the form 2\pi k/n radians, for 0\leq k<n, like spokes on a
+wheel. A path is specified by a finite sequence of integers, taken
+modulo n. For example, if n=6, then the sequence 0, 1, -1, 0 corresponds
+to the ASCII path _/_. `ePiX''s fractal approximation starts with such
+a "seed" then recursively (up to a specified depth) replaces each
+segment with a scaled and rotated copy of the seed, Figure *Note
+fig:fractal::, . The seed above generates the standard von Koch
+snowflake fractal. In code:
+
+ const int seed[] = {6, 4, 0, 1, -1, 0};
+ fractal(P(a,b), P(c,d), depth, seed);
+ The first entry of `seed[]' (here 6) is the number of "spokes" n, the
+second (4) is the number of terms in the seed, and the remaining
+entries are the seed proper. The final path joins (a,b) to (c,d). The
+number of segments in the final path grows exponentially in the depth,
+so depths larger than 5 or 6 are likely to exceed the capabilities of
+`LaTeX' and/or PostScript.
+
+[Image]
+
+Figure[hbt]
+
+
+
+Line segments, splines, and arcs can be drawn with arrowheads at one
+end. In profile, an arrowhead's width is `3pt', and its height is 5.5
+times the width. The actual printed height depends on the head's
+orientation with respect to the camera. By default, an arrowhead is a
+filled triangle. The shape and size are adjusted with declarations:
+
+ arrow_width(w=3); // width in pt
+ arrow_ratio(r=5.5); // height-to-width
+ arrow_inset(c=0); // base indent as frac of ht
+ [Image]\qquad [Image]\qquad [Image] \\ The `inset' must be between -1
+and 1. Each `arrow' command accepts an optional `scale' argument, which
+scales the arrowhead.
+
+ arrow(P tail, P tip, [scale]);
+ arrow(P p1, P p2, P p3, [scale]); // spline arrows
+ arrow(P p1, P p2, P p3, P p4, [scale]);
+ arrow(P ctr, P v1, P v2, t_min, t_max, [scale]); // ellipse
+ A few "special-purpose" commands are supplied:
+
+ dart (P p1, P p2); // same as arrow(p1, p2, 0.5);
+ aarrow(P p1, P p2); // double-headed arrow <--->
+ arc_arrow(ctr, rad, t_min, t_max, [scale]);
+ If an `arc_arrow' is too short, nothing is drawn.
+
+
+
+`ePiX' provides an `axis' class for coordinate axes. Labels are
+generated automatically in a variety of styles: decimal, scientific
+notation, fraction, and trigonometric fraction. Logarithmic axes and
+labels are available. Axis and labeling commands from Version 1.0 have
+been retained.
+
+
+
+An `axis' consists of a line segment divided into a specified number of
+equal-length subintervals by "major" (long) tick marks. Each
+subinterval may be divided further by "minor" (short) tick marks.
+Minor ticks may be equally-spaced ("Cartesian") or logarithmically
+placed. Finally, a label is written at each major tick mark with
+specified offset and alignment. Labels are generated automatically from
+the endpoints, so the line should be parallel to a coordinate axis.
+Label attributes (masking, borders, font size and face, rotation angle)
+are determined by the current label style, not by the `axis'.
+
+ The command
+
+ axis(P tail, P head, int n, P offset=P(0,0), [align = none]);
+ creates an axis joining `tail' to `head', divided into `n' segments of
+equal length, with a major tick mark and label at each division point
+and endpoint. The `offset' and `align' arguments have the same meaning
+as for ordinary labels.
+
+ The number and length of minor ticks, and the alignment of ticks, are
+controlled with member functions:
+
+ axis Ax(P(a,c), P(b,c), n);
+ Ax.subdivide(n); // put n-1 minor ticks in each axis segment
+ Ax.tick_ratio(r); // minor length = r*major length
+ Ax.align(AL=c); // align all ticks; AL = t, b, l, r, or c
+ By default, major ticks are `6pt' long and twice the length of minor
+ticks. The global declaration `tick_size(len)' sets the major length,
+subject to "reasonable stylistic limits". For visual consistency, tick
+lengths should not be changed casually.
+
+ Labels on an `axis' may be drawn in several styles, selected with
+member functions:
+
+ Ax.dec(); // decimals (default)
+ Ax.frac(); // fractions, e.g. 0.5 -> \frac{1}{2}
+ Ax.trig(); // fractional multiples of \pi
+ Ax.sci(); // scientific notation, k\times base^N
+
+ Ax.unmark(double); // remove label at selected location
+ Ax.precision(p); // set number of digits for decimal labels
+ Ax.align_labels(AL); // re-align labels
+ Arbitrary textual labels depending on one coordinate are obtained by
+writing a `string'-valued function of `double' and "registering" it:
+
+ // f represents x as a string in given precision and base
+ std::string f(double x, unsigned int prec, unsigned int base);
+ Ax.label_rep(f);
+ For example, textual tags can be printed instead of numeric labels.
+
+ By default, an `axis' is Cartesian. The member function `log(int
+b=10)' converts an `axis' to "log mode" with specified base; this
+affects both tick marks and labeling. If `b' is at least 3, minor tick
+marks appropriate for a logarithmic axis base `b' are drawn. Second,
+labels are written in decimal or scientific notation appropriately for
+a logarithmic axis; that is, "k\times b^N" (or its decimal value) is
+written at location N+\log_b k.
+
+ Minor ticks of a log `axis' may be labeled individually; again, this
+is controlled with member functions:
+
+ Ax.tag(d); // labels at N+log_b(d)
+ Ax.tag235(); // tag 2, 3, and 5 if b=10
+ Ax.tags(); // tag 1, ..., b-1
+ Ax.untag(); // remove all tags, including 1
+ Ax.untag(double); // remove one tag, e.g. Ax.untag(9);
+
+ For convenience, an `axis' object along an edge of the active
+`screen' can be created with a named command:
+
+ top_axis(n, offset, align);
+ bottom_axis(n, offset, align);
+ left_axis(n, offset, align);
+ right_axis(n, offset, align);
+ The ticks automatically point into the bounding box.
+
+ The functions above create objects or set `axis' attributes, but
+write no output. Tick marks and labels can be printed separately, or at
+once:
+
+ Ax.draw(); // axis, tick marks, and labels
+ Ax.draw_ticks(); // axis and ticks only
+ Ax.draw_labels();
+
+
+
+`ePiX' formerly supplied commands for drawing simple axes and their
+labels. These commands have been kept for compatibility. Horizontal
+axes are generated with
+
+ h_axis(p1, p2, n, align=c); // n subintervals (n+1 ticks)
+ h_log_axis(p1, p2, n, align=c, base=10);
+ For vertical axes, use `v_axis'. The style of tick mark is
+appropriate for an axis of the given type. Horizontal axis tick marks
+may be aligned `t' (above the axis) or `b' (below). Similarly, vertical
+axis ticks may be aligned `r' or `l'.
+
+ The endpoint arguments of a coordinate axis may be omitted, in which
+case they default to p_1=(x_min,0) and p_2=(x_max,0) for a horizontal
+axis, or to p_1=(0,y_min) and p_2=(0,y_max) for a vertical axis. If the
+bounding box has integer width and/or height, omitting the number of
+points draws tick marks one unit apart.
+
+ Labels for a horizontal Cartesian or logarithmic axis are generated
+with the commands
+
+ h_axis_labels(P p1, P p2, int n, P offset, [align]);
+ h_axis_masklabels(p1, p2, n, offset, [align]);
+ h_axis_log_labels(p1, p2, [n], offset, [align], base=10);
+ h_axis_log_masklabels(p1, p2, [n], offset, [align], base=10);
+ Labels for a vertical axis are generated with `v_axis_labels', etc.
+The labels are automatically generated to match their horizontal
+location. The first puts (n+1) evenly-spaced labels on the segment
+joining `p1' and `p2'. As with ordinary labels, the `offset' is in
+`pt', and the optional `LaTeX'-style alignment option positions the
+labels using their corners. The second command draws masked labels
+according to the current label masking attributes. The third writes
+labels in exponential notation, using the Cartesian coordinate as
+exponent.
+
+ As for coordinate axes, the initial and final points may be omitted
+in an `axis_[mask]labels' command, with the same defaults. The
+`offset' and number of labels must always be specified.
+
+
+
+Broken axes are best drawn using page layout, especially if axis labels
+are to be drawn. To accomplish the task, create a screen for each piece
+of axis, using appropriate Cartesian coordinates for the corners, then
+`inset' the screens so the axis pieces are nearly end to end. A zig-zag
+glyph signifies the break:
+
+ axis_break(P, P, scale=12);
+ The `P' arguments are the screen coordinates of the ends to be joined;
+the optional third argument is the true height and width in `pt' of the
+glyph. The sample file `coord_tricks.xp' uses layout and axis breaks.
+
+
+
+Cartesian grids fill a coordinate rectangle, and have a specified
+number of lines in each direction. A polar grid has specified radius,
+and numbers of rings and sectors.
+
+ grid(n1, n2); // fills the bounding box
+ grid(p1, p2, n1, n2); // fills the box with corners p1, p2
+ polar_grid(r, n1, n2);
+
+ Log and semi-log grids are drawn with analogous syntax:
+
+ log_grid (p1, p2, n1, n2, [base1], [base2]); // log-log
+ log1_grid(p1, p2, n1, n2, [base]); // log-lin
+ log2_grid(p1, p2, n1, n2, [base]); // lin-log
+ The n_i arguments dictate the number of squares, namely the number of
+orders of magnitude spanned in the logarithmic direction(s). The
+(optional) base arguments default to 10, and control the number of
+lines drawn per order of magnitude. As with Cartesian grids, the
+corners are optional; if omitted, the grid fills the bounding box.
+
+ Graph paper may be created by superimposing grids:
+
+ pen(0.25);
+ grid(10*xsize(), 10*ysize());
+ pen(0.5);
+ grid(2*xsize(), 2*ysize());
+ pen(1);
+ grid(xsize(), ysize());
+
+
+
+A `path' data structure is an ordered list of points that can be
+cropped, clipped, mapped, concatenated, and drawn. The first four
+constructors mirror polygon-drawing commands above. Function graphs
+and parametric paths are built from a real- or `P'-valued function `f'
+of one variable.
+
+ path(p1, p2, expand=0); // line (endpoints)
+ path(p1, p2, p3, [n]); // quadratic spline
+ path(p1, p2, p3, p4, [n]); // cubic spline
+ path(p1, v1, v2, t_min, t_max, [n]); // ellipse
+ path(f, t_min, t_max, [n]);
+
+ The member function `pt()' accepts a `P' or three (or two) doubles
+and appends the specified point to a `path'. This snippet creates a
+regular n-gon:
+
+ path ngon; // declare new path
+ for (int i=0; i<=n; ++i)
+ ngon.pt(cis(i*full_turn()/n)); // works in all angle modes
+ Compound paths may be built by concatenation. If `path1' and `path2'
+share an endpoint, the commands
+
+ path1 += path2;
+ path1 -= path2;
+ replace `path1' with the result of traversing `path1' "forward", then
+following `path2' in the forward or reverse direction (respectively).
+For expected results, the first (or last) point on `path2' should be
+the last point of `path1'. The notation suggests 1-dimensional homology
+chains. The sample file `contour.xp' illustrates path creation and
+manipulation.
+
+ A `path' is a data structure, and must be drawn explicitly to create
+visible output. By default a `path' is not a closed loop (even if the
+first and last points are the same), and is not filled when drawn.
+Member functions perform these tasks. Continuing the n-gon snippet
+above,
+
+ ngon.close(); // mark path as closed
+ ngon.fill(); // draw filled region if filling is active
+ ngon.draw(); // print to the screen
+ `path::close()' adds a closing edge if necessary. Once a `path' is
+closed, no more points can be added. A closed path clips and crops
+differently than an open `path' with the same data. `path::fill()' has
+no effect on an unclosed `path'.
+
+
+
+The noun "map" refers to a `C++' function that accepts one or more
+`double' arguments and returns a `double' or a `P'. Mathematically, a
+map can be depicted in two ways: as a graph (which retains information
+about the domain), or as a parametrized curve or surface (which
+discards domain information). `ePiX' assumes that `double'-valued maps
+are graphed and `P'-valued maps are drawn parametrically. Either sort
+of depiction is called a "plot". `ePiX' plots are either "wire mesh",
+produced by a `plot' command, or "shaded", produced by a `surface'
+command.
+
+
+
+For the moment, "function" means "function of one variable" (precisely,
+a `double'-valued function of a `double' variable). A function graph
+depends on the domain and the number of points to use. Each of the
+commands
+
+ plot(f, t_min, t_max, n);
+ polarplot(f, t_min, t_max, n);
+ shadeplot(f, t_min, t_max, n);
+ graphs the function `f' on the interval `[t_min, t_max]' by dividing
+the interval into `n' subintervals of equal length. The first gives a
+Cartesian plot, the second a polar plot with bounds in current angular
+units, the third shades the region between the graph and the horizontal
+axis. If two functions are given to `shadeplot', the region between
+their graphs is shaded.
+
+
+
+An `ePiX' `domain' is a coordinate box of dimension one, two, or three,
+specified by a pair of opposite corners and two _meshes_ ("coarse" and
+"fine", respectively) which specify the amount of data to be plotted.
+Plotting is explained in detail below.
+
+ // [a1,a2] x [b1,b2]: n1 x n2 rectangles, m1 x m2 intervals
+ domain R2(P(a1,b1), P(a2,b2), mesh(n1,n2), [mesh(m1,m2)]);
+
+ // [a1,a2] x [b1,b2] x [c1,c2] divided analogously
+ domain R3(P(a1,b1,c1), P(a2,b2,c2),
+ mesh(n1,n2,n3), [mesh(m1,m2,m3)]);
+ If unspecified, the fine mesh is the same as the coarse mesh. For
+expected behavior, the coarse mesh should "divide" the fine mesh, in
+that m_i should be a (usually small) integer multiple of n_i for each i.
+
+ A `domain' may be _resized_ in any coordinate for which the
+thickness is positive, and can be _sliced_ by setting one variable to a
+constant. The result of slicing is a `domain' whose dimension is one
+smaller than the original. Finally, "`slices'" operators return the
+list of `domain's obtained by setting one variable to evenly-spaced
+constants. By default, the number of slices is specified by the coarse
+mesh. An optional argument specifies the number of slices. This
+argument need not be related to the coarse mesh.
+
+ R2.resize2(a,b); // [a1,b1] x [a,b]
+ R2.slice1(t); // set x1 = t
+ R3.slices3([n]); // (n+1) domains with x3 = const
+[Image]
+
+ \smallskip When possible, resizing preserves grid square sizes.
+Generally, though, integer truncation occurs: If `R=domain(P(0,0),
+P(1,1), mesh(10,6))', then `R.resize1(0,0.25)' is the rectangle
+[0,0.25]\times[0,1] subdivided into 2\times6 subrectangles, since
+10\div4=2 in integer arithmetic. For expected behavior, choose mesh
+sizes to avoid integer truncation.
+
+ The arguments of a `plot' command are a map, followed by either a
+domain or its logical equivalent.
+
+ double f(double t) { return t*t; }
+ P F(double u, double v) { return P(u, v, exp(u)*Sin(v)); }
+ P G(double u, double v, double w) { return P(v*w, u*w, u*v); }
+
+ plot(f, a, b, n); // f:[a,b] -> R, using n intervals
+ plot(F, R2); // graph of exp(u)*Sin(v)
+ plot(G, R3.slice2(0.5); // G: R^3 -> R^3 restricted to y=0.5
+ By (compiler-enforced) convention, `plot' commands involving a
+`P'-valued map accept a `domain' argument, as in the second and third
+commands above. To plot a `double'-valued function, by contrast, supply
+the logical equivalent of a `domain', usually the endpoints and the
+number of intervals, as in the first `plot' command above.
+
+ Resizing and slicing allow a map `F' to be plotted selectively over
+parts of its domain. This can be used to emphasize parts of the image,
+layer scene elements, patch surfaces together, and so forth. Resize
+and slice(s) commands may be used directly in a `plot' command:
+
+ plot(F, R2.resize1(0,0.5));
+ plot(F, R2.slices1());
+
+
+
+The `P' arguments of a `domain' are a pair of opposite corners. The
+first `mesh' argument, the _coarse_ mesh, specifies the number of
+subdivisions in each coordinate direction. The second `mesh', the
+_fine_ mesh, determines the number of points used in each direction
+when plotting.
+
+ Separating the roles of coarse and fine meshes allows a plot to
+conform closely to a surface without using a fine grid of curves. Both
+parts of Figure *Note fig:plot::, are drawn with a 6\times20 coarse
+mesh. In the first picture, the fine mesh is also 6\times20, while in
+the second, the fine mesh is 12\times60.
+
+
+[Image] [Image]
+
+Figure[hbt]
+
+ The coarse mesh is significant only for domains of dimension at
+least 2. The coarse mesh's size determines the number of curves or
+surfaces plotted _perpendicularly_ to a coordinate direction, while the
+fine mesh's size determines the number of segments used _along_ that
+direction. For predictable results, the fine mesh should be a small
+multiple of the coarse mesh.
+
+ Plotting works analogously for 3-dimensional `domain's and maps
+depending on three variables: The "one-dimensional skeleton" of the
+`domain''s image is drawn. A `P'-valued map of three variables can be
+plotted over a 1- or 2-dimensional `domain'. (The effect may be
+unexpected unless the domain arises by slicing, however.) A map
+depending on one or two variables cannot be plotted over a
+3-dimensional `domain'.
+
+
+
+`ePiX''s shaded surface plotting implements a degree of hidden surface
+removal. The algorithm breaks a surface into mesh fragments, sorts them
+in decreasing (approximate) distance to the camera, and prints them.
+If filling is active, a mesh fragment is shaded according to the angle
+between the normal vector and the direction to the camera, simulating
+constant ambient lighting; otherwise, the current fill color is used.
+This technique works fairly well for surfaces without intersection, and
+even acceptably handles intersecting surfaces for which mesh elements
+intersect only along boundaries.
+
+ The syntax of a `surface' command is identical to a `plot' command
+when only a single surface is drawn. For example,
+
+ surface(F, R, cull=0);
+ plots the `P'-valued function `F' over the domain `R', the shaded
+equivalent of the corresponding `plot' command. The optional `cull'
+argument removes elements that point toward (`cull=-1') or away from
+(`cull=1') the camera. Naturally, orientation of mesh elements depends
+on the parametrization `F', not merely on the surface. Culling reduces
+the output file size, but is useful mostly for closed, convex surfaces.
+
+ There are special commands for surfaces of rotation; each accepts a
+final `cull' argument.
+
+ surface_rev(f, t_min, t_max, n_lats, n_longs);
+ surface_rev(f, g, t_min, t_max, n_lats, n_longs=24);
+ surface_rev(f, g, R, frame coords);
+ The first revolves the graph of f about the x-axis, the second uses
+the parametric curve t\mapsto\bigl(f(t),g(t)\bigr) as profile. In each
+case, the parameter interval [t_min,t_max] is divided into n_lats
+equal-length subintervals, n_longs copies of the profile curve are
+drawn, and the complete surface (one full turn) is drawn.
+
+ The third form uses a `domain' to control the range of longitudes,
+and draws a surface of rotation in the Cartesian coordinate system
+defined by the orthonormal basis `coords', by default the standard
+basis. The arguments `f' and `g' define a parametric curve in the plane
+spanned by the first two elements of `coords', and the first element is
+the axis of rotation.
+
+ As in wire mesh plotting, the fine mesh is used to draw the
+boundaries of surface patches; this tends to make surfaces look
+smoother for modest-sized coarse meshes. If the coarse mesh is too
+coarse, however, two visually undesirable effects can occur. First,
+adjacent regions of the surface may be shaded very differently, since
+shading is constant over patches defined by the coarse mesh. Second, a
+patch nearly tangent to a line of sight may be drawn badly if the patch
+bends back on itself, since the boundary of the _patch_ is drawn, not
+the visible edge of the mathematical surface. See
+`samples/artifacts.xp'.
+
+
+
+A scene containing two or more shaded surfaces cannot generally be
+built up one surface at a time. Instead, multiple surfaces must be
+assembled into a single data structure before they can be drawn.
+Multiple surfaces are built from one or more maps and one or more
+2-dimensional `domain's. In the code snippets below, `F' and `G' are
+`P'-valued functions of 3 variables, and `R' is a 3-dimensional
+`domain'.
+
+ To plot the images of several `domain's under a _single map_,
+assemble the `domain's into a list if necessary, then issue a `surface'
+command:
+
+ surface(F, R.slices3(), cull=0);
+
+ domain_list DL(R.slice1(0)); // build domain list
+ DL.add(R.slice2(0.5)); // add a domain, etc.
+ surface(G, DL, cull=0); // draw
+ For multiple maps, `ePiX' provides the `scenery' class. Conceptually,
+`scenery' is an agglomeration of shaded surfaces, built one surface at
+a time from maps and 2-dimensional `domain's. The `add' function
+accepts two arguments--a map, and either a `domain' or a list of
+`domain's--and contributes its data to the `scenery' rather than
+plotting immediately. Completed `scenery' is drawn manually.
+
+ scenery S(F, R.slice3(0.25)); // S contains one surface
+ S.add(F, R.slice2(0)); // S contains two surfaces
+ S.add(G, R.slices1(3)); // S contains six surfaces
+ S.draw(cull=0);
+ Complete examples are included in the `samples' directory:
+`spherical.xp' and `minkowski.xp'.
+
+ In principle, a scene may contain arbitrarily many surfaces. However,
+figures that contain many objects tend to tax `LaTeX''s internal
+stacks. Frequent color changes exacerbate the problem. Even if you use
+`hugelatex' (or increase `LaTeX''s memory), a figure containing more
+than a few thousand mesh elements is unlikely to compile. At moderate
+resolution, a surface can easily contain 1000 patches. Each shell
+script has a command-line option to invoke `hugelatex'; your mileage
+may vary.
+
+
+
+By default, a `surface' or `scenery' is colored according to the
+current fill color. For finer control, each `surface', `surface_rev',
+and `scenery' command accepts an optional position-dependent `color'
+specification.
+
+ surface(F, R, color, cull=0);
+ surface_rev(f, [g], t_min, t_max, n_lats, n_longs, color);
+ surface_rev(f, g, R, color, [coords]);
+
+ scenery S(F, R, color);
+ S.add(F, R, color);
+ The `color' argument is a `P'-valued function of two or three
+`double's whose output is interpreted as a set of `RGB' densities. If
+`color' takes two arguments, they are `domain' coordinates, and the
+surface is colored according to parameter values. If `color' takes
+three arguments, they are Cartesian coordinates, and the surface is
+colored according to spatial location. Please see the sample files
+`surface_shade.xp' and `S2_harmonics.xp'.
+
+
+
+`ePiX' provides high-level commands for plotting derivatives and
+definite integrals, Riemann sums, tangent lines, slope- and vector
+fields, and solutions of planar and spatial systems of differential
+equations.
+
+ In this section, `f' and `g' are `double'-valued functions of one
+variable.
+
+
+
+
+ sup(f, a, b); // max/min of f on [a,b]
+ inf(f, a, b);
+ newton(f, g, x0); // find approximate crossing point
+ Newton's method returns the crossing point of the given functions,
+starting from the specified seed, which should be reasonably close to
+the expected solution. If a critical point is hit or 5 iterations pass,
+a warning is issued and the current result (probably incorrect) is
+returned. The second function g defaults to the zero function if
+omitted.
+
+
+
+The classes `Deriv' and `Integral' are used to calculate values of
+derivatives and integrals, and to plot these functions.
+
+ Deriv df(f); // function object: df(x) = f'(x)
+ df.eval(t); // return f'(t)
+ df.left(t); // deriv from left at t: (f(t)-f(t-dt))/dt
+ df.right(t); // deriv from right at t: (f(t+dt)-f(t))/dt
+
+ Integral prim(f,a); // function object: prim(x) = int_a^x f
+ prim.eval(b); // numerical integral of f over [a,b]
+ double val(Integral(f).eval(1)); // val = \int_0^1 f
+ The lower limit on an integral is 0 by default. `Deriv's and
+`Integral's can be used directly in a `plot' command:
+
+ plot(Deriv(f), a, b, n); // plot f' over [a,b]
+ plot(Integral(f, x0), a, b, n);
+ riemann_sum(f, a, b, n, TYPE);
+ The second graphs the definite integral x\mapsto\int_x_0^x f(t)\,dt
+over [a,b]. As above, x_0 defaults to 0. The third draws rectangles or
+trapezoids whose area approximates the definite integral of f over
+[a,b]. The `TYPE' may be `UPPER', `LOWER', `LEFT', `RIGHT', `MIDPT', or
+`TRAP'.
+
+ Tangent lines and envelopes (families of tangent lines) are drawn
+with
+
+ tan_line(f, t); // f real- or vector-valued
+ envelope(f, t_min, t_max, n); // family of tangent lines
+ tan_field(f, g, t_min, t_max, n); // field of tangents
+ The sample files `conic.xp' and `lissajous.xp' illustrate these
+features.
+
+
+
+Let `F' be a `P'-valued function of two or three variables.
+
+ ode_plot(F, p_0, t_min, t_max, n);
+ flow(F, p_0, t_max, n);
+ The first plots the solution curve of the initial-value problem
+\dotx=F(x), x(0)=p_0, over the specified time interval. If t_min is
+omitted, its value is 0, so the curve starts at p_0. With manual
+calculation to rotate a planar field a quarter turn, `ode_plot' can be
+used to draw level curves (isobars) of a function of two variables; see
+the sample file `dipole.xp'. The `flow' function returns the result of
+starting at p_0 and flowing by F for time t_max, using Euler's method
+with n time steps. This is useful for placing markers or arrowheads
+precisely along a flow line.
+
+ A planar or spatial vector field itself may be plotted over a domain
+`R' in three styles:
+
+ vector_field(F, R, [scale]); // true length
+ dart_field (F, R, [scale]); // const length
+ slope_field (F, R, [scale]); // const length
+ The field is sampled at the grid points of the coarse mesh. If the
+domain is 2-dimensional, the plot is a planar slice of the field, even
+if the field depends on three variables. If the domain is
+3-dimensional, the field is drawn in successive slices x_3=const,
+starting at the height of the first corner of `R' and ending at the
+height of the second corner.
+
+ The optional final argument, which defaults to 1, scales the
+arrowheads in a vector field, and scales the (constant) length of field
+elements for slope and dart fields. The sample files `layout2.xp',
+`lorenz.xp', `slopefield.xp', and `vfield.xp' illustrate usage.
+
+ In each field-plotting command, the domain argument may be replaced
+by two points, representing corners of a coordinate rectangle, and two
+integers, the number of grid intervals in the selected coordinate
+directions. Only planar slices of a vector field can be plotted using
+the alternative syntax.
+
+
+
+`ePiX' provides limited features for spherical and hyperbolic geometry:
+the ability to draw lines in the half-plane and Poincar\'e disk models
+of the hyperbolic plane, and to draw latitudes, longitudes, great
+circle arcs, spherical triangles, regular polyhedra, and parametrized
+curves on a sphere.
+
+ Hyperbolic line segments are specified by their endpoints in the
+upper half space or ball (Poincar\'e) models. In each case there is no
+output if either endpoint lies outside the model.
+
+ hyperbolic_line(p, q);
+ disk_line(p, q);
+ For compatibility with 2-dimensional hyperbolic space, the half-space
+model is the set \(x_1,x_2,x_3)\mid x_2>0\.
+
+ A `frame' determines geographical coordinates on a `Sphere': the
+first element points toward longitude 0 on the equator, the third
+element points to the north pole. A latitude line depends on a
+`Sphere', a `frame', the numerical latitude, and a range of longitudes.
+A longitude line is described similarly.
+
+ latitude(lat, long_min, long_max, Sphere S, frame coords);
+ longitude(lngtd, lat_min, lat_max, Sphere S, frame coords);
+ By default, `coords' is the standard `frame' and `S' is the unit
+sphere. These commands draw only the portion of the curve that is
+visible from the current viewpoint. The function `back_latitude' draws
+the invisible portion of a latitude line.
+
+ Spherical arcs and triangles are described by their endpoints. Only
+the direction vector from the center of the sphere to an endpoint is
+significant; if a sphere is scaled or moved, the same function call
+will draw the corresponding object on the new sphere.
+
+ The following draw the visible (front) portions of great circle arcs:
+
+ front_arc(p1, p2, S); // short arc on S from p1 to p2
+ front_arc2(p1, p2, S); // arc from p1 to -p1 through p2
+ front_line(p1, p2, S); // great circle through p1 and p2
+ Triangles and regular (Platonic) polyhedra are provided. The sample
+file `sample/polyhedra.xp' illustrates usage.
+
+ front_triangle(p1, p2, p3, S); // spherical triangle
+ front_tetra(S, coords); // regular tetrahedron
+ front_cube(S, coords); // hexahedron
+ front_octa(S, coords); // octahedron
+ front_dodeca(S, coords); // dodecahedron
+ front_icosa(S, coords); // icosahedron
+ Each function has a `back' version, which draws the hidden portion.
+The tetrahedron, cube, and octahedron are (up to scale) inscribed in
+the cube of side length 2 centered at the origin whose sides are
+parallel to `frame'. The point (1,1,1) is a vertex of the tetrahedron.
+
+ Up to scale, the icosahedron's vertices lie on the golden rectangle
+with vertices (\pm\gamma,0,\pm1) and its images under cyclic
+permutation of coordinates. The dodecahedron is dual to the icosahedron.
+
+
+
+Parametrized paths on a `Sphere S' (by default the unit sphere) can be
+specified either by radial projection of a `P'-valued curve, or by
+stereographic projection of a plane curve given as a pair of
+`double'-valued functions:
+
+ frontplot_R(phi, t_min, t_max, n, [S]); // radial
+ frontplot_N(f1, f2, t_min, t_max, n, [S]); // from north pole
+ frontplot_S(f1, f2, t_min, t_max, n, [S]); // from south pole
+ Attempts to perform radial projection on a path through the origin
+will generate division-by-zero errors. Stereographic projection maps
+the equatorial plane \x_3=0\ to the unit sphere by projection from the
+corresponding pole: N=(0,0,1), S=(0,0,-1).
+
+ Each spherical plot command has a `back' version that prints only
+the portion of the path invisible from the current viewpoint. Because
+of the way `ePiX' layers output, it is generally best to put hidden
+portions of the input before visible portions, with line width and/or
+style that suggests hidden lines.
+
+
+
+Files of numerical data can be created, manipulated, analyzed, plotted
+(paths, scatter plots, and histograms), read, and written. The format
+for a data file is one or more floating-point numbers per line, with
+the same number of entries per line. Anything that appears on a line
+after the `LaTeX' comment character `\%' is a comment.
+
+ `ePiX' provides two `plot' commands for file data. The first
+facilitates plotting selected columns; the second simplifies plotting
+the first two columns with one or both scales logarithmic. Either form
+can be used to plot selected columns logarithmically.
+
+ The general commands read numbers from two or three columns of a
+specified file, pass them as arguments to a `P'-valued function `F',
+and plot the resulting points:
+
+ plot("filename", STYLE, [i_1], [i_2], [i_3], [F]);
+ plot("filename", STYLE, F, [i_1], [i_2], [i_3]);
+ The first argument is the name of the data file. The `STYLE' may be
+`PATH', which joins the points in the order they appear, or any of the
+marker types in Table *Note table:marker::, . The integers i_k specify
+columns from which to extract data; these default, respectively, to the
+first column, second column, and null (a column of zeroes). If the
+"coordinate system" `F' is omitted in the first command, it defaults to
+the Cartesian point constructor. The function `F' is mandatory in the
+second form; useful choices include `log_log', `log_lin', and
+`lin_log', which plot the corresponding coordinate logarithmically.
+
+
+
+For more elaborate analysis, the `data_file' class presents an
+interface to a file as an ordered list of columns. There are two
+general ways to create a `data_file': read in an external file, or
+generate data (up to three columns) using specified `double'-valued
+functions. In the constructors below, each function `fi' is a
+`double'-valued function of one variable.
+
+ data_file DF("my_data"); // read data from disk file
+ data_file DF(f1, t_min, t_max, num_pts); // values of f1
+ data_file DF(f1, f2, t_min, t_max, num_pts);
+ data_file DF(f1, f2, f3, t_min, t_max, num_pts);
+ data_file DF(3); // create empty data_file with 3 columns
+ DF.read("file1"); // read a disk file
+
+ Columns of a `data_file' can be transformed by a user-specified
+function, averaged, correlated, extracted (for use by other code),
+scatter plotted, and written to a disk file at specified precision.
+Below, the function `f' is a `double'-valued function of one variable
+and `F' is a `P'-valued function of two or three variables, whose
+components are written back to the selected columns.
+
+ DF.transform(f, i); // apply f to selected column(s)
+ DF.transform(F, i=1, j=2);
+ DF.transform(F, i, j, k);
+ Basic statistical operations on columns are provided.
+
+ DF.dot(i,j); // dot product of columns i, j
+ DF.avg(i); // mean of column i
+ DF.var(i); // population variance
+ DF.covar(i,j); // covariance
+ DF.regression(i,j); // plot regression line
+ A `data_file' is scatter plotted using syntax as described above. %
+The output is cropped automatically to the bounding box.
+
+ DF.plot(STYLE, [i1], [i2], [i3], [F]);
+ DF.plot(STYLE, F, [i1], [i2], [i3]);
+ Histograms and bar charts are described below.
+
+ A `data_file' can be written to a disk file as raw data, or in
+specified format. Below, `fmt' denotes a `string'-valued formatting
+function of two variables and `myfile' is the name of the disk file to
+be written.
+
+ DF.precision(4); // set to 4 significant figures
+ DF.write("myfile"); // write as tab-separated columns
+ DF.write("myfile", fmt, [i1], [i2]); // apply fmt to cols
+ A column can be extracted as a `C++' `vector' for use by another
+function.
+
+ DF.column(i); // i-th column
+ DF.column(f, i); // i-th column, transformed by f
+
+
+
+`ePiX' provides a `data_mask' class for culling data from a file
+according to the values in a specified column, and a `data_bins' class
+for sorting data by value.
+
+ A `data_mask' consists of an interval of numbers and a "filter"
+function. The (closed, open, or half-open) interval is given as a
+string in standard mathematical notation, or by its endpoints (for a
+closed interval). The filter is a `double'-valued function of
+`double', by default the identity, f(x)=x.
+
+ data_mask dm("[a, b]", [f]);
+ data_mask dm(a, b, [f]);
+ A `data_mask' "passes" inputs x if f(x) lies in the interval. The
+member function `reverse()' inverts this logical test.
+
+ The `data_file' class has `prune' functions to cull rows for which a
+specified column's entry satisfies a `data_mask''s criterion.
+
+ DF.prune(dm, i); // remove row if i-th column entry fails
+ DF.prune(a, b, i); // remove row if i-th column outside [a,b]
+
+ A `data_bins' object models an interval divided at specified
+locations into "bins", not necessarily of equal length. Numerical data
+is read in and the number of points in each bin counted. The lifetime
+of a `data_bins' object has two stages. First, "cuts" (endpoints of
+subintervals) are added. Then, once data is read, the cuts are "locked"
+and cannot subsequently be changed.
+
+ // [xmin, xmax] divided into n equal intervals, 1 by default
+ data_bins db(xmin, xmax, [n]);
+ db.cut(x); // add a cut at x (if x is in bounds)
+ db.read(vector<double>); // read data, lock bins
+
+ A `data_bins' object can be plotted as a histogram (rectangles'
+_area_ is proportional to the bin population), bar chart (rectangles'
+_height_ is proportional to the bin population), or spline
+interpolation of a bar chart.
+
+ db.histogram(c=1); // c = vertical scale factor
+ db.bar_chart(c=1);
+ db.plot(c=1);
+ By default (`c=1'), the height of a bar chart rectangle is the
+fraction of the total population contained in the bin; thus, the height
+is always between 0 and 1. For a histogram, the height of a rectangle
+is the fraction of the population per horizontal unit in the bin; thus,
+the total area over an interval [a,b] does not depend on how [a,b] has
+been subdivided. The sample files `dataplot.xp' and `histogram.xp'
+illustrate use.
+
+ Statistical convention dictates cuts be chosen distinctly from data
+values; that is, values should all fall strictly within a bin, not at a
+boundary point. With large, unknown data sets, this convention may be
+difficult to uphold. `ePiX' attempts to handle anomalous data
+intelligently, by keeping counts of values "out-of-range" or "on-cut".
+
+ In detail, if x<a or x>b is a data value, it is counted as
+out-of-range and does not contribute to the histogram population. If
+x=a or x=b, the value counts as both out-of-range and on-cut but is
+added to the population of the lowest or highest bin, respectively. Any
+other cut appearing as a data input is flagged as on-cut, and
+increments the population of each adjacent bin by one-half. When a
+histogram or bar chart is written, `ePiX' prints a warning message
+summarizing the number of anomalous data seen.
+
+
+
+Simple horizontal and vertical error bars are provided. The final
+(optional) argument is the true height or width (respectively) in pt.
+
+ h_error_bar(P location, double error, <mark type>, ht=6);
+ v_error_bar(P location, double error, <mark type>, wd=6);
+
+ To create more complex elements, such as asymmetric bars, whisker
+plots, labeled error bars, and the like, write a custom function using
+true-size drawing, see page *Note truesize::. For example, a fillable,
+labeled, asymmetric, vertical rectangular error bar can be implemented
+(entirely in `ePiX') like this:
+
+ void error_bar(P loc, double lo, double hi, P offset,
+ std::string text, align, double wd=6)
+ {
+ const double width(pt_to_screen(0.5*wd)); // converts to 3pt
+ rect(loc - P(width, lo), loc + P(width, hi));
+ line(loc - P(width, 0), loc + P(width, 0));
+ label(loc + P(width, 0), offset, text, align);
+ }
+ For stylistic uniformity, functions such as this should be put into a
+library and used systematically. Section *Note section:extensions::,
+outlines the process of writing, compiling, and using a custom library.
+
+
+
+A `legend' systematically labels different parts of a plot by
+associating visual "keys" with explanatory text. This tends to be most
+useful for plots containing several distinct but conceptually related
+graphs requiring contrast.
+
+ Visually, a `legend' is represented as an aligned list of rows, each
+containing a box (the key), a gap (the label skip), and some text.
+These rows are printed in a (usually large) masked label. By default,
+keys are `12pt' squares bordered in black, the label skip is `6pt', the
+background is white, and the border is plain black. These attributes
+are controlled (simultaneously for all items) with member functions.
+Parameters of type `double' represent lengths in `pt'.
+
+ legend L;
+ L.backing(color); // set background
+ L.border(color, [double]); // set border color [and width]
+ L.border(double); // border width
+
+ L.item_border(color, [double]);
+ L.item_border(double); // same, for item borders
+
+ L.label_skip(double);
+ L.key_size(double);
+
+
+
+There are three types of legend key, representing filled regions,
+paths, and markers. Fill and path keys get their visual attributes from
+the current drawing state. A mark key must be told the marker type.
+Each is created by specifying the item text.
+
+ L.fill_item(text);
+ L.path_item(text);
+ L.mark_item(<mark type>, text);
+ Keys in the printed legend appear in the same order they are created
+in the input file.
+
+
+
+Normally, a `legend' is defined near the start of a file, and an item
+is added at the point in the file where the corresponding object or
+plot is drawn, so that the item receives the correct attributes. A
+`legend' is placed into the figure with the `draw' function. The
+arguments have the same meaning as for ordinary `label's.
+
+ L.draw(P location, P offset, align);
+ All three arguments are mandatory. "Global" `legend' settings
+(border, backing, etc.) may be changed anywhere between the `legend''s
+creation and `draw' function. The sample file `legend.xp' revisits the
+example on page *Note taylor_poly::, including a trig-labeled axis and a
+legend. The file `shadeplot.xp' contains filled keys, and `dataplot.xp'
+contains a `legend' with items of mixed type.
+
+
+File: epix.info, Node: More About `C++', Next: Attribute Quick Reference, Prev: Creating and Drawing Objects, Up: Reference Manual
+
+3.7 More About `C++'
+====================
+
+A textbook or similarly detailed reference is essential for serious
+study of `C' or `C++'. _The `C' Programming Language_, second edition,
+by Kernighan and Ritchie `KnR', is an excellent, manageable resource
+for the basics of procedural programming. _C++ Primer Plus_, by Stephen
+Prata `Prata', clearly lays out the extensive details of `C++'.
+Marshall Cline's _`C++' FAQ Lite_ `Cline' engagingly discusses common
+points of confusion and furnishes tips on good design and programming.
+
+ `C++' is a powerful, complex language whose syntax is similar to that
+of `C', or to the scripting languages of Maple and Mathematica. An
+`ePiX' input file is source code for a `C++' program that writes a
+`LaTeX' picture as output. `ePiX' may be viewed as an extension to
+`C++'; in the same way that `LaTeX' furnishes a high-level interface to
+`TeX', `ePiX' provides a high-level bridge between the computational
+power of `C++' and the `LaTeX' `picture' environment.
+
+ Like all high-level programming languages, `C++' provides variables,
+functions, and control structures. Variables hold pieces of data such
+as numerical values and geometric locations, while functions operate on
+data. A control structure, such as a loop or conditional statement,
+affects the program's course according to the program's current state.
+A source file is composed primarily of "statements", which perform
+actions ranging from defining variables and functions to setting figure
+attributes, performing calculations, and writing objects to the output
+file.
+
+
+
+Names of variables and functions may consist (only) of letters, digits,
+and the underscore character. The first character of a name must not be
+a digit, and the language standard reserves names starting with
+underscore for library authors. Names are case-sensitive, but it's
+usually a bad idea to use a single name capitalized and uncapitalized
+in a single file. Numerous capitalization conventions are used
+informally; this document uses uncapitalized words separated by
+underscores for variables and functions, and occasionally uses all
+capitals for constants. As with names of `LaTeX' macros, primary
+considerations are clarity (of meaning), readability, and consistency.
+
+ Every variable in `C++' has a "type", such as integer (`int'),
+double-precision floating point (`double'), or Boolean (`bool', true or
+false). `ePiX' provides additional types, the most common of which is
+`P', for point. The construct `P(x,y,z)' creates (x,y,z), while
+`P(x,y)' gives (x,y,0), which is effectively the pair (x,y). A variable
+is defined by giving its type, its name, and an initializing expression.
+
+ In `C' and `C++', a _pointer_ variable holds the memory address of
+another variable. Pointers are useful for manipulating (possibly large)
+data structures through "handles" of fixed small size. `C++' also
+provides _references_, which bind an additional name to an existing
+object and allow the object to be manipulated through this alias. The
+statements
+
+ double x=1; // ordinary variable definition
+ double& rx=x; // bind a reference, signified by &
+ define a variable `x' having the value 1, and bind a reference
+variable `rx' to it. As long as `rx' exists, it refers to `x'. If the
+value of `x' changes, the value of `rx' does as well. Conversely, the
+value of `x' can be altered by assigning to `rx'. However, `rx' is the
+size of a pointer, regardless of the size of `x', so `rx' can be passed
+efficiently in a function call.
+
+
+
+In a programming language, the term "function" refers to a block of
+code that is executable by name. A `C++' function takes a list of
+"arguments", and has a "return value". This information, together with
+the function's name, must be provided when a function is defined. A
+function may not be defined inside another function. However, a
+function may call other functions (including itself) as part of its
+execution:
+
+ int factorial(unsigned int n)
+ {
+ if (n == 0) return 1;
+ else return n*factorial(n-1);
+ }
+
+ The special type `void' represents a "null type". A function that
+performs an action but does not return a value has return type `void'.
+A function that takes no arguments may be viewed as taking a single
+`void' argument.
+
+ Every `C++' program has a special function `main()', which is called
+by the operating system when the program is run. The arguments of
+`main()' are command-line arguments, and the return type is an integer
+that signals success or failure. User-specified functions must be
+defined before the call to `main()' or in a separately-compiled file.
+
+ Functions in `C++' may be as simple as an algebraic formula or as
+complex as an arbitrary algorithm. Greatest common divisors, finite
+sums, numerical derivatives and integrals, solutions of differential
+equations, recursively generated fractal curves, and curves of best fit
+are a few applications in `ePiX'. Several sample files contain
+user-level algorithms, which do not require knowledge of `ePiX''s
+internal data structures. The source file `functions.cc' contains
+simple functions defined by algorithms, and `functions.h' illustrates
+the use of `C++' templates. Other source files, such as `plots.cc', may
+be consulted for Simpson's rule, Euler's method, and the like.
+
+
+
+`C++' knows several familiar mathematical functions by name:
+
+ sqrt exp log log10 ceil floor fabs
+ (`fabs' is the absolute value for a floating-point argument.) `ePiX'
+provides trig and inverse trig functions sensitive to angular mode:
+
+ Cos Sin Tan
+ Sec Csc Cot
+ Acos Asin Atan
+ The inverse functions are principle branches.
+
+ The function `pow(x,y)' returns x^y when x>0, and `atan2(y,x)' (N.B.
+argument order) returns Arg(x+iy)\in(-\pi,\pi], the principle branch of
+arg. `C++' knows many constants to 20 decimal places, such as `M_PI',
+`M_PI_2', and `M_E' for \pi, \pi/2, and e respectively. `ePiX' defines
+a few additional functions:
+
+ sgn zero sinx cb
+ `sgn' is the signum function; `zero' is the constant function; `sinx'
+is the function x\mapsto \sin(x)/x with the discontinuity removed; `cb'
+(for "Charlie Brown") is the period-2 extension of the absolute value
+function on [-1,1].
+
+ The GNU `C++' library defines other functions, including inverse
+hyperbolic functions (`acosh', etc.), `log' and `exp' with base 2, 10,
+or arbitrary b (`log2', etc.), the error and gamma functions (`erf' and
+`tgamma' [sic], respectively), and Bessel functions of first and second
+kind: `j0', `j1', `y0', etc. Use, e.g., `jn(5, )' to get higher
+indices. The GNU `C' library reference manual `GNUC' describes these
+and other functions in detail.
+
+ Functions may be used in subsequent definitions, and functions of two
+(or more) variables are defined in direct analogy to functions of one
+variable:
+
+double f(double t) { return t*t*log(t*t); } // t^2 \ln(t^2)
+double g(double s, double t) { return exp(2*s)*Sin(t); }
+
+
+
+
+Unlike `C', `C++' supports "object-oriented programming". In a
+nutshell, a _class_ is an abstraction in computer code of some concept,
+such as a point, a sphere, a mapping that can be plotted, or a camera.
+Classes allow a programmer to separate an object's _interface_ (the set
+of meaningful operations) from its _implementation_ (the data
+structures and algorithms that realize the interface).
+
+ A class implementation consists of _members_ (named data elements)
+and _member functions_ (functions that belong to the class and have
+free access to members). `C++' classes enforce access permissions on
+their members, protecting data from being manipulated except as
+promised by the interface.
+
+ An ideal interface looks like a black box: It hides the
+implementation completely. In order to cooperate, two classes need
+only know each other's interfaces. This separation of form and function
+modularizes a program, and facilitates debugging, code reuse, and
+overall maintainability, particularly in large programs.
+
+ In simple programming, classes may be treated like built-in types.
+Each class object has its own member functions, whose call syntax
+differs from standard function calls:
+
+ Circle C1(P(1,0), 1.5); // circle of given center and radius
+ C1.draw(); // member function Circle::draw();
+ Naturally, this call draws the circle `C1'. Generally, a member
+function call consists of a class object's name, a period, and the name
+of the member function. Arguments, if any, go in the parentheses after
+the member function name, just as in a regular function call.
+
+ A few short paragraphs cannot do more than scratch the surface of
+classes and object-oriented programming. For more details, please
+consult a book, such as Prata `Prata' or Stroustrup `S', or Cline's
+on-line FAQ `Cline'.
+
+
+
+`C' and `C++' are "call by value" languages. Variables are not passed
+to a function; instead a copy of the value is made, and the function
+operates only on the copy. Though this feature causes occasional
+inconvenience, it prevents an object from being altered unexpectedly by
+a function call in a different part of the program. Calling by value
+helps localize the logic of a program, and circumvents easy-to-write
+but extremely hard-to-find bugs.
+
+ In `C++', a function may accept reference arguments. Passing an
+object by reference grants the calling function access to the object
+itself, not to a copy. There are two common applications: The object is
+a large data structure for which copying is "expensive", or the
+function _needs_ to modify its arguments (e.g., a function `swap(x,y)'
+that exchanges the values of `x' and `y').
+
+ For the first situation, `C++' provides the `const' keyword, which
+ensures the function does not modify its arguments, but accepts a
+reference merely for efficiency. Any attempt to modify a `const'
+argument will be caught by the compiler. Most `ePiX' commands accept
+`const' reference arguments.
+
+ The ability to pass function arguments by reference is sometimes
+touted as a feature in `C++' texts. However, the technique circumvents
+the data encapsulation of calling by value, and should be avoided
+unless absolutely necessary. If a function merely "updates" the value
+of a variable, probably the variable should be of class type, and the
+update should be performed by a member function.
+
+ A function declaration must indicate that its arguments are
+references. The declarations below have the indicated idiomatic
+meanings.
+
+ class matrix;
+ double det(matrix); // call by value, perhaps inefficient
+ matrix& transpose(matrix&); // probably changes its argument
+ double trace(const matrix&); // does not change its argument
+ Unlike pointer arguments, reference arguments impose no syntactic
+burden on the user. If `A' is a `matrix', then `transpose(A);' and
+`trace(A);' will compile. You need not declare explicit reference
+variables and pass those to the function.
+
+
+
+`C++' provides "overloading": Multiple functions can be given the same
+name, so long as the number and/or type of their arguments differ. (It
+is _not_ enough for the return types alone to differ. The compiler
+must be able to select a function from its calling syntax.) To the
+user, the appearance is that a single function intelligently handles
+multiple argument lists. Naturally, overloaded names should refer to
+functions that are conceptually related.
+
+
+
+A `C++' statement ends with a semicolon. A collection of statements
+enclosed by curly braces is a "code block", and may be viewed as a
+single logical statement. Curly braces determine a "scope", inside
+which variable names may be re-used without ambiguity. Function bodies
+are code blocks, as are the alternatives associated to control
+statements. A variable defined between curly braces is said to be
+_local_ to the scope in which it is defined; its value cannot be used
+out of scope. Variables should be declared in the smallest scope
+possible.
+
+ The compiler is not picky about spaces, tabs, and newlines, so an
+input file should be formatted to make local scopes visually apparent.
+`emacs' automatically indents code to reflect scope, though the default
+behavior does not please all users. As with variable naming, clarity
+and consistency are paramount.
+
+
+
+A `C++' source file is compiled in multiple stages that occur
+transparently to the user. The first step, pre-processing, involves
+simple text replacement for file inclusion, macro expansion and
+conditional compilation. Next, the source is compiled and assembled:
+Human-readable language instructions are parsed, then represented in
+assembly language. Finally, the object files are linked: Function calls
+are resolved to hard-coded file offsets, possibly involving external
+library files, and the program instructions are packaged into an
+executable binary that the operating system can run.
+
+ Pre-processing is used much less in `C++' than in `C'; the language
+itself supports safer and more featureful alternatives to macros, such
+as `const' variables and inline functions. File inclusion and
+conditional compilation are the chief uses of the pre-processor. Lines
+of the form
+
+ #include <iostream>
+ #include "epix.h"
+ cause the contents of a _header file_ to be read into the source file.
+A header file contains variable and function _declarations_, statements
+that specify types and names but do not define actual data.
+Declarations tell the compiler just enough to resolve expressions and
+function calls without knowing specific values or function definitions.
+
+ Conditional compilation is similar to conditional `LaTeX' code. For
+example, a file might produce either color or monochrome output as
+follows:
+
+#ifdef COLOR
+ ... // code for generating color figure
+#endif /* COLOR */
+#ifndef COLOR
+ ... // monochrome code
+#endif /* undef COLOR */
+ The "compiler symbol" `COLOR' is an ordinary `C++' name. To control
+compilation, either put a `\#define COLOR' line in the file, or
+(better) supply the flag on the command line: \\ epix -DCOLOR
+<file.xp> \\ Every `\#ifdef' must have a matching `\#endif'. Commenting
+the `\#endif' is a good habit; in a realistic file, the start and end
+of a conditional block may be separated by more than one screen.
+
+
+
+As a programming language, `C++' provides certain features common to
+all languages (such as `LaTeX', MetaPost, Perl, Lisp\ldots) and adheres
+to rules of grammar. Salient differences between `LaTeX' and `C++'
+include:
+
+ 1. Every `C++' statement and function call must end with a
+ semicolon. An omitted semicolon may result in a cryptic error
+ message from the compiler. Pre-processor directives, which start
+ with a `\#', do not end with a semicolon.
+
+ 2. Backslash is an escape character in `C++':
+ // Put label $y=\sin x$ at (2,1)
+ // Note single ^ backslash in output
+ label(P(2,1), P(0,0), "$y=\\sin x$");
+ // Double backslash ^^ in source
+
+ 3. Variable and function names may contain letters (including
+ underscore) and digits _only_, are case sensitive, and must
+ begin with a letter.
+
+ 4. Variables in `C++' must have a declared _type_, such as `int'
+ (integer) or `double' (double-precision floating point). If a
+ variable has global scope and its value does not change, the
+ definition should probably come in the preamble or at the
+ beginning of `main'. Local variables should be defined in the
+ smallest possible scope. Unlike `C', `C++' allows variables to be
+ defined where they first appear.
+
+ 5. `C++' requires explicit use of `*' to denote multiplication;
+ juxtaposition is not enough. `C++' does not support the use of ^
+ for exponentiation, e.g., t^2 is invalid. Instead, use `t*t' or
+ `pow(t,2)'.
+
+ 6. `C++' has single- and multi-line comments. Everything between a
+ double slash and the next newline is ignored, while the strings
+ /* and */ delimit multi-line comments. A single-line comment may
+ appear within a multi-line comment, but the compiler does not
+ nest multi-line comments.
+
+
+ Between them, `C' and `C++' have about 100 reserved keywords which
+cannot be used as function or variable names.
+
+
+File: epix.info, Node: Attribute Quick Reference, Prev: More About `C++', Up: Reference Manual
+
+3.8 Attribute Quick Reference
+=============================
+
+In the body of an input file, the "drawing state" determines the
+figure's appearance. Attributes are declarations, set by commands that
+accept arguments of the stated type.
+
+ A `len' argument is a double-quoted string containing a number and a
+two-letter `LaTeX' length unit, such as `"1.5pt"' or `"6cm"'. A `color'
+argument is a named primary (`Red()', `Cyan()', `White()', etc.), a
+`Color' specified by densities (`RGB(...)', `CMYK(...)', etc.), or a
+`Color' object. Using `Neutral()' as a `Color' argument generally turns
+off the corresponding attribute.
+
+ * Angular mode: `radians()', `degrees()', or `revolutions()'.
+
+ The angular mode affects all trigonometric operations, including
+ camera rotations, the drawing of arcs and ellipses, polar plotting,
+ label angle, and the trig functions themselves. Angle-sensitive
+ trig functions are capitalized, e.g., `Cos', `Tan'.
+
+ * Fill style: `fill(color)', `fill(bool)', `nofill()'.
+
+ * Path style:
+
+ * Width: `plain()', `bold()', `bbold()', `pen(len)'.
+
+ * Line style: `line_style(string)'. The argument is a
+ WYSIWYG sequence of dashes, spaces, and periods.
+ `dash_size(double)' and `dot_sep(double)' set the
+ (approximate) length in `pt' of the pattern. The commands
+ `solid()', `dashed()', `dotted()' define "standard"
+ defaults for brevity.
+
+ * Path color: Paths can be drawn using _two_ pens, one atop
+ the other. When the "base" pen is white (or the
+ background color) and wider than the "line" pen, a path
+ masks parts of the figure it crosses. A 3-D effect may be
+ obtained by making the base pen a darker shade than the
+ "line" pen.
+
+ `pen(color,[len])', `base(color,[len])'
+
+ Standard widths: `plain(color)', `bold(color)',
+ `bbold(color)'
+
+
+ * Text attributes:
+
+ * Color: `label_color(color)'
+
+ * Mask: `label_mask(color)', `label_pad(len)'
+
+ * Border: `label_border(color, [len])',
+ `label_border(len)'. The command `no_label_border()'
+ turns off label borders.
+
+ * Font size: `font_size(LaTeX size)', no argument means
+ `normalsize'.
+
+ * Font face: `font_face(LaTeX font)', two-letter font
+ selection string, default is `rm'.
+
+ * Rotation: `label_angle(double)'
+
+
+
+ Do not confuse `Color' constructors with the similarly-named
+(deprecated) lowercase attribute-setting commands, `rgb(r,g,b)',
+`cmyk(c,m,y,k)', `red(d)', etc. These commands affect text, paths, and
+filled regions. For example, the single command `red()' has the same
+effect as the three commands `pen(Red())', `fill(Red())', and
+`label_color(Red())'.
+
+
+File: epix.info, Node: Advanced Topics, Next: Software Freedom, Prev: Reference Manual, Up: Top
+
+4 Advanced Topics
+*****************
+
+This chapter covers _ad hoc_ tricks and open-ended techniques that
+require relatively more programming sophistication. You will almost
+surely need an external `C++' reference if you do not speak the
+language.
+
+* Menu:
+
+* Hidden Object Removal::
+* Extensions::
+* Programmer's Guide::
+
+
+File: epix.info, Node: Hidden Object Removal, Next: Extensions, Prev: Advanced Topics, Up: Advanced Topics
+
+4.1 Hidden Object Removal
+=========================
+
+`ePiX' writes the output file in the same order that objects appear in
+the input. The order is significant because PostScript builds a figure
+in layers: Objects are drawn over objects that come earlier in the
+file. Shaded polygons can be used to obtain surprisingly effective
+hidden object removal in surface meshes. This section describes the
+data structures defined in the source files `surface.*'.
+
+ The basic idea is to create a shaded polygon class that knows its
+approximate distance to the camera. For computational simplicity, a
+mesh "facet" is treated as a quadrilateral, located at the arithmetic
+mean of its vertices. A facet's boundary is created from a map and a
+domain by tracing a fine mesh rectangle counterclockwise.
+
+ To draw a parametrized surface, facets are stored in a `C++' vector,
+sorted in decreasing order of distance to the camera, and printed to
+the output file. If filling is active, the gray density of a facet
+depends on the cosine of the angle between the normal vector and the
+vector from the camera to the element.
+
+ This simple algorithm works surprisingly well when mesh elements
+intersect at most along complete edges. To incorporate line-like
+elements (e.g., coordinate axes, wire-mesh plots) with shaded surfaces,
+the best technique is often to order high-level scene elements
+manually, breaking up shaded surfaces (for example, with domain
+resizing or clipping) as necessary. The sample file `saddle.xp'
+illustrates possible techniques.
+
+ Shaded surfaces can be decorated with a bit of hackery. For example,
+the `facet::draw' function in `facet.cc' can be modified easily to draw
+line elements, tangents, or normal vectors along with the facet itself.
+The sample file `decorate.xp' contains a couple of ideas. (The
+decorations are activated by compiler flags; please consult the file
+itself for information on compiling.)
+
+
+File: epix.info, Node: Extensions, Next: Programmer's Guide, Prev: Hidden Object Removal, Up: Advanced Topics
+
+4.2 Extensions
+==============
+
+Thanks to a suggestion of Andrew Sterian, `ePiX' is extensible. User
+extensions span a spectrum, from header files that require only basic
+knowledge of `C++' to separately compiled libraries that add
+substantial new features. The structure of the source code is outlined
+in Section *Note section:programmers::, .
+
+
+
+A `C++' header file conventionally has suffix `.h', as in `myheader.h'.
+To use this custom header, put a line `\#include "myheader.h"' in your
+source file.
+
+ User definitions can be easily and robustly implemented with "inline
+functions". Inline functions are superficially similar to macros, but
+are far more safe and featureful (since they are handled by the
+compiler rather than by the pre-processor). Examples are
+
+ inline void Bold() { pen(1.6); }
+ inline void purple() { rgb(0.5, 0, 0.7); }
+ inline void draw_square(double s) { rect(P(-s,-s),P(s,s)); }
+ inline double cube(double x) { return pow(x,3); // x^3 }
+ The keyword `void' signifies a function that does not return a value,
+or (when used as an implicit parameter) a function that does not accept
+arguments. Inline function definitions are syntactically identical to
+ordinary function definitions, but _must_ occur in a header file or in
+the source file where they are used. The examples above might be used
+in an input file as follows:
+
+ Bold();
+ draw_square(cube(1.25));
+
+
+
+The next few sections outline the creation of a "static library" on
+GNU/Linux, and explain how to incorporate custom features at runtime.
+The extensively-commented sample files `std_F.cc' and `std_F.h'
+illustrate the techniques described below, and may be used for guidance
+and experimentation.
+
+ A small library is usually written as a _header_ file, which
+contains class and function declarations (also called "prototypes"),
+and a _source_ file, which contains the actual code. Conventionally
+(under *nix), these files have extension `.h' and `.cc' respectively.
+Header and source files may "include" other header files, to
+incorporate additional functionality.
+
+/* my_code.h */
+#ifndef MY_CODE
+#define MY_CODE
+#include <cmath> // standard library math header
+#include "epix.h" // ePiX header
+using ePiX::P;
+
+namespace Mine { // to avoid name conflicts
+ // functions for special relativity
+ double lorentz_norm(const P&);
+ bool spacelike(const P&);
+} // end of namespace
+#endif /* MY_CODE */
+ This file exhibits two "safety features". The three `MY_CODE' lines
+prevent the file from being included multiple times. In a file of this
+size, inclusion protection is overkill, but as your code base grows and
+the number of header files increases, this protection is essential.
+Second, the header introduces a "Mine" namespace. Inside this
+namespace, two functions are declared as prototypes, giving the
+function's return type, name, and argument type(s). A header file
+should be commented fairly liberally, so that a year or two from now
+you'll be able to decipher the file's contents. For a longer file,
+version and contact information, an overall comment describing the
+file's features, and license information are appropriate.
+
+ Next, the corresponding source file; definitions are also placed into
+the namespace, and must match their prototypes from the header file
+exactly.
+
+/* my_code.cc */
+#include "my_code.h"
+using namespace ePiX;
+
+namespace Mine {
+ double lorentz_norm(const P& arg)
+ {
+ double x(arg.x1()), y(arg.x2()), z(arg.x3()); // extract coords
+ return (y-x)*(y+x) + z*z; // -x^2 + y^2 + z^2
+ }
+ bool spacelike(const P& arg)
+ {
+ return (lorentz_norm(arg) > 0); // true if inequality is
+ }
+} // end of namespace
+ Copies of these files are included with the source code so you can
+experiment with them. Next, the source file must be "compiled",
+"archived", and "indexed". In the commands below, the percent sign is
+the prompt.
+
+% g++ -c my_code.cc
+% ar -ru libcustom.a my_code.o
+% ranlib libcustom.a
+ Please see your system documentation for details on command options
+and what each step does. For linking (below), the name of the library
+file must begin "lib" and have the extension `.a'. Once these steps are
+successfully completed, put the library `libcustom.a' and header file
+`my_code.h' in your project directory. You're ready to use the code in
+an `ePiX' figure.
+
+
+
+The script `epix' allows input files to be linked with external
+libraries at run time, when the input file is compiled into a temporary
+executable.
+
+ `epix' recognizes command line options and passes them verbatim to
+the compiler. The most commonly used options are those of the form
+
+ -I<include> -L<libdir> -l<lib>
+ For example, to link `figure.xp' against `mylibs/libcustom.a', run the
+command
+
+ epix -Lmylibs -lcustom figure
+ The options `-I. -L.' tell the compiler to look in the current
+directory for header and library files. Compiler options may appear in
+any order, but must come before the name of the input file(s).
+
+ Compiler options may be placed in the configuration file
+`\$HOME/.epixrc', with syntax as above. A line in the config file that
+contains a pound sign (`\#') is a comment, no matter where in the line
+the `\#' appears. If any non-comment line fails to start with a dash,
+the rest of the file is silently discarded. Command-line options are
+read before the config file.
+
+
+
+The script `epix' links by default against the `C' math library
+`libm.a' and the `ePiX' library `libepix.a'. The command option
+`--no-defaults' clears the header and include paths and removes
+`libepix.a' from the link list. The script may therefore be used with
+multiple versions of `ePiX', a potentially useful feature if you
+regularly need to compile old source files, or simply prefer the syntax
+of an older version.
+
+ To install and use (say) Version 1.0.0, build the package according
+to its `INSTALL' instructions, but _do not use the makefile to
+install_. Instead, manually install the header and library only, using
+their version number:
+
+# install -m 644 epix.h /usr/local/include/epix-1.0.h
+# install -m 644 libepix.a /usr/local/lib/libepix-1.0.a
+ A non-system directory may be used instead of `/usr/local'. To use
+the old version, a source file must `include' the appropriate header
+file (which is identified by its version number). To compile, issue a
+command such as
+
+epix --no-defaults -I/usr/local -L/usr/local -lepix-1.0 file.xp
+
+
+File: epix.info, Node: Programmer's Guide, Prev: Extensions, Up: Advanced Topics
+
+4.3 Programmer's Guide
+======================
+
+This section briefly surveys `ePiX''s implementation, and is intended
+for (potential) programmers. The source code is divided into modules
+with small, well-defined responsibilities, but the user interface is
+mostly compatible with the syntax of Version 1.0. These constraints
+demanded a degree of implementation hiding. For example, the
+user-visible classes defined in `Color.h', `path.h', and `screen.h'
+contain only a pointer to the implementation class, and style data is
+hidden behind global commands.
+
+ Functionally, the code consists of the user interface; implementation
+class\-es comprising drawing attributes, spatial objects, screens and
+representations of their elements, and output; and miscellaneous
+utility functions. The headers in each group, and their contents, are
+described in Section *Note section:interface::, .
+
+ The user interface headers are assembled into a single file,
+`epix.h', and installed in `/usr/local/include' by default. In normal
+use, the shell scripts read only the user interface header. The
+individual headers, including the components of `epix.h', are installed
+in `/usr/local/include/epix'. These are provided for authors of
+external libraries, who may need access to implementation details.
+
+
+
+`ePiX' harnesses the computational power of `C++' to the typographical
+capabilities of `LaTeX'. Consequently, `ePiX' should be viewed in part
+as a framework for expressing numerical data visually.
+
+ In the course of your work, you may develop specialized code filling
+a gap in `ePiX''s functionality. If your code seems likely to be of
+interest to other users, please consider bundling it as an external
+package and notifying the `ePiX' community so your work can be linked
+from the project pages and distributed to interested users.
+
+ There are no formal requirements for external packages, but in the
+interest of uniformity contributed code should follow the GNU Coding
+Standards `GNUCoding'. At a minimum, an external package should build
+with the standard `./configure; make; make install' commands, and the
+`configure' script should accept an option `--with-epix' for the user
+to specify a non-default `ePiX' install directory.
+
+ If an external package builds a static library, it should provide a
+single header containing all the package's entry points, and enclose
+its interface in a namespace. Entry points should not collide with
+`ePiX' functions. Naming the package "`epix-<...>'" is a good idea, but
+not essential. For example, a package providing textual nodes and
+diagram layout might be named `epix-nodes'. Input files would use the
+package with the lines
+
+ #include "epix-nodes.h"
+ using namespace ePiX-nodes;
+ and be compiled with
+
+ epix -lepix-nodes <file>
+
+ The user and internal interfaces of `ePiX'-1.2 are not likely to
+change. Still, it's prudent to rely only on the user interface in
+contributed code whenever possible. Doing so also simplifies your work
+as an author; your library can simply `include' the user header file,
+and deal only with high-level objects and drawing attributes.
+
+
+
+These files (in order) comprise the global header `epix.h'.
+
+ `enums.h' Marker, alignment, Riemann integral, and vector field
+types.
+
+ `length.h' Physical lengths, conceptually a number and two-letter
+`LaTeX' length unit.
+
+ `interval.h' Closed, open, and half-open interval ranges for data
+culling.
+
+ `triples.h' The `P' class.
+
+ `functions.h' Angle-sensitive trig functions, miscellaneous utility
+functions, the `Deriv' and `Integral' classes.
+
+ `pairs.h' Screen locations and displacements, with complex
+arithmetic operations.
+
+ `Color.h' The Color class interface, named primaries and
+constructors.
+
+ `state.h' Angle mode; clipping and cropping; label styles; filling;
+arrow head style; dot and tick sizes, dash length; line style; line and
+base pen attributes; color-setting commands.
+
+ `frame.h' Orthonormal bases.
+
+ `domain.h' Coordinate boxes for function plotting.
+
+ `camera.h' The camera.
+
+ `screen.h' The screen class.
+
+ `picture.h' Dimension-setting, offset, layout, decoration, verbatim
+text, and output format commands.
+
+ `markers.h' Point markers, axis labels, and coordinate axes.
+
+ `axis.h' Coordinate axes and labels in various styles.
+
+ `legend.h' Plot legends.
+
+ `path.h' The path class.
+
+ `curves.h' Polygons, arrows, ellipses, arcs, splines, coordinate
+grids, and recursive fractal curves.
+
+ `circle.h' The `Circle' shape object class.
+
+ `plane.h' The `Plane' shape object class.
+
+ `segment.h' The `Segment' shape object class.
+
+ `sphere.h' The `Sphere' shape object class.
+
+ `intersections.h' Shape object intersection operators.
+
+ `plots.h' Plotting commands.
+
+ `surface.h' Shaded surface plots.
+
+ `data_mask.h' Helper class for data pruning.
+
+ `data_file.h' Class for storing and representing data.
+
+ `data_bins.h' Class for sorting and counting data.
+
+ `geometry.h' Latitudes and longitudes; spherical plotting, arcs,
+polygons, and polyhedra; hyperbolic arcs.
+
+
+
+`Color_Base.h' The Color implementation interface.
+
+ `Color_CMY.h' The CMY color model.
+
+ `Color_CMYK.h' The CMYK color model.
+
+ `Color_Gray.h' The Gray color model.
+
+ `Color_Neutral.h' Each color class has a "Neutral" member that
+converts colors to that model by filtering. This file defines the
+unique "model-less" Neutral color for which filtering performs no
+action.
+
+ `Color_RGB.h' The RGB color model.
+
+ `Color_Sep.h' Classes for CMYK separation.
+
+ `active_screen.h' Simple manipulator for the active screen.
+
+ `picture_data.h' Picture implementation: two `screen' s
+(representing the `canvas' and the output page), true dimensions and
+offsets, pointer to output format, list of colors, and lists of
+verbatim text to write before and after printing the `picture'
+environment in the output file. For simplicity, the `screen's and
+dimensions are public; encapsulation from the user results from
+"hiding" this header.
+
+
+
+Declaration-style attributes are maintained with functions returning
+static references: `the_angle_style()', `the_arrowhead_style()',
+`the_label_style()', `the_mark_size()', `the_paint_style()', and
+`the_path_style()'. Each function is declared in the analogously-named
+header.
+
+ `angle_units.h' Angular modes: `radians' , `revolutions', and
+`degrees'.
+
+ `arrow_style.h' Arrow head style data: width, ratio, and inset.
+
+ `label_style.h' Text object style: Label and mask colors, padding,
+border color and width, alignment, font size, font face, and angle.
+
+ `marker_style.h' Dot and tick sizes.
+
+ `paint_style.h' Line and base pens, fill color.
+
+ `path_style.h' Solid, dashed, dotted lines.
+
+ `pen_data.h' The pen class.
+
+
+
+`arrow_data.h' Arrow representation.
+
+ `facet.h' Shaded surface elements.
+
+ `label_data.h' Text (label and marker) objects.
+
+ `legend_item.h' Items for `legend' s.
+
+ `path_data.h' Path implementation.
+
+ `spline.h' The natural spline class.
+
+ `spline_data.h' Templates for quadratic and cubic splines.
+
+
+
+Elements in a `screen' are represented polymorphically as "`tile's", of
+which there are six types: `glyph' (textual elements), `pen_arrow'
+(arrows), `pen_fill' (filled regions), `pen_line' (path-like elements),
+`verbatim' (raw text), and `legend_tile' (legends).
+
+ Border and background shape are dictated by the `screen_mask' class.
+The cropping algorithm assumes the contour of a screen mask is convex.
+
+ `affine.h' Affine maps.
+
+ `cropping.h' Screen mask cropping.
+
+ `glyph.h' Markers and labels.
+
+ `legend_tile.h' Screen representation of a `legend' .
+
+ `mask_diamond.h' Screen diamond mask.
+
+ `mask_ellipse.h' Screen elliptical mask.
+
+ `mask_rectangle.h' Screen rectangular mask.
+
+ `pen_arrow.h' Arrows.
+
+ `pen_fill.h' Filled regions.
+
+ `pen_line.h' Paths.
+
+ `screen_data.h' Screen implementation class.
+
+ `screen_mask.h' Screen mask interface.
+
+ `tile.h' Screen element interface.
+
+ `verbatim.h' Text in output stream.
+
+
+
+Output is divided into a couple of high-level operations and several
+"atomic" low-level operations. To create a new output format, one need
+only implement the `format' interface for the desired file type. Paths
+and filled regions may be implemented however the output type dictates.
+
+ `eepic.h' eepic macros.
+
+ `fmt_template.h' "skeleton" header for new output formats.
+
+ `format.h' The output interface.
+
+ `pst.h' PSTricks macros.
+
+ `tikz.h' tikz macros.
+
+
+
+`Color_Utils.h' Functions for setting color channel densities.
+
+ `clipping.h' The clip box.
+
+ `constants.h' Global constants: Line widths; dot, tick, and dash
+sizes; arrowhead parameters; miscellaneous numerical constants and
+internal parameters.
+
+ `crop_algorithms.h' Path and loop clipping templates.
+
+ `deriv.h' Finite difference template.
+
+ `edge_data.h' Path element representation template.
+
+ `errors.h' Warning and error messages.
+
+ `frac.h' Rational numbers and operators.
+
+ `halfspace.h' Halfspace cutting.
+
+ `hatching.h' Filling regions in eepic.
+
+ `lens.h' Camera lenses.
+
+ `map.h' Wrappers for templated plotting.
+
+ `plot_algorithms.h' Plotting templates.
+
+ `screen_crop.h' Crop paths and loops.
+
+ `utils.h' Truncation, date and time, line breaking.
+
+
+File: epix.info, Node: Software Freedom, Next: Acknowledgments, Prev: Advanced Topics, Up: Top
+
+Appendix A Software Freedom
+***************************
+
+Academics in general, and mathematicians in particular, depend on free
+exchange of information. We prove theorems or establish experimental
+results, write up formal accounts, place preprints on public file
+servers, and submit papers to peer-reviewed journals. If accepted, the
+results--data, techniques, methods of reasoning, citations, and
+conclusions--are published in print and become part of the public
+record, governed by copyright law. Libraries purchase journal
+subscriptions, but researchers and scholars may use ideas from the
+literature merely by giving appropriate citations in their own work.
+"Theft" arises from false claims of authorship.
+
+ Carried over to software, the academic process would guarantee rights
+similar to those provided by the GNU General Public License (GPL):
+
+ * (GPL 0) To run a program for any purpose.
+
+ * (GPL 1) To study how the program works, and adapt it to your
+ needs.
+
+ * (GPL 2) To redistribute copies of the program.
+
+ * (GPL 3) To improve the program, and release improvements to the
+ public, so that the whole community benefits.
+
+
+ In reality, attitudes toward software differ markedly. Most academics
+work on a proprietary platform, use proprietary software for research
+and teaching, and share information with colleagues and students in
+proprietary, even obfuscated, data formats. Contrary to the academic
+ethic, proprietary software licenses restrict access to information:
+preventing users from learning how a program works internally ("reverse
+engineering"), limiting the number of users who may run a piece of
+software, and forbidding users from running (or sometimes even
+installing) a purchased copy on multiple machines.
+
+ Restrictions on use aside, if one cannot examine a program's source
+code, one cannot fully trust the output, any more than one can trust
+(for purposes of scientific publication) results of a commercial
+testing lab.
+
+ Consider a hypothetical future world in which scholarly results are
+disseminated like software. Instead of subscriptions, journals sell
+licenses granting readership to a specified number of individuals.
+Photocopying an article for a class or research seminar constitutes
+"piracy", though if the institution has purchased a sufficiently large
+site license the teacher or speaker may bring the physical volume to
+class and project the pages onto a screen.
+
+ Of course, reading an article is scarcely enlightening. Mathematics
+papers contain only the statements of theorems. Merely opening the
+journal binds the reader to a lengthy legal agreement, stating that
+theorems be used only for specific purposes and threatening serious
+legal consequences for attempting to discover the author's proofs.
+
+ The actions of a single student, employee, or faculty member can
+expose an institution to a costly "journal audit" from the Mathematical
+Society of America (MSA), with the institution responsible for legal
+costs if the audit reveals license violations anywhere in the
+organization.
+
+ Mathematicians who long for the Old Days when papers contained
+proofs and were shared freely are dismissed as idealistic cranks or
+labeled anti-business communists. Common knowledge asserts the obvious
+superiority of proprietary journals, and the necessity of licenses for
+keeping mathematicians gainfully employed.
+
+ Back in our world, some vendors have attempted to placate opponents
+of closed source with "shared source" licenses, under which one may
+sign a non-disclosure agreement and subsequently examine source code.
+In the future world analogy, a shared source agreement would allow
+journal licensees to sign an NDA, then see the proofs of theorems.
+Readers could thereby correct errors in proofs (benefitting the
+publisher by improving the reliability of the journal), but would be
+legally forbidden from using the ideas elsewhere (denying benefit to
+other mathematicians).
+
+ Legally and conceptually codifying software as a commodity ignores a
+fundamental reality: Like an idea or recipe, software can be copied
+without loss of the original. The perception of "theft" by copying
+arises from an artificial belief that software has an owner who must be
+monetarily compensated each time a person acquires a copy. The nature
+of software does not enforce the "sale" model in the way services and
+physical commodities do. It therefore seems philosophically
+inappropriate to treat software as a commodity, and perilous to conform
+the legal system to the enforcement of such a model.
+
+ At its best, software enhances our productivity and creativity.
+Sharing software, like sharing ideas, benefits a larger number of
+people without detriment to existing users. I hope this modest program
+is, in conjunction with the much larger efforts of others (especially
+Donald Knuth, Richard Stallman, and the many people who have
+contributed to the authorship of `LaTeX' and its packages), useful to
+you in your mathematical work.
+
+ Please visit the Free Software Foundation, at `http://www.fsf.org',
+to learn more about free software and how you can contribute to its
+development and adoption.
+
+
+File: epix.info, Node: Acknowledgments, Next: Function Index, Prev: Software Freedom, Up: Top
+
+Appendix B Acknowledgments
+**************************
+
+`ePiX' is built on the work of many people (unfortunately, most of whom
+I am unaware). The following people have contributed, sometimes
+unknowingly but always generously:
+
+ *Infrastructure* Donald Knuth, Conrad Kwok, Leslie Lamport, Tim
+Morgan, Piet van Oostrum, Sunil Podar, Richard Stallman, Till Tantau,
+Herbert Voss, Timothy van Zandt
+
+ *Enhancements* Jay Belanger, Robin Blume-Kohout, Julian Gilbey,
+Marcus Hanwell, Yvon Henel, Svend Daugaard Pedersen, Andrew Sterian
+
+ *Porting and packaging* Julian Gilbey (Debian); Tsuguru Kato
+(FreeBSD); Markus Dittrich, Danny van Dyk, Christian Faulhammer,
+Olivier Fisette, Chris Gianelloni, Michael Hanselmann, Marcus Hanwell,
+David Holm, Peter Johanson, Patrick Kursawe, Tobias Scherbaum, Markus
+Ullmann (Gentoo); Guido Gonzato (RPM); Rene Rebe (T2)
+
+ *Debugging, advice, and other assistance* Jay Belanger, Felipe Paulo
+Guazzi Bergo, Karl Berry, Robin Blume-Kohout, Patrick Cousot, Stephen
+Gibson, Julian Gilbey, Dov Grobgeld, Bob Grover, Jim Hefferon, Jacques
+L'helgoual, Yvon Henel, Hartmut Henkel, Herng-Jeng Jou, Walter
+Kehowski, Kevin McCormick, Ross Moore, Thorsten Riess, Alan Sill, Neel
+Smith, Michael Somos, Andrew Sterian, Ryszard Tanas, Kai Trukenmueller,
+Torbjorn Vik, Wenguang Wang, Gabe Weaver, Mariusz Wodzicki
+
+
+File: epix.info, Node: Function Index, Next: Concept Index, Prev: Acknowledgments, Up: Top
+
+Function Index
+**************
+
+
+* Menu:
+
+* aarrow: Creating and Drawing Objects.
+ (line 248)
+* Acos: More About C++. (line 112)
+* activate: Scene Attributes. (line 161)
+* affine: Scene Attributes. (line 271)
+* apply: Scene Attributes. (line 307)
+* arc: Creating and Drawing Objects.
+ (line 167)
+* arc_arrow: Creating and Drawing Objects.
+ (line 248)
+* arc_measure: Creating and Drawing Objects.
+ (line 193)
+* arrow: Creating and Drawing Objects.
+ (line 242)
+* arrow_inset: Creating and Drawing Objects.
+ (line 235)
+* arrow_ratio: Creating and Drawing Objects.
+ (line 235)
+* arrow_width: Creating and Drawing Objects.
+ (line 235)
+* Asin: More About C++. (line 112)
+* Atan: More About C++. (line 112)
+* axis: Creating and Drawing Objects.
+ (line 275)
+* axis.align: Creating and Drawing Objects.
+ (line 284)
+* axis.align_labels: Creating and Drawing Objects.
+ (line 296)
+* axis.dec: Creating and Drawing Objects.
+ (line 296)
+* axis.draw: Creating and Drawing Objects.
+ (line 342)
+* axis.draw_labels: Creating and Drawing Objects.
+ (line 342)
+* axis.draw_ticks: Creating and Drawing Objects.
+ (line 342)
+* axis.frac: Creating and Drawing Objects.
+ (line 296)
+* axis.label_rep: Creating and Drawing Objects.
+ (line 307)
+* axis.precision: Creating and Drawing Objects.
+ (line 296)
+* axis.sci: Creating and Drawing Objects.
+ (line 296)
+* axis.subdivide: Creating and Drawing Objects.
+ (line 284)
+* axis.tag: Creating and Drawing Objects.
+ (line 323)
+* axis.tag235: Creating and Drawing Objects.
+ (line 323)
+* axis.tags: Creating and Drawing Objects.
+ (line 323)
+* axis.tick_ratio: Creating and Drawing Objects.
+ (line 284)
+* axis.trig: Creating and Drawing Objects.
+ (line 296)
+* axis.unmark: Creating and Drawing Objects.
+ (line 296)
+* axis.untag: Creating and Drawing Objects.
+ (line 323)
+* axis_break: Creating and Drawing Objects.
+ (line 394)
+* back_arc: Creating and Drawing Objects.
+ (line 851)
+* back_arc2: Creating and Drawing Objects.
+ (line 851)
+* back_cube: Creating and Drawing Objects.
+ (line 857)
+* back_dodeca: Creating and Drawing Objects.
+ (line 857)
+* back_icosa: Creating and Drawing Objects.
+ (line 857)
+* back_latitude: Creating and Drawing Objects.
+ (line 837)
+* back_line: Creating and Drawing Objects.
+ (line 851)
+* back_longitude: Creating and Drawing Objects.
+ (line 837)
+* back_octa: Creating and Drawing Objects.
+ (line 857)
+* back_tetra: Creating and Drawing Objects.
+ (line 857)
+* back_triangle: Creating and Drawing Objects.
+ (line 857)
+* backing: Scene Attributes. (line 252)
+* backplot_N: Creating and Drawing Objects.
+ (line 879)
+* backplot_R: Creating and Drawing Objects.
+ (line 879)
+* backplot_S: Creating and Drawing Objects.
+ (line 879)
+* bbold: Drawing Attributes. (line 33)
+* bbox: Drawing Attributes. (line 174)
+* begin: File Structure. (line 12)
+* Black: Color. (line 23)
+* Blue: Color. (line 23)
+* bold: Drawing Attributes. (line 33)
+* border: Scene Attributes. (line 252)
+* bottom_axis: Creating and Drawing Objects.
+ (line 332)
+* bounding_box: Picture Size and Aspect Ratio.
+ (line 24)
+* box: Drawing Attributes. (line 174)
+* Camera.at: Scene Attributes. (line 75)
+* Camera.clip_range: Scene Attributes. (line 75)
+* Camera.focus: Scene Attributes. (line 75)
+* Camera.look_at: Scene Attributes. (line 75)
+* Camera.pan: Scene Attributes. (line 75)
+* Camera.range: Scene Attributes. (line 75)
+* Camera.roll: Scene Attributes. (line 75)
+* Camera.tilt: Scene Attributes. (line 75)
+* canvas: Scene Attributes. (line 183)
+* cb: More About C++. (line 123)
+* circ: Drawing Attributes. (line 174)
+* circle: Creating and Drawing Objects.
+ (line 145)
+* Circle: Creating and Drawing Objects.
+ (line 70)
+* cis: Creating and Drawing Objects.
+ (line 27)
+* clip_box: Scene Attributes. (line 127)
+* clip_face: Scene Attributes. (line 137)
+* clip_restore: Scene Attributes. (line 137)
+* clip_slice: Scene Attributes. (line 137)
+* clip_to: Scene Attributes. (line 127)
+* CMY: Color. (line 29)
+* CMY_Black: Color. (line 29)
+* CMY_White: Color. (line 29)
+* cmyk: Drawing Attributes. (line 210)
+* CMYK: Color. (line 29)
+* Color.alpha: Color. (line 73)
+* Color.blend: Color. (line 73)
+* Color.filter: Color. (line 73)
+* Color.invert: Color. (line 73)
+* Color.superpose: Color. (line 73)
+* Cos: More About C++. (line 112)
+* Cot: More About C++. (line 112)
+* crop: Scene Attributes. (line 239)
+* crop_diamond: Scene Attributes. (line 239)
+* crop_ellipse: Scene Attributes. (line 239)
+* Csc: More About C++. (line 112)
+* Cyan: Color. (line 29)
+* cyl: Creating and Drawing Objects.
+ (line 27)
+* dart: Creating and Drawing Objects.
+ (line 248)
+* dart_field: Creating and Drawing Objects.
+ (line 793)
+* dash_size: Drawing Attributes. (line 44)
+* dashed: Drawing Attributes. (line 53)
+* data_bins: Creating and Drawing Objects.
+ (line 1006)
+* data_bins.bar_chart: Creating and Drawing Objects.
+ (line 1016)
+* data_bins.cut: Creating and Drawing Objects.
+ (line 1006)
+* data_bins.histogram: Creating and Drawing Objects.
+ (line 1016)
+* data_bins.plot: Creating and Drawing Objects.
+ (line 1016)
+* data_bins.read: Creating and Drawing Objects.
+ (line 1006)
+* data_file: Creating and Drawing Objects.
+ (line 931)
+* data_file.avg: Creating and Drawing Objects.
+ (line 950)
+* data_file.column: Creating and Drawing Objects.
+ (line 973)
+* data_file.covar: Creating and Drawing Objects.
+ (line 950)
+* data_file.dot: Creating and Drawing Objects.
+ (line 950)
+* data_file.plot: Creating and Drawing Objects.
+ (line 958)
+* data_file.precision: Creating and Drawing Objects.
+ (line 967)
+* data_file.read: Creating and Drawing Objects.
+ (line 931)
+* data_file.regression: Creating and Drawing Objects.
+ (line 950)
+* data_file.transform: Creating and Drawing Objects.
+ (line 945)
+* data_file.var: Creating and Drawing Objects.
+ (line 950)
+* data_file.write: Creating and Drawing Objects.
+ (line 967)
+* data_mask: Creating and Drawing Objects.
+ (line 988)
+* data_mask.prune: Creating and Drawing Objects.
+ (line 996)
+* ddot: Drawing Attributes. (line 174)
+* deactivate: Scene Attributes. (line 161)
+* Deriv: Creating and Drawing Objects.
+ (line 745)
+* Deriv.eval: Creating and Drawing Objects.
+ (line 745)
+* Deriv.left: Creating and Drawing Objects.
+ (line 745)
+* Deriv.right: Creating and Drawing Objects.
+ (line 745)
+* disk_line: Creating and Drawing Objects.
+ (line 826)
+* domain: Creating and Drawing Objects.
+ (line 512)
+* domain.resize: Creating and Drawing Objects.
+ (line 531)
+* domain.slice: Creating and Drawing Objects.
+ (line 531)
+* domain.slices: Creating and Drawing Objects.
+ (line 531)
+* domain_list: Creating and Drawing Objects.
+ (line 668)
+* domain_list.add: Creating and Drawing Objects.
+ (line 668)
+* dot: Drawing Attributes. (line 174)
+* dot_size: Drawing Attributes. (line 185)
+* dotted: Drawing Attributes. (line 53)
+* draw: Creating and Drawing Objects.
+ (line 59)
+* ellipse: Creating and Drawing Objects.
+ (line 167)
+* ellipse_bottom: Creating and Drawing Objects.
+ (line 180)
+* ellipse_left: Creating and Drawing Objects.
+ (line 180)
+* ellipse_right: Creating and Drawing Objects.
+ (line 180)
+* ellipse_top: Creating and Drawing Objects.
+ (line 180)
+* end: File Structure. (line 12)
+* envelope: Creating and Drawing Objects.
+ (line 768)
+* extract: Scene Attributes. (line 183)
+* extract_diamond: Scene Attributes. (line 190)
+* extract_ellipse: Scene Attributes. (line 190)
+* fill: Drawing Attributes. (line 12)
+* flow: Creating and Drawing Objects.
+ (line 778)
+* font_face: Drawing Attributes. (line 144)
+* font_size: Drawing Attributes. (line 144)
+* fractal: Creating and Drawing Objects.
+ (line 214)
+* frame: Creating and Drawing Objects.
+ (line 134)
+* front_arc: Creating and Drawing Objects.
+ (line 851)
+* front_arc2: Creating and Drawing Objects.
+ (line 851)
+* front_cube: Creating and Drawing Objects.
+ (line 857)
+* front_dodeca: Creating and Drawing Objects.
+ (line 857)
+* front_icosa: Creating and Drawing Objects.
+ (line 857)
+* front_line: Creating and Drawing Objects.
+ (line 851)
+* front_octa: Creating and Drawing Objects.
+ (line 857)
+* front_tetra: Creating and Drawing Objects.
+ (line 857)
+* front_triangle: Creating and Drawing Objects.
+ (line 857)
+* frontplot_N: Creating and Drawing Objects.
+ (line 879)
+* frontplot_R: Creating and Drawing Objects.
+ (line 879)
+* frontplot_S: Creating and Drawing Objects.
+ (line 879)
+* Gray: Color. (line 29)
+* Green: Color. (line 23)
+* grid: Creating and Drawing Objects.
+ (line 405)
+* h_axis: Creating and Drawing Objects.
+ (line 352)
+* h_axis_labels: Creating and Drawing Objects.
+ (line 368)
+* h_axis_log_labels: Creating and Drawing Objects.
+ (line 368)
+* h_axis_log_masklabels: Creating and Drawing Objects.
+ (line 368)
+* h_axis_masklabels: Creating and Drawing Objects.
+ (line 368)
+* h_error_bar: Creating and Drawing Objects.
+ (line 1047)
+* h_log_axis: Creating and Drawing Objects.
+ (line 352)
+* h_scale: Scene Attributes. (line 282)
+* h_shear: Scene Attributes. (line 282)
+* hyperbolic_line: Creating and Drawing Objects.
+ (line 826)
+* import: Scene Attributes. (line 172)
+* include: C++ Basics. (line 37)
+* inf: Creating and Drawing Objects.
+ (line 731)
+* inlay: Scene Attributes. (line 204)
+* inlay_horizontal: Scene Attributes. (line 204)
+* inlay_vertical: Scene Attributes. (line 204)
+* inset: Scene Attributes. (line 172)
+* Integral: Creating and Drawing Objects.
+ (line 745)
+* Integral.eval: Creating and Drawing Objects.
+ (line 745)
+* J: Creating and Drawing Objects.
+ (line 38)
+* label <1>: Drawing Attributes. (line 99)
+* label: Layout Tricks. (line 46)
+* label_border: Drawing Attributes. (line 160)
+* label_color: Drawing Attributes. (line 160)
+* label_mask: Drawing Attributes. (line 160)
+* label_pad: Drawing Attributes. (line 160)
+* latitude: Creating and Drawing Objects.
+ (line 837)
+* left_axis: Creating and Drawing Objects.
+ (line 332)
+* legend: Creating and Drawing Objects.
+ (line 1083)
+* legend.backing: Creating and Drawing Objects.
+ (line 1083)
+* legend.border: Creating and Drawing Objects.
+ (line 1083)
+* legend.draw: Creating and Drawing Objects.
+ (line 1115)
+* legend.fill_item: Creating and Drawing Objects.
+ (line 1101)
+* legend.item_border: Creating and Drawing Objects.
+ (line 1083)
+* legend.key_size: Creating and Drawing Objects.
+ (line 1083)
+* legend.label_skip: Creating and Drawing Objects.
+ (line 1083)
+* legend.mark_item: Creating and Drawing Objects.
+ (line 1101)
+* legend.path_item: Creating and Drawing Objects.
+ (line 1101)
+* Line: Creating and Drawing Objects.
+ (line 145)
+* line: Creating and Drawing Objects.
+ (line 145)
+* line_style: Drawing Attributes. (line 44)
+* log1_grid: Creating and Drawing Objects.
+ (line 411)
+* log2_grid: Creating and Drawing Objects.
+ (line 411)
+* log_grid: Creating and Drawing Objects.
+ (line 411)
+* longitude: Creating and Drawing Objects.
+ (line 837)
+* Magenta: Color. (line 29)
+* move_to: Creating and Drawing Objects.
+ (line 59)
+* newton: Creating and Drawing Objects.
+ (line 731)
+* no_label_border: Drawing Attributes. (line 160)
+* nofill: Drawing Attributes. (line 12)
+* ode_plot: Creating and Drawing Objects.
+ (line 778)
+* P: Creating and Drawing Objects.
+ (line 27)
+* P.x1: Creating and Drawing Objects.
+ (line 38)
+* P.x2: Creating and Drawing Objects.
+ (line 38)
+* P.x3: Creating and Drawing Objects.
+ (line 38)
+* path: Creating and Drawing Objects.
+ (line 437)
+* path.close: Creating and Drawing Objects.
+ (line 468)
+* path.draw: Creating and Drawing Objects.
+ (line 468)
+* path.fill: Creating and Drawing Objects.
+ (line 468)
+* pen <1>: Creating and Drawing Objects.
+ (line 422)
+* pen: Drawing Attributes. (line 23)
+* picture <1>: Picture Size and Aspect Ratio.
+ (line 24)
+* picture: File Structure. (line 12)
+* plain: Drawing Attributes. (line 33)
+* Plane: Creating and Drawing Objects.
+ (line 85)
+* plot: Creating and Drawing Objects.
+ (line 495)
+* polar: Creating and Drawing Objects.
+ (line 27)
+* polar_grid: Creating and Drawing Objects.
+ (line 405)
+* polarplot: Creating and Drawing Objects.
+ (line 495)
+* post_write: C++ Basics. (line 122)
+* postcomp: Scene Attributes. (line 282)
+* pre_write: C++ Basics. (line 122)
+* pt_to_screen: Scene Attributes. (line 214)
+* quad: Creating and Drawing Objects.
+ (line 145)
+* rect: Creating and Drawing Objects.
+ (line 145)
+* Red: Color. (line 23)
+* reflect: Scene Attributes. (line 282)
+* rgb: Drawing Attributes. (line 210)
+* RGB: Color. (line 23)
+* riemann_sum: Creating and Drawing Objects.
+ (line 756)
+* right_angle: Creating and Drawing Objects.
+ (line 193)
+* right_axis: Creating and Drawing Objects.
+ (line 332)
+* ring: Drawing Attributes. (line 174)
+* rotate: Scene Attributes. (line 282)
+* scale <1>: Creating and Drawing Objects.
+ (line 59)
+* scale: Scene Attributes. (line 282)
+* scenery: Creating and Drawing Objects.
+ (line 680)
+* scenery.add: Creating and Drawing Objects.
+ (line 680)
+* scenery.draw: Creating and Drawing Objects.
+ (line 680)
+* Sec: More About C++. (line 112)
+* Segment: Creating and Drawing Objects.
+ (line 90)
+* set_crop: Scene Attributes. (line 239)
+* sgn: More About C++. (line 123)
+* shadeplot: Creating and Drawing Objects.
+ (line 495)
+* shift <1>: Creating and Drawing Objects.
+ (line 59)
+* shift: Scene Attributes. (line 282)
+* Sin: More About C++. (line 112)
+* sinx: More About C++. (line 123)
+* slope_field: Creating and Drawing Objects.
+ (line 793)
+* solid: Drawing Attributes. (line 53)
+* sph: Creating and Drawing Objects.
+ (line 27)
+* Sphere: Creating and Drawing Objects.
+ (line 93)
+* spline: Creating and Drawing Objects.
+ (line 167)
+* spot: Drawing Attributes. (line 174)
+* sup: Creating and Drawing Objects.
+ (line 731)
+* surface: Creating and Drawing Objects.
+ (line 616)
+* surface_rev: Creating and Drawing Objects.
+ (line 627)
+* Tan: More About C++. (line 112)
+* tan_field: Creating and Drawing Objects.
+ (line 768)
+* tan_line: Creating and Drawing Objects.
+ (line 768)
+* top_axis: Creating and Drawing Objects.
+ (line 332)
+* triangle: Creating and Drawing Objects.
+ (line 145)
+* unitlength: Picture Size and Aspect Ratio.
+ (line 24)
+* v_axis: Creating and Drawing Objects.
+ (line 352)
+* v_axis_labels: Creating and Drawing Objects.
+ (line 368)
+* v_axis_log_labels: Creating and Drawing Objects.
+ (line 368)
+* v_axis_log_masklabels: Creating and Drawing Objects.
+ (line 368)
+* v_axis_masklabels: Creating and Drawing Objects.
+ (line 368)
+* v_error_bar: Creating and Drawing Objects.
+ (line 1047)
+* v_log_axis: Creating and Drawing Objects.
+ (line 352)
+* v_scale: Scene Attributes. (line 282)
+* v_shear: Scene Attributes. (line 282)
+* vector_field: Creating and Drawing Objects.
+ (line 793)
+* White: Color. (line 23)
+* write: C++ Basics. (line 122)
+* Yellow: Color. (line 29)
+* zero: More About C++. (line 123)
+
+
+File: epix.info, Node: Concept Index, Prev: Function Index, Up: Top
+
+Concept Index
+*************
+
+
+* Menu:
+
+* Affine map: Scene Attributes. (line 264)
+* Affine map!action on labels: Drawing Attributes. (line 130)
+* Angle units <1>: Drawing Attributes. (line 121)
+* Angle units: Scene Attributes. (line 14)
+* Angular mode <1>: More About C++. (line 112)
+* Angular mode: Creating and Drawing Objects.
+ (line 27)
+* Animation: Animation. (line 6)
+* Arrow: Creating and Drawing Objects.
+ (line 231)
+* Axes: Creating and Drawing Objects.
+ (line 257)
+* Axes!broken: Creating and Drawing Objects.
+ (line 390)
+* Axes!labeling: Creating and Drawing Objects.
+ (line 257)
+* Axes!logarithmic: Creating and Drawing Objects.
+ (line 350)
+* Bar Charts: Creating and Drawing Objects.
+ (line 1013)
+* Bounding box: Scene Attributes. (line 156)
+* Camera <1>: Hidden Object Removal.
+ (line 13)
+* Camera: Scene Attributes. (line 21)
+* Camera!color separation: Scene Attributes. (line 94)
+* Camera!lens: Scene Attributes. (line 57)
+* Camera!manipulation: Scene Attributes. (line 69)
+* Camera!manipulation of: Scene Attributes. (line 116)
+* Camera!viewpoint: Scene Attributes. (line 31)
+* canvas: The Drawing Model. (line 11)
+* Circle: Creating and Drawing Objects.
+ (line 69)
+* Classes: More About C++. (line 149)
+* Clipping: Scene Attributes. (line 120)
+* Color <1>: Drawing Attributes. (line 215)
+* Color: Color. (line 6)
+* Color!separation: Scene Attributes. (line 94)
+* Color!surface plotting: Creating and Drawing Objects.
+ (line 700)
+* Color!transparency: Color. (line 65)
+* Conditional statement: More About C++. (line 22)
+* Cplusplus@C++ <1>: More About C++. (line 6)
+* Cplusplus@C++: C++ Basics. (line 6)
+* Cropping: Scene Attributes. (line 231)
+* Data plotting: Creating and Drawing Objects.
+ (line 897)
+* Domain: Creating and Drawing Objects.
+ (line 509)
+* Emacs@emacs <1>: Animation. (line 19)
+* Emacs@emacs <2>: C++ Basics. (line 16)
+* Emacs@emacs <3>: Running ePiX. (line 50)
+* Emacs@emacs: Software Dependencies.
+ (line 36)
+* Error bars: Creating and Drawing Objects.
+ (line 1046)
+* Filling: Drawing Attributes. (line 11)
+* Fonts: Drawing Attributes. (line 142)
+* Free software <1>: Software Freedom. (line 6)
+* Free software: Introduction. (line 42)
+* Function: More About C++. (line 22)
+* Function!call syntax: More About C++. (line 186)
+* Function!class member: More About C++. (line 156)
+* Function!mathematical: More About C++. (line 108)
+* Function!overloaded: More About C++. (line 229)
+* Function!returning void: More About C++. (line 84)
+* Graph paper: Creating and Drawing Objects.
+ (line 422)
+* Graphical interface: Tutorial. (line 13)
+* Hidden object removal: Hidden Object Removal.
+ (line 6)
+* Histograms: Creating and Drawing Objects.
+ (line 1013)
+* Input file!comment in: More About C++. (line 337)
+* Input file!conditional compilation: More About C++. (line 281)
+* Installation <1>: Installation. (line 31)
+* Installation: Software Dependencies.
+ (line 6)
+* Intersection: Creating and Drawing Objects.
+ (line 109)
+* Labels <1>: More About C++. (line 310)
+* Labels: Drawing Attributes. (line 80)
+* Labels!alignment: Drawing Attributes. (line 80)
+* Labels!axis: Creating and Drawing Objects.
+ (line 257)
+* Labels!backslash in: Drawing Attributes. (line 205)
+* Labels!fonts in: Drawing Attributes. (line 142)
+* Labels!in double quotes: Drawing Attributes. (line 205)
+* Labels!rotated: Drawing Attributes. (line 121)
+* Layout <1>: Scene Attributes. (line 148)
+* Layout: Layout Tricks. (line 6)
+* Legends: Creating and Drawing Objects.
+ (line 1072)
+* Mac OS X: Software Dependencies.
+ (line 6)
+* Marker types: Drawing Attributes. (line 172)
+* Output format: File Structure. (line 31)
+* Path: Drawing Attributes. (line 11)
+* Path!class: Creating and Drawing Objects.
+ (line 433)
+* Path!filled: Drawing Attributes. (line 11)
+* Path!fractal: Creating and Drawing Objects.
+ (line 206)
+* Path!style: Drawing Attributes. (line 41)
+* Picture!aspect ratio: Picture Size and Aspect Ratio.
+ (line 44)
+* Picture!bounding box: Picture Size and Aspect Ratio.
+ (line 44)
+* Picture!offset: Picture Size and Aspect Ratio.
+ (line 6)
+* Picture!size: Picture Size and Aspect Ratio.
+ (line 6)
+* Plane: Creating and Drawing Objects.
+ (line 85)
+* Plotting: Creating and Drawing Objects.
+ (line 480)
+* Plotting!calculus: Creating and Drawing Objects.
+ (line 721)
+* Plotting!data: Creating and Drawing Objects.
+ (line 897)
+* Plotting!spherical: Creating and Drawing Objects.
+ (line 833)
+* Plotting!surface: Creating and Drawing Objects.
+ (line 605)
+* Point: Creating and Drawing Objects.
+ (line 14)
+* Pointer: More About C++. (line 52)
+* post_write: C++ Basics. (line 122)
+* pre_write: C++ Basics. (line 122)
+* Preamble: File Structure. (line 10)
+* Screen: Scene Attributes. (line 21)
+* Screen!active: Scene Attributes. (line 148)
+* Segment: Creating and Drawing Objects.
+ (line 90)
+* Sphere: Creating and Drawing Objects.
+ (line 93)
+* Stereograms: Layout Tricks. (line 8)
+* Variable!local: More About C++. (line 239)
+* Variable!names: More About C++. (line 34)
+* Variable!pointer: More About C++. (line 52)
+* Variable!reference: More About C++. (line 186)
+* Variable!type of: More About C++. (line 45)
+* Viewpoint: Scene Attributes. (line 31)
+* Windows operating system: Software Dependencies.
+ (line 40)
+* write: C++ Basics. (line 122)
+
+
+
+Tag Table:
+Node: Top185
+Node: Introduction1105
+Node: Changes in Version 1.24664
+Node: Software Dependencies8541
+Ref: section:software_deps8714
+Node: Installation11086
+Node: Getting Started12670
+Ref: chapter:started12806
+Node: Running `ePiX'13556
+Ref: section:running13709
+Node: The Drawing Model16861
+Ref: section:overview17013
+Node: Tutorial19428
+Ref: section:tutorial19560
+Ref: taylor_poly24927
+Node: `C++' Basics26756
+Ref: fig:captioned32767
+Node: Animation33131
+Ref: section:animation33262
+Node: Layout Tricks34998
+Ref: section:layout35116
+Node: Reference Manual37114
+Ref: chapter:ref-man37255
+Node: File Structure38952
+Node: Picture Size and Aspect Ratio41705
+Ref: page:scaling44202
+Node: Color44417
+Ref: section:color44557
+Ref: fig:densities46382
+Node: Scene Attributes47847
+Ref: fig:camera48882
+Ref: truesize56642
+Node: Drawing Attributes62495
+Ref: table:marker70626
+Node: Creating and Drawing Objects71285
+Ref: fig:fractal81596
+Ref: fig:plot96868
+Ref: non-eucl107182
+Node: More About `C++'121128
+Ref: references130049
+Node: Attribute Quick Reference137418
+Ref: section:quickref137580
+Node: Advanced Topics140341
+Ref: chapter:adv140481
+Node: Hidden Object Removal140765
+Ref: section:hidden140932
+Node: Extensions142805
+Ref: section:extensions142953
+Node: Programmer's Guide149302
+Ref: section:programmers149436
+Ref: section:interface152502
+Node: Software Freedom158743
+Node: Acknowledgments164009
+Node: Function Index165447
+Node: Concept Index200200
+
+End Tag Table
diff --git a/graphics/epix/doc/graphpaper.eepic b/graphics/epix/doc/graphpaper.eepic
new file mode 100644
index 0000000000..94a18e8085
--- /dev/null
+++ b/graphics/epix/doc/graphpaper.eepic
@@ -0,0 +1,101 @@
+%% Generated from graphpaper.xp on Tue Jan 4 15:32:14 EST 2005 by
+%% ePiX-1.0.3
+%%
+%% Cartesian bounding box: [-2,2] x [-1,1]
+%% Actual size: 2in x 1in
+%% Figure offset: right by 0in, up by 0in
+%%
+\setlength{\unitlength}{0.01in}
+\begin{picture}(200,100)(-0,-0)
+%% ---
+\allinethickness{0.25pt}%
+\path(0,0)(0,100)
+\path(5,0)(5,100)
+\path(10,0)(10,100)
+\path(15,0)(15,100)
+\path(20,0)(20,100)
+\path(25,0)(25,100)
+\path(30,0)(30,100)
+\path(35,0)(35,100)
+\path(40,0)(40,100)
+\path(45,0)(45,100)
+\path(50,0)(50,100)
+\path(55,0)(55,100)
+\path(60,0)(60,100)
+\path(65,0)(65,100)
+\path(70,0)(70,100)
+\path(75,0)(75,100)
+\path(80,0)(80,100)
+\path(85,0)(85,100)
+\path(90,0)(90,100)
+\path(95,0)(95,100)
+\path(100,0)(100,100)
+\path(105,0)(105,100)
+\path(110,0)(110,100)
+\path(115,0)(115,100)
+\path(120,0)(120,100)
+\path(125,0)(125,100)
+\path(130,0)(130,100)
+\path(135,0)(135,100)
+\path(140,0)(140,100)
+\path(145,0)(145,100)
+\path(150,0)(150,100)
+\path(155,0)(155,100)
+\path(160,0)(160,100)
+\path(165,0)(165,100)
+\path(170,0)(170,100)
+\path(175,0)(175,100)
+\path(180,0)(180,100)
+\path(185,0)(185,100)
+\path(190,0)(190,100)
+\path(195,0)(195,100)
+\path(200,0)(200,100)
+\path(0,0)(200,0)
+\path(0,5)(200,5)
+\path(0,10)(200,10)
+\path(0,15)(200,15)
+\path(0,20)(200,20)
+\path(0,25)(200,25)
+\path(0,30)(200,30)
+\path(0,35)(200,35)
+\path(0,40)(200,40)
+\path(0,45)(200,45)
+\path(0,50)(200,50)
+\path(0,55)(200,55)
+\path(0,60)(200,60)
+\path(0,65)(200,65)
+\path(0,70)(200,70)
+\path(0,75)(200,75)
+\path(0,80)(200,80)
+\path(0,85)(200,85)
+\path(0,90)(200,90)
+\path(0,95)(200,95)
+\path(0,100)(200,100)
+%% ---
+\allinethickness{0.5pt}%
+\path(0,0)(0,100)
+\path(25,0)(25,100)
+\path(50,0)(50,100)
+\path(75,0)(75,100)
+\path(100,0)(100,100)
+\path(125,0)(125,100)
+\path(150,0)(150,100)
+\path(175,0)(175,100)
+\path(200,0)(200,100)
+\path(0,0)(200,0)
+\path(0,25)(200,25)
+\path(0,50)(200,50)
+\path(0,75)(200,75)
+\path(0,100)(200,100)
+%% ---
+\allinethickness{1pt}%
+\path(0,0)(0,100)
+\path(50,0)(50,100)
+\path(100,0)(100,100)
+\path(150,0)(150,100)
+\path(200,0)(200,100)
+\path(0,0)(200,0)
+\path(0,50)(200,50)
+\path(0,100)(200,100)
+%% ---
+\end{picture}
diff --git a/graphics/epix/doc/graphpaper.xp b/graphics/epix/doc/graphpaper.xp
new file mode 100644
index 0000000000..795c499d4d
--- /dev/null
+++ b/graphics/epix/doc/graphpaper.xp
@@ -0,0 +1,24 @@
+/* -*-ePiX-*- */
+/* graphpaper.c -- July 6, 2002 */
+#include "epix.h"
+using namespace ePiX;
+
+int main()
+{
+ bounding_box(P(-2,-1), P(2,1));
+ picture(P(200,100));
+ unitlength("0.01in");
+
+ begin();
+
+ pen(0.25);
+ grid(10*x_size, 10*y_size);
+
+ pen(0.5);
+ grid(2*x_size, 2*y_size);
+
+ pen(1);
+ grid(x_size, y_size);
+
+ end();
+}
diff --git a/graphics/epix/doc/hello.eepic b/graphics/epix/doc/hello.eepic
new file mode 100644
index 0000000000..9b58fefc81
--- /dev/null
+++ b/graphics/epix/doc/hello.eepic
@@ -0,0 +1,15 @@
+%% Generated from hello.xp on Thu Jun 28 11:33:40 EDT 2007 by
+%% ePiX-1.1.6
+%%
+%% Cartesian bounding box: [-1,1] x [-1,1]
+%% Actual size: 2 x 1in
+%% Figure offset: left by 0in, down by 0in
+%%
+\xdefinecolor{rgb_000000}{rgb}{0,0,0}
+\setlength{\unitlength}{1in}
+\begin{picture}(2,1)(-0,-0)
+\put(1,0.5){\makebox(0,0)[c]{{\Huge Hello, world!}}}
+\allinethickness{1pt}%
+\path(2,0)(2,1)(0,1)(0,0)(2,0)
+%%
+\end{picture}
diff --git a/graphics/epix/doc/hello.xp b/graphics/epix/doc/hello.xp
new file mode 100644
index 0000000000..c8bd3739b9
--- /dev/null
+++ b/graphics/epix/doc/hello.xp
@@ -0,0 +1,20 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+int main()
+{
+ picture(P(-1,-1),P(1,1), "2x1in");
+
+ begin();
+
+ // uncomment and permute these lines
+ // crop_ellipse();
+ // backing(Yellow());
+ border(Black(), "1pt");
+
+ font_size("Huge");
+ label(P(0,0), "Hello, world!");
+
+ end();
+}
diff --git a/graphics/epix/doc/koch.eepic b/graphics/epix/doc/koch.eepic
new file mode 100644
index 0000000000..1f949958c0
--- /dev/null
+++ b/graphics/epix/doc/koch.eepic
@@ -0,0 +1,160 @@
+%% Generated from koch.xp on Tue Jan 4 15:32:16 EST 2005 by
+%% ePiX-1.0.3
+%%
+%% Cartesian bounding box: [0,3] x [0,0.5]
+%% Actual size: 3in x 0.5in
+%% Figure offset: right by 0in, up by 0.25in
+%%
+\setlength{\unitlength}{1in}
+\begin{picture}(3,0.5)(-0,-0.25)
+%% ---
+\path(0,0)(0.25,0)(0.25,0.25)(0.5,0.25)(0.5,0)(0.5,-0.25)(0.75,-0.25)
+ (0.75,0)(1,0)
+%% ---
+\path(1,0)(1.0625,0)(1.0625,0.0625)(1.125,0.0625)(1.125,0)(1.125,-0.0625)
+ (1.1875,-0.0625)(1.1875,0)(1.25,0)(1.25,0.0625)(1.1875,0.0625)
+ (1.1875,0.125)(1.25,0.125)(1.3125,0.125)(1.3125,0.1875)(1.25,0.1875)
+ (1.25,0.25)(1.3125,0.25)(1.3125,0.3125)(1.375,0.3125)(1.375,0.25)
+ (1.375,0.1875)(1.4375,0.1875)(1.4375,0.25)(1.5,0.25)(1.5,0.1875)
+ (1.5625,0.1875)(1.5625,0.125)(1.5,0.125)(1.4375,0.125)(1.4375,0.0625)
+ (1.5,0.0625)(1.5,0)(1.5,-0.0625)(1.5625,-0.0625)(1.5625,-0.125)
+ (1.5,-0.125)(1.4375,-0.125)(1.4375,-0.1875)(1.5,-0.1875)(1.5,-0.25)
+ (1.5625,-0.25)(1.5625,-0.1875)(1.625,-0.1875)(1.625,-0.25)(1.625,-0.3125)
+ (1.6875,-0.3125)(1.6875,-0.25)(1.75,-0.25)(1.75,-0.1875)(1.6875,-0.1875)
+ (1.6875,-0.125)(1.75,-0.125)(1.8125,-0.125)(1.8125,-0.0625)(1.75,-0.0625)
+ (1.75,0)(1.8125,0)(1.8125,0.0625)(1.875,0.0625)(1.875,0)
+\path(1.875,0)(1.875,-0.0625)(1.9375,-0.0625)(1.9375,0)(2,0)
+%% ---
+\path(2,0)(2.01562,0)(2.01562,0.015625)(2.03125,0.015625)(2.03125,0)
+ (2.03125,-0.015625)(2.04688,-0.015625)(2.04688,0)(2.0625,0)
+ (2.0625,0.015625)(2.04688,0.015625)(2.04688,0.03125)(2.0625,0.03125)
+ (2.07812,0.03125)(2.07812,0.046875)(2.0625,0.046875)(2.0625,0.0625)
+ (2.07812,0.0625)(2.07812,0.078125)(2.09375,0.078125)(2.09375,0.0625)
+ (2.09375,0.046875)(2.10938,0.046875)(2.10938,0.0625)(2.125,0.0625)
+ (2.125,0.046875)(2.14062,0.046875)(2.14062,0.03125)(2.125,0.03125)
+ (2.10938,0.03125)(2.10938,0.015625)(2.125,0.015625)(2.125,0)
+ (2.125,-0.015625)(2.14062,-0.015625)(2.14062,-0.03125)(2.125,-0.03125)
+ (2.10938,-0.03125)(2.10938,-0.046875)(2.125,-0.046875)(2.125,-0.0625)
+ (2.14062,-0.0625)(2.14062,-0.046875)(2.15625,-0.046875)(2.15625,-0.0625)
+ (2.15625,-0.078125)(2.17188,-0.078125)(2.17188,-0.0625)(2.1875,-0.0625)
+ (2.1875,-0.046875)(2.17188,-0.046875)(2.17188,-0.03125)(2.1875,-0.03125)
+ (2.20312,-0.03125)(2.20312,-0.015625)(2.1875,-0.015625)(2.1875,0)
+ (2.20312,0)(2.20312,0.015625)(2.21875,0.015625)(2.21875,0)
+\path(2.21875,0)(2.21875,-0.015625)(2.23438,-0.015625)(2.23438,0)(2.25,0)
+ (2.25,0.015625)(2.23438,0.015625)(2.23438,0.03125)(2.25,0.03125)
+ (2.26562,0.03125)(2.26562,0.046875)(2.25,0.046875)(2.25,0.0625)
+ (2.23438,0.0625)(2.23438,0.046875)(2.21875,0.046875)(2.21875,0.0625)
+ (2.21875,0.078125)(2.20312,0.078125)(2.20312,0.0625)(2.1875,0.0625)
+ (2.1875,0.078125)(2.17188,0.078125)(2.17188,0.09375)(2.1875,0.09375)
+ (2.20312,0.09375)(2.20312,0.109375)(2.1875,0.109375)(2.1875,0.125)
+ (2.20312,0.125)(2.20312,0.140625)(2.21875,0.140625)(2.21875,0.125)
+ (2.21875,0.109375)(2.23438,0.109375)(2.23438,0.125)(2.25,0.125)
+ (2.26562,0.125)(2.26562,0.140625)(2.28125,0.140625)(2.28125,0.125)
+ (2.28125,0.109375)(2.29688,0.109375)(2.29688,0.125)(2.3125,0.125)
+ (2.3125,0.140625)(2.29688,0.140625)(2.29688,0.15625)(2.3125,0.15625)
+ (2.32812,0.15625)(2.32812,0.171875)(2.3125,0.171875)(2.3125,0.1875)
+ (2.29688,0.1875)(2.29688,0.171875)(2.28125,0.171875)(2.28125,0.1875)
+ (2.28125,0.203125)(2.26562,0.203125)(2.26562,0.1875)
+\path(2.26562,0.1875)(2.25,0.1875)(2.25,0.203125)(2.23438,0.203125)
+ (2.23438,0.21875)(2.25,0.21875)(2.26562,0.21875)(2.26562,0.234375)
+ (2.25,0.234375)(2.25,0.25)(2.26562,0.25)(2.26562,0.265625)
+ (2.28125,0.265625)(2.28125,0.25)(2.28125,0.234375)(2.29688,0.234375)
+ (2.29688,0.25)(2.3125,0.25)(2.3125,0.265625)(2.29688,0.265625)
+ (2.29688,0.28125)(2.3125,0.28125)(2.32812,0.28125)(2.32812,0.296875)
+ (2.3125,0.296875)(2.3125,0.3125)(2.32812,0.3125)(2.32812,0.328125)
+ (2.34375,0.328125)(2.34375,0.3125)(2.34375,0.296875)(2.35938,0.296875)
+ (2.35938,0.3125)(2.375,0.3125)(2.375,0.296875)(2.39062,0.296875)
+ (2.39062,0.28125)(2.375,0.28125)(2.35938,0.28125)(2.35938,0.265625)
+ (2.375,0.265625)(2.375,0.25)(2.375,0.234375)(2.39062,0.234375)
+ (2.39062,0.21875)(2.375,0.21875)(2.35938,0.21875)(2.35938,0.203125)
+ (2.375,0.203125)(2.375,0.1875)(2.39062,0.1875)(2.39062,0.203125)
+ (2.40625,0.203125)(2.40625,0.1875)(2.40625,0.171875)(2.42188,0.171875)
+ (2.42188,0.1875)(2.4375,0.1875)(2.4375,0.203125)(2.42188,0.203125)
+\path(2.42188,0.203125)(2.42188,0.21875)(2.4375,0.21875)(2.45312,0.21875)
+ (2.45312,0.234375)(2.4375,0.234375)(2.4375,0.25)(2.45312,0.25)
+ (2.45312,0.265625)(2.46875,0.265625)(2.46875,0.25)(2.46875,0.234375)
+ (2.48438,0.234375)(2.48438,0.25)(2.5,0.25)(2.5,0.234375)
+ (2.51562,0.234375)(2.51562,0.21875)(2.5,0.21875)(2.48438,0.21875)
+ (2.48438,0.203125)(2.5,0.203125)(2.5,0.1875)(2.51562,0.1875)
+ (2.51562,0.203125)(2.53125,0.203125)(2.53125,0.1875)(2.53125,0.171875)
+ (2.54688,0.171875)(2.54688,0.1875)(2.5625,0.1875)(2.5625,0.171875)
+ (2.57812,0.171875)(2.57812,0.15625)(2.5625,0.15625)(2.54688,0.15625)
+ (2.54688,0.140625)(2.5625,0.140625)(2.5625,0.125)(2.54688,0.125)
+ (2.54688,0.109375)(2.53125,0.109375)(2.53125,0.125)(2.53125,0.140625)
+ (2.51562,0.140625)(2.51562,0.125)(2.5,0.125)(2.48438,0.125)
+ (2.48438,0.109375)(2.46875,0.109375)(2.46875,0.125)(2.46875,0.140625)
+ (2.45312,0.140625)(2.45312,0.125)(2.4375,0.125)(2.4375,0.109375)
+ (2.45312,0.109375)(2.45312,0.09375)(2.4375,0.09375)(2.42188,0.09375)
+\path(2.42188,0.09375)(2.42188,0.078125)(2.4375,0.078125)(2.4375,0.0625)
+ (2.45312,0.0625)(2.45312,0.078125)(2.46875,0.078125)(2.46875,0.0625)
+ (2.46875,0.046875)(2.48438,0.046875)(2.48438,0.0625)(2.5,0.0625)
+ (2.5,0.046875)(2.51562,0.046875)(2.51562,0.03125)(2.5,0.03125)
+ (2.48438,0.03125)(2.48438,0.015625)(2.5,0.015625)(2.5,0)(2.5,-0.015625)
+ (2.51562,-0.015625)(2.51562,-0.03125)(2.5,-0.03125)(2.48438,-0.03125)
+ (2.48438,-0.046875)(2.5,-0.046875)(2.5,-0.0625)(2.51562,-0.0625)
+ (2.51562,-0.046875)(2.53125,-0.046875)(2.53125,-0.0625)
+ (2.53125,-0.078125)(2.54688,-0.078125)(2.54688,-0.0625)(2.5625,-0.0625)
+ (2.5625,-0.078125)(2.57812,-0.078125)(2.57812,-0.09375)(2.5625,-0.09375)
+ (2.54688,-0.09375)(2.54688,-0.109375)(2.5625,-0.109375)(2.5625,-0.125)
+ (2.54688,-0.125)(2.54688,-0.140625)(2.53125,-0.140625)(2.53125,-0.125)
+ (2.53125,-0.109375)(2.51562,-0.109375)(2.51562,-0.125)(2.5,-0.125)
+ (2.48438,-0.125)(2.48438,-0.140625)(2.46875,-0.140625)(2.46875,-0.125)
+ (2.46875,-0.109375)(2.45312,-0.109375)(2.45312,-0.125)(2.4375,-0.125)
+\path(2.4375,-0.125)(2.4375,-0.140625)(2.45312,-0.140625)(2.45312,-0.15625)
+ (2.4375,-0.15625)(2.42188,-0.15625)(2.42188,-0.171875)(2.4375,-0.171875)
+ (2.4375,-0.1875)(2.45312,-0.1875)(2.45312,-0.171875)(2.46875,-0.171875)
+ (2.46875,-0.1875)(2.46875,-0.203125)(2.48438,-0.203125)(2.48438,-0.1875)
+ (2.5,-0.1875)(2.5,-0.203125)(2.51562,-0.203125)(2.51562,-0.21875)
+ (2.5,-0.21875)(2.48438,-0.21875)(2.48438,-0.234375)(2.5,-0.234375)
+ (2.5,-0.25)(2.51562,-0.25)(2.51562,-0.234375)(2.53125,-0.234375)
+ (2.53125,-0.25)(2.53125,-0.265625)(2.54688,-0.265625)(2.54688,-0.25)
+ (2.5625,-0.25)(2.5625,-0.234375)(2.54688,-0.234375)(2.54688,-0.21875)
+ (2.5625,-0.21875)(2.57812,-0.21875)(2.57812,-0.203125)(2.5625,-0.203125)
+ (2.5625,-0.1875)(2.57812,-0.1875)(2.57812,-0.171875)(2.59375,-0.171875)
+ (2.59375,-0.1875)(2.59375,-0.203125)(2.60938,-0.203125)(2.60938,-0.1875)
+ (2.625,-0.1875)(2.625,-0.203125)(2.64062,-0.203125)(2.64062,-0.21875)
+ (2.625,-0.21875)(2.60938,-0.21875)(2.60938,-0.234375)(2.625,-0.234375)
+ (2.625,-0.25)(2.625,-0.265625)(2.64062,-0.265625)(2.64062,-0.28125)
+\path(2.64062,-0.28125)(2.625,-0.28125)(2.60938,-0.28125)
+ (2.60938,-0.296875)(2.625,-0.296875)(2.625,-0.3125)(2.64062,-0.3125)
+ (2.64062,-0.296875)(2.65625,-0.296875)(2.65625,-0.3125)
+ (2.65625,-0.328125)(2.67188,-0.328125)(2.67188,-0.3125)(2.6875,-0.3125)
+ (2.6875,-0.296875)(2.67188,-0.296875)(2.67188,-0.28125)(2.6875,-0.28125)
+ (2.70312,-0.28125)(2.70312,-0.265625)(2.6875,-0.265625)(2.6875,-0.25)
+ (2.70312,-0.25)(2.70312,-0.234375)(2.71875,-0.234375)(2.71875,-0.25)
+ (2.71875,-0.265625)(2.73438,-0.265625)(2.73438,-0.25)(2.75,-0.25)
+ (2.75,-0.234375)(2.73438,-0.234375)(2.73438,-0.21875)(2.75,-0.21875)
+ (2.76562,-0.21875)(2.76562,-0.203125)(2.75,-0.203125)(2.75,-0.1875)
+ (2.73438,-0.1875)(2.73438,-0.203125)(2.71875,-0.203125)(2.71875,-0.1875)
+ (2.71875,-0.171875)(2.70312,-0.171875)(2.70312,-0.1875)(2.6875,-0.1875)
+ (2.6875,-0.171875)(2.67188,-0.171875)(2.67188,-0.15625)(2.6875,-0.15625)
+ (2.70312,-0.15625)(2.70312,-0.140625)(2.6875,-0.140625)(2.6875,-0.125)
+ (2.70312,-0.125)(2.70312,-0.109375)(2.71875,-0.109375)(2.71875,-0.125)
+ (2.71875,-0.140625)(2.73438,-0.140625)
+\path(2.73438,-0.140625)(2.73438,-0.125)(2.75,-0.125)(2.76562,-0.125)
+ (2.76562,-0.109375)(2.78125,-0.109375)(2.78125,-0.125)(2.78125,-0.140625)
+ (2.79688,-0.140625)(2.79688,-0.125)(2.8125,-0.125)(2.8125,-0.109375)
+ (2.79688,-0.109375)(2.79688,-0.09375)(2.8125,-0.09375)(2.82812,-0.09375)
+ (2.82812,-0.078125)(2.8125,-0.078125)(2.8125,-0.0625)(2.79688,-0.0625)
+ (2.79688,-0.078125)(2.78125,-0.078125)(2.78125,-0.0625)
+ (2.78125,-0.046875)(2.76562,-0.046875)(2.76562,-0.0625)(2.75,-0.0625)
+ (2.75,-0.046875)(2.73438,-0.046875)(2.73438,-0.03125)(2.75,-0.03125)
+ (2.76562,-0.03125)(2.76562,-0.015625)(2.75,-0.015625)(2.75,0)(2.76562,0)
+ (2.76562,0.015625)(2.78125,0.015625)(2.78125,0)(2.78125,-0.015625)
+ (2.79688,-0.015625)(2.79688,0)(2.8125,0)(2.8125,0.015625)
+ (2.79688,0.015625)(2.79688,0.03125)(2.8125,0.03125)(2.82812,0.03125)
+ (2.82812,0.046875)(2.8125,0.046875)(2.8125,0.0625)(2.82812,0.0625)
+ (2.82812,0.078125)(2.84375,0.078125)(2.84375,0.0625)(2.84375,0.046875)
+ (2.85938,0.046875)(2.85938,0.0625)(2.875,0.0625)(2.875,0.046875)
+\path(2.875,0.046875)(2.89062,0.046875)(2.89062,0.03125)(2.875,0.03125)
+ (2.85938,0.03125)(2.85938,0.015625)(2.875,0.015625)(2.875,0)
+ (2.875,-0.015625)(2.89062,-0.015625)(2.89062,-0.03125)(2.875,-0.03125)
+ (2.85938,-0.03125)(2.85938,-0.046875)(2.875,-0.046875)(2.875,-0.0625)
+ (2.89062,-0.0625)(2.89062,-0.046875)(2.90625,-0.046875)(2.90625,-0.0625)
+ (2.90625,-0.078125)(2.92188,-0.078125)(2.92188,-0.0625)(2.9375,-0.0625)
+ (2.9375,-0.046875)(2.92188,-0.046875)(2.92188,-0.03125)(2.9375,-0.03125)
+ (2.95312,-0.03125)(2.95312,-0.015625)(2.9375,-0.015625)(2.9375,0)
+ (2.95312,0)(2.95312,0.015625)(2.96875,0.015625)(2.96875,0)
+ (2.96875,-0.015625)(2.98438,-0.015625)(2.98438,0)(3,0)
+%% ---
+\end{picture}
diff --git a/graphics/epix/doc/koch.xp b/graphics/epix/doc/koch.xp
new file mode 100644
index 0000000000..d1a04e1c0f
--- /dev/null
+++ b/graphics/epix/doc/koch.xp
@@ -0,0 +1,24 @@
+/* -*-ePiX-*- */
+/* koch.c -- Simple fractal "curve" generation. -- June 6, 2002 */
+
+#include "epix.h"
+using namespace ePiX;
+
+// const int koch_seed[] = {6, 4, 0, 1, -1, 0};
+const int seed[] = {4, 8, 0, 1, 0, 3, 3, 0, 1, 0};
+
+int main()
+{
+ bounding_box(P(0,0), P(3, 0.5));
+ picture(P(3, 0.5));
+ unitlength("1in");
+ offset(P(0,0.25));
+
+ begin();
+
+ for (int i=1; i <= 3; ++i)
+ fractal(P(i-1,0), P(i,0), i, seed);
+
+ end();
+}
+
diff --git a/graphics/epix/doc/layout.eepic b/graphics/epix/doc/layout.eepic
new file mode 100644
index 0000000000..07eec3fcb6
--- /dev/null
+++ b/graphics/epix/doc/layout.eepic
@@ -0,0 +1,1511 @@
+%% Generated from layout.xp on Sat Jun 30 12:16:41 EDT 2007 by
+%% ePiX-1.1.6
+%%
+%% Cartesian bounding box: [0,2] x [0,3]
+%% Actual size: 5 x 7.5in
+%% Figure offset: left by 0in, down by 0in
+%%
+\xdefinecolor{rgb_000000}{rgb}{0,0,0}
+\xdefinecolor{rgb_980000}{rgb}{0.596078,0,0}
+\setlength{\unitlength}{1in}
+\begin{picture}(5,7.5)(-0,-0)
+\path(1.95438,5.77398)(1.9095,5.84756)(1.86459,5.91634)
+ (1.81949,5.98073)(1.77406,6.04108)(1.72817,6.09772)
+ (1.68169,6.15093)(1.63449,6.20095)(1.58643,6.24802)
+ (1.53738,6.29233)(1.4872,6.33406)(1.43575,6.37337)(1.38287,6.41039)
+ (1.32843,6.44527)(1.27224,6.4781)(1.21415,6.50899)(1.15394,6.53802)
+ (1.09144,6.56528)(1.02641,6.59083)(0.958625,6.61472)
+ (0.887817,6.63701)(0.813702,6.65773)(0.735966,6.67692)
+ (0.654259,6.69459)(0.568192,6.71076)
+%%
+\path(1.7999,5.73751)(1.76689,5.81018)(1.7333,5.87809)
+ (1.69903,5.94164)(1.66399,6.00118)(1.6281,6.05703)(1.59125,6.10945)
+ (1.55336,6.15868)(1.51431,6.20496)(1.47401,6.24846)
+ (1.43234,6.28936)(1.38918,6.32782)(1.34441,6.36396)
+ (1.29789,6.39792)(1.24946,6.4298)(1.19898,6.45968)(1.14626,6.48766)
+ (1.09112,6.5138)(1.03334,6.53816)(0.972699,6.5608)
+ (0.908939,6.58175)(0.841779,6.60103)(0.770903,6.61868)
+ (0.69596,6.6347)(0.616556,6.64908)
+%%
+\path(1.64758,5.71257)(1.62656,5.78375)(1.60445,5.85027)
+ (1.5812,5.91251)(1.55677,5.97079)(1.53112,6.02543)(1.50418,6.07667)
+ (1.4759,6.12475)(1.4462,6.16989)(1.41501,6.21226)(1.38225,6.25204)
+ (1.34781,6.28935)(1.31159,6.32435)(1.27348,6.35712)
+ (1.23334,6.38779)(1.19104,6.41643)(1.14642,6.44311)(1.09929,6.4679)
+ (1.04947,6.49085)(0.996736,6.512)(0.940842,6.53138)(0.881517,6.549)
+ (0.818452,6.56488)(0.7513,6.579)(0.679669,6.59135)
+%%
+\path(1.49959,5.69983)(1.49052,5.76899)(1.47988,5.83363)
+ (1.46769,5.89408)(1.45395,5.95068)(1.43865,6.00371)(1.42178,6.0534)
+ (1.4033,6.09999)(1.38319,6.14367)(1.36138,6.18461)(1.33782,6.22297)
+ (1.31245,6.25888)(1.28517,6.29246)(1.2559,6.32381)(1.22453,6.35304)
+ (1.19093,6.3802)(1.15497,6.40538)(1.11648,6.42861)(1.0753,6.44994)
+ (1.03121,6.4694)(0.983998,6.48701)(0.933394,6.50277)
+ (0.879107,6.51667)(0.820805,6.52869)(0.758105,6.53879)
+%%
+\path(1.35808,5.69964)(1.36071,5.7663)(1.36137,5.82859)
+ (1.36012,5.88685)(1.35701,5.94137)(1.35206,5.99243)
+ (1.34528,6.04024)(1.33669,6.08502)(1.32628,6.12695)
+ (1.31402,6.16618)(1.29989,6.20287)(1.28384,6.23713)(1.2658,6.26908)
+ (1.24573,6.2988)(1.22352,6.32638)(1.19908,6.35188)(1.17229,6.37536)
+ (1.14301,6.39686)(1.1111,6.41641)(1.07637,6.43402)(1.03861,6.4497)
+ (0.997597,6.46343)(0.953048,6.47519)(0.904656,6.48495)(0.852063,6.49264)
+%%
+\path(1.22499,5.71201)(1.23894,5.77574)(1.25058,5.83529)
+ (1.26001,5.89099)(1.26732,5.94311)(1.27257,5.99188)
+ (1.27581,6.03753)(1.27707,6.08023)(1.27637,6.12016)
+ (1.27372,6.15746)(1.26912,6.19226)(1.26255,6.22468)(1.25398,6.2548)
+ (1.24336,6.28272)(1.23063,6.30849)(1.21572,6.33218)
+ (1.19853,6.35383)(1.17897,6.37346)(1.1569,6.3911)(1.13216,6.40674)
+ (1.10459,6.42038)(1.07398,6.43198)(1.04008,6.44151)
+ (1.00263,6.44891)(0.961291,6.45409)
+%%
+\path(1.10205,5.73661)(1.12678,5.79705)(1.14894,5.85356)
+ (1.16867,5.90641)(1.18608,5.95585)(1.20126,6.00209)(1.2143,6.04534)
+ (1.22526,6.08575)(1.23418,6.12348)(1.2411,6.15867)(1.24604,6.19142)
+ (1.24901,6.22184)(1.25,6.25)(1.249,6.27598)(1.24597,6.29984)
+ (1.24087,6.32162)(1.23364,6.34134)(1.22419,6.35903)
+ (1.21243,6.37468)(1.19825,6.3883)(1.1815,6.39984)(1.16202,6.40927)
+ (1.13961,6.41653)(1.11404,6.42153)(1.08505,6.42418)
+%%
+\path(0.990653,5.77275)(1.02551,5.82968)(1.05762,5.88291)
+ (1.08714,5.93269)(1.11422,5.97925)(1.13897,6.02279)(1.1615,6.06346)
+ (1.18189,6.10143)(1.20023,6.13683)(1.21656,6.16978)
+ (1.23095,6.20036)(1.24341,6.22868)(1.25398,6.2548)(1.26266,6.27878)
+ (1.26945,6.30066)(1.27433,6.32047)(1.27727,6.33823)
+ (1.27824,6.35395)(1.27716,6.36761)(1.27397,6.37919)
+ (1.26857,6.38865)(1.26084,6.39593)(1.25063,6.40095)
+ (1.23778,6.40361)(1.22209,6.40378)
+%%
+\path(0.891818,5.81952)(0.936069,5.87276)(0.977467,5.92257)
+ (1.01619,5.96916)(1.05241,6.01272)(1.08626,6.05343)
+ (1.11788,6.09143)(1.14736,6.12687)(1.17482,6.15986)
+ (1.20032,6.19049)(1.22395,6.21886)(1.24576,6.24504)(1.2658,6.26908)
+ (1.28412,6.29103)(1.30073,6.31092)(1.31565,6.32877)
+ (1.32889,6.34458)(1.34044,6.35836)(1.35028,6.37006)
+ (1.35839,6.37967)(1.36472,6.38712)(1.3692,6.39234)(1.37176,6.39522)
+ (1.3723,6.39566)(1.37069,6.39349)
+%%
+\path(0.806183,5.87573)(0.85904,5.92524)(0.909007,5.97156)
+ (0.956284,6.01489)(1.00105,6.0554)(1.04347,6.09324)
+ (1.08369,6.12855)(1.12183,6.16142)(1.15802,6.19198)
+ (1.19236,6.22029)(1.22494,6.24644)(1.25585,6.27048)
+ (1.28517,6.29246)(1.31296,6.31241)(1.33928,6.33035)
+ (1.36418,6.34629)(1.3877,6.36022)(1.40988,6.37214)(1.43074,6.38199)
+ (1.4503,6.38973)(1.46858,6.3953)(1.48558,6.3986)(1.50128,6.39953)
+ (1.51567,6.39793)(1.52872,6.39365)
+%%
+\path(0.734,5.94009)(0.794644,5.98587)(0.852427,6.02873)
+ (0.907559,6.06882)(0.960235,6.1063)(1.01063,6.14129)
+ (1.05891,6.17391)(1.10521,6.20425)(1.14968,6.2324)(1.19244,6.25843)
+ (1.23361,6.28241)(1.27329,6.30437)(1.31159,6.32435)(1.3486,6.34237)
+ (1.38441,6.35845)(1.41911,6.37258)(1.45277,6.38474)
+ (1.48548,6.39492)(1.5173,6.40305)(1.54832,6.40909)(1.57859,6.41296)
+ (1.6082,6.41454)(1.63721,6.41373)(1.6657,6.41035)(1.69373,6.40423)
+%%
+\path(0.675166,6.01119)(0.742777,6.05334)(0.807609,6.09281)
+ (0.869881,6.12974)(0.929796,6.16426)(0.987543,6.19647)
+ (1.0433,6.22648)(1.09722,6.25436)(1.14946,6.28019)(1.20016,6.30402)
+ (1.24947,6.32591)(1.29751,6.34588)(1.34441,6.36396)
+ (1.39029,6.38017)(1.43528,6.39451)(1.47948,6.40696)(1.52302,6.4175)
+ (1.56602,6.42609)(1.60861,6.43269)(1.65091,6.43722)(1.69305,6.4396)
+ (1.73517,6.4397)(1.77744,6.43741)(1.82002,6.43255)(1.86308,6.42493)
+%%
+\path(0.62927,6.08763)(0.703045,6.12629)(0.774167,6.1625)
+ (0.842861,6.1964)(0.909337,6.22808)(0.973792,6.25763)
+ (1.03641,6.28514)(1.09737,6.31068)(1.15683,6.3343)(1.21496,6.35605)
+ (1.27191,6.37597)(1.32783,6.39408)(1.38287,6.41039)
+ (1.43719,6.42493)(1.49093,6.43766)(1.54425,6.44859)
+ (1.59729,6.45768)(1.65023,6.46488)(1.70324,6.47014)
+ (1.75649,6.47337)(1.81019,6.4745)(1.86455,6.47339)(1.9198,6.46991)
+ (1.97622,6.46388)(2.03409,6.4551)
+%%
+\path(1.95438,5.77398)(1.877,5.75436)(1.7999,5.73751)
+ (1.72333,5.72355)(1.64758,5.71257)(1.57291,5.70464)
+ (1.49959,5.69983)(1.4279,5.69816)(1.35808,5.69964)(1.29037,5.70427)
+ (1.22499,5.71201)(1.16216,5.72282)(1.10205,5.73661)
+ (1.04484,5.75329)(0.990653,5.77275)(0.939616,5.79488)
+ (0.891818,5.81952)(0.847326,5.84652)(0.806183,5.87573)
+ (0.768408,5.90698)(0.734,5.94009)(0.702933,5.97489)
+ (0.675166,6.01119)(0.650637,6.04883)(0.62927,6.08763)
+%%
+\path(1.86459,5.91634)(1.79875,5.89596)(1.7333,5.87809)
+ (1.66845,5.86282)(1.60445,5.85027)(1.54151,5.84052)
+ (1.47988,5.83363)(1.41976,5.82964)(1.36137,5.82859)
+ (1.30491,5.83047)(1.25058,5.83529)(1.19853,5.843)(1.14894,5.85356)
+ (1.10193,5.86689)(1.05762,5.88291)(1.01611,5.90151)
+ (0.977467,5.92257)(0.941756,5.94597)(0.909007,5.97156)
+ (0.879232,5.9992)(0.852427,6.02873)(0.828566,6.05999)
+ (0.807609,6.09281)(0.789499,6.12704)(0.774167,6.1625)
+%%
+\path(1.77406,6.04108)(1.71877,6.02)(1.66399,6.00118)
+ (1.60993,5.98475)(1.55677,5.97079)(1.50471,5.95942)
+ (1.45395,5.95068)(1.40465,5.94465)(1.35701,5.94137)
+ (1.31118,5.94086)(1.26732,5.94311)(1.22558,5.94812)
+ (1.18608,5.95585)(1.14892,5.96625)(1.11422,5.97925)
+ (1.08203,5.99478)(1.05241,6.01272)(1.02541,6.03297)(1.00105,6.0554)
+ (0.97933,6.07989)(0.960235,6.1063)(0.943738,6.13447)
+ (0.929796,6.16426)(0.918352,6.19551)(0.909337,6.22808)
+%%
+\path(1.68169,6.15093)(1.63613,6.12916)(1.59125,6.10945)
+ (1.54721,6.09191)(1.50418,6.07667)(1.46232,6.0638)(1.42178,6.0534)
+ (1.38272,6.04553)(1.34528,6.04024)(1.3096,6.03757)(1.27581,6.03753)
+ (1.24401,6.04012)(1.2143,6.04534)(1.18677,6.05313)(1.1615,6.06346)
+ (1.13852,6.07626)(1.11788,6.09143)(1.0996,6.1089)(1.08369,6.12855)
+ (1.07013,6.15026)(1.05891,6.17391)(1.04998,6.19936)(1.0433,6.22648)
+ (1.0388,6.25512)(1.03641,6.28514)
+%%
+\path(1.58643,6.24802)(1.54994,6.22555)(1.51431,6.20496)
+ (1.47969,6.18637)(1.4462,6.16989)(1.41399,6.15563)(1.38319,6.14367)
+ (1.35391,6.13409)(1.32628,6.12695)(1.3004,6.12229)(1.27637,6.12016)
+ (1.25427,6.12056)(1.23418,6.12348)(1.21615,6.12892)
+ (1.20023,6.13683)(1.18644,6.14717)(1.17482,6.15986)
+ (1.16535,6.17483)(1.15802,6.19198)(1.15281,6.21121)(1.14968,6.2324)
+ (1.14858,6.25544)(1.14946,6.28019)(1.15223,6.30652)(1.15683,6.3343)
+%%
+\path(1.4872,6.33406)(1.45923,6.31085)(1.43234,6.28936)
+ (1.40664,6.26972)(1.38225,6.25204)(1.35927,6.23642)
+ (1.33782,6.22297)(1.318,6.21176)(1.29989,6.20287)(1.28357,6.19636)
+ (1.26912,6.19226)(1.2566,6.19061)(1.24604,6.19142)(1.23748,6.19468)
+ (1.23095,6.20036)(1.22644,6.20844)(1.22395,6.21886)
+ (1.22346,6.23156)(1.22494,6.24644)(1.22834,6.26342)
+ (1.23361,6.28241)(1.24068,6.30328)(1.24947,6.32591)
+ (1.25991,6.35018)(1.27191,6.37597)
+%%
+\path(1.38287,6.41039)(1.36299,6.38639)(1.34441,6.36396)
+ (1.32725,6.34324)(1.31159,6.32435)(1.29754,6.30738)
+ (1.28517,6.29246)(1.27457,6.27966)(1.2658,6.26908)(1.25892,6.26077)
+ (1.25398,6.2548)(1.251,6.2512)(1.25,6.25)(1.251,6.2512)
+ (1.25398,6.2548)(1.25892,6.26077)(1.2658,6.26908)(1.27457,6.27966)
+ (1.28517,6.29246)(1.29754,6.30738)(1.31159,6.32435)
+ (1.32725,6.34324)(1.34441,6.36396)(1.36299,6.38639)(1.38287,6.41039)
+%%
+\path(1.27224,6.4781)(1.26007,6.45322)(1.24946,6.4298)
+ (1.24053,6.40794)(1.23334,6.38779)(1.22799,6.36945)
+ (1.22453,6.35304)(1.22302,6.33865)(1.22352,6.32638)
+ (1.22604,6.31631)(1.23063,6.30849)(1.23727,6.30299)
+ (1.24597,6.29984)(1.25671,6.29906)(1.26945,6.30066)
+ (1.28414,6.30462)(1.30073,6.31092)(1.31913,6.31951)
+ (1.33928,6.33035)(1.36108,6.34335)(1.38441,6.35845)
+ (1.40918,6.37553)(1.43528,6.39451)(1.46257,6.41526)(1.49093,6.43766)
+%%
+\path(1.15394,6.53802)(1.14916,6.51218)(1.14626,6.48766)
+ (1.14532,6.46459)(1.14642,6.44311)(1.14962,6.42333)
+ (1.15497,6.40538)(1.16252,6.38935)(1.17229,6.37536)(1.18429,6.3635)
+ (1.19853,6.35383)(1.21499,6.34643)(1.23364,6.34134)(1.25442,6.3386)
+ (1.27727,6.33823)(1.30213,6.34023)(1.32889,6.34458)
+ (1.35745,6.35126)(1.3877,6.36022)(1.41952,6.37141)(1.45277,6.38474)
+ (1.48732,6.40014)(1.52302,6.4175)(1.55973,6.43672)(1.59729,6.45768)
+%%
+\path(1.02641,6.59083)(1.02876,6.56389)(1.03334,6.53816)
+ (1.04022,6.51377)(1.04947,6.49085)(1.06115,6.46953)(1.0753,6.44994)
+ (1.09195,6.4322)(1.1111,6.41641)(1.13276,6.40268)(1.1569,6.3911)
+ (1.18348,6.38175)(1.21243,6.37468)(1.24369,6.36996)
+ (1.27716,6.36761)(1.31274,6.36764)(1.35028,6.37006)
+ (1.38967,6.37486)(1.43074,6.38199)(1.47334,6.39141)(1.5173,6.40305)
+ (1.56245,6.41685)(1.60861,6.43269)(1.6556,6.45049)(1.70324,6.47014)
+%%
+\path(0.887817,6.63701)(0.897069,6.60884)(0.908939,6.58175)
+ (0.923508,6.55588)(0.940842,6.53138)(0.960994,6.50838)
+ (0.983998,6.48701)(1.00987,6.46741)(1.03861,6.4497)(1.0702,6.43398)
+ (1.10459,6.42038)(1.14172,6.40897)(1.1815,6.39984)(1.22383,6.39305)
+ (1.26857,6.38865)(1.31559,6.38667)(1.36472,6.38712)
+ (1.41578,6.39001)(1.46858,6.3953)(1.52292,6.40297)(1.57859,6.41296)
+ (1.63537,6.42519)(1.69305,6.4396)(1.75139,6.45607)(1.81019,6.4745)
+%%
+\path(0.735966,6.67692)(0.7519,6.64732)(0.770903,6.61868)
+ (0.793063,6.59115)(0.818452,6.56488)(0.847122,6.54)
+ (0.879107,6.51667)(0.91442,6.49502)(0.953048,6.47519)
+ (0.994955,6.45732)(1.04008,6.44151)(1.08834,6.42788)
+ (1.13961,6.41653)(1.19376,6.40753)(1.25063,6.40095)
+ (1.31003,6.39684)(1.37176,6.39522)(1.43559,6.39612)
+ (1.50128,6.39953)(1.56857,6.40541)(1.63721,6.41373)
+ (1.70692,6.42442)(1.77744,6.43741)(1.84849,6.45261)(1.9198,6.46991)
+%%
+\path(0.568192,6.71076)(0.590579,6.67951)(0.616556,6.64908)
+ (0.646225,6.61965)(0.679669,6.59135)(0.716949,6.56435)
+ (0.758105,6.53879)(0.803148,6.51484)(0.852063,6.49264)
+ (0.904803,6.47235)(0.961291,6.45409)(1.02142,6.43799)
+ (1.08505,6.42418)(1.15201,6.41274)(1.22209,6.40378)
+ (1.29507,6.39734)(1.37069,6.39349)(1.44868,6.39226)
+ (1.52872,6.39365)(1.61052,6.39765)(1.69373,6.40423)
+ (1.77803,6.41335)(1.86308,6.42493)(1.94854,6.43888)(2.03409,6.4551)
+%%
+\path(1.25,6.25)(0.90831,5.83754)
+%%
+\path(0.929086,5.88702)(0.940008,5.90021)
+\path(0.922161,5.87053)(0.944004,5.8969)
+\path(0.915235,5.85404)(0.947999,5.89359)
+\path(0.90831,5.83754)(0.951995,5.89028)
+\path(0.923227,5.84742)(0.955991,5.88697)
+\path(0.938144,5.85729)(0.959987,5.88366)
+\path(0.953061,5.86716)(0.963983,5.88035)
+\path(0.951995,5.89028)(0.936012,5.90352)(0.90831,5.83754)
+ (0.967979,5.87704)(0.951995,5.89028)
+%%
+\path(1.25,6.25)(1.9921,6.09631)
+%%
+\path(1.90984,6.09745)(1.88348,6.10291)
+\path(1.93726,6.09707)(1.88453,6.10799)
+\path(1.96468,6.09669)(1.88558,6.11307)
+\path(1.9921,6.09631)(1.88663,6.11815)
+\path(1.96678,6.10685)(1.88768,6.12323)
+\path(1.94147,6.11739)(1.88874,6.12831)
+\path(1.91616,6.12793)(1.88979,6.13339)
+\path(1.88663,6.11815)(1.88242,6.09782)(1.9921,6.09631)
+ (1.89084,6.13847)(1.88663,6.11815)
+%%
+\allinethickness{1pt}%
+\color{rgb_980000}%
+\path(2.375,5.125)
+ (2.375,7.375)(0.125,7.375)(0.125,5.125)(2.375,5.125)
+%%
+\allinethickness{0.4pt}%
+\color{rgb_000000}%
+\path(1.57249,2.99581)
+ (1.60208,3.08238)(1.62568,3.16486)(1.6436,3.24353)(1.65613,3.31869)
+ (1.66348,3.39059)(1.66589,3.45945)(1.66353,3.52548)
+ (1.65656,3.58888)(1.64515,3.64982)(1.6294,3.70847)(1.60943,3.76497)
+ (1.58534,3.81945)(1.5572,3.87205)(1.52509,3.92289)(1.48905,3.97206)
+ (1.44912,4.01968)(1.40534,4.06584)(1.35773,4.11062)(1.3063,4.15411)
+ (1.25104,4.19638)(1.19195,4.23751)(1.129,4.27756)(1.06218,4.3166)(0.991435,4.35469)
+%%
+\path(1.39706,3.04908)(1.43364,3.12654)(1.46419,3.20061)
+ (1.48899,3.27155)(1.50828,3.33955)(1.52226,3.40482)
+ (1.53114,3.46754)(1.53508,3.52788)(1.53423,3.58598)(1.5287,3.64199)
+ (1.51863,3.69603)(1.50409,3.74824)(1.48518,3.79871)
+ (1.46195,3.84755)(1.43447,3.89487)(1.40276,3.94074)
+ (1.36687,3.98526)(1.3268,4.02851)(1.28256,4.07055)(1.23414,4.11145)
+ (1.18153,4.1513)(1.12471,4.19013)(1.06363,4.22802)
+ (0.998248,4.26502)(0.928503,4.30119)
+%%
+\path(1.24877,3.10605)(1.29092,3.17474)(1.32712,3.24068)
+ (1.3576,3.30403)(1.38257,3.36496)(1.40221,3.42363)(1.41669,3.48018)
+ (1.42614,3.53473)(1.43068,3.5874)(1.43043,3.6383)(1.42548,3.68755)
+ (1.4159,3.73523)(1.40174,3.78143)(1.38307,3.82624)(1.35991,3.86973)
+ (1.33228,3.91199)(1.3002,3.95308)(1.26366,3.99306)(1.22265,4.03201)
+ (1.17713,4.06997)(1.12708,4.107)(1.07245,4.14315)(1.01316,4.17848)
+ (0.94915,4.21303)(0.88033,4.24685)
+%%
+\path(1.12691,3.16617)(1.17344,3.22652)(1.21419,3.28463)
+ (1.24934,3.34063)(1.27907,3.39466)(1.30353,3.44682)
+ (1.32285,3.49721)(1.33713,3.54595)(1.34648,3.59312)
+ (1.35097,3.63881)(1.35067,3.68311)(1.34564,3.72607)(1.3359,3.76779)
+ (1.32149,3.80832)(1.30242,3.84773)(1.27869,3.88608)
+ (1.25028,3.92343)(1.21716,3.95982)(1.17931,3.99531)
+ (1.13666,4.02995)(1.08914,4.06378)(1.0367,4.09685)(0.979215,4.1292)
+ (0.916597,4.16087)(0.848721,4.19189)
+%%
+\path(1.03051,3.22888)(1.08046,3.28136)(1.12486,3.33203)
+ (1.16386,3.38098)(1.1976,3.42832)(1.22618,3.47411)(1.24971,3.51846)
+ (1.26827,3.56143)(1.28193,3.60309)(1.29073,3.64351)
+ (1.29472,3.68275)(1.29392,3.72088)(1.28835,3.75794)(1.27801,3.794)
+ (1.26288,3.82909)(1.24294,3.86327)(1.21815,3.89658)
+ (1.18844,3.92907)(1.15376,3.96077)(1.11403,3.99173)
+ (1.06914,4.02198)(1.01898,4.05155)(0.963433,4.08048)
+ (0.902342,4.10881)(0.835544,4.13656)
+%%
+\path(0.958412,3.29368)(1.01103,3.3388)(1.05838,3.38244)
+ (1.10059,3.42468)(1.13773,3.4656)(1.1699,3.50525)(1.19715,3.54369)
+ (1.21956,3.58099)(1.23714,3.61719)(1.24993,3.65234)(1.25794,3.6865)
+ (1.26117,3.7197)(1.25961,3.75199)(1.25324,3.78341)(1.242,3.814)
+ (1.22584,3.84379)(1.20471,3.87282)(1.1785,3.90111)(1.14713,3.92871)
+ (1.11049,3.95563)(1.06842,3.98191)(1.02079,4.00758)
+ (0.967431,4.03266)(0.90814,4.05717)(0.842708,4.08114)
+%%
+\path(0.909289,3.36006)(0.964025,3.39834)(1.01381,3.43541)
+ (1.05873,3.47132)(1.09883,3.50614)(1.13418,3.5399)(1.16481,3.57265)
+ (1.19075,3.60442)(1.212,3.63526)(1.22857,3.66521)(1.24045,3.69429)
+ (1.2476,3.72255)(1.25,3.75)(1.24758,3.77668)(1.24029,3.80262)
+ (1.22803,3.82784)(1.21071,3.85236)(1.18821,3.87622)(1.1604,3.89941)
+ (1.12714,3.92198)(1.08825,3.94394)(1.04353,3.9653)
+ (0.992768,3.98607)(0.935726,4.00629)(0.872128,4.02595)
+%%
+\path(0.881704,3.42756)(0.938175,3.45953)(0.990033,3.4905)
+ (1.03733,3.5205)(1.08009,3.54957)(1.11835,3.57774)(1.15212,3.60504)
+ (1.1814,3.63149)(1.20618,3.65713)(1.22644,3.68198)(1.24213,3.70606)
+ (1.25321,3.72939)(1.25961,3.75199)(1.26127,3.77388)
+ (1.25808,3.79508)(1.24993,3.8156)(1.2367,3.83545)(1.21824,3.85464)
+ (1.19439,3.87319)(1.16495,3.89111)(1.12973,3.9084)(1.08847,3.92506)
+ (1.04091,3.94111)(0.986766,3.95654)(0.92569,3.97136)
+%%
+\path(0.874138,3.49573)(0.93211,3.52194)(0.985819,3.54729)
+ (1.03529,3.5718)(1.08054,3.5955)(1.12156,3.61841)(1.15836,3.64055)
+ (1.19091,3.66193)(1.21917,3.68256)(1.24311,3.70247)
+ (1.26267,3.72167)(1.27778,3.74015)(1.28835,3.75794)
+ (1.29429,3.77504)(1.29547,3.79146)(1.29177,3.80719)
+ (1.28303,3.82225)(1.26907,3.83662)(1.2497,3.85032)(1.22469,3.86333)
+ (1.1938,3.87564)(1.15674,3.88726)(1.1132,3.89816)(1.06282,3.90834)(1.0052,3.91777)
+%%
+\path(0.885031,3.56419)(0.944391,3.58516)(0.999849,3.60537)
+ (1.05141,3.62484)(1.09907,3.64357)(1.14282,3.66157)
+ (1.18263,3.67886)(1.21846,3.69544)(1.25027,3.71131)(1.278,3.72648)
+ (1.30157,3.74095)(1.32091,3.75472)(1.3359,3.76779)(1.34643,3.78015)
+ (1.35237,3.7918)(1.35356,3.80272)(1.34982,3.81291)(1.34096,3.82236)
+ (1.32674,3.83103)(1.30692,3.83893)(1.28121,3.84601)
+ (1.24929,3.85226)(1.21078,3.85763)(1.16529,3.8621)(1.11235,3.86562)
+%%
+\path(0.912807,3.63258)(0.973544,3.64883)(1.03075,3.66437)
+ (1.0844,3.67923)(1.1345,3.69339)(1.18102,3.70686)(1.22391,3.71963)
+ (1.26313,3.73171)(1.29863,3.74309)(1.33033,3.75376)
+ (1.35815,3.76372)(1.38199,3.77294)(1.40174,3.78143)
+ (1.41728,3.78915)(1.42844,3.7961)(1.43507,3.80224)(1.43696,3.80755)
+ (1.43391,3.812)(1.42567,3.81556)(1.41195,3.81818)(1.39244,3.81982)
+ (1.36679,3.82042)(1.33458,3.81993)(1.29537,3.81827)(1.24863,3.81537)
+%%
+\path(0.955906,3.70059)(1.01809,3.7126)(1.0771,3.72394)
+ (1.13294,3.73461)(1.18557,3.74461)(1.23497,3.75392)
+ (1.28108,3.76253)(1.32387,3.77044)(1.36326,3.77762)
+ (1.39918,3.78406)(1.43155,3.78974)(1.46025,3.79463)
+ (1.48518,3.79871)(1.5062,3.80194)(1.52314,3.8043)(1.53585,3.80574)
+ (1.54411,3.80622)(1.54771,3.80568)(1.54637,3.80407)
+ (1.53982,3.80133)(1.52771,3.79737)(1.50967,3.79211)
+ (1.48526,3.78546)(1.45399,3.7773)(1.4153,3.76751)
+%%
+\path(1.0128,3.76793)(1.07655,3.77617)(1.13751,3.78375)
+ (1.19566,3.79067)(1.25098,3.7969)(1.30343,3.80242)(1.35296,3.80723)
+ (1.39954,3.81129)(1.44308,3.81459)(1.48353,3.81709)
+ (1.52079,3.81875)(1.55477,3.81956)(1.58534,3.81945)
+ (1.61238,3.81839)(1.63574,3.81633)(1.65524,3.8132)(1.67069,3.80894)
+ (1.68186,3.80347)(1.68849,3.79671)(1.6903,3.78856)(1.68695,3.77892)
+ (1.67805,3.76764)(1.66317,3.7546)(1.64178,3.73963)(1.61332,3.72254)
+%%
+\path(1.57249,2.99581)(1.48135,3.02195)(1.39706,3.04908)
+ (1.31956,3.07714)(1.24877,3.10605)(1.1846,3.13575)(1.12691,3.16617)
+ (1.0756,3.19723)(1.03051,3.22888)(0.991504,3.26105)
+ (0.958412,3.29368)(0.931066,3.3267)(0.909289,3.36006)
+ (0.892898,3.3937)(0.881704,3.42756)(0.875516,3.46158)
+ (0.874138,3.49573)(0.877376,3.52995)(0.885031,3.56419)
+ (0.896906,3.59842)(0.912807,3.63258)(0.932537,3.66665)
+ (0.955906,3.70059)(0.982723,3.73436)(1.0128,3.76793)
+%%
+\path(1.62568,3.16486)(1.54188,3.18217)(1.46419,3.20061)
+ (1.39261,3.22013)(1.32712,3.24068)(1.26766,3.26219)
+ (1.21419,3.28463)(1.16661,3.30793)(1.12486,3.33203)
+ (1.08882,3.35689)(1.05838,3.38244)(1.03343,3.40863)
+ (1.01381,3.43541)(0.999398,3.46271)(0.990033,3.4905)
+ (0.985561,3.51871)(0.985819,3.54729)(0.990638,3.57619)
+ (0.999849,3.60537)(1.01328,3.63478)(1.03075,3.66437)
+ (1.05208,3.69411)(1.0771,3.72394)(1.10564,3.75384)(1.13751,3.78375)
+%%
+\path(1.65613,3.31869)(1.57945,3.32854)(1.50828,3.33955)
+ (1.44265,3.3517)(1.38257,3.36496)(1.32805,3.37929)(1.27907,3.39466)
+ (1.2356,3.41101)(1.1976,3.42832)(1.165,3.44653)(1.13773,3.4656)
+ (1.11571,3.48548)(1.09883,3.50614)(1.087,3.52752)(1.08009,3.54957)
+ (1.07798,3.57225)(1.08054,3.5955)(1.08762,3.61929)(1.09907,3.64357)
+ (1.11475,3.66828)(1.1345,3.69339)(1.15816,3.71885)(1.18557,3.74461)
+ (1.21656,3.77064)(1.25098,3.7969)
+%%
+\path(1.66589,3.45945)(1.59601,3.46292)(1.53114,3.46754)
+ (1.47135,3.4733)(1.41669,3.48018)(1.36718,3.48816)(1.32285,3.49721)
+ (1.2837,3.50732)(1.24971,3.51846)(1.22088,3.53059)(1.19715,3.54369)
+ (1.17849,3.55772)(1.16481,3.57265)(1.15605,3.58843)
+ (1.15212,3.60504)(1.15293,3.62242)(1.15836,3.64055)(1.1683,3.65937)
+ (1.18263,3.67886)(1.20121,3.69896)(1.22391,3.71963)
+ (1.25058,3.74084)(1.28108,3.76253)(1.31526,3.78468)(1.35296,3.80723)
+%%
+\path(1.65656,3.58888)(1.59309,3.58689)(1.53423,3.58598)
+ (1.48007,3.58615)(1.43068,3.5874)(1.38614,3.58973)(1.34648,3.59312)
+ (1.31173,3.59758)(1.28193,3.60309)(1.25706,3.60963)
+ (1.23714,3.61719)(1.22213,3.62574)(1.212,3.63526)(1.2067,3.64574)
+ (1.20618,3.65713)(1.21037,3.66942)(1.21917,3.68256)
+ (1.23251,3.69654)(1.25027,3.71131)(1.27235,3.72684)
+ (1.29863,3.74309)(1.32898,3.76003)(1.36326,3.77762)
+ (1.40135,3.79582)(1.44308,3.81459)
+%%
+\path(1.6294,3.70847)(1.57186,3.70176)(1.51863,3.69603)
+ (1.4698,3.69129)(1.42548,3.68755)(1.38575,3.68482)(1.35067,3.68311)
+ (1.32031,3.68242)(1.29472,3.68275)(1.27392,3.68411)(1.25794,3.6865)
+ (1.24679,3.68989)(1.24045,3.69429)(1.23891,3.69969)
+ (1.24213,3.70606)(1.25007,3.71339)(1.26267,3.72167)
+ (1.27987,3.73086)(1.30157,3.74095)(1.3277,3.75191)(1.35815,3.76372)
+ (1.3928,3.77634)(1.43155,3.78974)(1.47426,3.80389)(1.52079,3.81875)
+%%
+\path(1.58534,3.81945)(1.53323,3.80866)(1.48518,3.79871)
+ (1.44131,3.78962)(1.40174,3.78143)(1.36658,3.77414)(1.3359,3.76779)
+ (1.3098,3.76239)(1.28835,3.75794)(1.27161,3.75448)(1.25961,3.75199)
+ (1.25241,3.7505)(1.25,3.75)(1.25241,3.7505)(1.25961,3.75199)
+ (1.27161,3.75448)(1.28835,3.75794)(1.3098,3.76239)(1.3359,3.76779)
+ (1.36658,3.77414)(1.40174,3.78143)(1.44131,3.78962)
+ (1.48518,3.79871)(1.53323,3.80866)(1.58534,3.81945)
+%%
+\path(1.52509,3.92289)(1.47784,3.90853)(1.43447,3.89487)
+ (1.39512,3.88192)(1.35991,3.86973)(1.32897,3.85833)
+ (1.30242,3.84773)(1.28036,3.83798)(1.26288,3.82909)
+ (1.25007,3.82109)(1.242,3.814)(1.23872,3.80784)(1.24029,3.80262)
+ (1.24673,3.79836)(1.25808,3.79508)(1.27433,3.79277)
+ (1.29547,3.79146)(1.3215,3.79113)(1.35237,3.7918)(1.38804,3.79345)
+ (1.42844,3.7961)(1.47351,3.79972)(1.52314,3.8043)(1.57726,3.80985)(1.63574,3.81633)
+%%
+\path(1.44912,4.01968)(1.40612,4.00221)(1.36687,3.98526)
+ (1.33151,3.96887)(1.3002,3.95308)(1.27308,3.93792)(1.25028,3.92343)
+ (1.23193,3.90964)(1.21815,3.89658)(1.20904,3.8843)(1.20471,3.87282)
+ (1.20524,3.86216)(1.21071,3.85236)(1.22118,3.84345)(1.2367,3.83545)
+ (1.25731,3.82837)(1.28303,3.82225)(1.31387,3.81709)
+ (1.34982,3.81291)(1.39086,3.80973)(1.43696,3.80755)
+ (1.48807,3.80638)(1.54411,3.80622)(1.60502,3.80707)(1.67069,3.80894)
+%%
+\path(1.35773,4.11062)(1.31832,4.09041)(1.28256,4.07055)
+ (1.25061,4.05107)(1.22265,4.03201)(1.19883,4.01341)
+ (1.17931,3.99531)(1.16424,3.97775)(1.15376,3.96077)
+ (1.14802,3.94441)(1.14713,3.92871)(1.15123,3.91369)(1.1604,3.89941)
+ (1.17476,3.8859)(1.19439,3.87319)(1.21935,3.86132)(1.2497,3.85032)
+ (1.28549,3.84021)(1.32674,3.83103)(1.37347,3.82281)
+ (1.42567,3.81556)(1.48331,3.80931)(1.54637,3.80407)
+ (1.61479,3.79987)(1.68849,3.79671)
+%%
+\path(1.25104,4.19638)(1.2145,4.17376)(1.18153,4.1513)
+ (1.15234,4.12903)(1.12708,4.107)(1.10596,4.08523)(1.08914,4.06378)
+ (1.07681,4.04268)(1.06914,4.02198)(1.06629,4.00171)
+ (1.06842,3.98191)(1.07569,3.96264)(1.08825,3.94394)
+ (1.10622,3.92584)(1.12973,3.9084)(1.15889,3.89165)(1.1938,3.87564)
+ (1.23455,3.86042)(1.28121,3.84601)(1.33383,3.83246)
+ (1.39244,3.81982)(1.45707,3.80811)(1.52771,3.79737)
+ (1.60435,3.78763)(1.68695,3.77892)
+%%
+\path(1.129,4.27756)(1.09455,4.25281)(1.06363,4.22802)
+ (1.03643,4.20324)(1.01316,4.17848)(0.994019,4.15379)
+ (0.979215,4.1292)(0.968952,4.10475)(0.963433,4.08048)
+ (0.96286,4.05644)(0.967431,4.03266)(0.977337,4.00919)
+ (0.992768,3.98607)(1.0139,3.96337)(1.04091,3.94111)
+ (1.07396,3.91936)(1.1132,3.89816)(1.15877,3.87757)(1.21078,3.85763)
+ (1.26936,3.8384)(1.33458,3.81993)(1.40653,3.80226)(1.48526,3.78546)
+ (1.5708,3.76955)(1.66317,3.7546)
+%%
+\path(0.991435,4.35469)(0.958234,4.32805)(0.928503,4.30119)
+ (0.902461,4.27411)(0.88033,4.24685)(0.862339,4.21944)
+ (0.848721,4.19189)(0.83971,4.16426)(0.835544,4.13656)
+ (0.836464,4.10884)(0.842708,4.08114)(0.854517,4.05349)
+ (0.872128,4.02595)(0.895776,3.99856)(0.92569,3.97136)
+ (0.962093,3.94442)(1.0052,3.91777)(1.05522,3.89149)
+ (1.11235,3.86562)(1.17676,3.84023)(1.24863,3.81537)(1.3281,3.79111)
+ (1.4153,3.76751)(1.51034,3.74463)(1.61332,3.72254)
+%%
+\path(1.25,3.75)(0.507902,3.59631)
+%%
+\path(0.583844,3.62793)(0.610211,3.63339)
+\path(0.55853,3.61739)(0.611263,3.62831)
+\path(0.533216,3.60685)(0.612315,3.62323)
+\path(0.507902,3.59631)(0.613368,3.61815)
+\path(0.535321,3.59669)(0.61442,3.61307)
+\path(0.56274,3.59707)(0.615472,3.60799)
+\path(0.590158,3.59745)(0.616525,3.60291)
+\path(0.613368,3.61815)(0.609159,3.63847)(0.507902,3.59631)
+ (0.617577,3.59782)(0.613368,3.61815)
+%%
+\path(1.25,3.75)(1.59169,3.33754)
+%%
+\path(1.54694,3.36716)(1.53602,3.38035)
+\path(1.56186,3.35729)(1.54001,3.38366)
+\path(1.57677,3.34742)(1.54401,3.38697)
+\path(1.59169,3.33754)(1.548,3.39028)
+\path(1.58476,3.35404)(1.552,3.39359)
+\path(1.57784,3.37053)(1.556,3.3969)
+\path(1.57091,3.38702)(1.55999,3.40021)
+\path(1.548,3.39028)(1.53202,3.37704)(1.59169,3.33754)
+ (1.56399,3.40352)(1.548,3.39028)
+%%
+\allinethickness{1pt}%
+\color{rgb_980000}%
+\path(2.375,2.625)
+ (2.375,4.875)(0.125,4.875)(0.125,2.625)(2.375,2.625)
+%%
+\allinethickness{0.4pt}%
+\color{rgb_000000}%
+\path
+ (0.927506,0.495809)(1.01757,0.548834)(1.10157,0.602843)
+ (1.17947,0.657739)(1.25125,0.713425)(1.3169,0.769804)
+ (1.37643,0.826777)(1.42989,0.884247)(1.47732,0.94212)
+ (1.51879,1.0003)(1.55438,1.0587)(1.58419,1.11722)(1.60833,1.17579)
+ (1.62692,1.23431)(1.64008,1.2927)(1.64797,1.35089)(1.65074,1.40881)
+ (1.64854,1.46638)(1.64154,1.52354)(1.62991,1.58023)
+ (1.61383,1.63639)(1.59347,1.69196)(1.56902,1.7469)(1.54066,1.80115)(1.50857,1.85469)
+%%
+\path(0.8777,0.611715)(0.959433,0.655571)(1.03581,0.700614)
+ (1.10675,0.74677)(1.17219,0.793961)(1.2321,0.842109)
+ (1.28645,0.891132)(1.33522,0.940947)(1.37842,0.991473)
+ (1.41609,1.04262)(1.44824,1.09432)(1.47494,1.14647)(1.49626,1.199)
+ (1.51227,1.25182)(1.52307,1.30486)(1.52876,1.35804)
+ (1.52946,1.41127)(1.52529,1.46449)(1.51639,1.51763)(1.5029,1.57062)
+ (1.48496,1.62339)(1.46273,1.67588)(1.43637,1.72802)
+ (1.40604,1.77978)(1.37192,1.83108)
+%%
+\path(0.850911,0.713606)(0.924836,0.749547)(0.993963,0.786789)
+ (1.05819,0.825281)(1.11743,0.864964)(1.17161,0.905781)
+ (1.22068,0.947667)(1.26458,0.990557)(1.3033,1.03438)
+ (1.33682,1.07908)(1.36514,1.12456)(1.38829,1.17077)
+ (1.40628,1.21763)(1.41917,1.26507)(1.42702,1.313)(1.42989,1.36136)
+ (1.42787,1.41007)(1.42105,1.45906)(1.40954,1.50826)
+ (1.39346,1.55759)(1.37292,1.607)(1.34805,1.6564)(1.31901,1.70574)
+ (1.28592,1.75496)(1.24895,1.80399)
+%%
+\path(0.844563,0.803527)(0.911256,0.832549)(0.97359,0.862922)
+ (1.03145,0.894614)(1.08472,0.927588)(1.13332,0.961802)
+ (1.17715,0.997213)(1.21616,1.03377)(1.25029,1.07143)
+ (1.27949,1.11013)(1.30374,1.14982)(1.32302,1.19043)
+ (1.33734,1.23191)(1.3467,1.27419)(1.35115,1.31721)(1.35071,1.3609)
+ (1.34544,1.40519)(1.33541,1.45002)(1.32069,1.49531)
+ (1.30138,1.54101)(1.27758,1.58703)(1.24938,1.63332)(1.21692,1.6798)
+ (1.18032,1.72642)(1.13972,1.7731)
+%%
+\path(0.856643,0.883119)(0.916712,0.906022)(0.972764,0.930277)
+ (1.02467,0.955868)(1.0723,0.982778)(1.11556,1.01098)
+ (1.15433,1.04046)(1.18853,1.07117)(1.21807,1.10309)
+ (1.24291,1.13617)(1.26297,1.17038)(1.27822,1.20567)(1.28864,1.242)
+ (1.2942,1.27931)(1.29492,1.31754)(1.29079,1.35666)(1.28185,1.39658)
+ (1.26815,1.43727)(1.24972,1.47865)(1.22664,1.52067)
+ (1.19897,1.56326)(1.16682,1.60635)(1.13027,1.64988)
+ (1.08945,1.69379)(1.04445,1.73802)
+%%
+\path(0.885577,0.953717)(0.93965,0.971145)(0.989968,0.989888)
+ (1.03639,1.00995)(1.07878,1.03132)(1.11702,1.05399)
+ (1.15098,1.07797)(1.18055,1.10322)(1.20565,1.12975)
+ (1.22618,1.15751)(1.24206,1.1865)(1.25323,1.21667)(1.25963,1.24801)
+ (1.26123,1.28046)(1.258,1.314)(1.24993,1.34858)(1.23701,1.38415)
+ (1.21926,1.42067)(1.1967,1.45809)(1.16937,1.49635)(1.13734,1.5354)
+ (1.10065,1.57517)(1.0594,1.61562)(1.01366,1.65667)(0.963551,1.69828)
+%%
+\path(0.930139,1.01641)(0.97886,1.02889)(1.02402,1.04261)
+ (1.06548,1.05759)(1.10308,1.07385)(1.13669,1.09139)
+ (1.16618,1.11021)(1.19141,1.13032)(1.21227,1.15172)(1.22866,1.1744)
+ (1.24046,1.19834)(1.2476,1.22355)(1.25,1.25)(1.24758,1.27767)
+ (1.2403,1.30654)(1.22812,1.33658)(1.211,1.36775)(1.18893,1.40004)
+ (1.16191,1.43338)(1.12996,1.46775)(1.0931,1.50311)(1.05137,1.53939)
+ (1.00483,1.57655)(0.95355,1.61455)(0.897604,1.65331)
+%%
+\path(0.989383,1.07211)(1.03341,1.08005)(1.07402,1.08915)
+ (1.11107,1.09943)(1.14439,1.11092)(1.17383,1.12362)
+ (1.19925,1.13757)(1.22049,1.15278)(1.23743,1.16926)
+ (1.24993,1.18702)(1.25787,1.20606)(1.26114,1.22639)
+ (1.25963,1.24801)(1.25325,1.2709)(1.24192,1.29508)(1.22557,1.32052)
+ (1.20414,1.3472)(1.17758,1.37511)(1.14587,1.40423)(1.10898,1.43452)
+ (1.06692,1.46596)(1.0197,1.49852)(0.967353,1.53214)
+ (0.909912,1.5668)(0.84744,1.60244)
+%%
+\path(1.0626,1.12156)(1.1026,1.12531)(1.1393,1.1301)
+ (1.17253,1.13598)(1.20212,1.14296)(1.22791,1.15108)
+ (1.24973,1.16037)(1.26742,1.17086)(1.28083,1.18256)(1.2898,1.19551)
+ (1.29418,1.20972)(1.29384,1.22521)(1.28864,1.242)(1.27846,1.26009)
+ (1.26319,1.27949)(1.24272,1.30021)(1.21697,1.32225)(1.18585,1.3456)
+ (1.14931,1.37026)(1.10728,1.39622)(1.05973,1.42347)
+ (1.00664,1.45198)(0.948007,1.48173)(0.883841,1.51269)(0.81417,1.54484)
+%%
+\path(1.14927,1.16539)(1.18593,1.16521)(1.21938,1.16596)
+ (1.24942,1.16766)(1.27589,1.17035)(1.2986,1.17407)(1.31737,1.17886)
+ (1.33202,1.18475)(1.34238,1.19178)(1.34825,1.19998)
+ (1.34948,1.20938)(1.3459,1.22002)(1.33734,1.23191)(1.32364,1.2451)
+ (1.30466,1.25959)(1.28026,1.27541)(1.2503,1.29259)(1.21467,1.31112)
+ (1.17326,1.33103)(1.12598,1.35233)(1.07274,1.375)(1.01349,1.39906)
+ (0.948177,1.4245)(0.876769,1.45131)(0.799255,1.47948)
+%%
+\path(1.24904,1.20411)(1.28307,1.20023)(1.31396,1.19712)
+ (1.3415,1.19483)(1.3655,1.19339)(1.38577,1.19284)(1.4021,1.19323)
+ (1.41431,1.19461)(1.42218,1.197)(1.42551,1.20046)(1.4241,1.20502)
+ (1.41776,1.21074)(1.40628,1.21763)(1.38947,1.22576)
+ (1.36714,1.23514)(1.33911,1.24583)(1.3052,1.25784)(1.26524,1.27122)
+ (1.21907,1.28599)(1.16656,1.30219)(1.10756,1.31982)
+ (1.04196,1.33891)(0.969654,1.35948)(0.890556,1.38154)(0.804598,1.4051)
+%%
+\path(1.3617,1.23817)(1.39385,1.23075)(1.4229,1.22394)
+ (1.44865,1.21779)(1.47089,1.21232)(1.48943,1.2076)(1.50402,1.20365)
+ (1.51446,1.20053)(1.52052,1.19829)(1.52196,1.19696)
+ (1.51856,1.19661)(1.51007,1.19727)(1.49626,1.199)(1.47689,1.20184)
+ (1.45173,1.20585)(1.42053,1.21107)(1.38308,1.21755)
+ (1.33914,1.22534)(1.28849,1.23448)(1.23092,1.24502)
+ (1.16623,1.25701)(1.09423,1.27047)(1.01474,1.28546)
+ (0.927602,1.30199)(0.83267,1.32012)
+%%
+\path(1.4872,1.26793)(1.51821,1.2571)(1.5462,1.2467)
+ (1.57093,1.23677)(1.5922,1.22735)(1.60978,1.21849)(1.62342,1.21022)
+ (1.63288,1.20259)(1.6379,1.19565)(1.63823,1.18945)(1.6336,1.18404)
+ (1.62373,1.17947)(1.60833,1.17579)(1.58713,1.17306)
+ (1.55982,1.17134)(1.52613,1.17068)(1.48574,1.17114)
+ (1.43836,1.17279)(1.3837,1.17569)(1.32146,1.17988)(1.25135,1.18545)
+ (1.17308,1.19243)(1.08639,1.20091)(0.99101,1.21092)(0.886683,1.22254)
+%%
+\path(0.927506,0.495809)(0.899539,0.55566)(0.8777,0.611715)
+ (0.861604,0.664274)(0.850911,0.713606)(0.845319,0.759952)
+ (0.844563,0.803527)(0.848407,0.844524)(0.856643,0.883119)
+ (0.869088,0.919469)(0.885577,0.953717)(0.90597,0.985993)
+ (0.930139,1.01641)(0.957975,1.04509)(0.989383,1.07211)
+ (1.02428,1.09758)(1.0626,1.12156)(1.10428,1.14414)(1.14927,1.16539)
+ (1.19753,1.18536)(1.24904,1.20411)(1.30377,1.2217)(1.3617,1.23817)
+ (1.42285,1.25356)(1.4872,1.26793)
+%%
+\path(1.10157,0.602843)(1.06552,0.653288)(1.03581,0.700614)
+ (1.01206,0.745046)(0.993963,0.786789)(0.981224,0.826026)
+ (0.97359,0.862922)(0.970837,0.897627)(0.972764,0.930277)
+ (0.979193,0.960993)(0.989968,0.989888)(1.00495,1.01706)
+ (1.02402,1.04261)(1.04708,1.06661)(1.07402,1.08915)
+ (1.10479,1.11029)(1.1393,1.1301)(1.17751,1.14864)(1.21938,1.16596)
+ (1.26487,1.1821)(1.31396,1.19712)(1.36664,1.21106)(1.4229,1.22394)
+ (1.48275,1.23581)(1.5462,1.2467)
+%%
+\path(1.25125,0.713425)(1.20852,0.754966)(1.17219,0.793961)
+ (1.14193,0.830577)(1.11743,0.864964)(1.09844,0.89726)
+ (1.08472,0.927588)(1.07607,0.95606)(1.0723,0.982778)
+ (1.07325,1.00784)(1.07878,1.03132)(1.08876,1.0533)(1.10308,1.07385)
+ (1.12165,1.09304)(1.14439,1.11092)(1.17123,1.12754)
+ (1.20212,1.14296)(1.23702,1.15721)(1.27589,1.17035)
+ (1.31872,1.18239)(1.3655,1.19339)(1.41622,1.20335)(1.47089,1.21232)
+ (1.52955,1.22032)(1.5922,1.22735)
+%%
+\path(1.37643,0.826777)(1.32827,0.85999)(1.28645,0.891132)
+ (1.25067,0.920321)(1.22068,0.947667)(1.19624,0.973268)
+ (1.17715,0.997213)(1.16324,1.01959)(1.15433,1.04046)
+ (1.15028,1.0599)(1.15098,1.07797)(1.15631,1.09472)(1.16618,1.11021)
+ (1.18051,1.12448)(1.19925,1.13757)(1.22233,1.14953)
+ (1.24973,1.16037)(1.28142,1.17014)(1.31737,1.17886)(1.3576,1.18655)
+ (1.4021,1.19323)(1.4509,1.19893)(1.50402,1.20365)(1.56151,1.20741)(1.62342,1.21022)
+%%
+\path(1.47732,0.94212)(1.42478,0.967642)(1.37842,0.991473)
+ (1.338,1.01369)(1.3033,1.03438)(1.27412,1.05361)(1.25029,1.07143)
+ (1.23165,1.08791)(1.21807,1.10309)(1.20944,1.11702)
+ (1.20565,1.12975)(1.20662,1.1413)(1.21227,1.15172)(1.22256,1.16103)
+ (1.23743,1.16926)(1.25686,1.17643)(1.28083,1.18256)
+ (1.30933,1.18768)(1.34238,1.19178)(1.37998,1.19488)(1.42218,1.197)
+ (1.469,1.19814)(1.52052,1.19829)(1.57679,1.19746)(1.6379,1.19565)
+%%
+\path(1.55438,1.0587)(1.49833,1.07721)(1.44824,1.09432)
+ (1.4039,1.11009)(1.36514,1.12456)(1.3318,1.13779)(1.30374,1.14982)
+ (1.28083,1.16067)(1.26297,1.17038)(1.25007,1.17898)(1.24206,1.1865)
+ (1.23887,1.19294)(1.24046,1.19834)(1.2468,1.20271)(1.25787,1.20606)
+ (1.27366,1.20839)(1.29418,1.20972)(1.31944,1.21005)
+ (1.34948,1.20938)(1.38435,1.20771)(1.4241,1.20502)(1.46881,1.20133)
+ (1.51856,1.19661)(1.57345,1.19085)(1.6336,1.18404)
+%%
+\path(1.60833,1.17579)(1.54946,1.18798)(1.49626,1.199)
+ (1.44858,1.20887)(1.40628,1.21763)(1.36924,1.22531)
+ (1.33734,1.23191)(1.3105,1.23747)(1.28864,1.242)(1.2717,1.24551)
+ (1.25963,1.24801)(1.25241,1.2495)(1.25,1.25)(1.25241,1.2495)
+ (1.25963,1.24801)(1.2717,1.24551)(1.28864,1.242)(1.3105,1.23747)
+ (1.33734,1.23191)(1.36924,1.22531)(1.40628,1.21763)
+ (1.44858,1.20887)(1.49626,1.199)(1.54946,1.18798)(1.60833,1.17579)
+%%
+\path(1.64008,1.2927)(1.5789,1.29929)(1.52307,1.30486)
+ (1.47248,1.30943)(1.42702,1.313)(1.3866,1.31559)(1.35115,1.31721)
+ (1.3206,1.31786)(1.29492,1.31754)(1.27406,1.31626)(1.258,1.314)
+ (1.24675,1.31076)(1.2403,1.30654)(1.23868,1.30132)(1.24192,1.29508)
+ (1.25007,1.28781)(1.26319,1.27949)(1.28135,1.27009)
+ (1.30466,1.25959)(1.33321,1.24795)(1.36714,1.23514)
+ (1.40659,1.22112)(1.45173,1.20585)(1.50274,1.18927)(1.55982,1.17134)
+%%
+\path(1.65074,1.40881)(1.5876,1.4105)(1.52946,1.41127)
+ (1.47624,1.41113)(1.42787,1.41007)(1.38428,1.40809)
+ (1.34544,1.40519)(1.3113,1.40136)(1.28185,1.39658)(1.25709,1.39085)
+ (1.23701,1.38415)(1.22163,1.37646)(1.211,1.36775)(1.20515,1.35801)
+ (1.20414,1.3472)(1.20805,1.33529)(1.21697,1.32225)(1.23101,1.30803)
+ (1.2503,1.29259)(1.27497,1.27588)(1.3052,1.25784)(1.34116,1.23842)
+ (1.38308,1.21755)(1.43118,1.19515)(1.48574,1.17114)
+%%
+\path(1.64154,1.52354)(1.57665,1.52102)(1.51639,1.51763)
+ (1.4607,1.51338)(1.40954,1.50826)(1.36288,1.50224)(1.32069,1.49531)
+ (1.28297,1.48746)(1.24972,1.47865)(1.22095,1.46887)(1.1967,1.45809)
+ (1.177,1.44627)(1.16191,1.43338)(1.15151,1.41938)(1.14587,1.40423)
+ (1.14509,1.38787)(1.14931,1.37026)(1.15864,1.35134)
+ (1.17326,1.33103)(1.19333,1.30928)(1.21907,1.28599)(1.2507,1.26109)
+ (1.28849,1.23448)(1.33271,1.20605)(1.3837,1.17569)
+%%
+\path(1.61383,1.63639)(1.54727,1.6303)(1.48496,1.62339)
+ (1.42684,1.61563)(1.37292,1.607)(1.32316,1.59747)(1.27758,1.58703)
+ (1.23617,1.57563)(1.19897,1.56326)(1.16601,1.54986)(1.13734,1.5354)
+ (1.11301,1.51983)(1.0931,1.50311)(1.0777,1.48517)(1.06692,1.46596)
+ (1.06088,1.44542)(1.05973,1.42347)(1.06362,1.40002)(1.07274,1.375)
+ (1.08731,1.3483)(1.10756,1.31982)(1.13377,1.28943)(1.16623,1.25701)
+ (1.20529,1.2224)(1.25135,1.18545)
+%%
+\path(1.56902,1.7469)(1.50078,1.73787)(1.43637,1.72802)
+ (1.37578,1.71732)(1.31901,1.70574)(1.26605,1.69325)(1.21692,1.6798)
+ (1.17165,1.66536)(1.13027,1.64988)(1.09284,1.63332)(1.0594,1.61562)
+ (1.03003,1.59672)(1.00483,1.57655)(0.983899,1.55505)
+ (0.967353,1.53214)(0.955336,1.50773)(0.948007,1.48173)
+ (0.945551,1.45402)(0.948177,1.4245)(0.956122,1.39304)
+ (0.969654,1.35948)(0.989078,1.32368)(1.01474,1.28546)
+ (1.04703,1.24461)(1.08639,1.20091)
+%%
+\path(1.50857,1.85469)(1.43853,1.8433)(1.37192,1.83108)
+ (1.30872,1.81799)(1.24895,1.80399)(1.1926,1.78904)(1.13972,1.7731)
+ (1.09032,1.75611)(1.04445,1.73802)(1.00217,1.71876)
+ (0.963551,1.69828)(0.928663,1.67649)(0.897604,1.65331)
+ (0.870487,1.62866)(0.84744,1.60244)(0.828611,1.57454)
+ (0.81417,1.54484)(0.80431,1.5132)(0.799255,1.47948)
+ (0.799255,1.44351)(0.804598,1.4051)(0.815612,1.36405)
+ (0.83267,1.32012)(0.856198,1.27305)(0.886683,1.22254)
+%%
+\path(1.25,1.25)(0.600163,1.38459)
+%%
+\path(0.68242,1.38345)(0.708786,1.37799)
+\path(0.655001,1.38383)(0.707734,1.37291)
+\path(0.627582,1.38421)(0.706681,1.36782)
+\path(0.600163,1.38459)(0.705629,1.36274)
+\path(0.625477,1.37404)(0.704577,1.35766)
+\path(0.650792,1.3635)(0.703524,1.35258)
+\path(0.676106,1.35296)(0.702472,1.3475)
+\path(0.705629,1.36274)(0.709838,1.38307)(0.600163,1.38459)
+ (0.70142,1.34242)(0.705629,1.36274)
+%%
+\path(1.25,1.25)(0.90831,0.837544)
+%%
+\path(0.929086,0.887024)(0.940008,0.900207)
+\path(0.922161,0.870531)(0.944004,0.896897)
+\path(0.915235,0.854037)(0.947999,0.893587)
+\path(0.90831,0.837544)(0.951995,0.890277)
+\path(0.923227,0.847417)(0.955991,0.886966)
+\path(0.938144,0.85729)(0.959987,0.883656)
+\path(0.953061,0.867163)(0.963983,0.880346)
+\path(0.951995,0.890277)(0.936012,0.903518)(0.90831,0.837544)
+ (0.967979,0.877035)(0.951995,0.890277)
+%%
+\allinethickness{1pt}%
+\color{rgb_980000}%
+\path(2.375,0.125)
+ (2.375,2.375)(0.125,2.375)(0.125,0.125)(2.375,0.125)
+%%
+\allinethickness{0.4pt}%
+\color{rgb_000000}%
+\path(4.32177,5.61398)
+ (4.31023,5.69921)(4.29571,5.77929)(4.27832,5.85466)
+ (4.25813,5.92574)(4.23521,5.99286)(4.20959,6.05635)(4.1813,6.11649)
+ (4.15036,6.17352)(4.11676,6.22769)(4.0805,6.27919)(4.04155,6.32822)
+ (3.99986,6.37493)(3.9554,6.41949)(3.90809,6.46204)(3.85786,6.50269)
+ (3.80463,6.54158)(3.7483,6.5788)(3.68874,6.61445)(3.62584,6.64863)
+ (3.55945,6.68142)(3.48941,6.71289)(3.41554,6.74311)
+ (3.33764,6.77214)(3.25551,6.80006)
+%%
+\path(4.13841,5.61911)(4.13845,5.69921)(4.13499,5.7746)
+ (4.12815,5.84568)(4.11806,5.91278)(4.10479,5.97624)
+ (4.08842,6.03631)(4.06899,6.09326)(4.04655,6.14732)
+ (4.02109,6.19867)(3.99263,6.24751)(3.96116,6.29401)
+ (3.92663,6.33832)(3.88902,6.38056)(3.84826,6.42088)
+ (3.80428,6.45939)(3.75699,6.49618)(3.70631,6.53136)
+ (3.65209,6.56502)(3.59422,6.59722)(3.53254,6.62806)
+ (3.46687,6.65758)(3.39703,6.68587)(3.32279,6.71296)(3.24391,6.73891)
+%%
+\path(3.97074,5.63438)(3.98145,5.70897)(3.98827,5.77929)
+ (3.99133,5.84568)(3.99078,5.90844)(3.98672,5.96784)
+ (3.97923,6.02413)(3.96839,6.07752)(3.95423,6.12822)
+ (3.93678,6.17639)(3.91605,6.22222)(3.89204,6.26583)
+ (3.86473,6.30736)(3.83407,6.34695)(3.80002,6.38469)(3.7625,6.42068)
+ (3.72142,6.45502)(3.67668,6.4878)(3.62816,6.51909)(3.57571,6.54895)
+ (3.51917,6.57745)(3.45835,6.60465)(3.39303,6.63059)
+ (3.32299,6.65533)(3.24794,6.6789)
+%%
+\path(3.82031,5.65946)(3.84076,5.72828)(3.85704,5.79325)
+ (3.8693,5.85466)(3.87769,5.91278)(3.88234,5.96784)(3.88333,6.02004)
+ (3.88074,6.06957)(3.87462,6.1166)(3.86501,6.16129)(3.85192,6.20378)
+ (3.83536,6.24419)(3.81529,6.28265)(3.79169,6.31924)
+ (3.76451,6.35408)(3.73366,6.38723)(3.69906,6.41879)
+ (3.66061,6.44883)(3.61816,6.47739)(3.57157,6.50455)
+ (3.52065,6.53035)(3.46521,6.55484)(3.40502,6.57805)
+ (3.33981,6.60002)(3.26928,6.62077)
+%%
+\path(3.68828,5.69383)(3.71752,5.75673)(3.74242,5.81619)
+ (3.76316,5.87245)(3.77989,5.92574)(3.79272,5.97624)
+ (3.80176,6.02413)(3.80708,6.06957)(3.80875,6.1127)(3.80678,6.15367)
+ (3.80122,6.19257)(3.79205,6.22953)(3.77926,6.26463)
+ (3.76282,6.29797)(3.74266,6.32962)(3.71872,6.35966)
+ (3.69089,6.38814)(3.65907,6.41512)(3.62312,6.44066)
+ (3.58287,6.46478)(3.53814,6.48754)(3.4887,6.50895)(3.43432,6.52905)
+ (3.37469,6.54785)(3.3095,6.56536)
+%%
+\path(3.57536,5.73678)(3.61246,5.79374)(3.64519,5.84764)
+ (3.6737,5.89868)(3.69814,5.94703)(3.71864,5.99286)(3.73529,6.03631)
+ (3.74816,6.07752)(3.75733,6.1166)(3.76282,6.15367)(3.76466,6.18881)
+ (3.76284,6.22212)(3.75735,6.25368)(3.74816,6.28355)(3.7352,6.3118)
+ (3.71839,6.33848)(3.69766,6.36364)(3.67286,6.38731)
+ (3.64387,6.40955)(3.6105,6.43036)(3.57256,6.44976)(3.52982,6.46778)
+ (3.48202,6.48442)(3.42884,6.49968)(3.36994,6.51354)
+%%
+\path(3.48182,5.78746)(3.52593,5.83858)(3.5657,5.88698)
+ (3.6013,5.93282)(3.63287,5.97624)(3.66052,6.01738)(3.68434,6.05635)
+ (3.70443,6.09326)(3.72082,6.12822)(3.73357,6.16129)
+ (3.74268,6.19257)(3.74817,6.22212)(3.75,6.25)(3.74815,6.27626)
+ (3.74256,6.30096)(3.73315,6.32411)(3.71983,6.34577)
+ (3.70247,6.36595)(3.68092,6.38466)(3.65502,6.40193)
+ (3.62455,6.41774)(3.58928,6.43209)(3.54893,6.44498)
+ (3.50317,6.45637)(3.45165,6.46623)
+%%
+\path(3.40754,5.84494)(3.45785,5.89041)(3.50396,5.93346)
+ (3.54601,5.97421)(3.58414,6.0128)(3.61846,6.04931)(3.64906,6.08384)
+ (3.67601,6.11649)(3.69937,6.14732)(3.71917,6.17639)
+ (3.73544,6.20378)(3.74817,6.22953)(3.75735,6.25368)
+ (3.76295,6.27626)(3.76491,6.29732)(3.76315,6.31686)(3.75758,6.3349)
+ (3.74809,6.35145)(3.73451,6.36651)(3.71669,6.38006)(3.69441,6.3921)
+ (3.66744,6.40258)(3.63549,6.41148)(3.59823,6.41875)(3.55529,6.42432)
+%%
+\path(3.352,5.90822)(3.40781,5.9483)(3.45961,5.98623)
+ (3.50754,6.0221)(3.55172,6.05601)(3.59226,6.08804)(3.62924,6.11826)
+ (3.66274,6.14674)(3.69281,6.17352)(3.71948,6.19867)
+ (3.74278,6.22222)(3.76271,6.24419)(3.77926,6.26463)(3.7924,6.28355)
+ (3.80208,6.30096)(3.80823,6.31686)(3.81077,6.33125)
+ (3.80957,6.34412)(3.8045,6.35546)(3.79539,6.36522)(3.78206,6.37338)
+ (3.76426,6.37987)(3.74171,6.38464)(3.7141,6.3876)(3.68106,6.38866)
+%%
+\path(3.31441,5.97626)(3.37509,6.01129)(3.432,6.04439)
+ (3.48528,6.07564)(3.53504,6.10512)(3.58139,6.13288)(3.6244,6.15897)
+ (3.66415,6.18345)(3.70069,6.20635)(3.73405,6.22769)
+ (3.76427,6.24751)(3.79135,6.26583)(3.81529,6.28265)
+ (3.83606,6.29797)(3.85363,6.3118)(3.86794,6.32411)(3.8789,6.3349)
+ (3.88643,6.34412)(3.89039,6.35175)(3.89064,6.35772)
+ (3.88701,6.36198)(3.87927,6.36444)(3.86717,6.36501)
+ (3.85042,6.36359)(3.82865,6.36003)
+%%
+\path(3.29368,6.04807)(3.35869,6.07842)(3.42021,6.10703)
+ (3.47839,6.13398)(3.53332,6.1593)(3.5851,6.18306)(3.63381,6.20527)
+ (3.67954,6.22597)(3.72232,6.24518)(3.7622,6.26292)(3.79922,6.27919)
+ (3.8334,6.29401)(3.86473,6.30736)(3.89321,6.31924)(3.91881,6.32962)
+ (3.94149,6.33848)(3.9612,6.34577)(3.97785,6.35145)(3.99135,6.35546)
+ (4.00158,6.35772)(4.00838,6.35815)(4.01158,6.35663)
+ (4.01096,6.35306)(4.00627,6.34727)(3.99719,6.33908)
+%%
+\path(3.28857,6.12268)(3.35743,6.14874)(3.42314,6.17324)
+ (3.4858,6.19622)(3.54552,6.21772)(3.60241,6.23776)(3.65653,6.25637)
+ (3.70797,6.27356)(3.75678,6.28934)(3.80302,6.30372)
+ (3.84672,6.31668)(3.88792,6.32822)(3.92663,6.33832)
+ (3.96287,6.34695)(3.99662,6.35408)(4.02787,6.35966)
+ (4.05658,6.36364)(4.08272,6.36595)(4.10621,6.36651)
+ (4.12697,6.36522)(4.14491,6.36198)(4.15988,6.35663)
+ (4.17173,6.34904)(4.18026,6.33901)(4.18525,6.32631)
+%%
+\path(3.29768,6.19917)(3.37001,6.22136)(3.43952,6.24213)
+ (3.50631,6.26151)(3.57051,6.27953)(3.63219,6.29619)
+ (3.69145,6.31151)(3.74836,6.32549)(3.80299,6.33812)(3.85541,6.3494)
+ (3.90567,6.35932)(3.95381,6.36784)(3.99986,6.37493)
+ (4.04387,6.38056)(4.08585,6.38469)(4.1258,6.38723)(4.16374,6.38814)
+ (4.19966,6.38731)(4.23353,6.38466)(4.26532,6.38006)
+ (4.29499,6.37338)(4.32247,6.36444)(4.34769,6.35306)
+ (4.37053,6.33901)(4.39086,6.32202)
+%%
+\path(4.32177,5.61398)(4.22824,5.61526)(4.13841,5.61911)
+ (4.0525,5.62549)(3.97074,5.63438)(3.89329,5.64572)(3.82031,5.65946)
+ (3.75194,5.67553)(3.68828,5.69383)(3.6294,5.71428)(3.57536,5.73678)
+ (3.52617,5.76121)(3.48182,5.78746)(3.4423,5.81541)(3.40754,5.84494)
+ (3.37747,5.87592)(3.352,5.90822)(3.33103,5.94171)(3.31441,5.97626)
+ (3.30201,6.01176)(3.29368,6.04807)(3.28926,6.08509)
+ (3.28857,6.12268)(3.29144,6.16074)(3.29768,6.19917)
+%%
+\path(4.29571,5.77929)(4.2137,5.77577)(4.13499,5.7746)
+ (4.05978,5.77577)(3.98827,5.77929)(3.92064,5.78512)
+ (3.85704,5.79325)(3.79759,5.80362)(3.74242,5.81619)(3.6916,5.83089)
+ (3.64519,5.84764)(3.60322,5.86637)(3.5657,5.88698)(3.53263,5.90938)
+ (3.50396,5.93346)(3.47965,5.95911)(3.45961,5.98623)
+ (3.44377,6.01469)(3.432,6.04439)(3.42419,6.07521)(3.42021,6.10703)
+ (3.41991,6.13974)(3.42314,6.17324)(3.42973,6.2074)(3.43952,6.24213)
+%%
+\path(4.25813,5.92574)(4.18659,5.9182)(4.11806,5.91278)
+ (4.05273,5.90952)(3.99078,5.90844)(3.93239,5.90952)
+ (3.87769,5.91278)(3.82683,5.9182)(3.77989,5.92574)(3.73697,5.93537)
+ (3.69814,5.94703)(3.66343,5.96068)(3.63287,5.97624)
+ (3.60644,5.99364)(3.58414,6.0128)(3.56592,6.03362)(3.55172,6.05601)
+ (3.54146,6.07988)(3.53504,6.10512)(3.53237,6.13163)(3.53332,6.1593)
+ (3.53775,6.18804)(3.54552,6.21772)(3.55649,6.24825)(3.57051,6.27953)
+%%
+\path(4.20959,6.05635)(4.1476,6.04537)(4.08842,6.03631)
+ (4.03224,6.02922)(3.97923,6.02413)(3.92955,6.02106)
+ (3.88333,6.02004)(3.8407,6.02106)(3.80176,6.02413)(3.7666,6.02922)
+ (3.73529,6.03631)(3.70786,6.04537)(3.68434,6.05635)(3.66475,6.0692)
+ (3.64906,6.08384)(3.63724,6.10022)(3.62924,6.11826)
+ (3.62499,6.13787)(3.6244,6.15897)(3.62738,6.18147)(3.63381,6.20527)
+ (3.64358,6.23027)(3.65653,6.25637)(3.67254,6.28349)(3.69145,6.31151)
+%%
+\path(4.15036,6.17352)(4.0971,6.15956)(4.04655,6.14732)
+ (3.99887,6.13685)(3.95423,6.12822)(3.91277,6.12146)(3.87462,6.1166)
+ (3.83992,6.11368)(3.80875,6.1127)(3.7812,6.11368)(3.75733,6.1166)
+ (3.7372,6.12146)(3.72082,6.12822)(3.70822,6.13685)(3.69937,6.14732)
+ (3.69425,6.15956)(3.69281,6.17352)(3.69498,6.18914)
+ (3.70069,6.20635)(3.70984,6.22505)(3.72232,6.24518)
+ (3.73801,6.26664)(3.75678,6.28934)(3.77849,6.3132)(3.80299,6.33812)
+%%
+\path(4.0805,6.27919)(4.03524,6.26259)(3.99263,6.24751)
+ (3.95285,6.23403)(3.91605,6.22222)(3.88236,6.21212)
+ (3.85192,6.20378)(3.82484,6.19726)(3.80122,6.19257)
+ (3.78114,6.18975)(3.76466,6.18881)(3.75183,6.18975)
+ (3.74268,6.19257)(3.73722,6.19726)(3.73544,6.20378)
+ (3.73731,6.21212)(3.74278,6.22222)(3.7518,6.23403)(3.76427,6.24751)
+ (3.78012,6.26259)(3.79922,6.27919)(3.82147,6.29725)
+ (3.84672,6.31668)(3.87484,6.3374)(3.90567,6.35932)
+%%
+\path(3.99986,6.37493)(3.96191,6.35595)(3.92663,6.33832)
+ (3.89419,6.32209)(3.86473,6.30736)(3.83839,6.29419)
+ (3.81529,6.28265)(3.79555,6.27278)(3.77926,6.26463)
+ (3.76651,6.25825)(3.75735,6.25368)(3.75184,6.25092)(3.75,6.25)
+ (3.75184,6.25092)(3.75735,6.25368)(3.76651,6.25825)
+ (3.77926,6.26463)(3.79555,6.27278)(3.81529,6.28265)
+ (3.83839,6.29419)(3.86473,6.30736)(3.89419,6.32209)
+ (3.92663,6.33832)(3.96191,6.35595)(3.99986,6.37493)
+%%
+\path(3.90809,6.46204)(3.8768,6.44088)(3.84826,6.42088)
+ (3.82261,6.40212)(3.80002,6.38469)(3.78061,6.36864)
+ (3.76451,6.35408)(3.75182,6.34105)(3.74266,6.32962)(3.7371,6.31986)
+ (3.7352,6.3118)(3.73701,6.30549)(3.74256,6.30096)(3.75186,6.29823)
+ (3.76491,6.29732)(3.78166,6.29823)(3.80208,6.30096)(3.8261,6.30549)
+ (3.85363,6.3118)(3.88457,6.31986)(3.91881,6.32962)(3.9562,6.34105)
+ (3.99662,6.35408)(4.03989,6.36864)(4.08585,6.38469)
+%%
+\path(3.80463,6.54158)(3.77938,6.5184)(3.75699,6.49618)
+ (3.73762,6.47503)(3.72142,6.45502)(3.70853,6.43625)
+ (3.69906,6.41879)(3.69315,6.40273)(3.69089,6.38814)
+ (3.69237,6.37509)(3.69766,6.36364)(3.7068,6.35385)(3.71983,6.34577)
+ (3.73676,6.33944)(3.75758,6.3349)(3.78227,6.33216)(3.81077,6.33125)
+ (3.84301,6.33216)(3.8789,6.3349)(3.91834,6.33944)(3.9612,6.34577)
+ (4.00733,6.35385)(4.05658,6.36364)(4.10878,6.37509)(4.16374,6.38814)
+%%
+\path(3.68874,6.61445)(3.66891,6.58934)(3.65209,6.56502)
+ (3.63846,6.54157)(3.62816,6.51909)(3.62135,6.49766)
+ (3.61816,6.47739)(3.61871,6.45836)(3.62312,6.44066)
+ (3.63148,6.42436)(3.64387,6.40955)(3.66033,6.39629)
+ (3.68092,6.38466)(3.70565,6.37472)(3.73451,6.36651)
+ (3.76748,6.36008)(3.8045,6.35546)(3.8455,6.35268)(3.89039,6.35175)
+ (3.93905,6.35268)(3.99135,6.35546)(4.04713,6.36008)
+ (4.10621,6.36651)(4.16841,6.37472)(4.23353,6.38466)
+%%
+\path(3.55945,6.68142)(3.54439,6.65444)(3.53254,6.62806)
+ (3.52408,6.60236)(3.51917,6.57745)(3.51798,6.55341)
+ (3.52065,6.53035)(3.52733,6.50836)(3.53814,6.48754)
+ (3.55319,6.46798)(3.57256,6.44976)(3.59633,6.43299)
+ (3.62455,6.41774)(3.65725,6.40408)(3.69441,6.3921)(3.73603,6.38184)
+ (3.78206,6.37338)(3.83242,6.36674)(3.88701,6.36198)
+ (3.94571,6.35911)(4.00838,6.35815)(4.07484,6.35911)
+ (4.14491,6.36198)(4.21837,6.36674)(4.29499,6.37338)
+%%
+\path(3.41554,6.74311)(3.40457,6.71429)(3.39703,6.68587)
+ (3.39312,6.65793)(3.39303,6.63059)(3.39694,6.60393)
+ (3.40502,6.57805)(3.41743,6.55306)(3.43432,6.52905)
+ (3.45581,6.50614)(3.48202,6.48442)(3.51304,6.464)(3.54893,6.44498)
+ (3.58974,6.42744)(3.63549,6.41148)(3.68616,6.39719)
+ (3.74171,6.38464)(3.80208,6.37389)(3.86717,6.36501)
+ (3.93685,6.35806)(4.01096,6.35306)(4.08932,6.35005)
+ (4.17173,6.34904)(4.25793,6.35005)(4.34769,6.35306)
+%%
+\path(3.25551,6.80006)(3.24787,6.76939)(3.24391,6.73891)
+ (3.24387,6.70872)(3.24794,6.6789)(3.25635,6.64955)(3.26928,6.62077)
+ (3.28694,6.59267)(3.3095,6.56536)(3.33712,6.53894)(3.36994,6.51354)
+ (3.40808,6.48927)(3.45165,6.46623)(3.5007,6.44454)(3.55529,6.42432)
+ (3.61541,6.40566)(3.68106,6.38866)(3.75217,6.37343)
+ (3.82865,6.36003)(3.91038,6.34856)(3.99719,6.33908)
+ (4.08889,6.33165)(4.18525,6.32631)(4.286,6.32309)(4.39086,6.32202)
+%%
+\path(3.75,6.25)(3.14565,5.94783)
+%%
+\path(3.19923,5.99202)(3.21941,6.00211)
+\path(3.18137,5.97729)(3.22173,5.99747)
+\path(3.16351,5.96256)(3.22405,5.99283)
+\path(3.14565,5.94783)(3.22637,5.98819)
+\path(3.16815,5.95328)(3.22869,5.98355)
+\path(3.19065,5.95872)(3.23101,5.9789)
+\path(3.21315,5.96417)(3.23333,5.97426)
+\path(3.22637,5.98819)(3.21709,6.00675)(3.14565,5.94783)
+ (3.23565,5.96962)(3.22637,5.98819)
+%%
+\path(3.75,6.25)(4.35435,5.94783)
+%%
+\path(4.28685,5.96417)(4.26667,5.97426)
+\path(4.30935,5.95872)(4.26899,5.9789)
+\path(4.33185,5.95328)(4.27131,5.98355)
+\path(4.35435,5.94783)(4.27363,5.98819)
+\path(4.33649,5.96256)(4.27595,5.99283)
+\path(4.31863,5.97729)(4.27827,5.99747)
+\path(4.30077,5.99202)(4.28059,6.00211)
+\path(4.27363,5.98819)(4.26435,5.96962)(4.35435,5.94783)
+ (4.28291,6.00675)(4.27363,5.98819)
+%%
+\allinethickness{1pt}%
+\color{rgb_980000}%
+\path(4.875,5.125)
+ (4.875,7.375)(2.625,7.375)(2.625,5.125)(4.875,5.125)
+%%
+\allinethickness{0.4pt}%
+\color{rgb_000000}%
+\path(3.75,2.95191)
+ (3.81752,3.02689)(3.87769,3.10015)(3.93077,3.17175)
+ (3.97698,3.24175)(4.01655,3.3102)(4.04971,3.37715)(4.07667,3.44266)
+ (4.09761,3.50676)(4.11274,3.5695)(4.12223,3.63093)(4.12626,3.69108)
+ (4.125,3.75)(4.11861,3.80772)(4.10725,3.86428)(4.09106,3.91971)
+ (4.07018,3.97405)(4.04476,4.02733)(4.01493,4.07958)
+ (3.98081,4.13082)(3.94252,4.1811)(3.90018,4.23043)(3.85391,4.27884)
+ (3.80382,4.32635)(3.75,4.373)
+%%
+\path(3.62348,3.04636)(3.69014,3.11055)(3.75,3.17364)
+ (3.80325,3.23566)(3.85004,3.29665)(3.89055,3.35662)(3.92492,3.4156)
+ (3.9533,3.47361)(3.97585,3.53068)(3.9927,3.58684)(4.00399,3.64209)
+ (4.00986,3.69647)(4.01042,3.75)(4.0058,3.80269)(3.99613,3.85457)
+ (3.98152,3.90564)(3.96208,3.95594)(3.93793,4.00548)
+ (3.90916,4.05428)(3.87589,4.10235)(3.8382,4.1497)(3.79621,4.19636)
+ (3.75,4.24234)(3.69967,4.28766)(3.64529,4.33232)
+%%
+\path(3.52707,3.13497)(3.59209,3.1895)(3.65084,3.24339)
+ (3.70344,3.29667)(3.75,3.34934)(3.79061,3.40141)(3.82538,3.45289)
+ (3.85441,3.5038)(3.87779,3.55414)(3.89561,3.60392)(3.90797,3.65315)
+ (3.91496,3.70184)(3.91667,3.75)(3.91317,3.79764)(3.90456,3.84476)
+ (3.89092,3.89138)(3.87233,3.93749)(3.84887,3.98312)
+ (3.82061,4.02827)(3.78763,4.07294)(3.75,4.11715)(3.7078,4.16089)
+ (3.6611,4.20419)(3.60997,4.24703)(3.55447,4.28944)
+%%
+\path(3.45806,3.21828)(3.52096,3.26413)(3.57809,3.30969)
+ (3.6295,3.35496)(3.67526,3.39995)(3.71541,3.44466)(3.75,3.4891)
+ (3.77909,3.53325)(3.80273,3.57714)(3.82096,3.62075)(3.83384,3.6641)
+ (3.84142,3.70718)(3.84375,3.75)(3.84087,3.79256)(3.83283,3.83486)
+ (3.81967,3.8769)(3.80146,3.91869)(3.77822,3.96024)(3.75,4.00153)
+ (3.71685,4.04257)(3.67882,4.08337)(3.63594,4.12393)
+ (3.58827,4.16425)(3.53583,4.20433)(3.47868,4.24417)
+%%
+\path(3.41407,3.29673)(3.47461,3.33478)(3.52983,3.37277)
+ (3.57974,3.41071)(3.62435,3.44861)(3.66367,3.48645)
+ (3.69771,3.52425)(3.72649,3.56199)(3.75,3.59969)(3.76826,3.63734)
+ (3.78129,3.67494)(3.78909,3.7125)(3.79167,3.75)(3.78904,3.78746)
+ (3.78121,3.82486)(3.76819,3.86222)(3.75,3.89953)(3.72664,3.9368)
+ (3.69812,3.97401)(3.66445,4.01118)(3.62564,4.0483)(3.58171,4.08537)
+ (3.53265,4.1224)(3.47849,4.15938)(3.41923,4.19631)
+%%
+\path(3.39296,3.37075)(3.4511,3.40176)(3.50433,3.43287)
+ (3.55261,3.46409)(3.59592,3.49541)(3.63424,3.52685)
+ (3.66754,3.55839)(3.69579,3.59005)(3.71897,3.62182)
+ (3.73705,3.65369)(3.75,3.68568)(3.7578,3.71779)(3.76042,3.75)
+ (3.75783,3.78233)(3.75,3.81477)(3.73691,3.84733)(3.71853,3.88)
+ (3.69483,3.91279)(3.66578,3.9457)(3.63135,3.97872)(3.59152,4.01186)
+ (3.54625,4.04512)(3.49552,4.0785)(3.43929,4.112)(3.37755,4.14562)
+%%
+\path(3.39286,3.44071)(3.44871,3.46535)(3.5,3.49019)
+ (3.54669,3.51523)(3.58871,3.54048)(3.62601,3.56593)
+ (3.65854,3.59158)(3.68622,3.61745)(3.70902,3.64352)
+ (3.72685,3.66981)(3.73967,3.69632)(3.74741,3.72305)(3.75,3.75)
+ (3.74738,3.77718)(3.7395,3.80458)(3.72627,3.83222)(3.70763,3.86009)
+ (3.68351,3.8882)(3.65385,3.91654)(3.61856,3.94513)(3.57759,3.97397)
+ (3.53084,4.00306)(3.47826,4.0324)(3.41976,4.062)(3.35526,4.09185)
+%%
+\path(3.41207,3.50691)(3.46585,3.5258)(3.51542,3.54493)
+ (3.56068,3.56429)(3.60155,3.58389)(3.63797,3.60374)
+ (3.66983,3.62385)(3.69705,3.6442)(3.71955,3.66482)(3.73723,3.6857)
+ (3.75,3.70686)(3.75776,3.72829)(3.76042,3.75)(3.75786,3.772)
+ (3.75,3.79429)(3.73672,3.81688)(3.71791,3.83978)(3.69345,3.86299)
+ (3.66325,3.88651)(3.62716,3.91036)(3.58508,3.93454)
+ (3.53687,3.95906)(3.48241,3.98392)(3.42157,4.00914)(3.3542,4.03471)
+%%
+\path(3.44909,3.56967)(3.50114,3.58335)(3.54927,3.59725)
+ (3.59338,3.61138)(3.63338,3.62575)(3.66914,3.64036)
+ (3.70058,3.65523)(3.72757,3.67034)(3.75,3.68572)(3.76775,3.70137)
+ (3.7807,3.71729)(3.78871,3.7335)(3.79167,3.75)(3.78942,3.7668)
+ (3.78182,3.7839)(3.76873,3.80132)(3.75,3.81907)(3.72546,3.83715)
+ (3.69495,3.85557)(3.6583,3.87434)(3.61533,3.89348)(3.56585,3.91299)
+ (3.50967,3.93289)(3.4466,3.95318)(3.37642,3.97388)
+%%
+\path(3.50255,3.62924)(3.55328,3.63818)(3.60037,3.64731)
+ (3.6437,3.65662)(3.68317,3.66613)(3.71864,3.67584)(3.75,3.68576)
+ (3.7771,3.69589)(3.79982,3.70624)(3.81799,3.71682)(3.83148,3.72763)
+ (3.84012,3.73869)(3.84375,3.75)(3.8422,3.76157)(3.83527,3.77341)
+ (3.8228,3.78553)(3.80457,3.79794)(3.78037,3.81064)(3.75,3.82366)
+ (3.71321,3.837)(3.66978,3.85067)(3.61944,3.8647)(3.56192,3.87908)
+ (3.49696,3.89383)(3.42425,3.90898)
+%%
+\path(3.57125,3.68585)(3.62111,3.6905)(3.66761,3.69525)
+ (3.71062,3.70012)(3.75,3.70511)(3.78562,3.71023)(3.81734,3.71548)
+ (3.84501,3.72086)(3.86847,3.72638)(3.88754,3.73205)
+ (3.90206,3.73787)(3.91183,3.74385)(3.91667,3.75)(3.91636,3.75632)
+ (3.91068,3.76281)(3.89941,3.7695)(3.8823,3.77637)(3.85908,3.78346)
+ (3.82949,3.79075)(3.79324,3.79827)(3.75,3.80602)(3.69946,3.81401)
+ (3.64125,3.82226)(3.57502,3.83078)(3.50036,3.83958)
+%%
+\path(3.65406,3.73974)(3.70358,3.74046)(3.75,3.74121)
+ (3.79318,3.74198)(3.833,3.74276)(3.86929,3.74358)(3.90191,3.74441)
+ (3.93068,3.74527)(3.95544,3.74616)(3.976,3.74708)(3.99216,3.74802)
+ (4.0037,3.74899)(4.01042,3.75)(4.01206,3.75104)(4.00837,3.75211)
+ (3.99908,3.75322)(3.9839,3.75437)(3.96252,3.75556)(3.9346,3.75679)
+ (3.89979,3.75807)(3.8577,3.75939)(3.80792,3.76076)(3.75,3.76219)
+ (3.68346,3.76367)(3.60778,3.76522)
+%%
+\path(3.75,3.79107)(3.79972,3.78823)(3.84661,3.7853)
+ (3.89054,3.78228)(3.93135,3.77916)(3.9689,3.77593)(4.00301,3.7726)
+ (4.03353,3.76915)(4.06025,3.76559)(4.08298,3.7619)(4.10151,3.75807)
+ (4.1156,3.75411)(4.125,3.75)(4.12945,3.74573)(4.12867,3.7413)
+ (4.12234,3.7367)(4.11013,3.73191)(4.09167,3.72692)(4.06658,3.72172)
+ (4.03443,3.71631)(3.99475,3.71065)(3.94705,3.70474)
+ (3.89077,3.69857)(3.8253,3.6921)(3.75,3.68532)
+%%
+\path(3.75,2.95191)(3.68279,2.9999)(3.62348,3.04636)
+ (3.57169,3.09136)(3.52707,3.13497)(3.4893,3.17726)(3.45806,3.21828)
+ (3.43308,3.25809)(3.41407,3.29673)(3.40078,3.33428)
+ (3.39296,3.37075)(3.39039,3.40622)(3.39286,3.44071)
+ (3.40015,3.47426)(3.41207,3.50691)(3.42844,3.5387)(3.44909,3.56967)
+ (3.47384,3.59984)(3.50255,3.62924)(3.53507,3.6579)(3.57125,3.68585)
+ (3.61095,3.71312)(3.65406,3.73974)(3.70045,3.76571)(3.75,3.79107)
+%%
+\path(3.87769,3.10015)(3.81014,3.13738)(3.75,3.17364)
+ (3.69699,3.20897)(3.65084,3.24339)(3.61129,3.27696)
+ (3.57809,3.30969)(3.55101,3.34161)(3.52983,3.37277)
+ (3.51434,3.40318)(3.50433,3.43287)(3.49961,3.46187)(3.5,3.49019)
+ (3.50533,3.51787)(3.51542,3.54493)(3.53012,3.57138)
+ (3.54927,3.59725)(3.57273,3.62255)(3.60037,3.64731)
+ (3.63203,3.67153)(3.66761,3.69525)(3.70697,3.71847)(3.75,3.74121)
+ (3.79658,3.76348)(3.84661,3.7853)
+%%
+\path(3.97698,3.24175)(3.91004,3.26948)(3.85004,3.29665)
+ (3.79676,3.32326)(3.75,3.34934)(3.70956,3.3749)(3.67526,3.39995)
+ (3.64691,3.42452)(3.62435,3.44861)(3.60741,3.47223)
+ (3.59592,3.49541)(3.58974,3.51816)(3.58871,3.54048)
+ (3.59269,3.56239)(3.60155,3.58389)(3.61516,3.60501)
+ (3.63338,3.62575)(3.65609,3.64612)(3.68317,3.66613)
+ (3.71451,3.68579)(3.75,3.70511)(3.78953,3.7241)(3.833,3.74276)
+ (3.8803,3.76111)(3.93135,3.77916)
+%%
+\path(4.04971,3.37715)(3.98409,3.39652)(3.92492,3.4156)
+ (3.87206,3.43439)(3.82538,3.45289)(3.78474,3.47113)(3.75,3.4891)
+ (3.72103,3.5068)(3.69771,3.52425)(3.67992,3.54144)(3.66754,3.55839)
+ (3.66045,3.57511)(3.65854,3.59158)(3.6617,3.60783)(3.66983,3.62385)
+ (3.68282,3.63964)(3.70058,3.65523)(3.723,3.6706)(3.75,3.68576)
+ (3.78148,3.70072)(3.81734,3.71548)(3.85752,3.73004)
+ (3.90191,3.74441)(3.95043,3.7586)(4.00301,3.7726)
+%%
+\path(4.09761,3.50676)(4.03372,3.51878)(3.97585,3.53068)
+ (3.9239,3.54247)(3.87779,3.55414)(3.83742,3.56569)(3.80273,3.57714)
+ (3.77361,3.58847)(3.75,3.59969)(3.73181,3.61081)(3.71897,3.62182)
+ (3.7114,3.63272)(3.70902,3.64352)(3.71176,3.65422)(3.71955,3.66482)
+ (3.73232,3.67532)(3.75,3.68572)(3.77252,3.69603)(3.79982,3.70624)
+ (3.83182,3.71636)(3.86847,3.72638)(3.90969,3.73632)
+ (3.95544,3.74616)(4.00565,3.75592)(4.06025,3.76559)
+%%
+\path(4.12223,3.63093)(4.06031,3.63652)(4.00399,3.64209)
+ (3.95323,3.64764)(3.90797,3.65315)(3.86819,3.65864)(3.83384,3.6641)
+ (3.80489,3.66953)(3.78129,3.67494)(3.76301,3.68033)(3.75,3.68568)
+ (3.74223,3.69101)(3.73967,3.69632)(3.74227,3.7016)(3.75,3.70686)
+ (3.76282,3.71209)(3.7807,3.71729)(3.8036,3.72248)(3.83148,3.72763)
+ (3.86431,3.73277)(3.90206,3.73787)(3.94468,3.74296)
+ (3.99216,3.74802)(4.04444,3.75306)(4.10151,3.75807)
+%%
+\path(4.125,3.75)(4.0651,3.75)(4.01042,3.75)(3.96094,3.75)
+ (3.91667,3.75)(3.8776,3.75)(3.84375,3.75)(3.8151,3.75)
+ (3.79167,3.75)(3.77344,3.75)(3.76042,3.75)(3.7526,3.75)(3.75,3.75)
+ (3.7526,3.75)(3.76042,3.75)(3.77344,3.75)(3.79167,3.75)
+ (3.8151,3.75)(3.84375,3.75)(3.8776,3.75)(3.91667,3.75)
+ (3.96094,3.75)(4.01042,3.75)(4.0651,3.75)(4.125,3.75)
+%%
+\path(4.10725,3.86428)(4.04926,3.85943)(3.99613,3.85457)
+ (3.94789,3.84967)(3.90456,3.84476)(3.8662,3.83982)(3.83283,3.83486)
+ (3.80449,3.82987)(3.78121,3.82486)(3.76304,3.81983)(3.75,3.81477)
+ (3.74214,3.80969)(3.7395,3.80458)(3.7421,3.79945)(3.75,3.79429)
+ (3.76323,3.78911)(3.78182,3.7839)(3.80582,3.77867)(3.83527,3.77341)
+ (3.87021,3.76812)(3.91068,3.76281)(3.95672,3.75748)
+ (4.00837,3.75211)(4.06567,3.74672)(4.12867,3.7413)
+%%
+\path(4.07018,3.97405)(4.01387,3.96504)(3.96208,3.95594)
+ (3.91488,3.94676)(3.87233,3.93749)(3.8345,3.92814)(3.80146,3.91869)
+ (3.77327,3.90916)(3.75,3.89953)(3.73173,3.88982)(3.71853,3.88)
+ (3.71047,3.87009)(3.70763,3.86009)(3.71008,3.84998)
+ (3.71791,3.83978)(3.73119,3.82947)(3.75,3.81907)(3.77443,3.80855)
+ (3.80457,3.79794)(3.84049,3.78721)(3.8823,3.77637)(3.93007,3.76543)
+ (3.9839,3.75437)(4.04389,3.7432)(4.11013,3.73191)
+%%
+\path(4.01493,4.07958)(3.95994,4.06701)(3.90916,4.05428)
+ (3.86269,4.04136)(3.82061,4.02827)(3.78301,4.01499)(3.75,4.00153)
+ (3.72167,3.98787)(3.69812,3.97401)(3.67945,3.95996)(3.66578,3.9457)
+ (3.6572,3.93123)(3.65385,3.91654)(3.65582,3.90164)(3.66325,3.88651)
+ (3.67625,3.87116)(3.69495,3.85557)(3.71949,3.83974)(3.75,3.82366)
+ (3.78662,3.80733)(3.82949,3.79075)(3.87877,3.77391)(3.9346,3.75679)
+ (3.99715,3.7394)(4.06658,3.72172)
+%%
+\path(3.94252,4.1811)(3.8884,4.16554)(3.8382,4.1497)
+ (3.79203,4.13357)(3.75,4.11715)(3.71222,4.10042)(3.67882,4.08337)
+ (3.64992,4.066)(3.62564,4.0483)(3.60613,4.03026)(3.59152,4.01186)
+ (3.58195,3.9931)(3.57759,3.97397)(3.57857,3.95446)(3.58508,3.93454)
+ (3.59727,3.91422)(3.61533,3.89348)(3.63943,3.8723)(3.66978,3.85067)
+ (3.70656,3.82859)(3.75,3.80602)(3.8003,3.78296)(3.8577,3.75939)
+ (3.92244,3.73529)(3.99475,3.71065)
+%%
+\path(3.85391,4.27884)(3.80014,4.26079)(3.75,4.24234)
+ (3.70361,4.22348)(3.6611,4.20419)(3.62261,4.18445)(3.58827,4.16425)
+ (3.55823,4.14357)(3.53265,4.1224)(3.51169,4.10072)(3.49552,4.0785)
+ (3.48431,4.05574)(3.47826,4.0324)(3.47756,4.00847)(3.48241,3.98392)
+ (3.49304,3.95874)(3.50967,3.93289)(3.53255,3.90634)
+ (3.56192,3.87908)(3.59806,3.85106)(3.64125,3.82226)
+ (3.69179,3.79265)(3.75,3.76219)(3.81621,3.73084)(3.89077,3.69857)
+%%
+\path(3.75,4.373)(3.69598,4.35293)(3.64529,4.33232)
+ (3.59808,4.31117)(3.55447,4.28944)(3.51462,4.26712)
+ (3.47868,4.24417)(3.44683,4.22058)(3.41923,4.19631)
+ (3.39607,4.17133)(3.37755,4.14562)(3.36387,4.11914)
+ (3.35526,4.09185)(3.35196,4.06372)(3.3542,4.03471)(3.36226,4.00478)
+ (3.37642,3.97388)(3.39698,3.94196)(3.42425,3.90898)
+ (3.45859,3.87487)(3.50036,3.83958)(3.54995,3.80305)
+ (3.60778,3.76522)(3.6743,3.726)(3.75,3.68532)
+%%
+\path(3.75,3.75)(3,3.75)
+%%
+\path(3.08562,3.76557)(3.11416,3.76557)
+\path(3.05708,3.76038)(3.11416,3.76038)
+\path(3.02854,3.75519)(3.11416,3.75519)
+\path(3,3.75)(3.11416,3.75)
+\path(3.02854,3.74481)(3.11416,3.74481)
+\path(3.05708,3.73962)(3.11416,3.73962)
+\path(3.08562,3.73443)(3.11416,3.73443)
+\path(3.11416,3.75)(3.11416,3.77076)(3,3.75)(3.11416,3.72924)(3.11416,3.75)
+%%
+\path(3.75,3.75)(3.75,3.29644)
+%%
+\path(3.73443,3.33925)(3.73443,3.35352)
+\path(3.73962,3.32498)(3.73962,3.35352)
+\path(3.74481,3.31071)(3.74481,3.35352)
+\path(3.75,3.29644)(3.75,3.35352)
+\path(3.75519,3.31071)(3.75519,3.35352)
+\path(3.76038,3.32498)(3.76038,3.35352)
+\path(3.76557,3.33925)(3.76557,3.35352)
+\path(3.75,3.35352)(3.72924,3.35352)(3.75,3.29644)(3.77076,3.35352)(3.75,3.35352)
+%%
+\allinethickness{1pt}%
+\color{rgb_980000}%
+\path(4.875,2.625)
+ (4.875,4.875)(2.625,4.875)(2.625,2.625)(4.875,2.625)
+%%
+\allinethickness{0.4pt}%
+\color{rgb_000000}%
+\path(3.17823,0.61398)
+ (3.2696,0.641697)(3.35808,0.672175)(3.44338,0.705355)
+ (3.52526,0.741164)(3.60346,0.779511)(3.67777,0.820294)
+ (3.748,0.863394)(3.81395,0.908683)(3.87549,0.956019)
+ (3.93248,1.00525)(3.98483,1.05622)(4.03246,1.10877)
+ (4.07534,1.16272)(4.11344,1.2179)(4.14676,1.27413)(4.17536,1.33125)
+ (4.19927,1.38908)(4.21858,1.44744)(4.23339,1.50617)
+ (4.24381,1.56512)(4.24998,1.62413)(4.25204,1.68304)
+ (4.25015,1.74173)(4.24449,1.80006)
+%%
+\path(3.20899,0.72735)(3.28831,0.749673)(3.36501,0.774599)
+ (3.43887,0.802101)(3.50964,0.832134)(3.57711,0.86464)
+ (3.64108,0.899549)(3.70136,0.936774)(3.75778,0.976219)
+ (3.8102,1.01777)(3.85849,1.06132)(3.90256,1.10672)(3.94232,1.15384)
+ (3.97773,1.20253)(4.00875,1.25265)(4.03538,1.30404)
+ (4.05764,1.35653)(4.07557,1.40997)(4.08922,1.46419)
+ (4.09868,1.51905)(4.10405,1.57438)(4.10544,1.63004)
+ (4.10297,1.68587)(4.0968,1.74173)(4.08706,1.79749)
+%%
+\path(3.25032,0.823133)(3.31889,0.840786)(3.38504,0.860893)
+ (3.44855,0.883449)(3.50922,0.908436)(3.56683,0.935822)
+ (3.62121,0.965564)(3.67218,0.997604)(3.7196,1.03187)
+ (3.76331,1.06829)(3.8032,1.10676)(3.83917,1.14717)(3.87115,1.18943)
+ (3.89907,1.23339)(3.92291,1.27893)(3.94265,1.32592)
+ (3.95829,1.37421)(3.96988,1.42366)(3.97745,1.47411)
+ (3.98107,1.52542)(3.98083,1.57745)(3.97684,1.63004)(3.9692,1.68304)
+ (3.95805,1.73632)(3.94353,1.78975)
+%%
+\path(3.30152,0.904095)(3.36048,0.917621)(3.41712,0.933458)
+ (3.47125,0.951621)(3.52267,0.972112)(3.5712,0.994925)
+ (3.61667,1.02004)(3.65892,1.04742)(3.6978,1.07702)(3.73319,1.10879)
+ (3.76496,1.14265)(3.79303,1.17853)(3.81732,1.21634)
+ (3.83777,1.25597)(3.85434,1.29732)(3.86702,1.34026)
+ (3.87582,1.38467)(3.88074,1.43043)(3.88184,1.47739)
+ (3.87918,1.52542)(3.87283,1.57438)(3.8629,1.62413)(3.84948,1.67451)
+ (3.83271,1.72541)(3.81271,1.77667)
+%%
+\path(3.36219,0.972363)(3.41251,0.982168)(3.46056,0.994146)
+ (3.50614,1.00833)(3.54909,1.02474)(3.58923,1.04339)(3.6264,1.06427)
+ (3.66046,1.08739)(3.69125,1.1127)(3.71867,1.14019)(3.74261,1.16981)
+ (3.76296,1.20149)(3.77966,1.23517)(3.79266,1.27077)(3.8019,1.3082)
+ (3.80739,1.34736)(3.80911,1.38814)(3.80708,1.43043)
+ (3.80136,1.47411)(3.79199,1.51905)(3.77905,1.56512)
+ (3.76263,1.61219)(3.74284,1.66012)(3.71979,1.70877)(3.69363,1.75801)
+%%
+\path(3.43214,1.02959)(3.4747,1.03597)(3.51496,1.04439)
+ (3.55275,1.0549)(3.58792,1.06753)(3.6203,1.08231)(3.64973,1.09927)
+ (3.67607,1.1184)(3.6992,1.13971)(3.71899,1.16319)(3.73534,1.18881)
+ (3.74816,1.21653)(3.75738,1.24631)(3.76294,1.27809)(3.7648,1.3118)
+ (3.76296,1.34736)(3.7574,1.38467)(3.74815,1.42366)(3.73525,1.46419)
+ (3.71875,1.50617)(3.69874,1.54948)(3.67529,1.59398)
+ (3.64852,1.63955)(3.61855,1.68606)(3.58552,1.73338)
+%%
+\path(3.51138,1.07706)(3.54694,1.08023)(3.58016,1.0853)
+ (3.61086,1.09235)(3.63888,1.10142)(3.66407,1.11255)
+ (3.68628,1.12577)(3.70537,1.14113)(3.72121,1.15862)
+ (3.73369,1.17827)(3.74271,1.20006)(3.74817,1.22398)(3.75,1.25)
+ (3.74815,1.27809)(3.74259,1.3082)(3.73328,1.34026)(3.72024,1.37421)
+ (3.70349,1.40997)(3.68306,1.44744)(3.65901,1.48653)
+ (3.63142,1.52713)(3.60039,1.56912)(3.56602,1.61239)
+ (3.52843,1.65681)(3.48778,1.70226)
+%%
+\path(3.60007,1.11578)(3.62936,1.11587)(3.65621,1.11774)
+ (3.68045,1.12147)(3.70192,1.1271)(3.72047,1.13471)(3.73595,1.14434)
+ (3.74823,1.15603)(3.75716,1.16982)(3.76264,1.18573)
+ (3.76456,1.20378)(3.76283,1.22398)(3.75738,1.24631)
+ (3.74815,1.27077)(3.73509,1.29732)(3.7182,1.32592)(3.69748,1.35653)
+ (3.67293,1.38908)(3.6446,1.42349)(3.61256,1.4597)(3.57688,1.49759)
+ (3.53766,1.53708)(3.49501,1.57805)(3.44908,1.62039)(3.40001,1.66397)
+%%
+\path(3.69855,1.14651)(3.72225,1.14361)(3.74337,1.14236)
+ (3.76176,1.14283)(3.77726,1.14511)(3.78969,1.14925)
+ (3.79892,1.15533)(3.8048,1.16341)(3.80719,1.17352)(3.80598,1.18573)
+ (3.80105,1.20006)(3.7923,1.21653)(3.77966,1.23517)(3.76307,1.25597)
+ (3.74248,1.27893)(3.71787,1.30404)(3.68923,1.33125)
+ (3.65659,1.36053)(3.61998,1.39183)(3.57947,1.42509)
+ (3.53514,1.46021)(3.48708,1.49713)(3.43543,1.53574)
+ (3.38033,1.57593)(3.32194,1.6176)
+%%
+\path(3.80729,1.16986)(3.82604,1.16398)(3.84208,1.15962)
+ (3.85522,1.15685)(3.86529,1.15577)(3.87214,1.15645)(3.8756,1.15897)
+ (3.87551,1.16341)(3.87174,1.16982)(3.86415,1.17827)
+ (3.85261,1.18881)(3.83704,1.20149)(3.81732,1.21634)(3.7934,1.23339)
+ (3.76522,1.25265)(3.73275,1.27413)(3.69598,1.29782)
+ (3.65492,1.32371)(3.60961,1.35175)(3.56011,1.3819)(3.50651,1.41411)
+ (3.4489,1.44831)(3.38744,1.48442)(3.32226,1.52235)(3.25354,1.56199)
+%%
+\path(3.92693,1.18624)(3.94139,1.17736)(3.95296,1.16985)
+ (3.96145,1.1638)(3.96668,1.1593)(3.96848,1.15645)(3.96666,1.15533)
+ (3.96105,1.15603)(3.95151,1.15862)(3.93788,1.16319)
+ (3.92002,1.16981)(3.89781,1.17853)(3.87115,1.18943)
+ (3.83994,1.20253)(3.80413,1.2179)(3.76366,1.23554)(3.71851,1.25549)
+ (3.66869,1.27773)(3.61423,1.30227)(3.55518,1.32909)
+ (3.49162,1.35815)(3.42367,1.38939)(3.35146,1.42277)
+ (3.27515,1.45821)(3.19494,1.49562)
+%%
+\path(4.05827,1.19595)(4.06911,1.18399)(4.07686,1.17324)
+ (4.08133,1.1638)(4.08232,1.15577)(4.07962,1.14925)(4.07305,1.14434)
+ (4.06242,1.14113)(4.04754,1.13971)(4.02825,1.14019)
+ (4.00437,1.14265)(3.97577,1.14717)(3.94232,1.15384)(3.9039,1.16272)
+ (3.86043,1.17387)(3.81183,1.18736)(3.75806,1.20321)
+ (3.69912,1.22147)(3.63501,1.24216)(3.56578,1.26527)(3.4915,1.29081)
+ (3.41229,1.31874)(3.32827,1.34904)(3.23963,1.38165)(3.14657,1.4165)
+%%
+\path(4.20232,1.19917)(4.21023,1.18399)(4.21485,1.16985)
+ (4.21597,1.15685)(4.21335,1.14511)(4.20679,1.13471)
+ (4.19606,1.12577)(4.18094,1.1184)(4.16122,1.1127)(4.1367,1.10879)
+ (4.10719,1.10676)(4.07249,1.10672)(4.03246,1.10877)(3.98694,1.113)
+ (3.93582,1.11951)(3.87898,1.12838)(3.81635,1.13966)(3.7479,1.15344)
+ (3.67361,1.16975)(3.59351,1.18864)(3.50765,1.21013)
+ (3.41613,1.23423)(3.31908,1.26093)(3.21668,1.2902)(3.10914,1.32202)
+%%
+\path(3.17823,0.61398)(3.19224,0.673067)(3.20899,0.72735)
+ (3.22838,0.77725)(3.25032,0.823133)(3.27472,0.865321)
+ (3.30152,0.904095)(3.33069,0.939703)(3.36219,0.972363)
+ (3.39601,1.00227)(3.43214,1.02959)(3.47059,1.05448)
+ (3.51138,1.07706)(3.55453,1.09746)(3.60007,1.11578)(3.64806,1.1321)
+ (3.69855,1.14651)(3.7516,1.15908)(3.80729,1.16986)(3.8657,1.1789)
+ (3.92693,1.18624)(3.99108,1.19191)(4.05827,1.19595)
+ (4.12864,1.19837)(4.20232,1.19917)
+%%
+\path(3.35808,0.672175)(3.35983,0.72558)(3.36501,0.774599)
+ (3.37347,0.819598)(3.38504,0.860893)(3.39963,0.898765)
+ (3.41712,0.933458)(3.43745,0.965188)(3.46056,0.994146)
+ (3.4864,1.0205)(3.51496,1.04439)(3.54621,1.06595)(3.58016,1.0853)
+ (3.61682,1.10254)(3.65621,1.11774)(3.69838,1.13099)
+ (3.74337,1.14236)(3.79125,1.15188)(3.84208,1.15962)(3.89595,1.1656)
+ (3.95296,1.16985)(4.01323,1.17239)(4.07686,1.17324)
+ (4.14402,1.17239)(4.21485,1.16985)
+%%
+\path(3.52526,0.741164)(3.51545,0.788632)(3.50964,0.832134)
+ (3.50762,0.871978)(3.50922,0.908436)(3.51427,0.941744)
+ (3.52267,0.972112)(3.5343,0.999723)(3.54909,1.02474)
+ (3.56698,1.0473)(3.58792,1.06753)(3.61189,1.08554)(3.63888,1.10142)
+ (3.66888,1.11525)(3.70192,1.1271)(3.73803,1.13704)(3.77726,1.14511)
+ (3.81965,1.15134)(3.86529,1.15577)(3.91427,1.15842)(3.96668,1.1593)
+ (4.02266,1.15842)(4.08232,1.15577)(4.14583,1.15134)(4.21335,1.14511)
+%%
+\path(3.67777,0.820294)(3.65721,0.861701)(3.64108,0.899549)
+ (3.62915,0.934095)(3.62121,0.965564)(3.6171,0.994154)
+ (3.61667,1.02004)(3.6198,1.04337)(3.6264,1.06427)(3.6364,1.08287)
+ (3.64973,1.09927)(3.66636,1.11354)(3.68628,1.12577)
+ (3.70947,1.13602)(3.73595,1.14434)(3.76576,1.15076)
+ (3.79892,1.15533)(3.83551,1.15806)(3.8756,1.15897)(3.91928,1.15806)
+ (3.96666,1.15533)(4.01786,1.15076)(4.07305,1.14434)
+ (4.13239,1.13602)(4.19606,1.12577)
+%%
+\path(3.81395,0.908683)(3.7835,0.944037)(3.75778,0.976219)
+ (3.73655,1.00544)(3.7196,1.03187)(3.70673,1.05569)(3.6978,1.07702)
+ (3.69268,1.09599)(3.69125,1.1127)(3.69345,1.12725)(3.6992,1.13971)
+ (3.70846,1.15015)(3.72121,1.15862)(3.73744,1.16517)
+ (3.75716,1.16982)(3.7804,1.1726)(3.80719,1.17352)(3.83761,1.1726)
+ (3.87174,1.16982)(3.90966,1.16517)(3.95151,1.15862)
+ (3.99741,1.15015)(4.04754,1.13971)(4.10207,1.12725)(4.16122,1.1127)
+%%
+\path(3.93248,1.00525)(3.89302,1.03469)(3.85849,1.06132)
+ (3.82862,1.08529)(3.8032,1.10676)(3.78203,1.12584)(3.76496,1.14265)
+ (3.75186,1.15728)(3.74261,1.16981)(3.73712,1.1803)(3.73534,1.18881)
+ (3.73721,1.19538)(3.74271,1.20006)(3.75182,1.20285)
+ (3.76456,1.20378)(3.78095,1.20285)(3.80105,1.20006)
+ (3.82491,1.19538)(3.85261,1.18881)(3.88428,1.1803)(3.92002,1.16981)
+ (3.95999,1.15728)(4.00437,1.14265)(4.05336,1.12584)(4.10719,1.10676)
+%%
+\path(4.03246,1.10877)(3.9849,1.13255)(3.94232,1.15384)
+ (3.90448,1.17276)(3.87115,1.18943)(3.84215,1.20393)
+ (3.81732,1.21634)(3.79653,1.22673)(3.77966,1.23517)
+ (3.76664,1.24168)(3.75738,1.24631)(3.75184,1.24908)(3.75,1.25)
+ (3.75184,1.24908)(3.75738,1.24631)(3.76664,1.24168)
+ (3.77966,1.23517)(3.79653,1.22673)(3.81732,1.21634)
+ (3.84215,1.20393)(3.87115,1.18943)(3.90448,1.17276)
+ (3.94232,1.15384)(3.9849,1.13255)(4.03246,1.10877)
+%%
+\path(4.11344,1.2179)(4.05862,1.23638)(4.00875,1.25265)
+ (3.96358,1.26681)(3.92291,1.27893)(3.88655,1.28908)
+ (3.85434,1.29732)(3.82617,1.30368)(3.8019,1.3082)(3.78147,1.3109)
+ (3.7648,1.3118)(3.75185,1.3109)(3.74259,1.3082)(3.737,1.30368)
+ (3.73509,1.29732)(3.73691,1.28908)(3.74248,1.27893)
+ (3.75189,1.26681)(3.76522,1.25265)(3.78259,1.23638)(3.80413,1.2179)
+ (3.83001,1.1971)(3.86043,1.17387)(3.89561,1.14806)(3.93582,1.11951)
+%%
+\path(4.17536,1.33125)(4.1141,1.34487)(4.05764,1.35653)
+ (4.00578,1.36629)(3.95829,1.37421)(3.91502,1.38033)
+ (3.87582,1.38467)(3.84055,1.38727)(3.80911,1.38814)
+ (3.78141,1.38727)(3.7574,1.38467)(3.73702,1.38033)(3.72024,1.37421)
+ (3.70706,1.36629)(3.69748,1.35653)(3.69152,1.34487)
+ (3.68923,1.33125)(3.69069,1.3156)(3.69598,1.29782)(3.70521,1.27783)
+ (3.71851,1.25549)(3.73607,1.23067)(3.75806,1.20321)
+ (3.78473,1.17295)(3.81635,1.13966)
+%%
+\path(4.21858,1.44744)(4.1516,1.45669)(4.08922,1.46419)
+ (4.03123,1.46999)(3.97745,1.47411)(3.9277,1.47657)(3.88184,1.47739)
+ (3.83976,1.47657)(3.80136,1.47411)(3.76654,1.46999)
+ (3.73525,1.46419)(3.70743,1.45669)(3.68306,1.44744)
+ (3.66212,1.43639)(3.6446,1.42349)(3.63055,1.40867)(3.61998,1.39183)
+ (3.61298,1.3729)(3.60961,1.35175)(3.60998,1.32826)(3.61423,1.30227)
+ (3.62251,1.27364)(3.63501,1.24216)(3.65195,1.20761)(3.67361,1.16975)
+%%
+\path(4.24381,1.56512)(4.17177,1.57053)(4.10405,1.57438)
+ (4.04046,1.57668)(3.98083,1.57745)(3.925,1.57668)(3.87283,1.57438)
+ (3.82422,1.57053)(3.77905,1.56512)(3.73724,1.55811)
+ (3.69874,1.54948)(3.66348,1.53917)(3.63142,1.52713)
+ (3.60256,1.51329)(3.57688,1.49759)(3.5544,1.47993)(3.53514,1.46021)
+ (3.51915,1.43832)(3.50651,1.41411)(3.49729,1.38745)
+ (3.49162,1.35815)(3.48963,1.32601)(3.4915,1.29081)(3.49742,1.25228)(3.50765,1.21013)
+%%
+\path(4.25204,1.68304)(4.1755,1.68516)(4.10297,1.68587)
+ (4.03426,1.68516)(3.9692,1.68304)(3.90765,1.6795)(3.84948,1.67451)
+ (3.79458,1.66806)(3.74284,1.66012)(3.69417,1.65063)
+ (3.64852,1.63955)(3.60582,1.62683)(3.56602,1.61239)
+ (3.52909,1.59616)(3.49501,1.57805)(3.46379,1.55795)
+ (3.43543,1.53574)(3.40997,1.51128)(3.38744,1.48442)
+ (3.36791,1.45499)(3.35146,1.42277)(3.3382,1.38755)(3.32827,1.34904)
+ (3.32183,1.30695)(3.31908,1.26093)
+%%
+\path(4.24449,1.80006)(4.16396,1.79942)(4.08706,1.79749)
+ (4.01364,1.79428)(3.94353,1.78975)(3.87659,1.78389)
+ (3.81271,1.77667)(3.75175,1.76806)(3.69363,1.75801)
+ (3.63824,1.74647)(3.58552,1.73338)(3.53538,1.71867)
+ (3.48778,1.70226)(3.44267,1.68406)(3.40001,1.66397)
+ (3.35977,1.64186)(3.32194,1.6176)(3.28653,1.59104)(3.25354,1.56199)
+ (3.22299,1.53026)(3.19494,1.49562)(3.16944,1.4578)(3.14657,1.4165)
+ (3.12642,1.37138)(3.10914,1.32202)
+%%
+\path(3.75,1.25)(3.27753,1.48623)
+%%
+\path(3.34504,1.46989)(3.36522,1.4598)
+\path(3.32254,1.47533)(3.3629,1.45515)
+\path(3.30004,1.48078)(3.36058,1.45051)
+\path(3.27753,1.48623)(3.35825,1.44587)
+\path(3.29539,1.4715)(3.35593,1.44123)
+\path(3.31325,1.45677)(3.35361,1.43659)
+\path(3.33111,1.44204)(3.35129,1.43195)
+\path(3.35825,1.44587)(3.36754,1.46444)(3.27753,1.48623)
+ (3.34897,1.42731)(3.35825,1.44587)
+%%
+\path(3.75,1.25)(3.14565,0.947826)
+%%
+\path(3.19923,0.99202)(3.21941,1.00211)
+\path(3.18137,0.977289)(3.22173,0.997469)
+\path(3.16351,0.962557)(3.22405,0.992827)
+\path(3.14565,0.947826)(3.22637,0.988186)
+\path(3.16815,0.953275)(3.22869,0.983545)
+\path(3.19065,0.958724)(3.23101,0.978904)
+\path(3.21315,0.964173)(3.23333,0.974263)
+\path(3.22637,0.988186)(3.21709,1.00675)(3.14565,0.947826)
+ (3.23565,0.969622)(3.22637,0.988186)
+%%
+\allinethickness{1pt}%
+\color{rgb_980000}%
+\path(4.875,0.125)
+ (4.875,2.375)(2.625,2.375)(2.625,0.125)(4.875,0.125)
+%%
+\end{picture}
diff --git a/graphics/epix/doc/layout.xp b/graphics/epix/doc/layout.xp
new file mode 100644
index 0000000000..cd3e201011
--- /dev/null
+++ b/graphics/epix/doc/layout.xp
@@ -0,0 +1,36 @@
+/* -*-ePiX-*- */
+/* layout.xp -- June 27, 2007 */
+#include "epix.h"
+using namespace ePiX;
+
+const double a(sqrt(3));
+P f(double u, double v)
+{
+ return P((u-v)*(u+v), 2*u*v, u); //u*(u-a*v)*(u+a*v));
+}
+
+int main()
+{
+ picture(P(0,0), P(2,3), "5x7.5in");
+
+ begin();
+
+ domain R(P(-1,-1), P(1,1), mesh(12,12), mesh(24,24));
+
+ for (int i=0; i<2; ++i)
+ for (int j=0; j<3; ++j)
+ {
+ screen my(P(-3,-3), P(3,3));
+ activate(my);
+ border(Red(0.6), "1pt");
+ camera.at(sph(10, (2*j+i+1)*M_PI/8, M_PI/6));
+
+ plot(f, R);
+ arrow(P(0,0,0), 2*E_1);
+ arrow(P(0,0,0), 2*E_2);
+ inset(P(i+0.05,2.05-j), P(i+0.95,2.95-j));
+ }
+
+ end();
+}
+
diff --git a/graphics/epix/doc/manual.pdf b/graphics/epix/doc/manual.pdf
new file mode 100644
index 0000000000..bd8fc76619
--- /dev/null
+++ b/graphics/epix/doc/manual.pdf
Binary files differ
diff --git a/graphics/epix/doc/manual.tex b/graphics/epix/doc/manual.tex
new file mode 100644
index 0000000000..71aa59aa97
--- /dev/null
+++ b/graphics/epix/doc/manual.tex
@@ -0,0 +1,5030 @@
+%% Version 1.2.0
+\documentclass[12pt]{book}
+\usepackage{amsmath,latexsym,epic,eepic,pstricks,xcolor,comment}
+\usepackage[dvips,hyperref]{hyperref}
+
+\usepackage{makeidx}
+\makeindex
+
+\renewcommand{\thefigure}{\arabic{chapter}.\arabic{figure}}
+
+\newcommand{\code}[1]{\texttt{#1}}
+\newcommand{\filename}[1]{\texttt{#1}}
+\newcommand{\Key}[1]{\texttt{#1}}
+\newcommand{\URL}[1]{\texttt{#1}}
+
+%% \setlength{\topmargin}{0.5in}
+\newcommand{\ePiX}{\code{ePiX}}
+\newcommand{\ext}{\code{ePiX\_ext}}
+\newcommand{\epix}{\code{epix}}
+\newcommand{\eepic}{\code{eepic}}
+\newcommand{\C}{\code{C}}
+\newcommand{\CXX}{\code{C++}}
+\newcommand{\pyepix}{\code{Pyepix}}
+
+\DeclareMathOperator{\clip}{clip}
+
+\newcommand{\Header}[1]{\smallskip\noindent\texttt{#1}%
+ \index{Header file!{#1}@\texttt{#1}}\quad}
+
+%% Substitution commands easily removable by sed for texinfo:
+%% Remove recalcitrant chunks,
+\newcommand{\texicomment}{}
+\newcommand{\texicommentend}{}
+
+%% mark simple math,
+\newcommand{\teximath}[1]{$#1$}
+%% make function index entries,
+\newcommand{\findex}[1]{}
+
+%% top-level division (first argument for texinfo node name)
+\newcommand{\texinfochapter}[2]{\chapter{#2}}
+\newcommand{\texinfoappendix}[2]{\chapter{#2}}
+
+%%\renewcommand{\subsection*}[1]{\subsection{#1}}
+
+\title{ \ePiX\ Tutorial and \\ Reference Manual}
+\author{Andrew D. Hwang \\
+ Department\ of Math and CS \\
+ College of the Holy Cross}
+\date{Version 1.2, September, 2007}
+
+\begin{document}
+
+\maketitle
+
+\tableofcontents
+
+\texinfochapter{1}{Introduction}
+
+\ePiX, a collection of batch utilities, creates mathematically
+accurate figures, plots, and animations containing \LaTeX\ typography.
+The input syntax is easy to learn, and the user interface resembles
+that of \LaTeX\ itself: You prepare a scene description in a text
+editor, then ``compile'' the input file into a picture. \LaTeX- and
+web-compatible output types include a \LaTeX\ picture-like environment
+written with \code{PSTricks}, \code{tikz}, or \code{eepic} macros;
+vector images (\code{eps}, \code{ps}, and~\code{pdf}); and bitmapped
+images and movies (\code{png}, \code{mng}, and~\code{gif}).
+
+\ePiX's strengths include:
+
+\begin{itemize}
+\item Quality of output: \ePiX\ creates accurate, publication-quality
+ figures whose appearance matches that of \LaTeX. Typography may be
+ put in a figure as easily as in an ordinary \LaTeX\ document.
+
+\item Ease of use: Figure objects and their attributes are specified
+ by simple, descriptive commands.
+
+\item Flexibility: Objects are described by attributes and Cartesian
+ location; as in \LaTeX, printed appearance is determined when the
+ figure is compiled. A well-designed figure can be altered
+ dramatically, yet precisely, with command-line switches or minor
+ changes to the input file.
+
+\item Power and extendibility: \ePiX\ inherits the power of \CXX\ as a
+ programming language; variables, data structures, loops, and
+ recursion can be used to draw complicated plots and figures with
+ just a few lines of input. External code can be incorporated in a
+ figure with a command line option or by using a Makefile.
+
+\item Economy of storage and transmission: For a document containing
+ many figures, a compressed tar file of the \LaTeX\ sources and
+ \ePiX\ files is typically a few percent the size of the compressed
+ PostScript file.
+
+\item License: \ePiX\ is \emph{free software}.\index{Free software}
+ You are granted the right to use the program for whatever purpose,
+ and to inspect, modify, and re-distribute the source code, so long
+ as you do not restrict the rights of others to do the same. In
+ short, the license is similar to the terms under which theorems are
+ published.
+
+\end{itemize}
+
+
+\ePiX\ facilitates logical, as opposed to visual, structuring of
+mathematical figures, analogous to the relationship between \LaTeX\
+and a word processor. A few stylistic defaults streamline the creation
+of simple figures, but there are few internal restrictions on the
+contents or appearance of a figure; aesthetic and practical decisions
+are left to you.
+
+If you are a:
+
+\begin{itemize}
+
+\item Potential user, you may wish to skip immediately to ``Software
+ Dependencies'' before investing additional time.
+
+\item New user, proceed from here until you have enough understanding
+ to run the software, then experiment with the samples files while
+ reading Chapter~\ref{chapter:started}, or return to the manual as
+ needed.
+
+\item More advanced user, browse at will, probably starting with
+ Chapter~\ref{chapter:ref-man}.
+
+\end{itemize}
+
+This manual is relatively conversational, and occasionally redundant,
+especially between portions meant for readers at different levels of
+familiarity. Throughout, you are assumed to be familiar with \LaTeX\
+and basic linear algebra: the description of points, vectors, lines,
+and planes in three-dimensional space. Other material, such as \CXX\
+syntax, is introduced as needed.
+
+
+\section{Changes in Version~1.2}
+
+\ePiX~1.2.x has been written almost entirely from scratch. The
+conceptual model is unchanged, but there are a few changes of
+syntax. If you're new to~\ePiX, please skip straight to
+Section~\ref{section:software_deps}.
+
+
+\subsection{Syntax Changes}
+
+Except as noted below, \ePiX~1.0 files will compile under
+Version~1.2. Generally, global variables have been deprecated or
+removed, and should be replaced by function calls in new files. The
+following changes are either required, or else strongly recommended
+(and may become mandatory).
+
+\begin{itemize}
+
+\item (Mandatory) The global variable \verb+tix+ in a \filename{flix}
+ file must be manipulated through the function \verb+tix()+.
+
+\item (Mandatory) The command \code{use\_pstricks()} is obsolete.
+ PSTricks output is obtained systematically as an output format.
+
+\item (Mandatory) Deprecated ``aliases'' no longer exist:
+ \code{triple} (for the \code{P} class), \code{D}~(for \code{Deriv}),
+ and \code{I}~(for \code{Integral}). Lowercase trig function names
+ conflicted with the standard namespace and have been removed.
+
+\item (Mandatory) Geometric object commands (\code{circle},
+ \code{plane}, \code{segment}, and~\code{sphere}), which formerly
+ created class objects, now perform drawing just as \code{ellipse},
+ \code{line}, \code{rect}, etc., do. The classes are available with
+ capitalized names (\code{Circle}, etc.).
+
+\item (Mandatory) Camera orientation is controlled with functions
+ named \code{tilt}, \code{pan}, and~\code{roll}; each rotates
+ the camera about an axis through the viewpoint, not through the
+ target.
+
+\item (Recommended) The global size variables \verb+x_min+,
+ \verb+x_max+, \verb+y_min+, \verb+y_max+, \verb+x_size+, and
+ \verb+y_size+ should be replaced by the function calls
+ \verb+xmin()+, etc. (No underscores.)
+
+\item (Suggested) The camera may be accessed through the function
+ \code{cam()}.
+
+\item (Suggested) The size and bounding box are given in one command,
+ such as \code{picture(P(-1,0), P(1,1), "4x3in")}. The old syntax
+ will be retained indefinitely.
+
+\end{itemize}
+
+
+\subsection{New Features}
+
+\begin{itemize}
+
+\item Output is cleanly separated from the internal representation.
+ Figures may be written with a choice of macros---\code{PSTricks},
+ \code{tikz}, and \code{eepic} at present---and new output types
+ are easily coded so long as the format supports arbitrary line
+ segments, color, and the ability to place a \LaTeX\ box at a
+ specified location.
+
+\item Colors are a manipulable data type, available in RGB, CMY, CMYK,
+ and Gray models. \filename{xcolor}-style operations, such as color
+ model conversion, blending, superposition, and inversion are
+ provided.
+
+ The camera has a filter which affects the colors of all scene
+ elements. Filters performing CMYK separation are provided.
+
+\item Color filling is controlled with declarations, similarly to line
+ colors in \ePiX~1.0. Arrows and markers of type spot, dot, ddot,
+ and~circ are now colored like other markers. Parametric surfaces
+ may be color-shaded.
+
+ If a figure contains many shaded elements, a color-capable output
+ format (e.g.\ \code{PSTricks}~or \code{tikz}) should be used for
+ efficiency. Filled regions are implemented as fine hatching in
+ \filename{eepic}.
+
+\item An \code{axis} class provides coordinate axes with labels in a
+ variety of styles: decimals or scientific notation of specified
+ precision, fractions, trig fractions, logarithmic labels in
+ arbitrary (integer) base, and user-supplied styles.
+
+\item \ePiX~1.2.x performs page layout. Sub-figures may be manipulated
+ flexibly. The sample files give several applications.
+
+\item Non-member intersection operators for circles, planes, spheres,
+ and segments are provided. A ``non-generic'' intersection does not
+ throw an exception, but instead returns an undrawable ``malformed''
+ object.
+
+\end{itemize}
+
+
+\section{Software Dependencies}
+\label{section:software_deps}
+
+\index{Installation|(}
+\index{Mac OS X}
+
+If you run GNU/Linux, a BSD, or Solaris, you probably have (and can
+surely install) all the external software needed to use \ePiX. On
+Mac~OS~X, you will need the Apple developer tools and an X~server
+(XCode and XDarwin on the Tiger disks), and the free~\code{fink}
+package manager to build a GNU environment. For Windows, you'll need
+to install Cygwin and several packages. Detailed instructions are
+given below.
+
+``Under the hood'', an input file is successively converted to a
+\LaTeX\ picture; \code{dvi}; PostScript, \code{pdf}~or \code{eps}; and
+if desired, to a bitmapped image or movie. Four shell
+scripts---\epix, \code{laps}, \code{elaps}, and~\code{flix}---automate
+the various file format conversions.
+
+\ePiX\ consists of a \CXX\ library, header, and shell scripts, and
+requires GNU \code{bash} and a compiler \emph{for normal use}. For
+complete functionality, you need \code{g++} (Version~3.2 or later),
+\code{bash}, a text editor (\ePiX\ works particularly well with
+\code{emacs}), a \LaTeX\ distribution, \code{Ghostscript}, \code{gv}
+(or your favorite PS/PDF previewer), and \code{ImageMagick}. GNU
+\code{grep} and \code{sed} are good to have. You may need additional
+``developer packages'' (\code{binutils}, \code{make}) in order to
+build \ePiX. The more up to date your software is, the better your
+experience is likely to be, but bleeding edge versions are not
+necessary, or even always desirable.
+
+Aside from their reliance on specific programs, \ePiX's shell scripts
+are written using Unix-style pathnames. Thus, the most straightforward
+way to use \ePiX\ is to install a GNU environment.
+
+Jay Belanger's \code{emacs} mode allows you to write, compile, and
+view \ePiX\ figures without leaving \code{emacs}. If you use another
+editor, you'll want to create template source files so you don't have
+to type boilerplate code each time you write a new figure.
+\index{Emacs@\code{emacs}}
+
+
+\subsection{Setting up an Environment Under Windows}
+
+\index{Windows operating system|(}
+\begin{comment}
+Version~1.0.4 of \ePiX\ has been implemented in Python~2.2 by Andrew
+Sterian, making \ePiX\ available on any platform that supports Python,
+and without requiring a \CXX~compiler or~\code{bash}. Python is a
+GPL-ed scripting language, and is available with a Windows installer
+and detailed instructions. The easiest alternative for Windows users
+is probably to install Python~2.2 or later (if necessary) and
+\code{Pyepix}. The \code{pyepix} project home page is:
+\URL{claymore.engineer.gvsu.edu/~steriana/Python/index.html}
+\end{comment}
+
+Cygwin can be used to run \ePiX\ under Windows. Download
+\filename{setup.exe} from \URL{www.cygwin.com}, then install the
+packages you need. The following are recommended, and sufficient for
+the actions described in this manual.
+\begin{verbatim}
+(Archive) bzip2, tar
+(Devel) binutils, coreutils, gcc, gcc-g++, make, sed
+(Editors) emacs, emacs-X11, vim
+(Graphics) ImageMagick, ghostscript-base, ghostscript-x11, gv
+(Publishing) tetex (all)
+(Shells) bash, bash-completion
+(X11) X-start-menu-icons, X-startup-scripts,
+ XFree86-lib-compat, xorg-x11-fscl, xorg-x11-fsrv
+\end{verbatim}
+\index{Windows operating system|)}
+
+
+\section{Installation}
+
+\ePiX\ is distributed over the World-Wide Web as source code. Packages
+may be found at \URL{mathcs.holycross.edu/\~{}ahwang/epix/ePiX.html}
+The latest stable release is also on the CTAN mirrors, in the
+\code{graphics} directory. (Some users of Red Hat have reported file
+permission problems when unpacking the CTAN tarballs. If you encounter
+this difficulty, please try downloading the sources from the project
+main page.) Unpack the compressed tar file with the appropriate
+command:
+\begin{verbatim}
+ tar -zxvf epix-x.y.z.tar.gz
+ tar -jxvf epix-x.y.z.tar.bz2
+\end{verbatim}
+(\code{x.y.z}~is the version number) or, if your \code{tar}
+doesn't do decompression,
+\begin{verbatim}
+ gunzip -c epix-x.y.z.tar.gz | tar -xvf -
+ bzcat epix-x.y.z.tar.bz2 | tar -xvf -
+\end{verbatim}
+\code{cd} to the source directory, \filename{epix-x.y.z}. The
+\filename{INSTALL} file contains detailed installation instructions.
+If you're impatient, the short of it is \code{./configure [--options];
+ make; make install}. Run \code{./configure --help} for a list of
+options.
+
+By default, \ePiX\ installs in subdirectories of
+\filename{/usr/local}; if you want to install elsewhere, supply
+\code{./configure} with the appropriate \code{--prefix}. You may also
+want to consult \filename{POST-INSTALL} for information on setting
+your \code{PATH} variable so your shell can find \ePiX. The manual
+and sample files are in \filename{/usr/local/share/doc/epix}.
+\index{Installation|)}
+
+
+\subsection{Development}
+
+There are two mailing lists, one for user questions, one for
+development discussion. Please visit
+\URL{savannah.nongnu.org/mail/?group=epix} to subscribe.
+
+
+\texinfochapter{2}{Getting Started}
+\label{chapter:started}
+
+This chapter describes the basics of creating figures in \ePiX\ for
+readers familiar with \LaTeX\ but completely new to~\CXX. No detailed
+knowledge of~\CXX\ is needed to use \ePiX, only a bit of grammar that
+is easily absorbed by example.
+
+Section~\ref{section:running} describes the commands (shell scripts)
+comprising \ePiX, and explains how to set up a graphical environment
+using standard *nix programs. Section~\ref{section:overview} briefly
+describes figure creation. Section~\ref{section:tutorial} presents a
+few files side-by-side with their output, and should be read at a
+computer so you can run the exercises.
+
+
+\section{Running \ePiX}
+\label{section:running}
+
+An ``input file'' is a human-written figure specification containing
+\ePiX\ commands. An ``output file'' is machine-created, and is
+included directly into a \LaTeX\ document with the appropriate
+packages.
+
+Conversion (``compiling'' a figure) is accomplished with four shell
+scripts, \code{laps}, \code{epix}, \code{elaps}, and \code{flix}.
+Each script has a preferred extension for its input files, and is
+invoked with a command of the form
+\begin{verbatim}
+ <script> [options] <input file(s)>
+\end{verbatim}
+Often, no options are necessary. \code{<script> --help}
+describes \code{<script>}'s options.
+\texicomment
+Figure~\ref{fig:programs} (page~\pageref{fig:programs}) diagrams the
+shell scripts and the file types they process.
+\texicommentend
+
+By default, output file names are constructed by replacing the input
+extension with the (preferred) output extension. For brevity,
+extensions may be omitted. If the script has doubts about your intent,
+it proceeds with default behavior and prints a warning message.
+
+The author is a great fan of \Key{TAB} completion, under which a
+shell, based on what has been typed so far, automatically fills in a
+command when the \Key{TAB} key is pressed. \ePiX\ comes with code
+snippets that complete intelligently when the first part of a command
+is one of the shell scripts. For example, if command completion is
+active, typing \code{epix} \Key{TAB} prints only names of \code{epix}
+input files. To use this feature, you must install Ian MacDonald's
+\code{bash completion} package. The \filename{INSTALL} and
+\filename{POST\_INSTALL} files contain details.
+
+
+\subsubsection*{\code{laps}}
+
+\code{laps} performs \LaTeX\ to PostScript/PDF conversion, and is
+independent of the rest of \ePiX. By default, \code{laps} invokes
+\LaTeX~and \code{dvips}. The option \code{--pdf} creates a PDF~file by
+post-processing the PostScript with~\code{ps2pdf}. Other \TeX-family
+processors (\code{pslatex}, \code{pdftex}, etc.) may be used instead
+of~\LaTeX\ by invoking \code{laps} with an appropriate option.
+
+
+\subsubsection*{\code{epix}}
+
+\code{epix} compiles an input file into a \LaTeX\ picture. The input
+file should have extension \filename{xp} (for eXtended Picture). Jay
+Belanger's \code{emacs} mode is Highly Recommended; the installation
+procedure can be found in the \filename{POST\_INSTALL} file. When this
+mode is active, \code{emacs} automatically inserts a preamble template
+when a new \filename{xp} file is created. In addition, you can peruse
+\ePiX's info file, or format, compile, and preview files, all from
+within \code{emacs}.
+\index{Emacs@\code{emacs}}
+
+Output files from the script \code{epix} have extension
+\filename{eepic}, after Conrad Kwok's enhancements to the \LaTeX\
+picture environment. In Version~1.2, however, an output file need not
+contain \code{eepic} macros at all.
+
+An output file is \code{input} directly into a \LaTeX\ document whose
+preamble contains appropriate \code{usepackage} lines.
+\texicomment
+\begin{center}
+ \begin{tabular}{cc}
+ Format & Required Package(s) \\
+ \hline
+ \code{eepic} & \code{epic,eepic,xcolor} \\
+ \code{pst} & \code{pstricks} \\
+ \code{tikz} & \code{tikz}
+ \end{tabular}
+\end{center}
+\texicommentend
+Rotated text requires the \code{rotating} package.
+
+
+\subsubsection*{\code{elaps}}
+
+\code{elaps} creates stand-alone vector images (\filename{eps}~or
+\filename{pdf}) from \code{epix} input files or \filename{eepic}
+figures, even those not produced with \code{epix}. \code{elaps}
+automatically loads the \LaTeX\ packages needed for features described
+in this manual. Additional \LaTeX\ packages and \code{dvips} options
+may be specified on the command line.
+
+
+\subsubsection*{\code{flix}}
+
+\code{flix} creates bitmapped images and movies,
+Section~\ref{section:animation}. Input files should have extension
+\filename{flx}, and must contain a valid \code{epix} header as well as
+additional code. Jay Belanger's \code{emacs} mode facilitates creation
+of \code{flix} files.
+
+
+\section{The Drawing Model}
+\label{section:overview}
+
+To draw a figure manually, you select a sheet of paper of appropriate
+size and add paths, markers, and labels. These scene elements have
+attributes (line color, line width, fill color, font size, etc.)
+affecting their appearance.
+
+\index{canvas}
+\ePiX's drawing model behaves similarly. A \code{picture} command
+sets the \emph{canvas} (or logical drawing area, a Cartesian
+rectangle) and the true size of the final figure. A \code{begin}
+command initializes the ``virtual paper'' for drawing. Subsequent
+\emph{drawing commands} add objects to the scene: lines, curves,
+function plots, labels, and the like. The printed appearance of scene
+elements is determined by the current ``attribute state'' and
+controlled by \emph{style declaration} which remain in effect until
+superseded. Finally, an \code{end} command closes the figure and
+prints it to the output file.
+
+In this manual, command descriptions follow a few
+conventions. Optional arguments are enclosed in square brackets. A
+\code{len} argument is either a number (representing a length in
+\code{pt}) or a double-quoted string containing a number and a
+two-letter \LaTeX\ length unit, such as \code{"1.5pt"} or
+\code{"6cm"}. A \code{color} argument is a named primary
+(\code{Red()}, \code{Cyan()}, \code{White()}, etc.), or a \code{Color}
+specified by densities (\code{RGB(r,g,b)}, \code{CMY(c,m,y)}, etc.)
+
+\begin{itemize}
+
+\item Fill color: \code{fill(color)}, \code{nofill()}.
+
+\item Line color and width: \code{plain([color])},
+ \code{bold([color])}.
+
+\item Text size: \code{font\_size([size])}, returns to
+ \code{normalsize} if no argument is given.
+
+\end{itemize}
+
+\noindent A complete list of style commands is found in
+Section~\ref{section:quickref}, starting on
+page~\pageref{section:quickref}.
+
+To handle three-dimensional scenes, a \code{camera} performs point
+projection from a selected spatial location to the canvas. As a user,
+you'll need to control relatively few of the \code{camera}'s
+parameters. Keep in mind, however, that elements are added to a scene
+in the same order their commands appear in the output file, and that
+later elements generally cover earlier ones. Some three-dimensional
+scenes require manual ordering of the input file; such ordering is
+dependent on the \code{camera}'s location.
+
+By default, \ePiX\ draws thin, solid, black lines, performs no filling
+of regions, prints text in a 12~pt Roman font, and looks down the
+\teximath{z}~axis from a large distance, giving orthogonal projection
+on the \teximath{(x,y)}~plane. When the \code{camera} is moved, the
+\teximath{z}~axis points vertically up on the page.
+
+
+\section{Tutorial}
+\label{section:tutorial}
+
+This section presents sample input files side-by-side with their
+output so you can compare what you write with what you'll see on the
+screen or page. \ePiX\ provides standard drawing capabilities, but
+like all software has its own idioms and personality. The basic
+syntax, which comes from \code{C}/\CXX, should be mostly
+self-explanatory. One-line comments begin with the
+string~``\verb+//+''.
+
+
+%%\index{Emacs@\code{emacs}}
+\index{Graphical interface}
+To use the sample files interactively, you'll need working software:
+\filename{bash}, \filename{emacs}, \ePiX, \filename{g++},
+\filename{gv}, and a running X~server. To complete your ``GUI'',
+start~\filename{gv} and select ``Watch file'' from the ``State''
+menu. The loaded file will update automatically when it changes.
+
+Create a ``scratch'' directory, \code{cd} into it, and run the command
+\begin{verbatim}
+ tar -zxf /usr/local/share/doc/epix/sample_src.tar.gz
+\end{verbatim}
+(Change the path as appropriate for your installation.) This unpacks
+copies of the sample files into your scratch directory, including all
+the files mentioned in this manual. The \filename{README} file serves
+as a table of contents.
+
+Open a sample file in \filename{emacs}, compile it from the drop-down
+menu (or with the keyboard command), then open the \filename{EPS} file
+in~\filename{gv}. Now you're ready to follow the tutorial
+interactively. A few suggested exercises are included with each
+file. Naturally, as you study more files, you'll be able to make more
+interesting changes on your own.
+
+
+\subsubsection*{Basic Drawing}
+
+The first sample, \filename{hello.xp}, contains code needed to specify
+the figure's size, followed by the classic greeting. The \code{border}
+command draws a box around the figure in the specified color and
+width, and serves here merely to delimit the output from the
+surrounding page.
+\begin{verbatim}
+/* -*-ePiX-*- */
+#include "epix.h" // These lines are analogous
+using namespace ePiX; // to a usepackage command.
+
+int main()
+{
+ picture(P(-1,-1), P(1,1), "2 x 1in"); // corners, true size
+
+ begin(); // ---- Figure body starts here ----
+
+ border(Black(), "1pt"); // color, line width
+
+ font_size("Huge"); // May be any font size, e.g. "scriptsize"
+ label(P(0,0), "Hello, world!");
+
+ end(); // ---- End figure; write output file ----
+}
+\end{verbatim}
+
+\begin{center}
+ \input{hello.eepic}
+\end{center}
+
+\begin{itemize}
+
+\item Change the color and width of the
+ border. (\code{RGB(r,g,b);} creates an RGB color, CMY colors are
+ analogous. Named primaries are available. The densities should be
+ between \teximath{0}~and \teximath{1} for ``expected'' behavior.)
+
+\item Add \code{backing(Cyan());} after the \code{border} command.
+
+\item Put the command \code{crop\_ellipse();} before the \code{border}
+ command. Permute the \code{crop\_ellipse} command with the
+ \code{border} and \code{backing} lines, and note how the attribute
+ (\code{crop}) affects objects (\code{border}, \code{backing}).
+
+\end{itemize}
+
+
+\subsubsection*{Geometric Objects}
+
+Our next file uses simple objects to draw a 2-D house-and-sun scene.
+
+\begin{verbatim}
+int main()
+{
+ picture(P(0,0), P(5,2), "3.75 x 1.5in");
+
+ begin();
+
+ triangle(P(0.9, 1), P(3.1, 1), P(2, 1.5)); // vertices
+ circle(P(4,1.5), 0.25); // center and radius
+
+ rect(P(1,0), P(3,1)); // opposite corners
+
+ fill(Black(0.1)); // light gray
+ rect(P(2.3,0), P(2.7,0.8)); // the door
+ nofill();
+
+ bold(); // draw thicker lines
+ grid(P(1.4, 0.2), P(2, 0.6), 2, 2); // corners, number of squares
+
+ line(P(xmin(), 0), P(xmax(), 0)); // endpoints
+
+ end();
+}
+\end{verbatim}
+
+\begin{center}
+ \input{objects.eepic}
+\end{center}
+
+\begin{itemize}
+
+\item Add declarations such as \code{bold(RGB(1,0.9,0.5))} or
+ \code{fill(Yellow())} to color the scene. (Color and filling are
+ orthogonal attributes.)
+\end{itemize}
+
+\noindent The sample file \filename{house.flx} uses loops to draw
+gradient fills of the lawn, sky, and sun, and animates a sunset.
+
+
+\subsubsection*{Function Plotting}
+
+Plotted functions must be defined in the ``preamble'', before
+\code{main}. ``High-level'' elements---coordinate axes and grids, axis
+labels, and graphs---are drawn with mnemonically-named commands.
+\begin{verbatim}
+// double = double-precision floating point
+double f(double x) { return 0.75*Sin(x) - 0.25*Sin(2*x); }
+
+int main()
+{
+ picture(P(-2,-1), P(2,1), "5 x 1in"); // [-2,2] x [-1,1]
+
+ begin();
+ revolutions(); // set angle units, [0,1] = one turn
+
+ h_axis(16); // axes w/default endpts
+ v_axis(4);
+ h_axis_labels(4, P(0,-4), b); // shift down 4pt, align below
+
+ plain(Red());
+ plot(f, xmin(), xmax(), 120); // use 120 intervals
+
+ end();
+}
+\end{verbatim}
+
+\begin{center}
+ \input{plotting.eepic}
+\end{center}
+
+\begin{itemize}
+
+\item Define and plot some different functions; adjust the bounding
+ box as necessary. (Use repeated multiplication for polynomials.
+ The \code{polarplot} command graphs \teximath{r=f(\theta)}.)
+
+\item Change the arguments to \code{h\_axis\_labels}. The first
+ specifies the number of intervals to label; the second gives the
+ label offset in~\code{pt}. The last puts each label below~(\code{b})
+ its Cartesian location.
+
+\end{itemize}
+
+
+\subsubsection*{Multivariable Plotting}
+
+Functions of two or three variables are defined just like functions of
+one variable, but for plotting the return type must be a
+point~(\code{P}), not a real number~(\code{double}). The \code{domain}
+class specifies the set of inputs to plot.
+
+\begin{verbatim}
+P f(double r, double th)
+{
+ return P(r*Cos(th), r*Sin(th), pow(r, 3)*Cos(3*th));
+}
+
+int main()
+{
+ picture(P(-1,-1), P(1, 1), "2 x 1in");
+ begin();
+ pst_format(); // use PSTricks macros for output
+
+ // corners ([0,1] x [0,2\pi]) and fineness
+ // (8x40 rectangles, plotted at 16x120 resolution)
+ domain R(P(0,0), P(1, 2*M_PI), mesh(8,40), mesh(16,120));
+
+ camera.at(P(3,1,2)); // set the viewpoint
+ arrow(P(0,0,0), P(1.25,0,0)); // coordinate axes
+ arrow(P(0,0,0), P(0,1.25,0));
+
+ plain(Blue(1.2)); // line color and width
+ fill(Yellow()); // shading color
+ surface(f, R);
+
+ end();
+}
+\end{verbatim}
+
+\begin{center}
+ \input{plotting2.eepic}
+\end{center}
+
+
+\subsubsection*{Loops and Control Structures}
+\label{taylor_poly}
+
+A function can be defined by an arbitrary algorithm, and a
+\code{domain} may be used to plot a family of functions for several
+values of one variable.
+
+\begin{footnotesize}
+\begin{verbatim}
+P sin_n(double x, double n) // Taylor polynomial of sin x
+{
+ const int N((int) floor(n)); // convert n to an index bound
+ const double sqx(-pow(x, 2)); // -x^2
+ double val(x), summand(x);
+
+ for (int i=1; i <= 2*N+1; i += 2)
+ {
+ summand *= (sqx/((i+1)*(i+2))); // (-1)^i x^{2i+1}/(2i+1)!
+ val += summand;
+ }
+
+ return P(x, val); // return (x, y)
+}
+
+int main()
+{
+ picture(P(0, -1), P(6*M_PI, 1), "5 x 1in");
+
+ begin();
+
+ set_crop();
+ bold(Green());
+ plot(Sin, 0, xmax(), 120);
+
+ domain R(P(0,1), P(6*M_PI, 41), mesh(60, 40), mesh(120, 40));
+ for (int i=3; 0 <= i; --i) // print in descending degree
+ {
+ bold(RGB(0.25*i, 0, 1-0.25*i)); // degree-dependent color
+ plot(sin_n, R.slice2(5*i+1)); // plot for n = 5i+1
+ }
+ end();
+}
+\end{verbatim}
+\end{footnotesize}
+
+\begin{center}
+ \input{plotting3.eepic}
+\end{center}
+
+
+\subsubsection*{Page Layout}
+
+Page layout can be composed from sub-pages with \code{screen} objects.
+In the loop body below, objects are added to the ``active''
+\code{screen}, then \code{inset} into the ``canvas'', the screen
+representing the entire figure.
+
+\begin{verbatim}
+P f(double u, double v)
+{
+ return P((u-v)*(u+v), 2*u*v, u);
+}
+
+int main()
+{
+ picture(P(0,0), P(2,3), "5x7.5in"); // overall size
+
+ begin();
+
+ domain R(P(-1,-1), P(1,1), mesh(12,12), mesh(24,24));
+
+ for (int i=0; i<2; ++i)
+ for (int j=0; j<3; ++j)
+ {
+ screen my(P(-3,-3), P(3,3));
+ activate(my);
+ border(Red(0.6), "1pt");
+ // frame-dependent viewpoint
+ camera.at(sph(10, (2*j+i+1)*M_PI/8, M_PI/6));
+
+ plot(f, R);
+ arrow(P(0,0,0), 2*E_1);
+ arrow(P(0,0,0), 2*E_2);
+ // SW corner at (i, 2-j), padded by 0.05 on all sides
+ inset(P(i+0.05,2.05-j), P(i+0.95,2.95-j));
+ }
+
+ end();
+}
+\end{verbatim}
+
+\begin{center}
+ \input{layout.eepic}
+\end{center}
+
+
+\section{\CXX\ Basics}
+
+\index{Cplusplus@\CXX|(}
+An \ePiX\ source file is a \CXX~program. If you've successfully
+modified and compiled the sample files, you know enough~\CXX\ to use
+\ePiX. In the author's experience, \code{C}~grammar suffices for most
+applications. An excellent introduction to definitions of functions
+and variables, control statements, and overall program structure is
+Kernighan~and Ritchie's \emph{The \code{C} Programming Language},
+second edition~\cite{KnR}.
+
+
+\subsection{File Format}
+
+\index{Emacs@\code{emacs}}
+Jay Belanger's \code{emacs} mode for \code{ePiX} inserts a file
+template when an empty buffer is opened with the extension~\code{xp}.
+This section explains the purposes served by the template. A few
+additional remarks may help you avoid basic syntax pitfalls.
+
+A \CXX\ file consists of ``statements'', analogous to ordinary
+sentences. Common types include \emph{declarations} (which
+``register'' a function, variable, or type name with the compiler),
+\emph{definitions} (which assign meaning to declared names), and
+\emph{function calls} (which cause a named function to execute). Most
+statements in an \ePiX\ input file are function calls (``commands'').
+Plain declarations are relatively rare in user files, since a
+definition serves to declare any new names that it contains.
+
+Every statement ends with a semicolon, and conventionally a file
+contains at most one statement per line. The compiler ignores
+nearly all whitespace (spaces, tabs, and newlines), which should be
+used freely to make files easy to read. Other punctuation
+(periods, commas, (semi)colons, parentheses, braces, and quotes)
+dictates file parsing, and must adhere stringently to grammar.
+
+An \ePiX\ file always begins with the lines
+\findex{include}
+\begin{verbatim}
+#include "epix.h" // N.B. pre-processor directive, no semicolon
+using namespace ePiX;
+\end{verbatim}
+The first line is analogous to a \LaTeX\ \code{usepackage} command: It
+loads the contents of the ``header'' file \filename{epix.h}, importing
+the names of commands provided by~\ePiX. To avoid name conflicts,
+\ePiX's commands are enclosed in a ``namespace''. For example, the
+\code{label} command is actually known to the compiler as
+\code{ePiX::label}. The second line above tells the compiler to apply
+the prefix tacitly.
+
+
+\subsection{Variables and Functions}
+%% \index{Variable}\index{Variable!names}
+%% \index{Function}\index{Function!names}
+
+Definitions of variables and functions play the same role in a figure
+that macro definitions play in a \LaTeX\ document: gathering and
+organizing information on which the figure depends. A variable is
+defined by supplying its type, name, and initial value. By far the
+most common data types in~\ePiX\ are \code{double} (double-precision
+floating point number), \code{P}, and \code{int}. The name of a
+variable may consist (only) of letters (including the underscore
+character) and digits, and must begin with a letter:
+\begin{verbatim}
+my_var, var2, MY_var, aLongVariableName; // valid
+my-var, 2var, \v@riable, $x, ${MY_VARIABLE}; // not valid
+\end{verbatim}
+Variable names are case-sensitive, and numerous (non-universal)
+conventions govern the significance of capitalization. Generally, make
+names descriptive but not unwieldy, and avoid language keywords (such
+as \code{const}, \code{true}, \code{double}, \code{class}, or
+\code{public}) and names that begin with an underscore.
+
+A function accepts ``arguments'' and ``returns a value''. To define a
+function in~\CXX, you must specify the return type, the name of the
+function, the types of the arguments, and the algorithm by which the
+value is computed from the inputs. The code block
+\begin{verbatim}
+double f(double x)
+{
+ return sqrt(1-x*x);
+}
+\end{verbatim}
+specifies the \code{double}-valued function~\teximath{f} of one \code{double}
+variable defined by the formula \teximath{f(x)=\sqrt{1-x^2}}.
+
+
+\subsection{Comments}
+
+\CXX\ has two types of comments. \code{C}-style comments, which may
+span several lines, are delimited by the strings \code{/*}~and
+\code{*/}. One-line comments, analogous to the \LaTeX~\code{\%}, are
+begun with \code{//}. A one-line comment may appear within a multi-line
+comment, but a \code{C}-style comment may not; the compiler will
+mistake the first~\code{*/} it encounters as the end of the current
+multi-line comment.
+
+
+\subsection{Program Execution}
+
+All the ``action'' in a \CXX\ program occurs inside the special
+function~\code{main}. Running a compiled \CXX~program is viewed by the
+operating system as calling the program's \code{main} function. The
+return value (an \code{int}) is the program's exit status. The
+contents of the output file start with \code{begin()} and terminate
+with \code{end()}. Intervening statements constitute the \emph{body}
+of the file.
+
+In \CXX, a function may not be defined inside another function. Thus,
+variables may be defined inside \code{main}, but functions cannot be.
+
+
+\subsection{Strings and Raw Output}
+
+In \CXX, a \code{string} is a sequence of characters. Most
+\code{string}s in \ePiX\ input files are \emph{literals},
+double-quoted \code{string}s whose value is read from the input. In a
+string literal, backslash is an escape character; a single backslash
+is produced by a double backslash in the input file. Certain letters
+have special meanings when backslash-escaped, including ``\verb+\n+''
+(newline) and ``\verb+\t+'' (\Key{TAB}). Unlike~\LaTeX, \CXX~does not
+require a space to separate an escape sequence from following text;
+the string ``\verb+\\textwidth+'' literally represents a \LaTeX\
+command, while ``\verb+\textwidth+'' is read ``\code{TABextwidth}'' by
+the compiler.
+
+Though not commonly needed, raw text can be printed to the output
+file. The functions \code{write}, \code{pre\_write}, and
+\code{post\_write} accept \code{string} arguments. \code{write} prints
+its argument where the call appears in the input file. The other
+functions print their arguments before or after the completed picture,
+respectively. These commands must be in the file body. As an
+application, a complete \LaTeX\ \code{figure} environment (with
+caption and label) can be produced by an \ePiX\ file,
+Figure~\ref{fig:captioned}.
+
+\index{pre\_write}
+\index{post\_write}
+\index{write}
+\findex{pre\_write}
+\findex{post\_write}
+\findex{write}
+\begin{figure}
+\begin{footnotesize}
+\begin{verbatim}
+#include "epix.h"
+using namespace ePiX;
+
+int main()
+{
+ picture(P(-1,-1), P(1,1), "10cm x 3in);
+ begin();
+ pre_write("\\begin{figure}[hbt]"); // comes before the picture
+
+ post_write("\\caption{A \\LaTeX\\ figure.}"); // and after
+ post_write("\\end{figure}");
+
+ < ... other ePiX commands ... >
+ write("%% A comment near the end, but inside the picture.");
+ end();
+} // End of main()
+\end{verbatim}
+\end{footnotesize}
+\caption{Generating a self-contained figure in \ePiX.}
+\label{fig:captioned}
+\end{figure}
+
+
+\subsection{Conditionals and Loops}
+
+An algorithm's behavior usually depends on internal state. A
+\emph{conditional statement} causes blocks of code to be executed
+according to criteria. A \emph{loop} repeatedly executes a code
+block, usually changing the values of variables in a predictable way,
+so that the loop exits after finitely many traversals.
+
+\texicomment
+Figure~\ref{fig:gcd} illustrates conditionals and loops with
+Euclid's algorithm for the greatest common divisor. Three pieces of
+notation require explanation: \code{j\%i} means~``\teximath{j\pmod i}'',
+\code{||} is logical~``or'', and \code{==} is ``test for equality''.
+(A single~``\code{=}'' is the assignment operator.)
+
+\index{Function!Euclidean algorithm}
+\begin{figure}[hbt]
+\begin{footnotesize}
+\begin{verbatim}
+int gcd (int i, int j)
+{
+ int temp(i); // initialization syntax
+ if (i==0 || j==0)
+ return i+j; // define gcd(k,0) = k
+
+ else {
+ if (j < i) // swap them
+ {
+ temp = j;
+ j = i;
+ i = temp;
+ }
+ // the work is done here...
+ while (0 != (temp = j%i)) // assign temp, test for zero
+ {
+ j = i;
+ i = temp;
+ }
+ return i;
+ }
+}
+\end{verbatim}
+\end{footnotesize}
+\caption{Euclid's division algorithm in~\CXX.}
+\label{fig:gcd}
+\end{figure}
+\texicommentend
+
+%% \noindent For details on conditionals, or for more advanced techniques
+%% of \CXX\ programming, please consult a textbook or online tutorial.
+\index{Cplusplus@\CXX|)}
+
+%% Force previous two figures onto the same page
+%%\clearpage
+
+\section{Animation}
+\label{section:animation}
+
+\index{Animation|(}
+\ePiX\ is well-suited to the creation of mathematically accurate
+animations: If a figure depends suitably upon a ``time'' parameter,
+then a loop can be used to draw the entire figure for multiple time
+values, yielding successive ``snapshots'' of the figure as time
+progresses. The shell script~\code{flix} automates the process of
+compiling a suitable input file into a collection of \filename{png}s
+and assembling these frames into a \filename{mng}~or \filename{gif}
+animation. ImageMagick is the image-handling engine.
+
+A \code{flix} file is an \code{epix} file with two restrictions:
+\begin{itemize}
+ \item The \code{double} variable \code{tix()} is used as
+ ``clock''.
+
+ \item \code{main} accepts two command line arguments and sets
+ \code{tix()} accordingly.
+\end{itemize}
+\index{Emacs@\code{emacs}}
+Jay Belanger's \code{emacs} mode recognizes the file
+extension~\filename{.flx} and inserts template code if an empty buffer
+is opened. Creation of \code{flix} files is as easy as creation of
+\code{epix} files. The \filename{samples} directory contains a
+handful of \code{flix} files that may be consulted for ideas.
+
+By default, \code{flix} creates movies with 24~frames, in which
+\code{tix()} runs from~0 to~1, and animates at
+\teximath{0.08}~sec/frame. These and other parameters can be changed
+with command-line options.
+
+A ``typical'' \code{.flx} file may take 30~seconds to a few minutes to
+compile, depending on the number of frames and the complexity of each
+frame. To facilitate debugging, \code{elaps} can be run on a
+\code{flix} file. \code{elaps} runs in a fraction of the time, and if
+\code{elaps} can't produce a viewable image, \code{flix} will surely
+fail. While running, \code{flix} prints a progress bar counting the
+number of \filename{eps} files that have been created. There will be
+a delay of a few seconds (or more) after the last frame is produced,
+during which ImageMagick's \code{convert} utility assembles the movie.
+\index{Animation|)}
+
+
+\section{Layout Tricks}
+\label{section:layout}
+\index{Layout}
+
+\subsection{Stereograms}
+\index{Stereograms}
+Stereograms are created by drawing a single scene twice from slightly
+different points of view. To create a stereogram with \ePiX, write a
+``scene'' function containing the necessary drawing commands, then set
+the camera appropriately and call the scene function twice, once for
+each frame.
+
+\subsubsection*{Crossed-Eyes Stereograms}
+
+The sample files \filename{lorenz.xp}~and \filename{twisted\_cubic.xp}
+use page layout to draw crossed-eyes stereograms. For each frame,
+create and activate a \code{screen}, set the camera, and call the
+scene function. The frames are inset side by side in the final
+picture. For a crossed-eyes stereogram, the frame from the
+``rightmost'' camera position is placed on the left.
+
+\subsubsection*{Bi-Color Stereograms}
+
+The sample files \filename{cube.flx}~and \filename{mirrorball.flx}
+contain animated red-cyan stereograms, suitable for viewing with 3-D
+glasses. The technique works best with black-and-white line drawings,
+but the basic approach is the same as for crossed-eyes stereograms:
+Create a scene function and call it twice, setting the camera
+appropriately. Layout is unnecessary since the frames are superposed.
+Pen colors should be close to red and cyan, but ``optimal'' choices
+depend on one's eyes and 3-D glasses.
+
+\subsubsection*{Stereographic Movies}
+
+Either form of stereogram can be animated in a \code{.flx} file, but
+keeping one's eyes properly crossed requires practice while most
+people can instantly see depth with 3-D glasses. As always when using
+\code{flix}, debug the scene with \code{elaps} before compiling a
+movie. If a stereoscopic effect is difficult to see in a still image,
+it will be even harder to perceive in a movie.
+
+
+\subsection{Inset Images}
+
+\ePiX\ can place external images into a figure, similarly to
+Rolf Niepraschk's \code{overpic} package. You provide the Cartesian
+center point, the file name, and optionally the true height and/or
+width of the image:
+\findex{label}
+\begin{verbatim}
+ label(P(a,b), "\\includegraphics[width=w,height=h]{file}");
+\end{verbatim}
+This effect requires the \filename{graphicx} package. When compiling a
+stand-alone graphic containing an external image, you must specify the
+\filename{graphicx} package on the command line: \code{elaps -p
+graphicx <file>}
+
+\texicomment
+\begin{figure}[hbt]
+ \begin{center}
+ \input{ePiX.eepic}
+ \end{center}
+ \caption{Visual guide to \ePiX's shell scripts}
+ \label{fig:programs}
+\end{figure}
+\texicommentend
+
+
+\texinfochapter{3}{Reference Manual}
+\label{chapter:ref-man}
+
+This chapter details \ePiX's capabilities, discussing attributes and
+data types, and listing available commands in the form
+\begin{verbatim}
+ label(P posn, [P offset], string text, [align]);
+ circle(P ctr, double rad=1, normal=P(0,0,1));
+\end{verbatim}
+As in Chapter~\ref{chapter:started}, function arguments are given by
+type (\code{P}, \code{double}, \code{string}, etc.)\ and name, or by
+name alone if the type is clear. Optional arguments are enclosed in
+square brackets. A few argument types, such as \code{[align]} above,
+admit only a small number of values; these cases are explained when
+the corresponding command is first introduced.
+
+A name followed by an equals sign and a value indicates a default
+argument; if omitted in an input file, the compiler substitutes the
+default value. Only trailing arguments may be specified this way. For
+example, if the \code{rad} argument of the \code{circle} command is
+omitted, the \code{normal} argument \emph{must} be omitted as well.
+
+In an input file, only an argument's value is given, not the type:
+\begin{verbatim}
+ label(P(0,0), P(0,-4), "Hello world", b);
+ circle(P(0,-0.25), sqrt(2)); // use default normal
+\end{verbatim}
+
+Generally, \code{len} signifies either a number (representing a length
+in \code{pt}) or a double-quoted string containing a number and a
+two-letter \LaTeX\ length unit, such as \code{"1.5pt"} or
+\code{"6cm"}. \code{color} represents a \code{Color} object
+constructed from a named primary (\code{Blue()}, \code{Magenta(0.7)},
+etc.), a color specification (\code{RGB(r,g,b)}, \code{CMY(c,m,y)},
+etc.), or an operator applied to an existing \code{Color}.
+
+
+\section{File Structure}
+
+An \ePiX\ input file constitutes a short \CXX\ program. When this
+program is compiled and run by one of the shell scripts, it creates a
+figure file suitable for inclusion in \LaTeX.
+
+\index{Preamble}
+Like a \LaTeX\ document, an \ePiX\ file contains a \emph{preamble},
+which sets up a drawing environment, and a \emph{body}, which contains
+actual figure-generating commands. The minimal file has the form
+\findex{picture}
+\findex{begin}
+\findex{end}
+\begin{verbatim}
+#include "epix.h" // N.B. no semicolon
+using namespace ePiX;
+
+int main() {
+ picture(P(a1,b1), P(a2,b2), "n1 [unit1] x n2 unit2");
+ begin(); // end of preamble, start of body
+ end(); // end of body
+}
+\end{verbatim}
+\ePiX\ commands are of four general types: drawing, attribute setting,
+definitions (of data and functions), and operations on existing
+objects. Except as noted below, drawing and attribute commands must
+appear in the body, between \code{begin()}~and \code{end()}. Function
+definitions must come in the preamble, before \code{main()}. Data
+definitions may appear in the preamble or body.
+
+
+\subsubsection*{Output Format}
+\index{Output format}
+
+The \code{end()} command writes the output file to \code{stdout},
+using \code{eepic} macros by default. The shell scripts redirect
+\code{stdout} to an appropriate disk file.
+
+The attribute-setting command \code{pst\_format()} causes the output
+file to be written using \code{PSTricks} macros when \code{end} is
+called. Similarly, \code{tikz\_format()} causes the file to be written
+using \code{tikz} macros, and \code{eepic\_format()} causes the file
+to be written using \code{eepic} macros. These commands may appear
+anywhere in the figure body. There is no reason for a file to contain
+more than one such command.
+
+The output format may be selected on the command line, overriding any
+explicit request in the input file. Supplying \code{epix},
+\code{elaps}, or \code{flix} with one of the options \code{--pst},
+\code{--tikz}, or \code{--eepic} is tantamount to issuing a
+\code{pst\_format()} (etc.)\ command just before the end of the
+file. These options are listed in decreasing precedence. If more than
+one is given, the ``strongest'' applies, regardless of the command
+line order.
+
+A figure may be written directly to a specified disk file, in a format
+unaffected by the command line flags above. The command
+\begin{verbatim}
+ print_eepic("file.tex");
+\end{verbatim}
+writes the figure to the named file using \code{eepic}
+macros. Analogous commands exist for the formats \code{pst}~and
+\code{tikz}. These commands perform an immediate action. Consequently,
+the command's location in the input file is significant, and multiple
+commands may appear in a single file, so long as distinct file name
+arguments are provided. Applications include writing the same figure
+in multiple formats, or creating successive ``snapshots'' of a lengthy
+computation.
+
+
+\section{Picture Size and Aspect Ratio}
+
+\index{Picture!size}
+\index{Picture!offset}
+The \code{picture} command specifies a figure's logical and true
+sizes. In the ``minimal file'' snippet above, the \emph{canvas} is the
+Cartesian rectangle \teximath{[a_1,a_2]\times[b_1,b_2]} whose corners
+are given. Either pair of opposite corners is acceptable, but
+confusion is less likely when the SW~and NE corners are given, in this
+order.
+
+The true (printed) width and height are read from \code{picture}'s
+third argument, a ``size \code{string}'' such as \verb+"4cm x 1in"+,
+containing a number and optional \LaTeX\ length unit, an~\code{x},
+another number, and a mandatory length unit. Spaces may be used for
+legibility. The mandatory length unit becomes the \LaTeX\
+\code{unitlength}. The argument \verb+"4cm x 1in"+ creates a picture
+4~cm wide and 1~in high, but internally converts 4~cm to inches.
+Recognized length units are \code{pt} (points, the default), \code{cm}
+(centimeters), \code{in} (inches), \code{mm} (millimeters), \code{pc}
+(picas), and \code{bp} (big points).
+(\code{1in = 2.54cm = 72bp = 72.27pt}, \code{1pc = 12pt}.)
+
+The logical and true sizes may be defined separately with the commands
+\findex{bounding\_box}
+\findex{picture}
+\findex{unitlength}
+\begin{verbatim}
+ bounding_box(P(a1,b1), P(a2,b2));
+ picture(n1, n2);
+ unitlength(len); // len a length string, not a double
+\end{verbatim}
+One way or another, the logical and true dimensions \emph{must} have
+positive values when the \code{begin()} command is issued.
+
+\LaTeX\ treats the contents of a picture environment as a single box,
+aligned by default on its lower left corner. An \code{offset} command
+accepts two \code{double} arguments or a size \code{string} and shifts
+the page location accordingly. The command
+\code{offset("0.25 x -0.5cm")} shifts the picture right
+\teximath{0.25}~cm and down \teximath{0.5}~cm. If the
+\code{unitlength} is 1~cm, the command \code{offset(0.25, -0.5)} has
+the same effect.
+
+A non-zero \code{offset} causes a picture's contents to appear in a
+location where \LaTeX\ does not expect them. This can be useful in a
+\LaTeX\ document, but should be avoided when compiling a stand-alone
+image, since \code{dvips} may crop according to rules of its own.
+
+
+\index{Picture!aspect ratio}
+\index{Picture!bounding box}
+The canvas's corners are \code{(xmin(),ymin())} and
+\code{(xmax(),ymax())}, while its width and height are
+\code{xsize()}~and \code{ysize()}. The canvas is a virtual, advisory
+data structure; its dimensions are not directly related to the
+figure's printed size, and picture elements may lie outside the
+canvas. Affine scaling maps the canvas to the page when the output
+file is written.
+\begin{center}
+\input{scaling.eepic}
+\end{center}
+\label{page:scaling}
+The figure's aspect ratio is controlled by sizing the canvas. The
+aspect ratio is ``true'' if the canvas and page rectangles are
+geometrically similar, e.g., if both boxes are 1.5~times as wide as
+they are tall.
+
+
+\section{Color}
+\label{section:color}
+
+\index{Color|(}
+\ePiX\ provides a \code{Color} data type. Four models are implemented:
+\code{RGB}, \code{CMY}, \code{CMYK}, and \code{Gray}. A \code{Color}
+holds primary color ``channels'', each carrying an intensity between
+0~(no color) and~1 (full saturation). ``No color'' means black in
+\code{RGB} and \code{Gray}, white in \code{CMY(K)}. \code{RGB},
+\code{CMY}, and~\code{CMYK} colors are written to the output file as
+commands in the corresponding model. \code{Gray} shades are written
+in~\code{RGB}.
+
+Operations on red-green-blue colors are described below. Functionally,
+colors are converted to~\code{RGB}, operated upon, then converted back
+to the original model. Conversions are as described in Uwe Kern's
+\filename{xcolor} manual~\cite{xcolor}.
+
+
+\subsection{Constructors}
+
+Each color model has a ``constructor'' creating a color of specified
+densities. The \code{RGB}~and \code{CMY} models have named ``primary''
+constructors; the density argument is optional and defaults to~1.
+\findex{RGB}
+\findex{Red}
+\findex{Green}
+\findex{Blue}
+\findex{White}
+\findex{Black}
+\begin{verbatim}
+ // red-green-blue colors
+ RGB(double r=0, double g=0, double b=0);
+ Red(d=1); Green(d=1); Blue(d=1);
+ White(d=1); Black(d=1);
+\end{verbatim}
+\findex{CMY}
+\findex{Cyan}
+\findex{Magenta}
+\findex{Yellow}
+\findex{CMY\_White}
+\findex{CMY\_Black}
+\findex{CMYK}
+\findex{Gray}
+\begin{verbatim}
+ // cyan-magenta-yellow colors
+ CMY(double c=0, double m=0, double y=0);
+ Cyan(d=1); Magenta(d=1); Yellow(d=1);
+ CMY_White(d=1); CMY_Black(d=1);
+
+ // gray
+ Gray(double d=0); // equivalent to RGB(d, d, d)
+\end{verbatim}
+Each \code{CMY} constructor has a corresponding \code{CMYK} function,
+e.g.\ \code{CyanK()}~or \code{CMYK\_White()}.
+
+Though color densities lie between 0~and 1, \ePiX's primary color
+constructors take arguments mod~4, viewed as elements
+of~\teximath{[-2,2]}. Consider \code{Red(d)}, ``red with
+density~\teximath{d}''. For integer values of~\teximath{d}, the
+constructor has the following meanings: \code{Red(0)}~is black,
+\code{Red(1)}~is red, \code{Red(2)}=\code{Red(-2)}~is white, and
+\code{Red(-1)}~is anti-red, or cyan. For non-integer~\teximath{d}, the
+constructor interpolates between the bracketing integer values,
+Figure~\ref{fig:densities}. Other primary constructors work
+analogously.
+
+\begin{figure}[hbt]
+ \begin{center}
+ \input{color_density.eepic}
+ \end{center}
+ \caption{The red primary constructor.}
+\label{fig:densities}
+\end{figure}
+
+Let \teximath{\delta:[-2,2]\to[0,1]} be the piecewise-linear function
+that converts real numbers to primary color densities,
+\teximath{\clip:\mathbf{R}\to[0,1]} the clipping function. The
+non-primary constructor \code{RGB(r, g, b)} computes the density of
+the red channel as
+\teximath{\clip\bigl(\delta(r)+\delta(-g)+\delta(-b)\bigr)}; the green
+and blue channel densities are computed similarly. Every color can be
+created with arguments between 0~and 1, but the constructor accepts
+arbitrary real arguments and returns colors varying ``continuously and
+periodically''.
+
+\index{Color!transparency}
+Colors possess an ``alpha-channel'' for transparency. Except as
+supported by the output format, this feature is a stub.
+
+
+\subsection{Color Operations}
+
+Colors can be scaled, inverted, blended, superposed, and filtered. In
+the code below, \code{tint}~is a \code{Color}. The effect of each
+operation is described in the \code{rgb} model; the visual result is
+the same in all models.
+\findex{Color.invert}
+\findex{Color.blend}
+\findex{Color.superpose}
+\findex{Color.alpha}
+\findex{Color.filter}
+\begin{verbatim}
+ tint *= double c; // multiply channels by c, rebuild
+ tint.invert(); // (r, g, b) -> (1-r, 1-g, 1-b)
+ tint.blend(Color col, double t); // (1-t)*tint + t*col
+ tint.superpose(col); // add channels, then clip to [0,1]
+ tint.alpha(double d); // set alpha channel to clip(d)
+
+ tint.filter(col); // return min density in each channel
+\end{verbatim}
+Except for \code{filter}, these operators modify their object.
+\code{filter} simulates the effect of viewing \code{col}
+through a transparent sheet of \code{tint}, and returns a new
+\code{Color} object having the same model as \code{tint} without
+modifying \code{tint} itself.
+
+
+\section{Scene Attributes}
+
+Objects in a scene sit in 3-dimensional space. A \emph{camera}
+maps objects to the \emph{active screen}. The active \code{screen}
+may, in turn crop its contents. Each drawing command creates an
+object, ``photographs'' it, and adds the image to the active
+\code{screen}. This section describes the \code{Camera} and
+\code{screen} classes and a few associated concepts.
+
+
+\subsection{Angular Mode}
+\index{Angle units}
+
+By default, angles are measured in \code{radian}s. Two other angular
+modes are available: \code{degrees}~and \code{revolutions}. The
+angular mode is set with a named command, \code{radians()},
+\code{degrees()}, or \code{revolutions()}. The current angular mode
+affects all trigonometric functions and operations.
+
+
+\subsection{The Camera}
+\index{Camera|(emph}
+\index{Screen|(}
+
+Three-dimensional scenes are drawn on flat paper by applying a
+mathematical transformation. By default, \ePiX\ uses \emph{point
+projection}, the technique used by art students when they trace on a
+window with grease pencil, Figure~\ref{fig:camera}.
+
+\begin{figure}[hbt]
+ \begin{center}
+ \input{camera.eepic}
+ \end{center}
+ \vspace*{-0.25in}
+ \caption{Point projection.}
+ \label{fig:camera}
+\end{figure}
+
+\index{Camera!viewpoint}
+\index{Viewpoint}
+\ePiX\ depicts a Cartesian world by projecting mathematically to a
+screen plane, then affinely scaling to a printed page. The camera,
+which maps the world to the screen, consists of a \emph{body} (data
+that determines the position and orientation of the camera), a
+\emph{lens} (the actual mapping to the screen plane), and a
+\emph{filter} (a color through which the scene is viewed).
+
+
+\subsubsection*{Body}
+
+The camera's spatial orientation is described by a triple of mutually
+perpendicular unit vectors. In memory of happy days at the beach,
+these vectors are called \emph{sea}, \emph{sky}, and~\emph{eye}. The
+screen plane is parallel to the sea-sky plane; the sea vector points
+horizontally to the right, sky points vertically upward. The eye is
+their cross product, which points directly at the viewer.
+
+The sea-sky-eye basis is located at the \emph{viewpoint}, the camera's
+spatial location. The \emph{target}, the origin of the screen plane,
+lies on the line through the viewpoint in the direction opposite the
+eye vector. The distance from the viewpoint to the target is the
+\emph{range}. The \emph{camera sphere} is centered at the viewpoint
+and passes through the target. The orientation, viewpoint, target,
+and range completely (and redundantly) determine the camera's
+geometric situation in the world.
+
+
+\subsubsection*{The Lens}
+\index{Camera!lens}
+
+A \emph{lens} maps the world to the screen. \ePiX\ comes with four
+lenses: \emph{shadow} (the default), \emph{orthogonal},
+\emph{fisheye}, and \emph{bubble}. Each lens simulates the appearance
+of world objects as seen by an observer at the viewpoint. The shadow
+lens is point projection from the viewpoint to the screen plane. The
+orthogonal lens projects from infinite distance. Each of the other
+lenses performs radial projection to the camera sphere, then maps the
+sphere to the screen plane; the fisheye lens does orthogonal
+projection (so the entire image lies inside the disk centered at the
+target whose radius is the range) while the bubble lens does
+stereographic projection from the target's antipode.
+\index{Screen|)}
+
+
+\index{Camera!manipulation|(}
+An input file normally uses a single camera, so a global object named
+\code{camera} is defined automatically. At the start of a figure, the
+\code{camera} looks down on the \teximath{(x_1,x_2)}-plane from a
+distant point on the \teximath{x_3}-axis. The resulting view,
+essentially projection along the axis, is suitable for 2-dimensional
+figures.
+
+The \code{camera} is manipulated similarly to a real camera:
+\findex{Camera.at}
+\findex{Camera.look\_at}
+\findex{Camera.range}
+\findex{Camera.focus}
+\findex{Camera.tilt}
+\findex{Camera.pan}
+\findex{Camera.roll}
+\findex{Camera.clip\_range}
+\begin{verbatim}
+ camera.at(P posn); // set viewpoint to posn
+ camera.look_at(P targ); // set target to targ
+ camera.range(double dist); // fix target, move viewpoint
+ camera.focus(double dist); // fix viewpoint, move target
+ camera.tilt(double angle); // rotate about the sea axis
+ camera.pan(double angle); // rotate about the sky axis
+ camera.roll(double angle); // rotate about the eye axis
+ camera.clip_range(dist); // cull scenery closer than dist
+\end{verbatim}
+Explicitly setting the viewpoint or target makes the sky vector
+parallel to the projection of the \teximath{x_3}~axis when possible;
+otherwise the \teximath{x_2}-axis is used. Setting the range or focus
+moves the \code{camera} parallel along the eye line. Each command
+re-sizes the image; note that increasing the focus \emph{enlarges} the
+image. The three rotation operations fix the viewpoint, but only roll
+fixes the target.
+
+
+\subsubsection*{Filtering and Color Separation}
+\index{Color!separation}
+\index{Camera!color separation}
+
+The \code{camera} has a \emph{filter} through which all scene
+\code{Color}s pass. For uniformity, the filter should only be set at
+the start of the file body, before any visible elements have been
+placed in the scene. The filter has two primary uses---model
+conversion and color separation---but can also be used for special
+effects.
+
+There is a \code{Neutral} color, for which filtering has no effect at
+all. The \code{camera}'s default filter is \code{Neutral}. In
+addition, each color model has a \emph{neutral} representative,
+\code{RGB\_Neutral}, etc. Passing \code{Color}s through a neutral
+filter preserves their appearance but converts them to the neutral
+\code{Color}'s model.
+
+Filtering can be used to ``split'' a \code{Color} into primary
+constituents. For \code{RGB} channels, the primaries themselves are
+suitable filters. For \code{CMYK} channels, there are special
+\emph{process} filters, named \verb+C_Process+, etc.
+\begin{verbatim}
+ camera.filter(CMY_Neutral()); // convert all colors to CMY
+ camera.filter(Gray_Neutral()); // black and white photography
+ camera.filter(Green()); // the green channel
+ camera.filter(M_Process()); // the magenta channel
+ camera.filter(Red(1.4)); // la vie en rose?
+\end{verbatim}
+\index{Camera!manipulation of|)}
+\index{Camera|)}
+
+
+\subsection{Clipping}
+
+\index{Clipping|(}
+
+Two operations handle elements lying far from the target.
+\emph{Cropping} culls elements based on their screen location, and is
+described later. \emph{Clipping} removes objects whose spatial
+location lies outside the ``clip region''.
+
+Initially, the clip region is a very large box centered at the
+origin. Commands are provided to resize this box, keeping the faces
+parallel to coordinate planes.
+\findex{clip\_box}
+\findex{clip\_to}
+\begin{verbatim}
+ clip_box(P pt1, P pt2); // opposite corners
+ clip_box(P pt); // opposite corners pt and -pt
+ clip_to (P pt); // pt and P(0,0,0)
+ clip_box(); // very large box
+\end{verbatim}
+Additional ``clippers'' may be added manually. Individual clipping
+planes are specified by a point and inward-pointing normal vector.
+Parallel planes cutting a ``slice'' or ``slab'' are described by a
+location, direction, and a distance. The location lies halfway between
+the clipping planes, and the planes' normals point toward the location.
+\findex{clip\_face}
+\findex{clip\_slice}
+\findex{clip\_restore}
+\begin{verbatim}
+ clip_face(P loc, P perp); // perp points inward
+ clip_slice(loc, perp); // very close parallel planes
+ clip_slice(loc, perp, dist); // planes separated by dist
+ clip_restore(); // remove manually-added clip planes
+\end{verbatim}
+Like \code{clip\_restore}, the \code{clip\_box} and \code{clip\_to}
+commands remove all user-specified half spaces.
+\index{Clipping|)}
+
+
+\subsection{Screens and Page Layout}
+\index{Screen|(}
+\index{Screen!active}
+\index{Layout}
+
+By default, drawing occurs in the Cartesian coordinate system of the
+\code{canvas}. However, insets and subfigures are most naturally
+composed in ``local'' coordinates, then placed into their final
+location as a unit, a process called \emph{layout}. \ePiX\ implements
+layout with the \code{screen} class.
+
+
+\subsubsection*{Screens}
+\index{Bounding box}
+
+A \code{screen} is a Cartesian plane containing a distinguished
+coordinate rectangle, its \emph{bounding box}. The \code{canvas} of a
+figure is a \code{screen}, as is the internal representation of the
+printed page. At any point of a file body, some \code{screen} is
+\emph{active}, or ``open for drawing''. A new \code{screen} is created
+from a pair of opposite corners, but is not used until explicitly
+activated.
+\findex{activate}
+\findex{deactivate}
+\begin{verbatim}
+ screen subfig(P(a1,b1), P(a2,b2)); // [a1, a2] x [b1, b2]
+ activate(subfig); // open subfig for drawing
+ // commands to draw in subfig
+ deactivate(subfig); // re-activate the previous screen
+\end{verbatim}
+
+The \code{canvas} is automatically drawn at the \code{end} of the
+input file. The contents of other \code{screen}s must be incorporated
+into the \code{canvas} explicitly with an \code{import}~or
+\code{inset} command. \code{import} affinely scales the bounding box
+of the ``child'' \code{screen} to the \code{canvas}. \code{inset}
+specifies corners in the ``parent'' where the child is
+placed.
+\findex{import}
+\findex{inset}
+\begin{verbatim}
+ import(); // active screen to canvas
+ import(subfig); // subfig to canvas
+ inset(P sw, P ne); // active screen to specified rectangle
+ inset(subfig, sw, ne); // subfig to specified rectangle
+ inset(subfig); // inset to subfig's corners
+\end{verbatim}
+
+
+\subsubsection*{Extracting}
+
+The portion of a \code{screen} enclosed by a specified rectangle can
+be \emph{extracted}. Each of the commands
+\findex{extract}
+\findex{canvas}
+\begin{verbatim}
+ subfig.extract(P sw, P ne);
+ canvas().extract(P sw, P ne);
+\end{verbatim}
+returns the \code{screen} having stated corners and containing part of
+\code{subfig} or the \code{canvas}, respectively. Elliptical and
+diamond-shaped portions of a \code{screen} may be extracted. The
+contents occupy the ellipse or diamond inscribed in the given
+rectangle.
+\findex{extract\_diamond}
+\findex{extract\_ellipse}
+\begin{verbatim}
+ subfig.extract_ellipse(sw, ne);
+ canvas().extract_diamond(sw, ne);
+\end{verbatim}
+The \code{screen} returned by \code{extract} (or its variants) may be
+used just like a manually-constructed \code{screen}, for example to
+construct a magnified inset.
+
+
+\subsubsection*{True-Size Drawing}
+\label{truesize}
+
+On occasion, it is necessary to draw at known page size, independently
+of the unit length. For 2-dimensional drawing in the
+\teximath{(x_1,x_2)}-plane with the \code{camera} in its default
+location, the coordinates (horizontal, vertical, or both) of a
+\code{screen} may be interpreted as true~pt offsets relative to a
+specified point rather than as Cartesian coordinates.
+\findex{inlay}
+\findex{inlay\_horizontal}
+\findex{inlay\_vertical}
+\begin{verbatim}
+ inlay(subfig, P loc);
+ inlay_horizontal(subfig, loc);
+ inlay_vertical(subfig, loc);
+\end{verbatim}
+Each command maps the origin of \code{subfig} to the specified
+location in the active \code{screen}. The first performs affine
+scaling so that one Cartesian unit in \code{subfig} maps to one
+true~pt on the page. The second and third commands perform this
+scaling only in the named direction.
+
+\findex{pt\_to\_screen}
+The \code{inlay} functions are suitable only for 2-dimensional
+effects. For 3-dimensional true-size drawing, the function
+\code{pt\_to\_screen} converts a true length of 1~pt into Cartesian
+coordinates in the active \code{screen}. For example, the command
+\code{line(P(0,0), P(pt\_to\_screen(12),0))} draws a line segment
+12~pt long with its left endpoint at the Cartesian origin. True size
+drawing is unusual in an input file, but has definite uses in library
+code; \ePiX's right angle marker is a typical application.
+
+Either type of true-size drawing works as described when drawing in
+the \code{canvas}, and \emph{only} when drawing in a \code{screen}
+imported to the \code{canvas} at ``true Cartesian'' size (one
+\code{screen} unit maps to one Cartesian unit in the \code{canvas}).
+In other situations, the true size coordinate(s) will be scaled by
+additional affine transformation(s).
+
+
+\subsubsection*{Cropping and Decorations}
+
+\index{Cropping}
+A \code{screen} has a \emph{crop mask}: rectangular (default),
+elliptical, or diamond-shaped. If cropping is switched on in the
+active \code{screen}, added elements are cropped to the crop mask.
+For example, cropping by the default crop mask in the \code{canvas}
+ensures the figure lies inside the printed region allocated by
+\LaTeX.
+
+The \code{crop} commands below affect the active \code{screen}
+only. Cropping is not a ``global'' attribute, but must be set or unset
+explicitly for each \code{screen}. By default, cropping is switched
+off.
+\findex{crop}
+\findex{crop\_ellipse}
+\findex{crop\_diamond}
+\findex{set\_crop}
+\begin{verbatim}
+ set_crop(); // activate cropping
+ set_crop(false); // deactivate cropping
+ crop_diamond(); // <>-shaped mask, set crop state
+ crop_ellipse(); // etc...
+ crop(); // crop active screen's contents
+\end{verbatim}
+Normally the crop mask is inscribed in the \code{screen}'s bounding
+box. The commands \code{crop\_diamond} and \code{crop\_ellipse} also
+accept a pair of \code{P}~arguments, which are treated as corners of
+the crop box.
+
+The active \code{screen} may be decorated with a \code{border}
+(outline of specified color and line width) and \code{backing} (solid
+fill color). The crop mask determines the shape of the \code{border}
+and \code{backing}.
+\findex{border}
+\findex{backing}
+\begin{verbatim}
+ border(color, len);
+ backing(color);
+\end{verbatim}
+Identically-named member functions can be applied to an arbitrary
+\code{screen} whether or not it is active:
+\begin{verbatim}
+ scr.crop_rectangle().backing(Blue(1.8));
+ canvas().crop();
+\end{verbatim}
+
+
+\subsubsection*{Affine Maps}
+\index{Affine map}
+
+A \emph{plane affine map} has the form \teximath{T(x) = Ax+b} for some
+invertible \teximath{2\times2} matrix~\teximath{A} and a constant
+vector~\teximath{b}. \ePiX's \code{affine} class allows affine maps to
+be built and applied to \code{screen}s' contents.
+
+An affine map is uniquely determined by the images of three
+non-collinear points. The constructor returns the affine map sending
+the points \teximath{(1,0)}, \teximath{(0,1)}, and~\teximath{(0,0)} to
+\code{pt1}, \code{pt2}, and~\code{pt0}, respectively.
+\findex{affine}
+\begin{verbatim}
+ affine af(P pt1, P pt2, P pt0=P(0,0));
+\end{verbatim}
+To emphasize, the arguments are locations, not displacements, and the
+image of the origin comes last. There is also a \code{void}
+constructor (taking no arguments) which returns the identity map.
+
+To facilitate construction of affine maps, an existing \code{affine}
+may be post-composed with a variety of ``elementary'' affine
+transformations. In the commands below, \code{th} is an angle (in
+current units), \code{sc} is a non-zero \code{double}, and \code{ctr}
+is a point fixed by the composing transformation. In each command,
+\code{ctr} defaults to \teximath{(0,0)}.
+\findex{shift}
+\findex{rotate}
+\findex{reflect}
+\findex{h\_scale}
+\findex{v\_scale}
+\findex{scale}
+\findex{h\_shear}
+\findex{v\_shear}
+\findex{postcomp}
+\begin{verbatim}
+ affine af; // the identity map
+ af.shift(P arg); // translate by arg
+ af.rotate(th, [ctr]); // counterclockwise rotation about ctr
+ af.reflect(th, [ctr]); // reflect across line through ctr
+
+ af.h_scale(sc, [ctr]); // horizontal scaling
+ af.v_scale(sc, [ctr]); // vertical scaling
+ af.scale(sc, [ctr]); // dilatation
+
+ af.h_shear(sc, [ctr]); // shear preserving horizontals
+ af.v_shear(sc, [ctr]); // shear preserving verticals
+
+ af.invert(); // the inverse
+ af.postcomp(affine f); // post-compose with f
+ af(f); // pre-compose, af not modified
+\end{verbatim}
+A non-invertible \code{affine} can be created \emph{only} by shearing
+or scaling with an extremely large or extremely small argument, or by
+supplying three collinear points to the constructor. Calling
+\code{invert} on a non-invertible map merely issues a warning and
+performs no action.
+
+An \code{affine} may be applied to a \code{screen}'s current contents.
+The \code{screen} class has eight member functions (\code{shift}
+through \code{shear}) with syntax identical to the affine map
+functions. In addition, an arbitrary \code{affine} may be applied to a
+\code{screen}:
+\findex{apply}
+\begin{verbatim}
+ scr.shift(arg); // shift scr's contents by arg; etc.
+ scr.apply(f); // apply f to scr's contents
+\end{verbatim}
+To apply a composition of several maps to a \code{screen}, it's best
+to build an \code{affine} map by composition, then \code{apply} the
+map. Composing \code{affine}s is cheap; \code{apply}ing an
+\code{affine} is costly in proportion to the number of elements in the
+\code{screen}.
+
+Applying an \code{affine} to a \code{screen} has no effect on the
+bounding box, \code{border}, or \code{backing}, and may move elements
+outside the bounding box even if cropping is active. To ensure a
+\code{screen}'s contents lie inside the bounding box, \code{crop} the
+\code{screen} \emph{after} \code{apply}ing the \code{affine}(s).
+
+The sample file \filename{inverse.xp} uses \code{affine} maps to
+depict branches of inverse functions in one variable,
+\filename{symmetry.xp} depicts the permutation group~\teximath{S_3}
+by its action on a regular hexagon.
+\index{Screen|)}
+
+
+\section{Drawing Attributes}
+
+\ePiX\ maintains drawing states for filled regions, paths, and text
+objects.
+
+
+\subsection{Filled Regions}
+
+\index{Filling}
+\index{Path|(}
+\index{Path!filled}
+Filling is either on or off. When filling is active, closed paths are
+filled with the current \emph{fill color}.
+\findex{fill}
+\findex{nofill}
+\begin{verbatim}
+ fill(); // turn filling on
+ fill(color); // turn filling on, specify color
+ nofill(); // turn filling off, same as fill(false);
+\end{verbatim}
+
+
+\subsection{Paths}
+
+Paths and borders of filled regions are drawn with two \emph{pen}s,
+each described by color and line width. The \emph{line pen} draws
+all path-like objects. The \emph{base pen} does nothing unless it is
+wider then the line pen, in which case it draws an ``underlayer'' or
+``border'' on the line pen.
+\findex{pen}
+\begin{verbatim}
+ pen(len); // set line pen width
+ pen(color); // set line color, keep width
+ pen(color, len); // set color and width
+\end{verbatim}
+As usual, \code{len} may be either a length string or a \code{double},
+interpreted as a width in~\code{pt}. There are \code{base} functions
+with the same signatures and analogous meanings for the base pen.
+
+The line width can be set with named declarations; the optional
+argument sets the line color:
+\findex{plain}
+\findex{bold}
+\findex{bbold}
+\begin{verbatim}
+ plain([color]); // 0.4pt
+ bold([color]); // 0.8pt
+ bbold([color]); // 1.6pt
+\end{verbatim}
+
+
+\subsubsection*{Path Style}
+
+\index{Path!style}
+By default, path-like objects are drawn with solid lines. Dashed,
+dotted, and free-form path style patterns are also available. (The
+\code{base} underlayer is always solid.) The page length of a pattern
+defaults to 12~pt, but can be set.
+\findex{line\_style}
+\findex{dash\_size}
+\begin{verbatim}
+ line_style(string);
+ dash_size(len=12);
+\end{verbatim}
+The path style is set with a WYSIWYG string of dashes, spaces, and
+periods, representing a pattern of dashes, gaps, and dots. In the
+sample styles below, the repeating units have the same page size,
+12~pt.
+\begin{center}
+ \input{pathstyle.eepic}
+\end{center}
+For brevity and uniformity, named commands are provided.
+\findex{solid}
+\findex{dashed}
+\findex{dotted}
+\begin{verbatim}
+ solid(); "-" dashed(); "- -" dotted(); " . "
+\end{verbatim}
+A sequence of \teximath{n}~dashes, spaces, and dots corresponds to a
+dash/dot pattern in an interval divided into \teximath{n}~subintervals
+of equal length. If the \teximath{i}th character is a dash or space,
+the \teximath{i}th~subinterval is drawn solid or empty,
+respectively. If the \teximath{i}th~character is a period, a dot is
+placed at the midpoint of the \teximath{i}th~subinterval.
+
+This pattern is applied to a path-like object as follows. The page
+length of each edge is divided by the current \code{dash\_size} and
+the ceiling (next largest integer) taken. This many copies of the
+current path style are scaled onto the edge. The first and last
+characters are adjacent in repeated units.
+
+There are three inequivalent ways to adjust the dash length/dot
+spacing in a non-line path: Change the \code{dash\_length}, create a
+path with a different number of points, or use a longer, repetitive
+pattern. For best results, the style string should not be longer than
+about a dozen characters.
+
+If you need several dashed/dotted line styles in multiple figures,
+it's best to define a custom header instead of hard-coding line
+styles. See Section~\ref{section:extensions} for guidance.
+\index{Path|)}
+
+
+\subsection{Text Objects}
+
+\index{Labels|(emph}
+\index{Labels!alignment}
+
+Two types of textual element may appear in a file: \emph{labels} (text
+boxes) and \emph{markers} (\LaTeX\ symbols). A marker occupies a box
+of zero size, and is placed at a specified Cartesian location. A label
+has typographical size, and is usually offset from its Cartesian
+location. For placement, an \emph{alignment point} is attached to each
+label, and Cartesian coordinates position the alignment point.
+
+\subsubsection*{Labels}
+
+A label is printed as a \LaTeX\ box. By default, the alignment point
+is its reference point, the intersection of the left edge and the
+baseline, which is used by \LaTeX\ to position the box on the
+page:\input{basepoint.eepic}
+
+\index{Labels!alignment|(}
+The alignment point may be \emph{offset} manually by a specified
+number of \code{pt}. Additionally, a label's location with respect to
+the alignment point can be chosen with an optional \LaTeX-style
+alignment option. This scheme allows labels to be placed easily where
+they will not overlap other parts of the figure, and ensures labels
+stay properly positioned when the size or aspect ratio of a figure
+changes.
+\findex{label}
+\begin{verbatim}
+ label(P posn, P offset, string msg, [align]);
+ label(posn, msg);
+\end{verbatim}
+The first two components of the \code{offset} argument are numbers
+of~\code{pt} to shift the alignment point right and up. The optional
+\code{align} argument may be one---or an appropriate pair---of
+\code{t}, \code{b}, \code{r}, or~\code{l} (top, bottom, right, left),
+or~\code{c} (center). These alignment options specify the position of
+the label \emph{relative to the Cartesian location}~\code{posn},
+namely they work \emph{opposite} to the way they work in \LaTeX.
+\begin{center}
+ \input{alignment_lr.eepic}\qquad
+ \input{alignment.eepic}
+\end{center}
+\index{Labels!alignment|)}
+
+The \code{msg} argument is usually a snippet of \LaTeX\ code enclosed
+in double quotes. \CXX~treats ``\verb+\+'' as an escape character, so
+a double backslash is needed in the source to get a single backslash
+in the output. For example,
+\begin{verbatim}
+ label(P(0,0), P(2,-1), "$\\rho = \\sin\\theta$", br);
+\end{verbatim}
+positions an alignment point \code{2pt}~right and \code{1pt}~below the
+(Cartesian) origin, and typesets the equation
+\teximath{\rho=\sin\theta} below and to the right.
+
+\index{Labels!rotated}
+\index{Angle units}
+Labels can be rotated; the (counterclockwise) angle is set in current
+angle units with the command \code{label\_angle(theta)}. For example,
+a rotation angle of~90 degrees prints labels along a vertical
+axis. Though label rotation has legitimate uses, it can make labels
+more difficult to read, defeating their purpose. Do not use rotated
+labels merely because they are available. As a practical matter, if an
+output file contains rotated labels, the enclosing document must use
+the \code{rotating} package. \code{elaps} automatically loads this
+package.
+
+\index{Affine map!action on labels}
+An \code{affine} behaves moderately intelligently when acting on a
+marker or label. The mapping is applied to the label's location, and
+the ``linear part'' is used to adjust the offset and label angle. No
+attempt is made to treat alignment. For best results, if a
+\code{screen} will have an \code{affine} applied to it, label
+positions should be fine-tuned only with offsets, not alignment
+arguments. In all situations, the font itself is unchanged; no
+attempt is made to print sheared, scaled, or reflected text. The
+sample file \filename{inverse.xp} illustrates the effect of affine
+maps on labels.
+
+
+\subsubsection*{Fonts and Type Size}
+
+\index{Fonts}
+\index{Labels!fonts in}
+By default, the font in an \ePiX\ figure is that of the enclosing
+document. The font size and face are changed with
+``declaration-style'' commands such as
+\findex{font\_size}
+\findex{font\_face}
+\begin{verbatim}
+font_size("Large");
+font_face("sc");
+\end{verbatim}
+The argument of \verb+font_size+ is a valid \LaTeX\ size. If no
+argument is given, \code{normalsize} is understood. \verb+font_face+
+accepts a two-letter string, appended to the string ``\code{text}'' to
+give a \LaTeX\ font declaration command (``\code{textsc}'' above).
+Finer-grained control is accomplished by placing \LaTeX\ commands
+into the label text.
+
+
+\subsubsection*{Label Attributes and Masked Labels}
+
+Each label command has a corresponding ``mask'' version
+(\code{masklabel}) that draws an opaque rectangle under the label
+text. The mask size exceeds the label's size by an amount of
+\emph{padding}, and the mask is itself surrounded by a rectangular
+\emph{border}, of specified color and width.
+\findex{label\_color}
+\findex{label\_mask}
+\findex{label\_pad}
+\findex{label\_border}
+\findex{no\_label\_border}
+\begin{verbatim}
+ label_color(color); // set label text color
+ label_mask(color=White()); // set mask color
+ label_pad(string len);
+
+ label_border(color, [len]); // set color (and line width)
+ label_border(len); // set line width only
+ no_label_border(); // turn off label borders
+\end{verbatim}
+
+
+\subsubsection*{Markers}
+
+\index{Marker types|(}
+\ePiX's marker types, listed in Table~\ref{table:marker}, are obtained
+with the command \verb+marker(P pt, <MARKER TYPE>);+ Several
+``dot-like'' marker types are available by name: \input{dots.eepic}
+\findex{spot}
+\findex{dot}
+\findex{ddot}
+\findex{box}
+\findex{bbox}
+\findex{ring}
+\findex{circ}
+\begin{verbatim}
+ spot(P pt); dot(P pt); ddot(P pt);
+ --- box(P pt); bbox(P pt);
+ ring(P pt); circ(P pt); ---
+\end{verbatim}
+A \code{circ} is filled with the current \code{mask\_color}, and a
+\code{ring} is ``hollow''. Each dot-like marker can also be called
+with label syntax, generating a labeled marker with one command.
+\begin{verbatim}
+ dot(P posn, offset=P(0,0), msg="", align=none); // etc.
+\end{verbatim}
+
+\findex{dot\_size}
+By default, \code{spot}~and \code{ring} are 4~pt in diameter;
+\code{dot}, \code{box}, and~\code{circ} are 3~pt in diameter;
+\code{ddot}~and \code{bbox} are 2~pt in diameter. At arbitrary
+diameter, a \code{spot} is \teximath{4/3}~the diameter of a~\code{dot}
+and a~\code{ddot} is \teximath{2/3}~the diameter. The command
+\code{dot\_size(diam=3)} sets the diameter of a \code{dot}, and hence
+the size of all dot-like markers.
+
+\begin{table}[tb]
+ \begin{center}
+ \input{marker.eepic}
+ \end{center}
+ \caption{\ePiX's \code{marker} types.}
+ \label{table:marker}
+\end{table}
+\index{Marker types|)}
+
+
+
+\subsubsection*{Reminders}
+
+When constructing and placing a label,
+\begin{itemize}
+\item Offsets are specified in \code{pt} (true length), not Cartesian
+ units: A label's location relative to its alignment point should not
+ depend on the logical or printed size of the figure.
+
+\item The label text is enclosed in double quotes (the single
+ character~\code{"}), and contains the \LaTeX\ code to generate the
+ label. Backslashes are doubled.
+ \index{Labels!backslash in}
+ \index{Labels!in double quotes}
+\end{itemize}
+\index{Labels|)}
+
+
+\subsection{Color Declarations}
+
+Old-style color declarations set the fill color, line color, and
+text color.
+\findex{rgb}
+\findex{cmyk}
+\begin{verbatim}
+ rgb(r, g, b); cmyk(c, m, y, k);
+ rgb(P); cmyk(P); // for function-controlled colors
+ red(d); // similarly for other primaries
+\end{verbatim}
+\index{Color|)}
+
+
+\section{Creating and Drawing Objects}
+
+Scene elements include geometric objects, coordinate grids, axis
+labels, and function plots. A few commands create an object (a point,
+line segment, circle, sphere, or plane) that can be used in subsequent
+computations, but most drawing commands automatically create, draw,
+and discard objects.
+
+
+\subsection{Geometric Data Structures}
+
+\index{Point|(}
+The simplest object in the world, and by far the most common named
+data structure, is~\code{P}, an ordered triple of real numbers
+(double-precision floats). The function~\code{P(x1,x2,x3)} creates the
+point~\teximath{(x_1,x_2,x_3)}. If only two arguments are provided,
+\teximath{x_3=0} by default. This convention allows \ePiX\ to treat
+2-~and 3-dimensional figures uniformly. The standard basis is
+available: \code{E\_1=P(1,0,0)}, etc.
+
+Depending on context, a \code{P} may represent either a
+\emph{location} (point) or a \emph{displacement} (vector). Almost all
+\ePiX\ functions treat a~\code{P} as a point. However, algebraic
+operators and commands that plot vector fields treat \code{P}
+arguments as displacements.
+
+Polar, cylindrical, and spherical coordinate \code{P}~constructors are
+sensitive to the current angular mode.
+\index{Angular mode}
+\findex{P}
+\findex{polar}
+\findex{cis}
+\findex{cyl}
+\findex{sph}
+\begin{verbatim}
+ P pt=polar(r,t); // (r*Cos(t), r*Sin(t), 0)
+ P pt=cis(t); // (Cos(t), Sin(t), 0) = polar(1, t)
+ P pt=cyl(r,t,z); // (r*Cos(t), r*Sin(t), z)
+ P pt=sph(r,t,phi); // polar(r,t)*Cos(phi) + (0,0,r*Sin(phi))
+\end{verbatim}
+
+Algebraic operations---addition/subtraction, scalar multiplication;
+scalar, cross, and componentwise products; orthogonalization---can
+be performed on~\code{P}s. In compound expressions, the binary
+operators below should be enclosed in parentheses, and scalars must be
+collected at left, \code{P}s at right.
+\findex{P.x1}
+\findex{P.x2}
+\findex{P.x3}
+\findex{J}
+\begin{verbatim}
+ double u=pt.x1(); // first coordinate of pt, etc.
+ P(a,b,c)|P(x,y,z); // scalar product, ax+by+cz
+ P(a,b,c)&P(x,y,z); // componentwise product (ax, by, cz)
+ P(a,b,c)*P(x,y,z); // cross product (bz-cy, cx-az, ay-bx)
+ J(p); // quarter turn about the x3-axis
+ p%q; // orthogonalization, p (mod q)
+\end{verbatim}
+Explicitly, \code{p\%q}~is the unique vector \code{p+k*q}
+perpendicular to~\code{q}.
+
+\code{P}~operations express mathematical relationships, and therefore
+imbue a figure with logical structure, making the input file easier to
+read, modify, and maintain. Commonly, a file preamble will define a
+few named points with hard-coded coordinates, then define additional
+points of interest using \code{P}~operators.
+\index{Point|)}
+
+
+\subsubsection*{Other Geometric Classes}
+
+In addition to~\code{P}, objects of type \code{Circle}, \code{Plane},
+\code{Segment}, and \code{Sphere} can be used for Euclidean geometry
+constructions. Simple affine operations are supplied for each type, as
+is a \code{draw()} function, which represents the object as a path in
+the screen.
+\findex{shift}
+\findex{move\_to}
+\findex{scale}
+\findex{draw}
+\begin{verbatim}
+ obj.shift(P arg); // translate by arg
+ obj.move_to(P arg); // move center to arg
+ obj.scale(double c); // scale about center by c
+ obj.draw();
+\end{verbatim}
+A \code{Segment}'s ``center'' is its midpoint. A \code{Plane} has no
+center; \code{move\_to} translates the \code{Plane} to pass through
+\code{arg}, and \code{scale} has no effect.
+
+\index{Circle}
+A \code{Circle} data structure consists of a center, radius, and a
+perpendicular unit vector. Three constructors are provided:
+\findex{Circle}
+\begin{verbatim}
+ Circle(center=P(0,0,0), double rad=1, normal=E_3);
+ Circle(P center, P point);
+ Circle(P p1, P p2, P p3);
+\end{verbatim}
+The second constructor creates the \code{Circle} parallel to the
+\teximath{(x_1,x_2)}~plane, with given center, and radius equal to the distance
+between the arguments. (A warning is printed if the second argument
+does not lie on the circle, namely, if the arguments do not lie in a
+plane parallel to the \teximath{(x_1,x_2)}~plane.) The third returns the
+\code{Circle} passing through the given points; the points must not be
+collinear.
+
+The data defining a \code{Circle} are recovered with member functions
+named \code{center()}, \code{radius()}, and \code{perp()}.
+
+\index{Plane}
+\findex{Plane}
+A \code{Plane} is specified by a point and normal vector, or by three
+non-collinear points. The \code{draw()} function clips the plane and
+draws the resulting polygon. Unless the clip box has been set
+manually, the clipped polygon's vertices will have large coordinates.
+
+\index{Segment}
+\findex{Segment}
+A \code{Segment} is constructed from its endpoints. The member
+function \code{midpoint()} returns the center.
+
+\index{Sphere}
+\findex{Sphere}
+A \code{Sphere} is specified by a point and a radius---by default the
+origin and unity, or by the center and a point on the sphere. Member
+functions \code{center()}~and \code{radius()} return the defining
+data. Capabilities specific to geography and spherical geometry are
+described below, pp.~\pageref{non-eucl}ff.
+
+The \code{draw()} function of a \code{Sphere} draws the horizon
+visible from the current viewpoint. While this horizon is a circle in
+object space, its image in the screen is generally an ellipse.
+Antipodal points are not generally mapped to points symmetrically
+placed with respect to the center of this ellipse. These effects are
+most pronounced when the viewpoint is close to the \code{Sphere} and
+the center is not close to the \code{target}.
+
+
+\subsubsection*{Intersection}
+
+\index{Intersection}
+
+To facilitate geometric computation, \ePiX's \code{Circle},
+\code{Plane}, \code{Segment}, and \code{Sphere} classes can be
+intersected with the \code{*}~operator.
+\texicomment
+Table~\ref{table:intersect}
+lists the return types for each pair of arguments. Intersection is
+commutative, so only the top half of the table is shown. For purposes
+of intersection, a \code{Segment} is extended into a line.
+The sample file \filename{pascal.xp} gives typical applications of
+objects and intersection.
+\findex{intersection}
+\begin{table}[hbt]
+\begin{center}
+ \begin{tabular}{c|cccc}
+ \code{*} &
+ \code{Segment} & \code{Circle} & \code{Plane} & \code{Sphere} \\
+ \hline
+ \code{Segment} & \code{P} & \code{Segment} & \code{P} & \code{Segment} \\
+ \code{Circle} & & \code{Segment} & \code{Segment} & \code{Segment} \\
+ \code{Plane} & & & \code{Segment} & \code{Circle} \\
+ \code{Sphere} & & & & \code{Circle}
+ \end{tabular}
+ \caption{Object intersection types.}
+ \label{table:intersect}
+\end{center}
+\end{table}
+\texicommentend
+
+A \code{Circle} has a center, radius, and unit normal; a \code{Plane}
+has a distinguished point and unit normal; a \code{Segment} has two
+endpoints; a \code{Sphere} has a center and radius. An object is
+\emph{malformed} if these conditions are not met. The constructors
+return well-formed objects with two exceptions: \code{Circle} and
+\code{Plane} create malformed objects if called with three collinear
+points. The operator~\code{*} returns a malformed object if either
+argument is malformed, or if the operands are disjoint, tangent, or
+coincident. Malformedness is benign: Calling \code{draw()} on a
+malformed object does nothing.
+
+
+\subsubsection*{Orthonormal Frames}
+
+A \code{frame} comprises three mutually perpendicular unit
+vectors. The constructor takes three vectors. The \code{frame}'s third
+vector~\teximath{e_3} is positively proportional to~\code{v3}, the
+second vector~\teximath{e_2} is positively proportional to
+\code{v2\%v3}, and the first is the cross product,
+\teximath{e_1=e_2\times e_3}. Thus, a \code{frame} is right-handed,
+and does not depend on~\code{v1}.
+
+The elements of a \code{frame} are named \code{sea}, \code{sky}, and
+\code{eye}, just as for the \code{camera}. A \code{frame} can be
+rotated through an arbitrary angle about any of its elements.
+\findex{frame}
+\begin{verbatim}
+ frame(); // the standard basis {E_1, E_2, E_3}
+ frame fr(v1, v2, v3); // orthonormalize {v1, v2, v3}
+ fr.sea(); // the first element of fr, etc.
+ fr.rot1(theta); // rotate fr through theta about sea, etc.
+\end{verbatim}
+
+
+\subsection{Path-Like Elements}
+
+Basic path-like objects are drawn with named commands. Arguments of
+polygon commands are endpoints/vertices. Except for \code{line}~and
+\code{Line}, the following are subject to filling.
+\findex{line}
+\findex{Line}
+\findex{triangle}
+\findex{rect}
+\findex{quad}
+\findex{circle}
+\begin{verbatim}
+ line(P p1, P p2, [double expand]);
+ Line(p1, p2); // draw line through p1, p2 (crop required)
+ triangle(P p1, P p2, P p3);
+ rect(P p1, P p2);
+ quad(P p1, P p2, P p3, P p4); // quadrilateral
+ circle(ctr=P(0,0,0), rad=1, normal=E_3);
+ circle(ctr, pt);
+ circle(pt1, pt2, pt3);
+\end{verbatim}
+The optional \code{line} argument is an expansion parameter:
+\code{line(p1,p2,t);} draws a segment centered at the midpoint of
+\code{p1}~and \code{p2}, with length scaled
+by~\teximath{2^{t/100}}. (Setting \teximath{t=100} doubles the length,
+while \teximath{t=-100} halves the length.) The arguments of
+\code{rect()} must lie in a plane parallel to a coordinate plane. The
+arguments to \code{circle} commands are the same as for \code{Circle}
+constructors.
+
+Quadratic and cubic splines are described by their control points. A
+list of~\code{P} is drawn as a ``natural'' spline (the \teximath{C^2}
+piecewise cubic curve with vanishing second derivatives at the
+endpoints); the number of points per cubic segment must be specified.
+Circular and elliptical arcs are given by center, a basis, angular
+range, and an optional number of intervals.
+\findex{spline}
+\findex{arc}
+\findex{ellipse}
+\begin{verbatim}
+ spline(P p1, P p2, P p3, [int n]); // quadratic
+ spline(P p1, P p2, P p3, P p4, [int n]); // cubic
+ spline(vector<P>, int n); // natural spline
+
+ arc(P ctr, rad, t_min, t_max); // parallel to (x1,x2)-plane
+ ellipse(P ctr, P v1, P v2); // in plane spanned by v1, v2
+ ellipse(P ctr, P v1, P v2, t_min, t_max, [int n]);
+\end{verbatim}
+\texicomment
+Mathematically, these commands draw parametric paths
+\begin{align*}
+ \text{Spline:}\quad&(1-t)^2 p_1 + 2(1-t)t p_2 + t^2 p_3,
+ && t\in[0,1] \\
+ \text{Spline:}\quad&(1-t)^3 p_1 + 3(1-t)^2t p_2 + 3(1-t)t^2 p_3 + t^3p_4,
+ && t\in[0,1] \\
+ \text{Arc:}\quad&\mathrm{ctr} + (\cos t)(\mathrm{rad},0,0)
+ + (\sin t)(0,\mathrm{rad},0),
+ && t\in[t_\mathrm{min}, t_\mathrm{max}] \\
+ \text{Ellipse:}\quad&\mathrm{ctr} + (\cos t)v_1 + (\sin t)v_2,
+ && t\in[t_\mathrm{min}, t_\mathrm{max}].
+\end{align*}
+\texicommentend
+If parameter bounds are omitted in an \code{ellipse} command, the
+entire ellipse is drawn. When the angular range subtends one or more
+full turns in an \code{arc}~or \code{ellipse} the curve is subject to
+filling.
+
+Commands for planar (half-)ellipses remain from \ePiX's early days:
+\findex{ellipse}
+\findex{ellipse\_left}
+\findex{ellipse\_right}
+\findex{ellipse\_top}
+\findex{ellipse\_bottom}
+\begin{verbatim}
+ ellipse(P ctr, P radius);
+ ellipse_left(P ctr, P radius);
+ ellipse_right(P ctr, P radius);
+ ellipse_top(P ctr, P radius);
+ ellipse_bottom(P ctr, P radius);
+\end{verbatim}
+If \code{radius} is \code{P(a,b)}, these commands draw all or half of
+the ellipse with given center in the \teximath{(x_1,x_2)} plane, axes
+parallel to the coordinate axes, and axis lengths \teximath{2a}~and
+\teximath{2b}.
+
+Two commands are available to mark off right angles or a subtended
+angle. Each accepts a spatial location and two non-zero directions,
+and draws a scene element in the plane spanned by the vectors.
+\findex{right\_angle}
+\findex{arc\_measure}
+\begin{verbatim}
+ right_angle(P loc, P v1, P v2, scale=8);
+ arc_measure(P loc, P v1, P v2, scale=8);
+ arc_measure(P loc, P v1, P v2, offset, text, align, scale=8);
+\end{verbatim}
+The \code{right\_angle} command does not check its arguments for
+perpendicularity. The \code{arc\_measure} commands mark the
+\emph{small} angle subtended by the directions; the label form places
+a label at the midpoint of the arc. The (optional) \code{scale}
+argument is the true size in~\code{pt} of the marker.
+
+
+\subsubsection*{Recursive Fractal Curves}
+
+\index{Path!fractal}
+Consider a path made up of equal-length segments that can point at any
+angle of the form~\teximath{2\pi k/n} radians, for \teximath{0\leq
+k<n}, like spokes on a wheel. A path is specified by a finite sequence
+of integers, taken modulo~\teximath{n}. For example, if
+\teximath{n=6}, then the sequence \teximath{0, 1, -1, 0} corresponds
+to the ASCII path \verb+_/\_+. \ePiX's fractal approximation starts
+with such a ``seed'' then recursively (up to a specified depth)
+replaces each segment with a scaled and rotated copy of the seed,
+Figure~\ref{fig:fractal}. The seed above generates the standard
+von~Koch snowflake fractal. In code:
+\findex{fractal}
+\begin{verbatim}
+ const int seed[] = {6, 4, 0, 1, -1, 0};
+ fractal(P(a,b), P(c,d), depth, seed);
+\end{verbatim}
+The first entry of \code{seed[]} (here~6) is the number of
+``spokes''~\teximath{n}, the second~(4) is the number of terms in the
+seed, and the remaining entries are the seed proper. The final path
+joins \teximath{(a,b)}~to \teximath{(c,d)}. The number of segments in
+the final path grows exponentially in the depth, so depths larger than
+5~or 6 are likely to exceed the capabilities of \LaTeX\ and/or
+PostScript.
+\begin{figure}[hbt]
+ \begin{center}
+ \input{koch.eepic}
+ \end{center}
+ \caption{Successive iterations of \{\code{4,8,0,1,0,3,3,0,1,0}\}}
+ \label{fig:fractal}
+\end{figure}
+
+
+\subsubsection*{Arrows}
+
+\index{Arrow}
+Line segments, splines, and arcs can be drawn with arrowheads at one
+end. In profile, an arrowhead's width is \code{3pt}, and its height
+is 5.5~times the width. The actual printed height depends on the
+head's orientation with respect to the camera. By default, an
+arrowhead is a filled triangle. The shape and size are adjusted with
+declarations:
+\findex{arrow\_width}
+\findex{arrow\_ratio}
+\findex{arrow\_inset}
+\begin{verbatim}
+ arrow_width(w=3); // width in pt
+ arrow_ratio(r=5.5); // height-to-width
+ arrow_inset(c=0); // base indent as frac of ht
+\end{verbatim}
+\input{arrow.eepic} Inset\teximath{=0}\qquad
+\input{arrow25.eepic} Inset\teximath{=0.25}\qquad
+\input{arrow50.eepic} Inset\teximath{=0.5} \\
+The \code{inset} must be between \teximath{-1}~and \teximath{1}. Each
+\code{arrow} command accepts an optional \code{scale} argument, which
+scales the arrowhead.
+\findex{arrow}
+\begin{verbatim}
+ arrow(P tail, P tip, [scale]);
+ arrow(P p1, P p2, P p3, [scale]); // spline arrows
+ arrow(P p1, P p2, P p3, P p4, [scale]);
+ arrow(P ctr, P v1, P v2, t_min, t_max, [scale]); // ellipse
+\end{verbatim}
+A few ``special-purpose'' commands are supplied:
+\findex{dart}
+\findex{aarrow}
+\findex{arc\_arrow}
+\begin{verbatim}
+ dart (P p1, P p2); // same as arrow(p1, p2, 0.5);
+ aarrow(P p1, P p2); // double-headed arrow <--->
+ arc_arrow(ctr, rad, t_min, t_max, [scale]);
+\end{verbatim}
+If an \code{arc\_arrow} is too short, nothing is drawn.
+
+
+\subsection{Coordinate Axes and Labels}
+
+\index{Labels!axis|(}
+\index{Axes!labeling}
+\index{Axes|(}
+\ePiX\ provides an \code{axis} class for coordinate axes. Labels are
+generated automatically in a variety of styles: decimal, scientific
+notation, fraction, and trigonometric fraction. Logarithmic axes and
+labels are available. Axis and labeling commands from Version~1.0 have
+been retained.
+
+
+\subsubsection*{The \code{axis} Class}
+
+An \code{axis} consists of a line segment divided into a specified
+number of equal-length subintervals by ``major'' (long) tick marks.
+Each subinterval may be divided further by ``minor'' (short) tick
+marks. Minor ticks may be equally-spaced (``Cartesian'') or
+logarithmically placed. Finally, a label is written at each major tick
+mark with specified offset and alignment. Labels are generated
+automatically from the endpoints, so the line should be parallel to a
+coordinate axis. Label attributes (masking, borders, font size and
+face, rotation angle) are determined by the current label style, not
+by the \code{axis}.
+
+The command
+\findex{axis}
+\begin{verbatim}
+ axis(P tail, P head, int n, P offset=P(0,0), [align = none]);
+\end{verbatim}
+creates an axis joining \code{tail} to \code{head}, divided into
+\code{n}~segments of equal length, with a major tick mark and label at
+each division point and endpoint. The \code{offset} and \code{align}
+arguments have the same meaning as for ordinary labels.
+
+The number and length of minor ticks, and the alignment of ticks, are
+controlled with member functions:
+\findex{axis.subdivide}
+\findex{axis.tick\_ratio}
+\findex{axis.align}
+\begin{verbatim}
+ axis Ax(P(a,c), P(b,c), n);
+ Ax.subdivide(n); // put n-1 minor ticks in each axis segment
+ Ax.tick_ratio(r); // minor length = r*major length
+ Ax.align(AL=c); // align all ticks; AL = t, b, l, r, or c
+\end{verbatim}
+By default, major ticks are \code{6pt}~long and twice the length of
+minor ticks. The global declaration \code{tick\_size(len)} sets the
+major length, subject to ``reasonable stylistic limits''. For visual
+consistency, tick lengths should not be changed casually.
+
+\index{Axes!labeling}
+Labels on an \code{axis} may be drawn in several styles, selected with
+member functions:
+\findex{axis.dec}
+\findex{axis.frac}
+\findex{axis.trig}
+\findex{axis.sci}
+\findex{axis.unmark}
+\findex{axis.precision}
+\findex{axis.align\_labels}
+\begin{verbatim}
+ Ax.dec(); // decimals (default)
+ Ax.frac(); // fractions, e.g. 0.5 -> \frac{1}{2}
+ Ax.trig(); // fractional multiples of \pi
+ Ax.sci(); // scientific notation, k\times base^N
+
+ Ax.unmark(double); // remove label at selected location
+ Ax.precision(p); // set number of digits for decimal labels
+ Ax.align_labels(AL); // re-align labels
+\end{verbatim}
+Arbitrary textual labels depending on one coordinate are obtained by
+writing a \code{string}-valued function of~\code{double} and
+``registering'' it:
+\findex{axis.label\_rep}
+\begin{verbatim}
+ // f represents x as a string in given precision and base
+ std::string f(double x, unsigned int prec, unsigned int base);
+ Ax.label_rep(f);
+\end{verbatim}
+For example, textual tags can be printed instead of numeric labels.
+
+By default, an \code{axis} is Cartesian. The member function
+\code{log(int b=10)} converts an \code{axis} to ``log mode'' with
+specified base; this affects both tick marks and labeling. If \code{b}
+is at least~3, minor tick marks appropriate for a logarithmic axis
+base~\code{b} are drawn. Second, labels are written in decimal or
+scientific notation appropriately for a logarithmic axis; that is,
+``\teximath{k\times b^N}'' (or its decimal value) is written at
+location \teximath{N+\log_b k}.
+
+Minor ticks of a log \code{axis} may be labeled individually; again,
+this is controlled with member functions:
+\findex{axis.tag}
+\findex{axis.tag235}
+\findex{axis.tags}
+\findex{axis.untag}
+\begin{verbatim}
+ Ax.tag(d); // labels at N+log_b(d)
+ Ax.tag235(); // tag 2, 3, and 5 if b=10
+ Ax.tags(); // tag 1, ..., b-1
+ Ax.untag(); // remove all tags, including 1
+ Ax.untag(double); // remove one tag, e.g. Ax.untag(9);
+\end{verbatim}
+
+For convenience, an \code{axis} object along an edge of the active
+\code{screen} can be created with a named command:
+\findex{top\_axis}
+\findex{bottom\_axis}
+\findex{left\_axis}
+\findex{right\_axis}
+\begin{verbatim}
+ top_axis(n, offset, align);
+ bottom_axis(n, offset, align);
+ left_axis(n, offset, align);
+ right_axis(n, offset, align);
+\end{verbatim}
+The ticks automatically point into the bounding box.
+
+The functions above create objects or set \code{axis} attributes, but
+write no output. Tick marks and labels can be printed separately, or
+at once:
+\findex{axis.draw}
+\findex{axis.draw\_ticks}
+\findex{axis.draw\_labels}
+\begin{verbatim}
+ Ax.draw(); // axis, tick marks, and labels
+ Ax.draw_ticks(); // axis and ticks only
+ Ax.draw_labels();
+\end{verbatim}
+
+
+\subsubsection*{Other Axis-Drawing Commands}
+
+\index{Axes!logarithmic}
+\ePiX\ formerly supplied commands for drawing simple axes and their
+labels. These commands have been kept for compatibility. Horizontal
+axes are generated with
+\findex{h\_axis}
+\findex{h\_log\_axis}
+\findex{v\_axis}
+\findex{v\_log\_axis}
+\begin{verbatim}
+ h_axis(p1, p2, n, align=c); // n subintervals (n+1 ticks)
+ h_log_axis(p1, p2, n, align=c, base=10);
+\end{verbatim}
+For vertical axes, use \code{v\_axis}. The style of tick mark is
+appropriate for an axis of the given type. Horizontal axis tick marks
+may be aligned \code{t}~(above the axis) or~\code{b}
+(below). Similarly, vertical axis ticks may be aligned \code{r}~or
+\code{l}.
+
+The endpoint arguments of a coordinate axis may be omitted, in which
+case they default to \teximath{p_1=(x_\mathrm{min},0)} and
+\teximath{p_2=(x_\mathrm{max},0)} for a horizontal axis, or to
+\teximath{p_1=(0,y_\mathrm{min})} and
+\teximath{p_2=(0,y_\mathrm{max})} for a vertical axis. If the bounding
+box has integer width and/or height, omitting the number of points
+draws tick marks one unit apart.
+
+Labels for a horizontal Cartesian or logarithmic axis are generated
+with the commands
+\findex{h\_axis\_labels}
+\findex{h\_axis\_masklabels}
+\findex{h\_axis\_log\_labels}
+\findex{h\_axis\_log\_masklabels}
+\findex{v\_axis\_labels}
+\findex{v\_axis\_masklabels}
+\findex{v\_axis\_log\_labels}
+\findex{v\_axis\_log\_masklabels}
+\begin{verbatim}
+ h_axis_labels(P p1, P p2, int n, P offset, [align]);
+ h_axis_masklabels(p1, p2, n, offset, [align]);
+ h_axis_log_labels(p1, p2, [n], offset, [align], base=10);
+ h_axis_log_masklabels(p1, p2, [n], offset, [align], base=10);
+\end{verbatim}
+Labels for a vertical axis are generated with \code{v\_axis\_labels},
+etc. The labels are automatically generated to match their horizontal
+location. The first puts \teximath{(n+1)}~evenly-spaced labels on the segment
+joining \code{p1}~and \code{p2}. As with ordinary labels, the
+\code{offset} is in~\code{pt}, and the optional \LaTeX-style alignment
+option positions the labels using their corners. The second command
+draws masked labels according to the current label masking
+attributes. The third writes labels in exponential notation, using the
+Cartesian coordinate as exponent.
+
+As for coordinate axes, the initial and final points may be omitted in
+an \code{axis\_[mask]labels} command, with the same defaults. The
+\code{offset} and number of labels must always be specified.
+
+
+\subsubsection*{Broken Axes}
+\index{Axes!broken}
+
+Broken axes are best drawn using page layout, especially if axis
+labels are to be drawn. To accomplish the task, create a screen for
+each piece of axis, using appropriate Cartesian coordinates for the
+corners, then \code{inset} the screens so the axis pieces are nearly
+end to end. A zig-zag glyph signifies the break:
+\findex{axis\_break}
+\begin{verbatim}
+ axis_break(P, P, scale=12);
+\end{verbatim}
+The \code{P} arguments are the screen coordinates of the ends to be
+joined; the optional third argument is the true height and width
+in~\code{pt} of the glyph. The sample file \filename{coord\_tricks.xp}
+uses layout and axis breaks.
+
+
+\subsubsection*{Coordinate Grids}
+
+Cartesian grids fill a coordinate rectangle, and have a specified
+number of lines in each direction. A polar grid has specified radius,
+and numbers of rings and sectors.
+\findex{grid}
+\findex{polar\_grid}
+\begin{verbatim}
+ grid(n1, n2); // fills the bounding box
+ grid(p1, p2, n1, n2); // fills the box with corners p1, p2
+ polar_grid(r, n1, n2);
+\end{verbatim}
+
+Log and semi-log grids are drawn with analogous syntax:
+\findex{log\_grid}
+\findex{log1\_grid}
+\findex{log2\_grid}
+\begin{verbatim}
+ log_grid (p1, p2, n1, n2, [base1], [base2]); // log-log
+ log1_grid(p1, p2, n1, n2, [base]); // log-lin
+ log2_grid(p1, p2, n1, n2, [base]); // lin-log
+\end{verbatim}
+The~\teximath{n_i} arguments dictate the number of squares, namely the number
+of orders of magnitude spanned in the logarithmic direction(s). The
+(optional) base arguments default to~10, and control the number of
+lines drawn per order of magnitude. As with Cartesian grids, the
+corners are optional; if omitted, the grid fills the bounding box.
+
+\index{Graph paper}
+Graph paper may be created by superimposing grids:
+\texicomment
+\begin{center}
+ \begin{minipage}[b]{2.5in}
+ \begin{footnotesize}
+\texicommentend
+\findex{pen}
+\findex{grid}
+\begin{verbatim}
+ pen(0.25);
+ grid(10*xsize(), 10*ysize());
+ pen(0.5);
+ grid(2*xsize(), 2*ysize());
+ pen(1);
+ grid(xsize(), ysize());
+\end{verbatim}
+\texicomment
+ \end{footnotesize}
+ \end{minipage}
+ \qquad
+ \input{graphpaper.eepic}
+\end{center}
+\index{Axes|)}
+\texicommentend
+
+\subsection{The Path Class}
+
+\index{Path!class}
+A \code{path} data structure is an ordered list of points that can be
+cropped, clipped, mapped, concatenated, and drawn. The first four
+constructors mirror polygon-drawing commands above. Function graphs
+and parametric paths are built from a real- or \code{P}-valued
+function~\code{f} of one variable.
+\findex{path}
+\begin{verbatim}
+ path(p1, p2, expand=0); // line (endpoints)
+ path(p1, p2, p3, [n]); // quadratic spline
+ path(p1, p2, p3, p4, [n]); // cubic spline
+ path(p1, v1, v2, t_min, t_max, [n]); // ellipse
+ path(f, t_min, t_max, [n]);
+\end{verbatim}
+
+The member function \code{pt()} accepts a~\code{P} or three (or two)
+doubles and appends the specified point to a \code{path}. This
+snippet creates a regular \teximath{n}-gon:
+\begin{verbatim}
+ path ngon; // declare new path
+ for (int i=0; i<=n; ++i)
+ ngon.pt(cis(i*full_turn()/n)); // works in all angle modes
+\end{verbatim}
+Compound paths may be built by concatenation. If \code{path1}~and
+\code{path2} share an endpoint, the commands
+\begin{verbatim}
+ path1 += path2;
+ path1 -= path2;
+\end{verbatim}
+replace \code{path1} with the result of traversing \code{path1}
+``forward'', then following \code{path2} in the forward or reverse
+direction (respectively). For expected results, the first
+(or last) point on~\code{path2} should be the last point
+of~\code{path1}. The notation suggests 1-dimensional homology
+chains. The sample file \filename{contour.xp} illustrates path
+creation and manipulation.
+
+A \code{path} is a data structure, and must be drawn explicitly to
+create visible output. By default a \code{path} is not a closed loop
+(even if the first and last points are the same), and is not filled
+when drawn. Member functions perform these tasks. Continuing the
+\teximath{n}-gon snippet above,
+\findex{path.close}
+\findex{path.fill}
+\findex{path.draw}
+\begin{verbatim}
+ ngon.close(); // mark path as closed
+ ngon.fill(); // draw filled region if filling is active
+ ngon.draw(); // print to the screen
+\end{verbatim}
+\code{path::close()} adds a closing edge if necessary. Once a
+\code{path} is closed, no more points can be added. A closed path
+clips and crops differently than an open \code{path} with the same
+data. \code{path::fill()} has no effect on an unclosed \code{path}.
+
+
+\subsection{Function Plotting}
+
+\index{Plotting|(}
+The noun ``map'' refers to a \CXX\ function that accepts one or
+more \code{double} arguments and returns a \code{double}~or
+a~\code{P}. Mathematically, a map can be depicted in two ways: as a
+graph (which retains information about the domain), or as a
+parametrized curve or surface (which discards domain
+information). \ePiX\ assumes that \code{double}-valued maps are
+graphed and \code{P}-valued maps are drawn parametrically. Either sort
+of depiction is called a ``plot''. \ePiX\ plots are either ``wire
+mesh'', produced by a \code{plot} command, or ``shaded'', produced by
+a \code{surface} command.
+
+
+\subsubsection*{Basic Plotting}
+
+For the moment, ``function'' means ``function of one variable''
+(precisely, a \code{double}-valued function of a \code{double}
+variable). A function graph depends on the domain and the number of
+points to use. Each of the commands
+\findex{plot}
+\findex{polarplot}
+\findex{shadeplot}
+\begin{verbatim}
+ plot(f, t_min, t_max, n);
+ polarplot(f, t_min, t_max, n);
+ shadeplot(f, t_min, t_max, n);
+\end{verbatim}
+graphs the function~\code{f} on the interval \code{[t\_min, t\_max]}
+by dividing the interval into \code{n}~subintervals of equal length.
+The first gives a Cartesian plot, the second a polar plot with bounds
+in current angular units, the third shades the region between the
+graph and the horizontal axis. If two functions are given to
+\code{shadeplot}, the region between their graphs is shaded.
+
+
+\subsubsection*{Domains and Wiremesh Plots}
+
+\index{Domain|(}
+An \ePiX\ \code{domain} is a coordinate box of dimension one, two, or
+three, specified by a pair of opposite corners and two \emph{meshes}
+(``coarse'' and ``fine'', respectively) which specify the amount of
+data to be plotted. Plotting is explained in detail below.
+\findex{domain}
+\begin{verbatim}
+ // [a1,a2] x [b1,b2]: n1 x n2 rectangles, m1 x m2 intervals
+ domain R2(P(a1,b1), P(a2,b2), mesh(n1,n2), [mesh(m1,m2)]);
+
+ // [a1,a2] x [b1,b2] x [c1,c2] divided analogously
+ domain R3(P(a1,b1,c1), P(a2,b2,c2),
+ mesh(n1,n2,n3), [mesh(m1,m2,m3)]);
+\end{verbatim}
+If unspecified, the fine mesh is the same as the coarse mesh. For
+expected behavior, the coarse mesh should ``divide'' the fine mesh, in
+that \teximath{m_i}~should be a (usually small) integer multiple
+of~\teximath{n_i} for each~\teximath{i}.
+
+A \code{domain} may be \emph{resized} in any coordinate for which the
+thickness is positive, and can be \emph{sliced} by setting one
+variable to a constant. The result of slicing is a \code{domain} whose
+dimension is one smaller than the original. Finally,
+``\code{slices}'' operators return the list of \code{domain}s obtained
+by setting one variable to evenly-spaced constants. By default, the
+number of slices is specified by the coarse mesh. An optional argument
+specifies the number of slices. This argument need not be related to
+the coarse mesh.
+\findex{domain.resize}
+\findex{domain.slice}
+\findex{domain.slices}
+\begin{verbatim}
+ R2.resize2(a,b); // [a1,b1] x [a,b]
+ R2.slice1(t); // set x1 = t
+ R3.slices3([n]); // (n+1) domains with x3 = const
+\end{verbatim}
+\begin{center}
+ \input{slices.eepic}
+\end{center}
+\smallskip
+When possible, resizing preserves grid square sizes. Generally,
+though, integer truncation occurs: If \code{R=domain(P(0,0), P(1,1),
+mesh(10,6))}, then \code{R.resize1(0,0.25)} is the rectangle
+\teximath{[0,0.25]\times[0,1]} subdivided into \teximath{2\times6}
+subrectangles, since \teximath{10\div4=2} in integer arithmetic. For
+expected behavior, choose mesh sizes to avoid integer truncation.
+
+
+The arguments of a \code{plot} command are a map, followed by either a
+domain or its logical equivalent.
+\findex{plot}
+\begin{verbatim}
+ double f(double t) { return t*t; }
+ P F(double u, double v) { return P(u, v, exp(u)*Sin(v)); }
+ P G(double u, double v, double w) { return P(v*w, u*w, u*v); }
+
+ plot(f, a, b, n); // f:[a,b] -> R, using n intervals
+ plot(F, R2); // graph of exp(u)*Sin(v)
+ plot(G, R3.slice2(0.5); // G: R^3 -> R^3 restricted to y=0.5
+\end{verbatim}
+By (compiler-enforced) convention, \code{plot} commands involving a
+\code{P}-valued map accept a \code{domain} argument, as in the second
+and third commands above. To plot a \code{double}-valued function, by
+contrast, supply the logical equivalent of a \code{domain}, usually
+the endpoints and the number of intervals, as in the first \code{plot}
+command above.
+
+Resizing and slicing allow a map~\code{F} to be plotted selectively
+over parts of its domain. This can be used to emphasize parts of the
+image, layer scene elements, patch surfaces together, and so forth.
+Resize and slice(s) commands may be used directly in a \code{plot}
+command:
+\findex{plot}
+\begin{verbatim}
+ plot(F, R2.resize1(0,0.5));
+ plot(F, R2.slices1());
+\end{verbatim}
+
+
+\subsubsection*{Meshes and Plotting}
+
+The \code{P}~arguments of a \code{domain} are a pair of opposite
+corners. The first \code{mesh} argument, the \emph{coarse} mesh,
+specifies the number of subdivisions in each coordinate direction.
+The second \code{mesh}, the \emph{fine} mesh, determines the number of
+points used in each direction when plotting.
+
+\begin{comment}
+Suppose the \code{domain}~\code{R2} is, as above, the rectangle
+\teximath{[0,3]\times[-1,2]}. The argument \code{mesh(12,6)} divides the
+rectangle a \teximath{12\times6}~array of subrectangles known as the
+\emph{coarse mesh}. A \code{P}-valued map~\code{F} of two variables is
+plotted over the edges of the coarse mesh. Rather than drawing
+quadrilaterals, however, \ePiX\ draws the image curves at the
+resolution specified by the argument \code{mesh(60,60)}, the
+\emph{fine mesh}. In this example, the curves in each direction are
+drawn using 60~line segments.
+\end{comment}
+
+Separating the roles of coarse and fine meshes allows a plot to
+conform closely to a surface without using a fine grid of curves.
+Both parts of Figure~\ref{fig:plot} are drawn with a
+\teximath{6\times20} coarse mesh. In the first picture, the fine mesh
+is also \teximath{6\times20}, while in the second, the fine mesh is
+\teximath{12\times60}.
+
+\begin{figure}[hbt]
+ \begin{center}
+ \input{plot_a.eepic}\hspace*{0.5in}
+ \input{plot_b.eepic}
+ \caption{Coarse and fine meshes.}
+ \label{fig:plot}
+ \end{center}
+\end{figure}
+
+The coarse mesh is significant only for domains of dimension at
+least~2. The coarse mesh's size determines the number of curves or
+surfaces plotted \emph{perpendicularly} to a coordinate direction,
+while the fine mesh's size determines the number of segments used
+\emph{along} that direction. For predictable results, the fine mesh
+should be a small multiple of the coarse mesh.
+
+Plotting works analogously for 3-dimensional \code{domain}s and maps
+depending on three variables: The ``one-dimensional skeleton'' of the
+\code{domain}'s image is drawn. A \code{P}-valued map of
+three variables can be plotted over a 1-~or 2-dimensional
+\code{domain}. (The effect may be unexpected unless the domain arises
+by slicing, however.) A map depending on one or two variables cannot
+be plotted over a 3-dimensional \code{domain}.
+\index{Domain|)}
+
+
+\subsubsection*{Shaded Surfaces}
+
+\index{Plotting!surface|(}
+
+\ePiX's shaded surface plotting implements a degree of hidden surface
+removal. The algorithm breaks a surface into mesh fragments, sorts
+them in decreasing (approximate) distance to the camera, and prints
+them. If filling is active, a mesh fragment is shaded according to
+the angle between the normal vector and the direction to the camera,
+simulating constant ambient lighting; otherwise, the current fill
+color is used. This technique works fairly well for surfaces without
+intersection, and even acceptably handles intersecting surfaces for
+which mesh elements intersect only along boundaries.
+
+The syntax of a \code{surface} command is identical to a \code{plot}
+command when only a single surface is drawn. For example,
+\findex{surface}
+\begin{verbatim}
+ surface(F, R, cull=0);
+\end{verbatim}
+plots the \code{P}-valued function~\code{F} over the domain~\code{R},
+the shaded equivalent of the corresponding \code{plot} command. The
+optional \code{cull} argument removes elements that point toward
+(\code{cull=-1}) or away from (\code{cull=1}) the camera. Naturally,
+orientation of mesh elements depends on the parametrization~\code{F},
+not merely on the surface. Culling reduces the output file size, but
+is useful mostly for closed, convex surfaces.
+
+There are special commands for surfaces of rotation; each accepts a
+final \code{cull} argument.
+\findex{surface\_rev}
+\begin{verbatim}
+ surface_rev(f, t_min, t_max, n_lats, n_longs);
+ surface_rev(f, g, t_min, t_max, n_lats, n_longs=24);
+ surface_rev(f, g, R, frame coords);
+\end{verbatim}
+The first revolves the graph of~\teximath{f} about the
+\teximath{x}-axis, the second uses the parametric curve
+\teximath{t\mapsto\bigl(f(t),g(t)\bigr)} as profile. In each case, the
+parameter interval \verb+[t_min,t_max]+ is divided into \verb+n_lats+
+equal-length subintervals, \verb+n_longs+ copies of the profile curve
+are drawn, and the complete surface (one full turn) is drawn.
+
+The third form uses a \code{domain} to control the range of
+longitudes, and draws a surface of rotation in the Cartesian
+coordinate system defined by the orthonormal basis \code{coords}, by
+default the standard basis. The arguments \code{f}~and \code{g} define
+a parametric curve in the plane spanned by the first two elements
+of~\code{coords}, and the first element is the axis of rotation.
+
+As in wire mesh plotting, the fine mesh is used to draw the boundaries
+of surface patches; this tends to make surfaces look smoother for
+modest-sized coarse meshes. If the coarse mesh is too coarse, however,
+two visually undesirable effects can occur. First, adjacent regions of
+the surface may be shaded very differently, since shading is constant
+over patches defined by the coarse mesh. Second, a patch nearly
+tangent to a line of sight may be drawn badly if the patch bends back
+on itself, since the boundary of the \emph{patch} is drawn, not the
+visible edge of the mathematical surface. See
+\filename{samples/artifacts.xp}.
+
+
+\subsubsection*{Multiple Domains and/or Maps}
+
+A scene containing two or more shaded surfaces cannot generally be
+built up one surface at a time. Instead, multiple surfaces must be
+assembled into a single data structure before they can be drawn.
+Multiple surfaces are built from one or more maps and one or more
+2-dimensional \code{domain}s. In the code snippets below, \code{F}~and
+\code{G} are \code{P}-valued functions of 3~variables, and~\code{R} is
+a 3-dimensional \code{domain}.
+
+To plot the images of several \code{domain}s under a \emph{single
+map}, assemble the \code{domain}s into a list if necessary, then issue
+a \code{surface} command:
+\findex{surface}
+\findex{domain\_list}
+\findex{domain\_list.add}
+\begin{verbatim}
+ surface(F, R.slices3(), cull=0);
+
+ domain_list DL(R.slice1(0)); // build domain list
+ DL.add(R.slice2(0.5)); // add a domain, etc.
+ surface(G, DL, cull=0); // draw
+\end{verbatim}
+For multiple maps, \ePiX\ provides the \code{scenery}
+class. Conceptually, \code{scenery} is an agglomeration of shaded
+surfaces, built one surface at a time from maps and 2-dimensional
+\code{domain}s. The \code{add} function accepts two arguments---a map,
+and either a \code{domain} or a list of \code{domain}s---and
+contributes its data to the \code{scenery} rather than plotting
+immediately. Completed \code{scenery} is drawn manually.
+\findex{scenery}
+\findex{scenery.add}
+\findex{scenery.draw}
+\begin{verbatim}
+ scenery S(F, R.slice3(0.25)); // S contains one surface
+ S.add(F, R.slice2(0)); // S contains two surfaces
+ S.add(G, R.slices1(3)); // S contains six surfaces
+ S.draw(cull=0);
+\end{verbatim}
+Complete examples are included in the \filename{samples} directory:
+\filename{spherical.xp}~and \filename{minkowski.xp}.
+
+In principle, a scene may contain arbitrarily many surfaces. However,
+figures that contain many objects tend to tax \LaTeX's internal
+stacks. Frequent color changes exacerbate the problem. Even if you
+use \filename{hugelatex} (or increase \LaTeX's memory), a figure
+containing more than a few thousand mesh elements is unlikely to
+compile. At moderate resolution, a surface can easily contain
+1000~patches. Each shell script has a command-line option to invoke
+\filename{hugelatex}; your mileage may vary.
+
+
+\subsubsection*{User-Specified Color Shading}
+
+\index{Color!surface plotting}
+By default, a \code{surface} or \code{scenery} is colored according to
+the current fill color. For finer control, each \code{surface},
+\code{surface\_rev}, and \code{scenery} command accepts an optional
+position-dependent \code{color} specification.
+\findex{surface}
+\findex{surface\_rev}
+\findex{scenery}
+\findex{scenery.add}
+\begin{verbatim}
+ surface(F, R, color, cull=0);
+ surface_rev(f, [g], t_min, t_max, n_lats, n_longs, color);
+ surface_rev(f, g, R, color, [coords]);
+
+ scenery S(F, R, color);
+ S.add(F, R, color);
+\end{verbatim}
+The \code{color} argument is a \code{P}-valued function of two or
+three \code{double}s whose output is interpreted as a set of
+\code{RGB}~densities. If \code{color} takes two arguments, they are
+\code{domain} coordinates, and the surface is colored according to
+parameter values. If \code{color} takes three arguments, they are
+Cartesian coordinates, and the surface is colored according to spatial
+location. Please see the sample files
+\filename{surface\_shade.xp}~and \filename{S2\_harmonics.xp}.
+\index{Plotting!surface|)}
+
+
+\subsection{Calculus Plotting}
+\index{Plotting!calculus|(}
+
+\ePiX\ provides high-level commands for plotting derivatives and
+definite integrals, Riemann sums, tangent lines, slope- and vector
+fields, and solutions of planar and spatial systems of differential
+equations.
+
+In this section, \code{f}~and \code{g} are \code{double}-valued
+functions of one variable.
+
+\subsubsection*{Utility Functions}
+
+\findex{sup}
+\findex{inf}
+\findex{newton}
+\begin{verbatim}
+ sup(f, a, b); // max/min of f on [a,b]
+ inf(f, a, b);
+ newton(f, g, x0); // find approximate crossing point
+\end{verbatim}
+Newton's method returns the crossing point of the given functions,
+starting from the specified seed, which should be reasonably close to
+the expected solution. If a critical point is hit or 5~iterations
+pass, a warning is issued and the current result (probably incorrect)
+is returned. The second function~\teximath{g} defaults to the zero function if
+omitted.
+
+\subsubsection*{Derivatives and Integrals}
+
+The classes \code{Deriv}~and \code{Integral} are used to calculate
+values of derivatives and integrals, and to plot these functions.
+\findex{Deriv}
+\findex{Deriv.eval}
+\findex{Deriv.left}
+\findex{Deriv.right}
+\findex{Integral}
+\findex{Integral.eval}
+\begin{verbatim}
+ Deriv df(f); // function object: df(x) = f'(x)
+ df.eval(t); // return f'(t)
+ df.left(t); // deriv from left at t: (f(t)-f(t-dt))/dt
+ df.right(t); // deriv from right at t: (f(t+dt)-f(t))/dt
+
+ Integral prim(f,a); // function object: prim(x) = int_a^x f
+ prim.eval(b); // numerical integral of f over [a,b]
+ double val(Integral(f).eval(1)); // val = \int_0^1 f
+\end{verbatim}
+The lower limit on an integral is~0 by default. \code{Deriv}s and
+\code{Integral}s can be used directly in a \code{plot} command:
+\findex{plot}
+\findex{riemann\_sum}
+\begin{verbatim}
+ plot(Deriv(f), a, b, n); // plot f' over [a,b]
+ plot(Integral(f, x0), a, b, n);
+ riemann_sum(f, a, b, n, TYPE);
+\end{verbatim}
+The second graphs the definite integral \teximath{x\mapsto\int_{x_0}^x
+f(t)\,dt} over~\teximath{[a,b]}. As above, \teximath{x_0}~defaults
+to~0. The third draws rectangles or trapezoids whose area approximates
+the definite integral of~\teximath{f} over~\teximath{[a,b]}. The
+\code{TYPE} may be \code{UPPER}, \code{LOWER}, \code{LEFT},
+\code{RIGHT}, \code{MIDPT}, or~\code{TRAP}.
+
+Tangent lines and envelopes (families of tangent lines) are drawn with
+\findex{tan\_line}
+\findex{envelope}
+\findex{tan\_field}
+\begin{verbatim}
+ tan_line(f, t); // f real- or vector-valued
+ envelope(f, t_min, t_max, n); // family of tangent lines
+ tan_field(f, g, t_min, t_max, n); // field of tangents
+\end{verbatim}
+The sample files \filename{conic.xp}~and \filename{lissajous.xp}
+illustrate these features.
+
+
+\subsubsection*{Systems of Differential Equations}
+
+Let \code{F}~be a \code{P}-valued function of two or three variables.
+\findex{ode\_plot}
+\findex{flow}
+\begin{verbatim}
+ ode_plot(F, p_0, t_min, t_max, n);
+ flow(F, p_0, t_max, n);
+\end{verbatim}
+The first plots the solution curve of the initial-value problem
+\teximath{\dot{x}=F(x)}, \teximath{x(0)=p_0}, over the specified time
+interval. If \teximath{t_\mathrm{min}} is omitted, its value is~0, so
+the curve starts at~\teximath{p_0}. With manual calculation to rotate
+a planar field a quarter turn, \code{ode\_plot} can be used to draw
+level curves (isobars) of a function of two variables; see the sample
+file \filename{dipole.xp}. The \code{flow} function returns the
+result of starting at~\teximath{p_0} and flowing by~\teximath{F} for
+time~\teximath{t_\mathrm{max}}, using Euler's method with~\teximath{n}
+time steps. This is useful for placing markers or arrowheads precisely
+along a flow line.
+
+A planar or spatial vector field itself may be plotted over a
+domain~\code{R} in three styles:
+\findex{vector\_field}
+\findex{dart\_field}
+\findex{slope\_field}
+\begin{verbatim}
+ vector_field(F, R, [scale]); // true length
+ dart_field (F, R, [scale]); // const length
+ slope_field (F, R, [scale]); // const length
+\end{verbatim}
+The field is sampled at the grid points of the coarse mesh. If the
+domain is 2-dimensional, the plot is a planar slice of the field, even
+if the field depends on three variables. If the domain is
+3-dimensional, the field is drawn in successive slices
+\teximath{x_3=\mathrm{const}}, starting at the height of the first
+corner of~\code{R} and ending at the height of the second corner.
+
+The optional final argument, which defaults to~\teximath{1}, scales the
+arrowheads in a vector field, and scales the (constant) length of
+field elements for slope and dart fields. The sample files
+\filename{layout2.xp}, \filename{lorenz.xp}, \filename{slopefield.xp},
+and \filename{vfield.xp} illustrate usage.
+
+In each field-plotting command, the domain argument may be replaced by
+two points, representing corners of a coordinate rectangle, and two
+integers, the number of grid intervals in the selected coordinate
+directions. Only planar slices of a vector field can be plotted using
+the alternative syntax.
+\index{Plotting|)}
+
+
+\subsection{Non-Euclidean Geometry}
+\label{non-eucl}
+
+\ePiX\ provides limited features for spherical and hyperbolic
+geometry: the ability to draw lines in the half-plane and Poincar\'e
+disk models of the hyperbolic plane, and to draw latitudes,
+longitudes, great circle arcs, spherical triangles, regular polyhedra,
+and parametrized curves on a sphere.
+
+Hyperbolic line segments are specified by their endpoints in the upper
+half space or ball (Poincar\'e) models. In each case there is no
+output if either endpoint lies outside the model.
+\findex{hyperbolic\_line}
+\findex{disk\_line}
+\begin{verbatim}
+ hyperbolic_line(p, q);
+ disk_line(p, q);
+\end{verbatim}
+For compatibility with 2-dimensional hyperbolic space, the half-space
+model is the set \teximath{\{(x_1,x_2,x_3)\mid x_2>0\}}.
+
+\index{Plotting!spherical|(}
+A \code{frame} determines geographical coordinates on a \code{Sphere}:
+the first element points toward longitude~0 on the equator, the third
+element points to the north pole. A latitude line depends on a
+\code{Sphere}, a \code{frame}, the numerical latitude, and a range of
+longitudes. A longitude line is described similarly.
+\findex{latitude}
+\findex{longitude}
+\findex{back\_latitude}
+\findex{back\_longitude}
+\begin{verbatim}
+ latitude(lat, long_min, long_max, Sphere S, frame coords);
+ longitude(lngtd, lat_min, lat_max, Sphere S, frame coords);
+\end{verbatim}
+By default, \code{coords} is the standard \code{frame} and \code{S} is
+the unit sphere. These commands draw only the portion of the curve
+that is visible from the current viewpoint. The function
+\code{back\_latitude} draws the invisible portion of a latitude line.
+
+Spherical arcs and triangles are described by their endpoints. Only
+the direction vector from the center of the sphere to an endpoint is
+significant; if a sphere is scaled or moved, the same function call
+will draw the corresponding object on the new sphere.
+
+The following draw the visible (front) portions of great circle arcs:
+\findex{front\_arc}
+\findex{front\_arc2}
+\findex{front\_line}
+\findex{back\_arc}
+\findex{back\_arc2}
+\findex{back\_line}
+\begin{verbatim}
+ front_arc(p1, p2, S); // short arc on S from p1 to p2
+ front_arc2(p1, p2, S); // arc from p1 to -p1 through p2
+ front_line(p1, p2, S); // great circle through p1 and p2
+\end{verbatim}
+Triangles and regular (Platonic) polyhedra are provided. The sample
+file \filename{sample/polyhedra.xp} illustrates usage.
+\findex{front\_triangle}
+\findex{front\_tetra}
+\findex{front\_cube}
+\findex{front\_octa}
+\findex{front\_dodeca}
+\findex{front\_icosa}
+\findex{back\_triangle}
+\findex{back\_tetra}
+\findex{back\_cube}
+\findex{back\_octa}
+\findex{back\_dodeca}
+\findex{back\_icosa}
+\begin{verbatim}
+ front_triangle(p1, p2, p3, S); // spherical triangle
+ front_tetra(S, coords); // regular tetrahedron
+ front_cube(S, coords); // hexahedron
+ front_octa(S, coords); // octahedron
+ front_dodeca(S, coords); // dodecahedron
+ front_icosa(S, coords); // icosahedron
+\end{verbatim}
+Each function has a \code{back} version, which draws the hidden
+portion. The tetrahedron, cube, and octahedron are (up to scale)
+inscribed in the cube of side length~\teximath{2} centered at the origin whose
+sides are parallel to~\code{frame}. The point \teximath{(1,1,1)} is a vertex of
+the tetrahedron.
+
+Up to scale, the icosahedron's vertices lie on the golden rectangle
+with vertices \teximath{(\pm\gamma,0,\pm1)} and its images under cyclic
+permutation of coordinates. The dodecahedron is dual to the
+icosahedron.
+
+\subsubsection*{Spherical Plotting}
+
+Parametrized paths on a \code{Sphere~S} (by default the unit sphere)
+can be specified either by radial projection of a \code{P}-valued
+curve, or by stereographic projection of a plane curve given as a pair
+of \code{double}-valued functions:
+\findex{frontplot\_R}
+\findex{frontplot\_N}
+\findex{frontplot\_S}
+\findex{backplot\_R}
+\findex{backplot\_N}
+\findex{backplot\_S}
+\begin{verbatim}
+ frontplot_R(phi, t_min, t_max, n, [S]); // radial
+ frontplot_N(f1, f2, t_min, t_max, n, [S]); // from north pole
+ frontplot_S(f1, f2, t_min, t_max, n, [S]); // from south pole
+\end{verbatim}
+Attempts to perform radial projection on a path through the origin
+will generate division-by-zero errors. Stereographic projection maps
+the equatorial plane \teximath{\{x_3=0\}} to the unit sphere by
+projection from the corresponding pole: \teximath{N=(0,0,1)},
+\teximath{S=(0,0,-1)}.
+
+Each spherical plot command has a \code{back} version that prints only
+the portion of the path invisible from the current viewpoint.
+Because of the way \ePiX\ layers output, it is generally best to put
+hidden portions of the input before visible portions, with line width
+and/or style that suggests hidden lines.
+
+
+\subsection{Data Plotting}
+\index{Plotting!data|(}
+\index{Data plotting|(}
+
+Files of numerical data can be created, manipulated, analyzed,
+plotted (paths, scatter plots, and histograms), read, and written.
+The format for a data file is one or more floating-point
+numbers per line, with the same number of entries per line. Anything
+that appears on a line after the \LaTeX\ comment character~\code{\%}
+is a comment.
+
+\ePiX\ provides two \code{plot} commands for file data. The first
+facilitates plotting selected columns; the second simplifies plotting
+the first two columns with one or both scales logarithmic. Either form
+can be used to plot selected columns logarithmically.
+
+The general commands read numbers from two or three columns of a
+specified file, pass them as arguments to a \code{P}-valued
+function~\code{F}, and plot the resulting points:
+\findex{plot}
+\begin{verbatim}
+ plot("filename", STYLE, [i_1], [i_2], [i_3], [F]);
+ plot("filename", STYLE, F, [i_1], [i_2], [i_3]);
+\end{verbatim}
+The first argument is the name of the data file. The \code{STYLE} may
+be \code{PATH}, which joins the points in the order they appear, or
+any of the marker types in Table~\ref{table:marker}. The
+integers~\teximath{i_k} specify columns from which to extract data; these
+default, respectively, to the first column, second column, and null (a
+column of zeroes). If the ``coordinate system''~\code{F} is omitted in
+the first command, it defaults to the Cartesian point constructor. The
+function~\code{F} is mandatory in the second form; useful choices
+include \code{log\_log}, \code{log\_lin}, and~\code{lin\_log}, which
+plot the corresponding coordinate logarithmically.
+
+
+\subsubsection*{Data Files}
+
+For more elaborate analysis, the \code{data\_file} class presents an
+interface to a file as an ordered list of columns. There are two
+general ways to create a \code{data\_file}: read in an external file,
+or generate data (up to three columns) using specified
+\code{double}-valued functions. In the constructors below, each
+function~\code{fi} is a \code{double}-valued function of one variable.
+\findex{data\_file}
+\findex{data\_file.read}
+\begin{verbatim}
+ data_file DF("my_data"); // read data from disk file
+ data_file DF(f1, t_min, t_max, num_pts); // values of f1
+ data_file DF(f1, f2, t_min, t_max, num_pts);
+ data_file DF(f1, f2, f3, t_min, t_max, num_pts);
+ data_file DF(3); // create empty data_file with 3 columns
+ DF.read("file1"); // read a disk file
+\end{verbatim}
+
+Columns of a \code{data\_file} can be transformed by a user-specified
+function, averaged, correlated, extracted (for use by other code),
+scatter plotted, and written to a disk file at specified
+precision. Below, the function~\code{f} is a \code{double}-valued
+function of one variable and~\code{F} is a \code{P}-valued function of
+two or three variables, whose components are written back to the
+selected columns.
+\findex{data\_file.transform}
+\begin{verbatim}
+ DF.transform(f, i); // apply f to selected column(s)
+ DF.transform(F, i=1, j=2);
+ DF.transform(F, i, j, k);
+\end{verbatim}
+Basic statistical operations on columns are provided.
+\findex{data\_file.dot}
+\findex{data\_file.avg}
+\findex{data\_file.var}
+\findex{data\_file.covar}
+\findex{data\_file.regression}
+\begin{verbatim}
+ DF.dot(i,j); // dot product of columns i, j
+ DF.avg(i); // mean of column i
+ DF.var(i); // population variance
+ DF.covar(i,j); // covariance
+ DF.regression(i,j); // plot regression line
+\end{verbatim}
+A \code{data\_file} is scatter plotted using syntax as described above.
+% The output is cropped automatically to the bounding box.
+\findex{data\_file.plot}
+\begin{verbatim}
+ DF.plot(STYLE, [i1], [i2], [i3], [F]);
+ DF.plot(STYLE, F, [i1], [i2], [i3]);
+\end{verbatim}
+Histograms and bar charts are described below.
+
+A \code{data\_file} can be written to a disk file as raw data, or in
+specified format. Below, \code{fmt} denotes a \code{string}-valued
+formatting function of two variables and \filename{myfile} is the
+name of the disk file to be written.
+\findex{data\_file.precision}
+\findex{data\_file.write}
+\begin{verbatim}
+ DF.precision(4); // set to 4 significant figures
+ DF.write("myfile"); // write as tab-separated columns
+ DF.write("myfile", fmt, [i1], [i2]); // apply fmt to cols
+\end{verbatim}
+A column can be extracted as a \code{C++}~\code{vector} for use by
+another function.
+\findex{data\_file.column}
+\begin{verbatim}
+ DF.column(i); // i-th column
+ DF.column(f, i); // i-th column, transformed by f
+\end{verbatim}
+
+
+\subsubsection*{Data Containers}
+
+\ePiX\ provides a \code{data\_mask} class for culling data from a file
+according to the values in a specified column, and a \code{data\_bins}
+class for sorting data by value.
+
+A \code{data\_mask} consists of an interval of numbers and a
+``filter'' function. The (closed, open, or half-open) interval is
+given as a string in standard mathematical notation, or by its
+endpoints (for a closed interval). The filter is a
+\code{double}-valued function of \code{double}, by default the
+identity, \teximath{f(x)=x}.
+\findex{data\_mask}
+\begin{verbatim}
+ data_mask dm("[a, b]", [f]);
+ data_mask dm(a, b, [f]);
+\end{verbatim}
+A \code{data\_mask} ``passes'' inputs~\teximath{x} if~\teximath{f(x)}
+lies in the interval. The member function \code{reverse()} inverts
+this logical test.
+
+The \code{data\_file} class has \code{prune} functions to cull
+rows for which a specified column's entry satisfies a
+\code{data\_mask}'s criterion.
+\findex{data\_mask.prune}
+\begin{verbatim}
+ DF.prune(dm, i); // remove row if i-th column entry fails
+ DF.prune(a, b, i); // remove row if i-th column outside [a,b]
+\end{verbatim}
+
+A \code{data\_bins} object models an interval divided at specified
+locations into ``bins'', not necessarily of equal length. Numerical
+data is read in and the number of points in each bin counted. The
+lifetime of a \code{data\_bins} object has two stages. First, ``cuts''
+(endpoints of subintervals) are added. Then, once data is read, the
+cuts are ``locked'' and cannot subsequently be changed.
+\findex{data\_bins}
+\findex{data\_bins.cut}
+\findex{data\_bins.read}
+\begin{verbatim}
+ // [xmin, xmax] divided into n equal intervals, 1 by default
+ data_bins db(xmin, xmax, [n]);
+ db.cut(x); // add a cut at x (if x is in bounds)
+ db.read(vector<double>); // read data, lock bins
+\end{verbatim}
+
+\index{Histograms}
+\index{Bar Charts}
+A \code{data\_bins} object can be plotted as a histogram (rectangles'
+\emph{area} is proportional to the bin population), bar chart
+(rectangles' \emph{height} is proportional to the bin population), or
+spline interpolation of a bar chart.
+\findex{data\_bins.histogram}
+\findex{data\_bins.bar\_chart}
+\findex{data\_bins.plot}
+\begin{verbatim}
+ db.histogram(c=1); // c = vertical scale factor
+ db.bar_chart(c=1);
+ db.plot(c=1);
+\end{verbatim}
+By default (\code{c=1}), the height of a bar chart rectangle is the
+fraction of the total population contained in the bin; thus, the
+height is always between 0~and 1. For a histogram, the height of a
+rectangle is the fraction of the population per horizontal unit in the
+bin; thus, the total area over an interval~\teximath{[a,b]} does not
+depend on how~\teximath{[a,b]} has been subdivided. The sample files
+\filename{dataplot.xp}~and \filename{histogram.xp} illustrate use.
+
+Statistical convention dictates cuts be chosen distinctly from data
+values; that is, values should all fall strictly within a bin, not at
+a boundary point. With large, unknown data sets, this convention may
+be difficult to uphold. \ePiX\ attempts to handle anomalous data
+intelligently, by keeping counts of values ``out-of-range'' or
+``on-cut''.
+
+In detail, if \teximath{x<a} or \teximath{x>b} is a data value, it is
+counted as out-of-range and does not contribute to the histogram
+population. If \teximath{x=a} or \teximath{x=b}, the value counts as
+both out-of-range and on-cut but is added to the population of the
+lowest or highest bin, respectively. Any other cut appearing as a data
+input is flagged as on-cut, and increments the population of each
+adjacent bin by one-half. When a histogram or bar chart is written,
+\ePiX\ prints a warning message summarizing the number of anomalous
+data seen.
+
+
+\subsubsection*{Error Bars}
+\index{Error bars}
+
+Simple horizontal and vertical error bars are provided. The final
+(optional) argument is the true height or width (respectively) in pt.
+\findex{h\_error\_bar}
+\findex{v\_error\_bar}
+\begin{verbatim}
+ h_error_bar(P location, double error, <mark type>, ht=6);
+ v_error_bar(P location, double error, <mark type>, wd=6);
+\end{verbatim}
+
+To create more complex elements, such as asymmetric bars, whisker
+plots, labeled error bars, and the like, write a custom function using
+true-size drawing, see page~\pageref{truesize}. For example, a
+fillable, labeled, asymmetric, vertical rectangular error bar can be
+implemented (entirely in \ePiX) like this:
+\begin{verbatim}
+ void error_bar(P loc, double lo, double hi, P offset,
+ std::string text, align, double wd=6)
+ {
+ const double width(pt_to_screen(0.5*wd)); // converts to 3pt
+ rect(loc - P(width, lo), loc + P(width, hi));
+ line(loc - P(width, 0), loc + P(width, 0));
+ label(loc + P(width, 0), offset, text, align);
+ }
+\end{verbatim}
+For stylistic uniformity, functions such as this should be put into a
+library and used systematically. Section~\ref{section:extensions}
+outlines the process of writing, compiling, and using a custom
+library.
+\index{Plotting!data|)}
+\index{Data plotting|)}
+
+
+\subsection{Legends}
+\index{Legends}
+
+A \code{legend} systematically labels different parts of a plot by
+associating visual ``keys'' with explanatory text. This tends to be
+most useful for plots containing several distinct but conceptually
+related graphs requiring contrast.
+
+Visually, a \code{legend} is represented as an aligned list of rows,
+each containing a box (the key), a gap (the label skip), and some
+text. These rows are printed in a (usually large) masked label. By
+default, keys are \code{12pt}~squares bordered in black, the label
+skip is~\code{6pt}, the background is white, and the border is plain
+black. These attributes are controlled (simultaneously for all items)
+with member functions. Parameters of type \code{double} represent
+lengths in~\code{pt}.
+\findex{legend}
+\findex{legend.backing}
+\findex{legend.border}
+\findex{legend.item\_border}
+\findex{legend.label\_skip}
+\findex{legend.key\_size}
+\begin{verbatim}
+ legend L;
+ L.backing(color); // set background
+ L.border(color, [double]); // set border color [and width]
+ L.border(double); // border width
+
+ L.item_border(color, [double]);
+ L.item_border(double); // same, for item borders
+
+ L.label_skip(double);
+ L.key_size(double);
+\end{verbatim}
+
+
+\subsubsection*{Legend Keys}
+
+There are three types of legend key, representing filled regions,
+paths, and markers. Fill and path keys get their visual attributes
+from the current drawing state. A mark key must be told the marker
+type. Each is created by specifying the item text.
+\findex{legend.fill\_item}
+\findex{legend.path\_item}
+\findex{legend.mark\_item}
+\begin{verbatim}
+ L.fill_item(text);
+ L.path_item(text);
+ L.mark_item(<mark type>, text);
+\end{verbatim}
+Keys in the printed legend appear in the same order they are created
+in the input file.
+
+
+\subsubsection*{Creating a Legend}
+
+Normally, a \code{legend} is defined near the start of a file, and an
+item is added at the point in the file where the corresponding object
+or plot is drawn, so that the item receives the correct attributes. A
+\code{legend} is placed into the figure with the \code{draw}
+function. The arguments have the same meaning as for ordinary
+\code{label}s.
+\findex{legend.draw}
+\begin{verbatim}
+ L.draw(P location, P offset, align);
+\end{verbatim}
+All three arguments are mandatory. ``Global'' \code{legend} settings
+(border, backing, etc.) may be changed anywhere between the
+\code{legend}'s creation and \code{draw} function. The sample file
+\filename{legend.xp} revisits the example on
+page~\pageref{taylor_poly}, including a trig-labeled axis and a
+legend. The file \filename{shadeplot.xp} contains filled keys, and
+\filename{dataplot.xp} contains a \code{legend} with items of mixed
+type.
+
+
+\section{More About \CXX}
+\index{Cplusplus@\CXX|(emph}
+
+A textbook or similarly detailed reference is essential for serious
+study of~\code{C} or~\CXX. \emph{The \code{C} Programming Language},
+second edition, by Kernighan~and Ritchie~\cite{KnR}, is an excellent,
+manageable resource for the basics of procedural
+programming. \emph{C++ Primer Plus}, by Stephen Prata~\cite{Prata},
+clearly lays out the extensive details of~\CXX. Marshall Cline's
+\emph{\CXX\ FAQ Lite}~\cite{Cline} engagingly discusses common points
+of confusion and furnishes tips on good design and programming.
+
+\CXX\ is a powerful, complex language whose syntax is similar to that
+of~\C, or to the scripting languages of Maple~and Mathematica. An
+\ePiX\ input file is source code for a \CXX~program that writes a
+\LaTeX\ picture as output. \ePiX\ may be viewed as an extension
+to~\CXX; in the same way that \LaTeX\ furnishes a high-level interface
+to~\TeX, \ePiX\ provides a high-level bridge between the computational
+power of~\CXX\ and the \LaTeX\ \code{picture} environment.
+
+\index{Function}
+\index{Conditional statement}
+Like all high-level programming languages, \CXX\ provides variables,
+functions, and control structures. Variables hold pieces of data such
+as numerical values and geometric locations, while functions operate
+on data. A control structure, such as a loop or conditional statement,
+affects the program's course according to the program's current state.
+A source file is composed primarily of ``statements'', which perform
+actions ranging from defining variables and functions to setting
+figure attributes, performing calculations, and writing objects to the
+output file.
+
+\subsection{Names and Types}
+
+\index{Variable!names|(}
+Names of variables and functions may consist (only) of letters,
+digits, and the underscore character. The first character of a name
+must not be a digit, and the language standard reserves names starting
+with underscore for library authors. Names are case-sensitive, but
+it's usually a bad idea to use a single name capitalized and
+uncapitalized in a single file. Numerous capitalization conventions
+are used informally; this document uses uncapitalized words separated
+by underscores for variables and functions, and occasionally uses all
+capitals for constants. As with names of \LaTeX\ macros, primary
+considerations are clarity (of meaning), readability, and consistency.
+\index{Variable!names|)}
+
+\index{Variable!type of}
+Every variable in \CXX\ has a ``type'',
+such as integer (\code{int}), double-precision floating point
+(\code{double}), or Boolean (\code{bool}, true~or false). \ePiX\
+provides additional types, the most common of which is~\code{P}, for
+point. The construct \code{P(x,y,z)} creates~\teximath{(x,y,z)}, while
+\code{P(x,y)} gives~\teximath{(x,y,0)}, which is effectively the
+pair~\teximath{(x,y)}. A variable is defined by giving its type, its
+name, and an initializing expression.
+
+\index{Variable!pointer}
+\index{Pointer}
+In~\code{C} and~\CXX, a \emph{pointer} variable holds the memory
+address of another variable. Pointers are useful for manipulating
+(possibly large) data structures through ``handles'' of fixed small
+size. \CXX\ also provides \emph{references}, which bind an additional
+name to an existing object and allow the object to be manipulated
+through this alias. The statements
+\begin{verbatim}
+ double x=1; // ordinary variable definition
+ double& rx=x; // bind a reference, signified by &
+\end{verbatim}
+define a variable~\code{x} having the value~1, and bind a reference
+variable~\code{rx} to it. As long as~\code{rx} exists, it refers
+to~\code{x}. If the value of~\code{x} changes, the value of~\code{rx}
+does as well. Conversely, the value of~\code{x} can be altered by
+assigning to~\code{rx}. However,~\code{rx} is the size of a pointer,
+regardless of the size of~\code{x}, so~\code{rx} can be passed
+efficiently in a function call.
+\texicomment
+Some applications are discussed on page~\pageref{references}.
+\texicommentend
+
+
+\subsection{Functions}
+
+\index{Function|(}
+In a programming language, the term ``function'' refers to a block of
+code that is executable by name. A \CXX\ function takes a list of
+``arguments'', and has a ``return value''. This information, together
+with the function's name, must be provided when a function is defined.
+A function may not be defined inside another function. However, a
+function may call other functions (including itself) as part of its
+execution:
+\begin{verbatim}
+ int factorial(unsigned int n)
+ {
+ if (n == 0) return 1;
+ else return n*factorial(n-1);
+ }
+\end{verbatim}
+
+\index{Function!returning \code{void}}
+The special type~\code{void} represents a ``null type''. A function
+that performs an action but does not return a value has return type
+\code{void}. A function that takes no arguments may be viewed as
+taking a single \code{void} argument.
+
+Every \CXX\ program has a special function~\code{main()}, which is
+called by the operating system when the program is run. The arguments
+of~\code{main()} are command-line arguments, and the return type is an
+integer that signals success or failure. User-specified functions must
+be defined before the call to \code{main()} or in a
+separately-compiled file.
+
+Functions in~\CXX\ may be as simple as an algebraic formula or as
+complex as an arbitrary algorithm. Greatest common divisors, finite
+sums, numerical derivatives and integrals, solutions of differential
+equations, recursively generated fractal curves, and curves of best
+fit are a few applications in \ePiX. Several sample files contain
+user-level algorithms, which do not require knowledge of \ePiX's
+internal data structures. The source file \filename{functions.cc}
+contains simple functions defined by algorithms, and
+\filename{functions.h} illustrates the use of \CXX\ templates. Other
+source files, such as \filename{plots.cc}, may be consulted for
+Simpson's rule, Euler's method, and the like.
+
+
+\subsection{Mathematical Functions}
+
+\index{Function!mathematical|(}
+\CXX~knows several familiar mathematical functions by name:
+\begin{verbatim}
+ sqrt exp log log10 ceil floor fabs
+\end{verbatim}
+(\code{fabs} is the absolute value for a floating-point argument.)
+\ePiX\ provides trig and inverse trig functions sensitive to angular
+mode:
+\index{Angular mode}
+\findex{Cos}
+\findex{Sin}
+\findex{Tan}
+\findex{Sec}
+\findex{Csc}
+\findex{Cot}
+\findex{Acos}
+\findex{Asin}
+\findex{Atan}
+\begin{verbatim}
+ Cos Sin Tan
+ Sec Csc Cot
+ Acos Asin Atan
+\end{verbatim}
+The inverse functions are principle branches.
+
+The function \code{pow(x,y)} returns~\teximath{x^y} when
+\teximath{x>0}, and \code{atan2(y,x)} (N.B. argument order) returns
+\teximath{\mathrm{Arg}(x+iy)\in(-\pi,\pi]}, the principle branch of
+arg. \CXX~knows many constants to 20~decimal places, such as
+\code{M\_PI}, \code{M\_PI\_2}, and \code{M\_E} for~\teximath{\pi},
+\teximath{\pi/2}, and~\teximath{e} respectively. \ePiX\ defines a few
+additional functions:
+\findex{sgn}
+\findex{zero}
+\findex{sinx}
+\findex{cb}
+\begin{verbatim}
+ sgn zero sinx cb
+\end{verbatim}
+\texicomment
+\begin{center}
+ \input{sgn.eepic}\qquad
+ \input{sinx.eepic}\qquad
+ \input{cb.eepic}
+\end{center}
+\medskip
+\texicommentend
+\code{sgn} is the signum function; \code{zero} is the constant
+function; \code{sinx} is the function \teximath{x\mapsto \sin(x)/x}
+with the discontinuity removed; \code{cb} (for ``Charlie Brown'') is
+the period-2 extension of the absolute value function
+on~\teximath{[-1,1]}.
+
+The GNU \CXX\ library defines other functions, including inverse
+hyperbolic functions (\code{acosh}, etc.), \code{log}~and \code{exp}
+with base~2, 10, or arbitrary~\teximath{b} (\code{log2}, etc.), the
+error and gamma functions (\code{erf}~and \code{tgamma} [sic],
+respectively), and Bessel functions of first and second kind:
+\code{j0}, \code{j1}, \code{y0}, etc. Use, e.g., \code{jn(5,~)} to get
+higher indices. The GNU \C~library reference manual~\cite{GNUC}
+describes these and other functions in detail.
+
+Functions may be used in subsequent definitions, and functions of two
+(or more) variables are defined in direct analogy to functions of one
+variable:
+\begin{verbatim}
+double f(double t) { return t*t*log(t*t); } // t^2 \ln(t^2)
+double g(double s, double t) { return exp(2*s)*Sin(t); }
+\end{verbatim}
+\index{Function!mathematical|)}
+
+
+\subsection{Basics of Classes}
+
+\index{Classes|(}
+Unlike~\code{C}, \CXX\ supports ``object-oriented programming''. In a
+nutshell, a \emph{class} is an abstraction in computer code of some
+concept, such as a point, a sphere, a mapping that can be plotted, or
+a camera. Classes allow a programmer to separate an object's
+\emph{interface} (the set of meaningful operations) from its
+\emph{implementation} (the data structures and algorithms that realize
+the interface).
+
+\index{Function!class member}
+A class implementation consists of \emph{members} (named data
+elements) and \emph{member functions} (functions that belong to the
+class and have free access to members). \CXX\ classes enforce access
+permissions on their members, protecting data from being manipulated
+except as promised by the interface.
+
+An ideal interface looks like a black box: It hides the implementation
+completely. In order to cooperate, two classes need only know each
+other's interfaces. This separation of form and function modularizes a
+program, and facilitates debugging, code reuse, and overall
+maintainability, particularly in large programs.
+
+In simple programming, classes may be treated like built-in types.
+Each class object has its own member functions, whose call syntax
+differs from standard function calls:
+\begin{verbatim}
+ Circle C1(P(1,0), 1.5); // circle of given center and radius
+ C1.draw(); // member function Circle::draw();
+\end{verbatim}
+Naturally, this call draws the circle~\code{C1}. Generally, a member
+function call consists of a class object's name, a period, and the
+name of the member function. Arguments, if any, go in the parentheses
+after the member function name, just as in a regular function call.
+
+A few short paragraphs cannot do more than scratch the surface of
+classes and object-oriented programming. For more details, please
+consult a book, such as Prata~\cite{Prata} or Stroustrup~\cite{S}, or
+Cline's on-line FAQ~\cite{Cline}.
+\index{Classes|)}
+
+
+\subsection{References and Function Arguments}
+
+\index{Function!call syntax}
+\index{Variable!reference}
+\label{references}
+\code{C}~and \CXX\ are ``call by value'' languages. Variables are not
+passed to a function; instead a copy of the value is made, and the
+function operates only on the copy. Though this feature causes
+occasional inconvenience, it prevents an object from being altered
+unexpectedly by a function call in a different part of the program.
+Calling by value helps localize the logic of a program, and
+circumvents easy-to-write but extremely hard-to-find bugs.
+
+In \CXX, a function may accept reference arguments. Passing an object
+by reference grants the calling function access to the object itself,
+not to a copy. There are two common applications: The object is a
+large data structure for which copying is ``expensive'', or the
+function \emph{needs} to modify its arguments (e.g., a function
+\code{swap(x,y)} that exchanges the values of \code{x}~and
+\code{y}).
+
+For the first situation, \CXX\ provides the \code{const} keyword,
+which ensures the function does not modify its arguments, but accepts
+a reference merely for efficiency. Any attempt to modify a
+\code{const} argument will be caught by the compiler. Most \ePiX\
+commands accept \code{const} reference arguments.
+
+The ability to pass function arguments by reference is sometimes
+touted as a feature in \CXX\ texts. However, the technique circumvents
+the data encapsulation of calling by value, and should be avoided
+unless absolutely necessary. If a function merely ``updates'' the
+value of a variable, probably the variable should be of class type,
+and the update should be performed by a member function.
+
+A function declaration must indicate that its arguments are
+references. The declarations below have the indicated idiomatic
+meanings.
+\begin{verbatim}
+ class matrix;
+ double det(matrix); // call by value, perhaps inefficient
+ matrix& transpose(matrix&); // probably changes its argument
+ double trace(const matrix&); // does not change its argument
+\end{verbatim}
+Unlike pointer arguments, reference arguments impose no syntactic
+burden on the user. If~\code{A} is a~\code{matrix}, then
+\code{transpose(A);} and \code{trace(A);} will compile. You need not
+declare explicit reference variables and pass those to the function.
+
+
+\subsection{Overloading}
+
+\index{Function!overloaded}
+\CXX\ provides ``overloading'': Multiple functions can be given the
+same name, so long as the number and/or type of their arguments
+differ. (It is \emph{not} enough for the return types alone to differ.
+The compiler must be able to select a function from its calling
+syntax.) To the user, the appearance is that a single function
+intelligently handles multiple argument lists. Naturally, overloaded
+names should refer to functions that are conceptually related.
+\index{Function|)}
+
+
+\subsection{Scope}
+
+\index{Variable!local}
+A \CXX\ statement ends with a semicolon. A collection of statements
+enclosed by curly braces is a ``code block'', and may be viewed as a
+single logical statement. Curly braces determine a ``scope'', inside
+which variable names may be re-used without ambiguity. Function
+bodies are code blocks, as are the alternatives associated to control
+statements. A variable defined between curly braces is said to be
+\emph{local} to the scope in which it is defined; its value cannot
+be used out of scope. Variables should be declared in the smallest
+scope possible.
+
+The compiler is not picky about spaces, tabs, and newlines, so an
+input file should be formatted to make local scopes visually
+apparent. \code{emacs} automatically indents code to reflect scope,
+though the default behavior does not please all users. As with
+variable naming, clarity and consistency are paramount.
+
+
+\subsection{Headers and Pre-Processing}
+
+A \CXX\ source file is compiled in multiple stages that occur
+transparently to the user. The first step, pre-processing, involves
+simple text replacement for file inclusion, macro expansion and
+conditional compilation. Next, the source is compiled and assembled:
+Human-readable language instructions are parsed, then represented in
+assembly language. Finally, the object files are linked: Function
+calls are resolved to hard-coded file offsets, possibly involving
+external library files, and the program instructions are packaged into
+an executable binary that the operating system can run.
+
+Pre-processing is used much less in~\CXX\ than in~\code{C}; the
+language itself supports safer and more featureful alternatives to
+macros, such as \code{const} variables and inline functions. File
+inclusion and conditional compilation are the chief uses of the
+pre-processor. Lines of the form
+\begin{verbatim}
+ #include <iostream>
+ #include "epix.h"
+\end{verbatim}
+cause the contents of a \emph{header file} to be read into the source
+file. A header file contains variable and function
+\emph{declarations}, statements that specify types and names but do
+not define actual data. Declarations tell the compiler just enough
+to resolve expressions and function calls without knowing specific
+values or function definitions.
+
+\index{Input file!conditional compilation}
+Conditional compilation is similar to conditional \LaTeX\ code. For
+example, a file might produce either color or monochrome output as
+follows:
+\begin{verbatim}
+#ifdef COLOR
+ ... // code for generating color figure
+#endif /* COLOR */
+#ifndef COLOR
+ ... // monochrome code
+#endif /* undef COLOR */
+\end{verbatim}
+The ``compiler symbol'' \code{COLOR} is an ordinary \CXX\ name. To
+control compilation, either put a \code{\#define COLOR} line in the
+file, or (better) supply the flag on the command line: \\
+\verb+ epix -DCOLOR <file.xp>+ \\
+Every \code{\#ifdef} must have a matching \code{\#endif}. Commenting
+the \code{\#endif} is a good habit; in a realistic file, the start and
+end of a conditional block may be separated by more than one screen.
+
+
+\subsection{Comparison with \LaTeX\ Syntax}
+
+As a programming language, \CXX\ provides certain features common to
+all languages (such as \LaTeX, MetaPost, Perl, Lisp\ldots) and adheres
+to rules of grammar. Salient differences between \LaTeX\ and \CXX\
+include:
+
+\begin{enumerate}
+\item Every \CXX\ statement and function call must end with a
+ semicolon. An omitted semicolon may result in a cryptic error
+ message from the compiler. Pre-processor directives, which start
+ with a~\code{\#}, do not end with a semicolon.
+
+\item Backslash is an escape character in \CXX:
+ \index{Labels}
+\begin{verbatim}
+ // Put label $y=\sin x$ at (2,1)
+ // Note single ^ backslash in output
+ label(P(2,1), P(0,0), "$y=\\sin x$");
+ // Double backslash ^^ in source
+\end{verbatim}
+
+\item Variable and function names may contain letters (including
+ underscore) and digits \emph{only}, are case sensitive, and must
+ begin with a letter.
+
+\item Variables in \CXX\ must have a declared \emph{type}, such as
+ \code{int} (integer) or \code{double} (double-precision floating
+ point). If a variable has global scope and its value does not
+ change, the definition should probably come in the preamble or at
+ the beginning of \code{main}. Local variables should be defined in
+ the smallest possible scope. Unlike~\C, \CXX\ allows variables to be
+ defined where they first appear.
+
+\item \CXX~requires explicit use of~\code{*} to denote multiplication;
+ juxtaposition is not enough. \CXX~does not support the use of
+ \verb+^+ for exponentiation, e.g., \verb+t^2+ is invalid. Instead,
+ use \code{t*t}~or \code{pow(t,2)}.
+
+\item \CXX\ has single- and multi-line comments. Everything between a
+ double slash and the next newline is ignored, while the strings
+ \verb+/*+~and \verb+*/+ delimit multi-line comments. A single-line
+ comment may appear within a multi-line comment, but the compiler
+ does not nest multi-line comments.
+ \index{Input file!comment in}
+
+\end{enumerate}
+
+Between them, \C~and \CXX~have about 100~reserved keywords which
+cannot be used as function or variable names.
+\index{Cplusplus@\CXX|)}
+
+
+\section{Attribute Quick Reference}
+\label{section:quickref}
+
+In the body of an input file, the ``drawing state'' determines the
+figure's appearance. Attributes are declarations, set by commands that
+accept arguments of the stated type.
+
+A \code{len} argument is a double-quoted string containing a number
+and a two-letter \LaTeX\ length unit, such as \code{"1.5pt"} or
+\code{"6cm"}. A \code{color} argument is a named primary
+(\code{Red()}, \code{Cyan()}, \code{White()}, etc.), a \code{Color}
+specified by densities (\code{RGB(...)}, \code{CMYK(...)}, etc.), or a
+\code{Color} object. Using \code{Neutral()} as a \code{Color} argument
+generally turns off the corresponding attribute.
+
+\begin{itemize}
+
+\item Angular mode: \code{radians()}, \code{degrees()}, or
+ \code{revolutions()}.
+
+ The angular mode affects all trigonometric operations, including
+ camera rotations, the drawing of arcs and ellipses, polar plotting,
+ label angle, and the trig functions themselves. Angle-sensitive trig
+ functions are capitalized, e.g., \code{Cos}, \code{Tan}.
+
+\item Fill style: \code{fill(color)}, \code{fill(bool)},
+ \code{nofill()}.
+
+\item Path style:
+
+ \begin{itemize}
+
+ \item Width: \code{plain()}, \code{bold()}, \code{bbold()},
+ \code{pen(len)}.
+
+ \item Line style: \code{line\_style(string)}. The argument is a
+ WYSIWYG sequence of dashes, spaces, and periods.
+ \code{dash\_size(double)} and \code{dot\_sep(double)} set the
+ (approximate) length in~\code{pt} of the pattern. The commands
+ \code{solid()}, \code{dashed()}, \code{dotted()} define
+ ``standard'' defaults for brevity.
+
+ \item Path color:
+ Paths can be drawn using \emph{two} pens, one atop the other. When
+ the ``base'' pen is white (or the background color) and wider than
+ the ``line'' pen, a path masks parts of the figure it crosses. A
+ 3-D effect may be obtained by making the base pen a darker shade
+ than the ``line'' pen.
+
+ \code{pen(color,[len])}, \code{base(color,[len])}
+
+ Standard widths: \code{plain(color)}, \code{bold(color)},
+ \code{bbold(color)}
+
+ \end{itemize}
+
+\item Text attributes:
+
+ \begin{itemize}
+
+ \item Color: \code{label\_color(color)}
+
+ \item Mask: \code{label\_mask(color)}, \code{label\_pad(len)}
+
+ \item Border: \code{label\_border(color, [len])},
+ \code{label\_border(len)}. The command \code{no\_label\_border()}
+ turns off label borders.
+
+ \item Font size: \code{font\_size(LaTeX size)}, no argument means
+ \code{normalsize}.
+
+ \item Font face: \code{font\_face(LaTeX font)}, two-letter font
+ selection string, default is \code{rm}.
+
+ \item Rotation: \code{label\_angle(double)}
+
+ \end{itemize}
+
+\end{itemize}
+
+Do not confuse \code{Color} constructors with the similarly-named
+(deprecated) lowercase attribute-setting commands, \code{rgb(r,g,b)},
+\code{cmyk(c,m,y,k)}, \code{red(d)}, etc. These commands affect text,
+paths, and filled regions. For example, the single command
+\code{red()} has the same effect as the three commands
+\code{pen(Red())}, \code{fill(Red())}, and \code{label\_color(Red())}.
+
+
+\texinfochapter{4}{Advanced Topics}
+\label{chapter:adv}
+
+This chapter covers \emph{ad hoc} tricks and open-ended techniques
+that require relatively more programming sophistication. You will
+almost surely need an external \CXX\ reference if you do not speak the
+language.
+
+
+\section{Hidden Object Removal}
+\label{section:hidden}
+
+\index{Hidden object removal|(}
+\ePiX\ writes the output file in the same order that objects appear in
+the input. The order is significant because PostScript builds a figure
+in layers: Objects are drawn over objects that come earlier in the
+file. Shaded polygons can be used to obtain surprisingly effective
+hidden object removal in surface meshes. This section describes the
+data structures defined in the source files \code{surface.*}.
+
+\index{Camera}
+The basic idea is to create a shaded polygon class that knows its
+approximate distance to the camera. For computational simplicity, a
+mesh ``facet'' is treated as a quadrilateral, located at the
+arithmetic mean of its vertices. A facet's boundary is created from a
+map and a domain by tracing a fine mesh rectangle counterclockwise.
+
+To draw a parametrized surface, facets are stored in a \CXX\ vector,
+sorted in decreasing order of distance to the camera, and printed to
+the output file. If filling is active, the gray density of a facet
+depends on the cosine of the angle between the normal vector and the
+vector from the camera to the element.
+
+This simple algorithm works surprisingly well when mesh elements
+intersect at most along complete edges. To incorporate line-like
+elements (e.g., coordinate axes, wire-mesh plots) with shaded
+surfaces, the best technique is often to order high-level scene
+elements manually, breaking up shaded surfaces (for example, with
+domain resizing or clipping) as necessary. The sample file
+\filename{saddle.xp} illustrates possible techniques.
+
+Shaded surfaces can be decorated with a bit of hackery. For example,
+the \code{facet::draw} function in \filename{facet.cc} can be
+modified easily to draw line elements, tangents, or normal vectors
+along with the facet itself. The sample file
+\filename{decorate.xp} contains a couple of ideas. (The
+decorations are activated by compiler flags; please consult the file
+itself for information on compiling.)
+\index{Hidden object removal|)}
+
+
+\section{Extensions}
+\label{section:extensions}
+
+Thanks to a suggestion of Andrew Sterian, \ePiX\ is extensible. User
+extensions span a spectrum, from header files that require only basic
+knowledge of~\CXX\ to separately compiled libraries that add
+substantial new features. The structure of the source code is
+outlined in Section~\ref{section:programmers}.
+
+
+\subsection{Header Files}
+
+A \CXX~header file conventionally has suffix~\filename{.h}, as in
+\filename{myheader.h}. To use this custom header, put a line
+\code{\#include "myheader.h"} in your source file.
+
+User definitions can be easily and robustly implemented with ``inline
+functions''. Inline functions are superficially similar to macros, but
+are far more safe and featureful (since they are handled by the
+compiler rather than by the pre-processor). Examples are
+\begin{verbatim}
+ inline void Bold() { pen(1.6); }
+ inline void purple() { rgb(0.5, 0, 0.7); }
+ inline void draw_square(double s) { rect(P(-s,-s),P(s,s)); }
+ inline double cube(double x) { return pow(x,3); // x^3 }
+\end{verbatim}
+The keyword \code{void} signifies a function that does not return a
+value, or (when used as an implicit parameter) a function that does
+not accept arguments. Inline function definitions are syntactically
+identical to ordinary function definitions, but \emph{must} occur in a
+header file or in the source file where they are used. The examples
+above might be used in an input file as follows:
+\begin{verbatim}
+ Bold();
+ draw_square(cube(1.25));
+\end{verbatim}
+
+
+\subsection{Compiling}
+
+The next few sections outline the creation of a ``static library'' on
+GNU/Linux, and explain how to incorporate custom features at runtime.
+The extensively-commented sample files \filename{std\_F.cc}~and
+\filename{std\_F.h} illustrate the techniques described below, and may
+be used for guidance and experimentation.
+
+A small library is usually written as a \emph{header} file, which
+contains class and function declarations (also called ``prototypes''),
+and a \emph{source} file, which contains the actual
+code. Conventionally (under *nix), these files have extension
+\filename{.h}~and \filename{.cc} respectively. Header and source files
+may ``include'' other header files, to incorporate additional
+functionality.
+\begin{verbatim}
+/* my_code.h */
+#ifndef MY_CODE
+#define MY_CODE
+#include <cmath> // standard library math header
+#include "epix.h" // ePiX header
+using ePiX::P;
+
+namespace Mine { // to avoid name conflicts
+ // functions for special relativity
+ double lorentz_norm(const P&);
+ bool spacelike(const P&);
+} // end of namespace
+#endif /* MY_CODE */
+\end{verbatim}
+This file exhibits two ``safety features''. The three \code{MY\_CODE}
+lines prevent the file from being included multiple times. In a file
+of this size, inclusion protection is overkill, but as your code base
+grows and the number of header files increases, this protection is
+essential. Second, the header introduces a ``Mine'' namespace. Inside
+this namespace, two functions are declared as prototypes, giving the
+function's return type, name, and argument type(s). A header file
+should be commented fairly liberally, so that a year or two from now
+you'll be able to decipher the file's contents. For a longer file,
+version and contact information, an overall comment describing the
+file's features, and license information are appropriate.
+
+Next, the corresponding source file; definitions are also placed into
+the namespace, and must match their prototypes from the header file
+exactly.
+\begin{verbatim}
+/* my_code.cc */
+#include "my_code.h"
+using namespace ePiX;
+
+namespace Mine {
+ double lorentz_norm(const P& arg)
+ {
+ double x(arg.x1()), y(arg.x2()), z(arg.x3()); // extract coords
+ return (y-x)*(y+x) + z*z; // -x^2 + y^2 + z^2
+ }
+ bool spacelike(const P& arg)
+ {
+ return (lorentz_norm(arg) > 0); // true if inequality is
+ }
+} // end of namespace
+\end{verbatim}
+Copies of these files are included with the source code so you can
+experiment with them. Next, the source file must be ``compiled'',
+``archived'', and ``indexed''. In the commands below, the percent sign
+is the prompt.
+\begin{verbatim}
+% g++ -c my_code.cc
+% ar -ru libcustom.a my_code.o
+% ranlib libcustom.a
+\end{verbatim}
+Please see your system documentation for details on command options
+and what each step does. For linking (below), the name of the library
+file must begin ``lib'' and have the extension~\filename{.a}. Once these
+steps are successfully completed, put the library \filename{libcustom.a}
+and header file \filename{my\_code.h} in your project directory. You're
+ready to use the code in an \ePiX\ figure.
+
+
+\subsection{Runtime Linking}
+
+The script~\epix\ allows input files to be linked with external
+libraries at run time, when the input file is compiled into a
+temporary executable.
+
+\epix\ recognizes command line options and passes them verbatim to the
+compiler. The most commonly used options are those of the form
+\begin{verbatim}
+ -I<include> -L<libdir> -l<lib>
+\end{verbatim}
+For example, to link \filename{figure.xp} against
+\filename{mylibs/libcustom.a}, run the command
+\begin{verbatim}
+ epix -Lmylibs -lcustom figure
+\end{verbatim}
+The options \code{-I. -L.} tell the compiler to look in the current
+directory for header and library files. Compiler options may appear
+in any order, but must come before the name of the input file(s).
+
+Compiler options may be placed in the configuration file
+\filename{\$HOME/.epixrc}, with syntax as above. A line in the config
+file that contains a pound sign~(\code{\#}) is a comment, no matter
+where in the line the~\code{\#} appears. If any non-comment line
+fails to start with a dash, the rest of the file is silently
+discarded. Command-line options are read before the config file.
+
+
+\subsection{Using Multiple Versions}
+
+The script \filename{epix}~links by default against the \code{C}~math
+library \code{libm.a}~and the \ePiX\ library \code{libepix.a}. The
+command option \code{--no-defaults} clears the header and include
+paths and removes \code{libepix.a} from the link list. The script may
+therefore be used with multiple versions of \ePiX, a potentially
+useful feature if you regularly need to compile old source files, or
+simply prefer the syntax of an older version.
+
+To install and use (say) Version~1.0.0, build the package according to
+its \filename{INSTALL} instructions, but \emph{do not use the makefile
+ to install}. Instead, manually install the header and library only,
+using their version number:
+\begin{verbatim}
+# install -m 644 epix.h /usr/local/include/epix-1.0.h
+# install -m 644 libepix.a /usr/local/lib/libepix-1.0.a
+\end{verbatim}
+A non-system directory may be used instead of \filename{/usr/local}.
+To use the old version, a source file must \code{include} the
+appropriate header file (which is identified by its version number).
+To compile, issue a command such as
+\begin{verbatim}
+epix --no-defaults -I/usr/local -L/usr/local -lepix-1.0 file.xp
+\end{verbatim}
+
+
+\section{Programmer's Guide}
+\label{section:programmers}
+
+This section briefly surveys \ePiX's implementation, and is intended
+for (potential) programmers. The source code is divided into modules
+with small, well-defined responsibilities, but the user interface is
+mostly compatible with the syntax of Version~1.0. These constraints
+demanded a degree of implementation hiding. For example, the
+user-visible classes defined in \filename{Color.h}, \filename{path.h},
+and~\filename{screen.h} contain only a pointer to the implementation
+class, and style data is hidden behind global commands.
+
+Functionally, the code consists of the user interface; implementation
+class\-es comprising drawing attributes, spatial objects, screens and
+representations of their elements, and output; and miscellaneous
+utility functions. The headers in each group, and their contents, are
+described in Section~\ref{section:interface}.
+
+The user interface headers are assembled into a single file,
+\filename{epix.h}, and installed in \filename{/usr/local/include} by
+default. In normal use, the shell scripts read only the user interface
+header. The individual headers, including the components of
+\filename{epix.h}, are installed in
+\filename{/usr/local/include/epix}. These are provided for authors of
+external libraries, who may need access to implementation details.
+
+
+\subsection{External Packages}
+
+\ePiX\ harnesses the computational power of~\CXX\ to the typographical
+capabilities of \LaTeX. Consequently, \ePiX\ should be viewed in part
+as a framework for expressing numerical data visually.
+
+In the course of your work, you may develop specialized code filling a
+gap in \ePiX's functionality. If your code seems likely to be of
+interest to other users, please consider bundling it as an external
+package and notifying the \ePiX\ community so your work can be linked
+from the project pages and distributed to interested users.
+
+There are no formal requirements for external packages, but in the
+interest of uniformity contributed code should follow the GNU Coding
+Standards~\cite{GNUCoding}. At a minimum, an external package should
+build with the standard \code{./configure; make; make install}
+commands, and the \code{configure} script should accept an option
+\code{--with-epix} for the user to specify a non-default \ePiX\
+install directory.
+
+If an external package builds a static library, it should provide a
+single header containing all the package's entry points, and enclose
+its interface in a namespace. Entry points should not collide with
+\ePiX\ functions. Naming the package ``\filename{epix-<...>}'' is a
+good idea, but not essential. For example, a package providing textual
+nodes and diagram layout might be named \filename{epix-nodes}. Input
+files would use the package with the lines
+\begin{verbatim}
+ #include "epix-nodes.h"
+ using namespace ePiX-nodes;
+\end{verbatim}
+and be compiled with
+\begin{verbatim}
+ epix -lepix-nodes <file>
+\end{verbatim}
+
+The user and internal interfaces of \ePiX-1.2 are not likely to
+change. Still, it's prudent to rely only on the user interface in
+contributed code whenever possible. Doing so also simplifies your work
+as an author; your library can simply \code{include} the user header
+file, and deal only with high-level objects and drawing attributes.
+
+
+\subsection{User Interface}
+\label{section:interface}
+
+These files (in order) comprise the global header \filename{epix.h}.
+
+\Header{enums.h} Marker, alignment, Riemann integral, and vector field
+types.
+
+\Header{length.h} Physical lengths, conceptually a number and
+two-letter \LaTeX\ length unit.
+
+\Header{interval.h} Closed, open, and half-open interval ranges for
+data culling.
+
+\Header{triples.h} The \code{P} class.
+
+\Header{functions.h} Angle-sensitive trig functions, miscellaneous
+utility functions, the \code{Deriv}~and \code{Integral} classes.
+
+\Header{pairs.h} Screen locations and displacements, with complex
+arithmetic operations.
+
+\Header{Color.h} The Color class interface, named
+primaries and constructors.
+
+\Header{state.h} Angle mode; clipping and cropping; label styles;
+filling; arrow head style; dot and tick sizes, dash length; line
+style; line and base pen attributes; color-setting commands.
+
+\Header{frame.h} Orthonormal bases.
+
+\Header{domain.h} Coordinate boxes for function plotting.
+
+\Header{camera.h} The camera.
+
+\Header{screen.h} The screen class.
+
+\Header{picture.h} Dimension-setting, offset, layout, decoration,
+verbatim text, and output format commands.
+
+\Header{markers.h} Point markers, axis labels, and coordinate axes.
+
+\Header{axis.h} Coordinate axes and labels in various styles.
+
+\Header{legend.h} Plot legends.
+
+\Header{path.h} The path class.
+
+\Header{curves.h} Polygons, arrows, ellipses, arcs, splines,
+coordinate grids, and recursive fractal curves.
+
+\Header{circle.h} The \code{Circle} shape object class.
+
+\Header{plane.h} The \code{Plane} shape object class.
+
+\Header{segment.h} The \code{Segment} shape object class.
+
+\Header{sphere.h} The \code{Sphere} shape object class.
+
+\Header{intersections.h} Shape object intersection operators.
+
+\Header{plots.h} Plotting commands.
+
+\Header{surface.h} Shaded surface plots.
+
+\Header{data\_mask.h} Helper class for data pruning.
+
+\Header{data\_file.h} Class for storing and representing data.
+
+\Header{data\_bins.h} Class for sorting and counting data.
+
+\Header{geometry.h} Latitudes and longitudes; spherical plotting,
+arcs, polygons, and polyhedra; hyperbolic arcs.
+
+
+\subsection{Implementation Classes}
+
+\Header{Color\_Base.h} The Color implementation interface.
+
+\Header{Color\_CMY.h} The CMY color model.
+
+\Header{Color\_CMYK.h} The CMYK color model.
+
+\Header{Color\_Gray.h} The Gray color model.
+
+\Header{Color\_Neutral.h} Each color class has a ``Neutral'' member
+that converts colors to that model by filtering. This file defines the
+unique ``model-less'' Neutral color for which filtering performs no
+action.
+
+\Header{Color\_RGB.h} The RGB color model.
+
+\Header{Color\_Sep.h} Classes for CMYK separation.
+
+\Header{active\_screen.h} Simple manipulator for the active screen.
+
+\Header{picture\_data.h} Picture implementation: two \code{screen}s
+(representing the \code{canvas}~and the output page), true dimensions
+and offsets, pointer to output format, list of colors, and lists of
+verbatim text to write before and after printing the \code{picture}
+environment in the output file. For simplicity, the \code{screen}s and
+dimensions are public; encapsulation from the user results from
+``hiding'' this header.
+
+
+\subsubsection*{Style Attributes}
+
+Declaration-style attributes are maintained with functions returning
+static references: \code{the\_angle\_style()},
+\code{the\_arrowhead\_style()}, \code{the\_label\_style()},
+\code{the\_mark\_size()}, \code{the\_paint\_style()}, and
+\code{the\_path\_style()}. Each function is declared in the
+analogously-named header.
+
+\Header{angle\_units.h} Angular modes: \code{radians},
+\code{revolutions}, and \code{degrees}.
+
+\Header{arrow\_style.h} Arrow head style data: width, ratio, and
+inset.
+
+\Header{label\_style.h} Text object style: Label and mask colors,
+padding, border color and width, alignment, font size, font face, and
+angle.
+
+\Header{marker\_style.h} Dot and tick sizes.
+
+\Header{paint\_style.h} Line and base pens, fill color.
+
+\Header{path\_style.h} Solid, dashed, dotted lines.
+
+\Header{pen\_data.h} The pen class.
+
+
+\subsubsection*{Objects}
+
+\Header{arrow\_data.h} Arrow representation.
+
+\Header{facet.h} Shaded surface elements.
+
+\Header{label\_data.h} Text (label and marker) objects.
+
+\Header{legend\_item.h} Items for \code{legend}s.
+
+\Header{path\_data.h} Path implementation.
+
+\Header{spline.h} The natural spline class.
+
+\Header{spline\_data.h} Templates for quadratic and cubic splines.
+
+
+\subsubsection*{Screen Representation}
+
+Elements in a \code{screen} are represented polymorphically as
+``\code{tile}s'', of which there are six types: \code{glyph} (textual
+elements), \code{pen\_arrow} (arrows), \code{pen\_fill} (filled
+regions), \code{pen\_line} (path-like elements), \code{verbatim}
+(raw text), and \code{legend\_tile} (legends).
+
+Border and background shape are dictated by the \code{screen\_mask}
+class. The cropping algorithm assumes the contour of a screen mask is
+convex.
+
+\Header{affine.h} Affine maps.
+
+\Header{cropping.h} Screen mask cropping.
+
+\Header{glyph.h} Markers and labels.
+
+\Header{legend\_tile.h} Screen representation of a \code{legend}.
+
+\Header{mask\_diamond.h} Screen diamond mask.
+
+\Header{mask\_ellipse.h} Screen elliptical mask.
+
+\Header{mask\_rectangle.h} Screen rectangular mask.
+
+\Header{pen\_arrow.h} Arrows.
+
+\Header{pen\_fill.h} Filled regions.
+
+\Header{pen\_line.h} Paths.
+
+\Header{screen\_data.h} Screen implementation class.
+
+\Header{screen\_mask.h} Screen mask interface.
+
+\Header{tile.h} Screen element interface.
+
+\Header{verbatim.h} Text in output stream.
+
+
+\subsubsection*{Output}
+
+Output is divided into a couple of high-level operations and several
+``atomic'' low-level operations. To create a new output
+format, one need only implement the \code{format} interface for the
+desired file type. Paths and filled regions may be implemented however
+the output type dictates.
+
+\Header{eepic.h} eepic macros.
+
+\Header{fmt\_template.h} ``skeleton'' header for new output formats.
+
+\Header{format.h} The output interface.
+
+\Header{pst.h} PSTricks macros.
+
+\Header{tikz.h} tikz macros.
+
+
+\subsubsection*{Utilities}
+
+\Header{Color\_Utils.h} Functions for setting color channel densities.
+
+\Header{clipping.h} The clip box.
+
+\Header{constants.h} Global constants: Line widths; dot, tick, and
+dash sizes; arrowhead parameters; miscellaneous numerical constants
+and internal parameters.
+
+\Header{crop\_algorithms.h} Path and loop clipping templates.
+
+\Header{deriv.h} Finite difference template.
+
+\Header{edge\_data.h} Path element representation template.
+
+\Header{errors.h} Warning and error messages.
+
+\Header{frac.h} Rational numbers and operators.
+
+\Header{halfspace.h} Halfspace cutting.
+
+\Header{hatching.h} Filling regions in eepic.
+
+\Header{lens.h} Camera lenses.
+
+\Header{map.h} Wrappers for templated plotting.
+
+\Header{plot\_algorithms.h} Plotting templates.
+
+\Header{screen\_crop.h} Crop paths and loops.
+
+\Header{utils.h} Truncation, date and time, line breaking.
+
+
+\appendix
+\texinfoappendix{A}{Software Freedom}
+\index{Free software|(}
+
+Academics in general, and mathematicians in particular, depend on free
+exchange of information. We prove theorems or establish experimental
+results, write up formal accounts, place preprints on public file
+servers, and submit papers to peer-reviewed journals. If accepted, the
+results---data, techniques, methods of reasoning, citations, and
+conclusions---are published in print and become part of the public
+record, governed by copyright law. Libraries purchase journal
+subscriptions, but researchers and scholars may use ideas from the
+literature merely by giving appropriate citations in their own
+work. ``Theft'' arises from false claims of authorship.
+
+Carried over to software, the academic process would guarantee rights
+similar to those provided by the GNU General Public License (GPL):
+
+\begin{itemize}
+
+\item (GPL~0) To run a program for any purpose.
+
+\item (GPL~1) To study how the program works, and adapt it to your
+ needs.
+
+\item (GPL~2) To redistribute copies of the program.
+
+\item (GPL~3) To improve the program, and release improvements to the
+ public, so that the whole community benefits.
+
+\end{itemize}
+
+In reality, attitudes toward software differ markedly. Most academics
+work on a proprietary platform, use proprietary software for research
+and teaching, and share information with colleagues and students in
+proprietary, even obfuscated, data formats. Contrary to the academic
+ethic, proprietary software licenses restrict access to information:
+preventing users from learning how a program works internally
+(``reverse engineering''), limiting the number of users who may run a
+piece of software, and forbidding users from running (or sometimes
+even installing) a purchased copy on multiple machines.
+
+Restrictions on use aside, if one cannot examine a program's source
+code, one cannot fully trust the output, any more than one can trust
+(for purposes of scientific publication) results of a commercial
+testing lab.
+
+\texicomment
+\noindent$\phantom{.}$\hfil\vbox{\hrule width 4in}\hfil
+\texicommentend
+
+Consider a hypothetical future world in which scholarly results are
+disseminated like software. Instead of subscriptions, journals
+sell licenses granting readership to a specified number of
+individuals. Photocopying an article for a class or research seminar
+constitutes ``piracy'', though if the institution has purchased a
+sufficiently large site license the teacher or speaker may bring the
+physical volume to class and project the pages onto a screen.
+
+Of course, reading an article is scarcely enlightening. Mathematics
+papers contain only the statements of theorems. Merely opening the
+journal binds the reader to a lengthy legal agreement, stating that
+theorems be used only for specific purposes and threatening serious
+legal consequences for attempting to discover the author's proofs.
+
+The actions of a single student, employee, or faculty member can
+expose an institution to a costly ``journal audit'' from the
+Mathematical Society of America (MSA), with the institution
+responsible for legal costs if the audit reveals license violations
+anywhere in the organization.
+
+Mathematicians who long for the Old Days when papers contained
+proofs and were shared freely are dismissed as idealistic cranks
+or labeled anti-business communists. Common knowledge asserts the
+obvious superiority of proprietary journals, and the necessity of
+licenses for keeping mathematicians gainfully employed.
+
+\texicomment
+\noindent$\phantom{.}$\hfil\vbox{\hrule width 4in}\hfil
+\texicommentend
+
+Back in our world, some vendors have attempted to placate opponents of
+closed source with ``shared source'' licenses, under which one may
+sign a non-disclosure agreement and subsequently examine source
+code. In the future world analogy, a shared source agreement would
+allow journal licensees to sign an NDA, then see the proofs of
+theorems. Readers could thereby correct errors in proofs (benefitting
+the publisher by improving the reliability of the journal), but would
+be legally forbidden from using the ideas elsewhere (denying benefit
+to other mathematicians).
+
+Legally and conceptually codifying software as a commodity ignores a
+fundamental reality: Like an idea or recipe, software can be copied
+without loss of the original. The perception of ``theft'' by copying
+arises from an artificial belief that software has an owner who must
+be monetarily compensated each time a person acquires a copy. The
+nature of software does not enforce the ``sale'' model in the way
+services and physical commodities do. It therefore seems
+philosophically inappropriate to treat software as a commodity, and
+perilous to conform the legal system to the enforcement of such a
+model.
+
+At its best, software enhances our productivity and
+creativity. Sharing software, like sharing ideas, benefits a larger
+number of people without detriment to existing users. I hope this
+modest program is, in conjunction with the much larger efforts of
+others (especially Donald Knuth, Richard Stallman, and the many people
+who have contributed to the authorship of \LaTeX\ and its packages),
+useful to you in your mathematical work.
+
+Please visit the Free Software Foundation, at
+\URL{www.fsf.org}, to learn more about free software and how
+you can contribute to its development and adoption.
+\index{Free software|)}
+
+\texinfoappendix{B}{Acknowledgments}
+
+\ePiX\ is built on the work of many people (unfortunately, most of
+whom I am unaware). The following people have contributed, sometimes
+unknowingly but always generously:
+
+\paragraph{Infrastructure} Donald Knuth, Conrad Kwok, Leslie Lamport,
+Tim Morgan, Piet van~Oostrum, Sunil Podar, Richard Stallman, Till
+Tantau, Herbert Voss, Timothy van~Zandt
+
+\paragraph{Enhancements} Jay Belanger, Robin Blume-Kohout, Julian
+Gilbey, Marcus Hanwell, Yvon Henel, Svend Daug{\aa}rd Pedersen, Andrew
+Sterian
+
+\paragraph{Porting and packaging} Julian Gilbey (Debian); Tsuguru Kato
+(FreeBSD); Markus Dittrich, Danny van Dyk, Christian Faulhammer,
+Olivier Fisette, Chris Gianelloni, Michael Hanselmann, Marcus Hanwell,
+David Holm, Peter Johanson, Patrick Kursawe, Tobias Scherbaum, Markus
+Ullmann (Gentoo); Guido Gonzato (RPM); Rene Rebe (T2)
+
+\paragraph{Debugging, advice, and other assistance} Jay Belanger,
+Felipe Paulo Guazzi Bergo, Karl Berry, Robin Blume-Kohout, Patrick
+Cousot, Stephen Gibson, Julian Gilbey, Dov Grobgeld, Bob Grover, Jim
+Hefferon, Jacques L'helgoual, Yvon Henel, Hartmut Henkel, Herng-Jeng
+Jou, Walter Kehowski, Kevin McCormick, Ross Moore, Thorsten Riess,
+Alan Sill, Neel Smith, Michael Somos, Andrew Sterian, Ryszard Tanas,
+Kai Trukenmueller, Torbjorn Vik, Wenguang Wang, Gabe Weaver, Mariusz
+Wodzicki
+
+\texicomment
+\begin{thebibliography}{9}
+%
+\bibitem{Cline} Marshall Cline, \emph{\CXX\ FAQ Lite}, \\
+ \URL{http://www.parashift.com/c++-faq-lite/}
+%
+\bibitem{xcolor} Uwe Kern, \emph{Extending \LaTeX's color facilities:
+ the \code{xcolor} package}, white paper, Jan.~21, 2007
+%
+\bibitem{KnR} Brian Kernighan and Dennis Ritchie, \emph{The \code{C}
+ Programming Language}, Second Ed., Prentice-Hall Software Series,
+ 1988
+%
+\bibitem{GNUC} Sandra Loosemore, Richard M. Stallman, et.\ al.,
+ \emph{The GNU \code{C}~Library Reference Manual}, GNU Press,
+ 2004
+%
+\bibitem{Prata} Stephen Prata, \emph{\CXX\ Primer Plus}, Sams, 2002
+%
+\bibitem{R} Keith Reckdahl, \emph{Using Imported Graphics in
+ \LaTeX2e}, Version~2.0, white paper, Dec.~15, 1997
+%
+\bibitem{GNUCoding} Richard M. Stallman, et.\ al., \emph{The GNU
+ Coding Standards}, \\
+ \URL{http://www.gnu.org/prep/standards/}
+%
+\bibitem{S} Bjarne Stroustrup, \emph{The \CXX\ Programming Language},
+ Special Ed., Addison-Wesley, 1997
+%
+\bibitem{Z} Timothy van~Zandt, \emph{PSTricks: PostScript Macros for
+ Generic \TeX}, Version~0.93a, white paper, Mar.~12, 1993
+%
+\end{thebibliography}
+
+\clearpage
+
+\printindex
+
+\end{document}
+
+\texicommentend
diff --git a/graphics/epix/doc/marker.eepic b/graphics/epix/doc/marker.eepic
new file mode 100644
index 0000000000..5ee5923a3b
--- /dev/null
+++ b/graphics/epix/doc/marker.eepic
@@ -0,0 +1,39 @@
+%% Generated from marker.xp on Tue Jan 4 15:32:18 EST 2005 by
+%% ePiX-1.0.3
+%%
+%% Cartesian bounding box: [0,5] x [0,1]
+%% Actual size: 3.75in x 1in
+%% Figure offset: right by 0in, up by 0in
+%%
+\setlength{\unitlength}{0.25in}
+\begin{picture}(15,4)(-0,-0)
+%% ---
+\put(0.664176,3.77861){{\tt{CIRC}}}
+\whiten\put(0,4){\makebox(0,0)[c]{{\circle{0.166044}}}}
+\put(4.41418,3.77861){{\tt{SPOT}}}
+\put(3.75,4){\makebox(0,0)[c]{{\circle*{0.249066}}}}
+\put(8.16418,3.77861){{\tt{RING}}}
+\put(7.5,4){\makebox(0,0)[c]{{\circle{0.249066}}}}
+\put(11.9142,3.77861){{\tt{DOT}}}
+\put(11.25,4){\makebox(0,0)[c]{{\circle*{0.166044}}}}
+\put(15.6642,3.77861){{\tt{DDOT}}}
+\put(15,4){\makebox(0,0)[c]{{\circle*{0.110696}}}}
+\put(0.664176,1.77861){{\tt{PLUS}}}
+\put(0,2){\makebox(0,0)[c]{+}}
+\put(4.41418,1.77861){{\tt{OPLUS}}}
+\put(3.75,2){\makebox(0,0)[c]{$\oplus$}}
+\put(8.16418,1.77861){{\tt{TIMES}}}
+\put(7.5,2){\makebox(0,0)[c]{$\times$}}
+\put(11.9142,1.77861){{\tt{OTIMES}}}
+\put(11.25,2){\makebox(0,0)[c]{$\otimes$}}
+\put(0.664176,-0.221392){{\tt{DIAMOND}}}
+\put(0,0){\makebox(0,0)[c]{$\diamond$}}
+\put(4.41418,-0.221392){{\tt{UP}}}
+\put(3.75,0){\makebox(0,0)[c]{$\bigtriangleup$}}
+\put(8.16418,-0.221392){{\tt{DOWN}}}
+\put(7.5,0){\makebox(0,0)[c]{$\bigtriangledown$}}
+\put(11.9142,-0.221392){{\tt{BOX}}}
+\put(11.25,0){\makebox(0,0)[c]{\rule{3pt}{3pt}}}
+\put(15.6642,-0.221392){{\tt{BBOX}}}
+\put(15,0){\makebox(0,0)[c]{\rule{2pt}{2pt}}}
+\end{picture}
diff --git a/graphics/epix/doc/marker.xp b/graphics/epix/doc/marker.xp
new file mode 100644
index 0000000000..f1569c1476
--- /dev/null
+++ b/graphics/epix/doc/marker.xp
@@ -0,0 +1,68 @@
+/* -*-ePiX-*- */
+/* marker.c -- types of marker */
+#include "epix.h"
+using namespace ePiX;
+
+int main()
+{
+ unitlength("0.25in");
+ picture(P(15,4));
+ bounding_box(P(0,0), P(5,1));
+ // offset(P(-1,0));
+
+ begin();
+
+ double x1 = x_min;
+ double x2 = x_min + x_size/4;
+ double x3 = x_min + 2*x_size/4;
+ double x4 = x_min + 3*x_size/4;
+ double x5 = x_max;
+
+ double y1 = y_min;
+ double y2 = y_min + y_size/2;
+ double y3 = y_max;
+
+ label(P(x1,y3), P(12,-4), "{\\tt{CIRC}}");
+ circ(P(x1,y3));
+
+ label(P(x2,y3), P(12,-4), "{\\tt{SPOT}}");
+ spot(P(x2,y3));
+
+ label(P(x3,y3), P(12,-4), "{\\tt{RING}}");
+ ring(P(x3,y3));
+
+ label(P(x4,y3), P(12,-4), "{\\tt{DOT}}");
+ dot(P(x4,y3));
+
+ label(P(x5,y3), P(12,-4), "{\\tt{DDOT}}");
+ ddot(P(x5,y3));
+
+ label(P(x1,y2), P(12,-4), "{\\tt{PLUS}}");
+ marker(P(x1,y2), PLUS);
+
+ label(P(x2,y2), P(12,-4), "{\\tt{OPLUS}}");
+ marker(P(x2,y2), OPLUS);
+
+ label(P(x3,y2), P(12,-4), "{\\tt{TIMES}}");
+ marker(P(x3,y2), TIMES);
+
+ label(P(x4,y2), P(12,-4), "{\\tt{OTIMES}}");
+ marker(P(x4,y2), OTIMES);
+
+ label(P(x1,y1), P(12,-4), "{\\tt{DIAMOND}}");
+ marker(P(x1,y1), DIAMOND);
+
+ label(P(x2,y1), P(12,-4), "{\\tt{UP}}");
+ marker(P(x2,y1),UP);
+
+ label(P(x3,y1), P(12,-4), "{\\tt{DOWN}}");
+ marker(P(x3,y1), DOWN);
+
+ label(P(x4,y1), P(12,-4), "{\\tt{BOX}}");
+ marker(P(x4,y1), BOX);
+
+ label(P(x5,y1), P(12,-4), "{\\tt{BBOX}}");
+ marker(P(x5,y1), BBOX);
+
+ end();
+}
diff --git a/graphics/epix/doc/my_code.cc b/graphics/epix/doc/my_code.cc
new file mode 100644
index 0000000000..b7365fa63c
--- /dev/null
+++ b/graphics/epix/doc/my_code.cc
@@ -0,0 +1,15 @@
+/* my_code.cc */
+#include "my_code.h"
+using namespace ePiX;
+
+namespace Mine {
+ double lorentz_norm(P arg)
+ {
+ double x=arg.x1(), y=arg.x2(), z=arg.x3(); // extract coords
+ return -x*x + y*y + z*z;
+ }
+ bool spacelike(P arg)
+ {
+ return (lorentz_norm(arg) > 0);
+ }
+} // end of namespace
diff --git a/graphics/epix/doc/my_code.h b/graphics/epix/doc/my_code.h
new file mode 100644
index 0000000000..229e80dbf4
--- /dev/null
+++ b/graphics/epix/doc/my_code.h
@@ -0,0 +1,10 @@
+/* my_code.h */
+#include <cmath> // standard library math header
+#include "epix.h" // ePiX header
+using ePiX::P;
+
+namespace Mine { // to avoid name conflicts
+ // functions for special relativity
+ double lorentz_norm(P);
+ bool spacelike(P);
+} // end of namespace
diff --git a/graphics/epix/doc/objects.eepic b/graphics/epix/doc/objects.eepic
new file mode 100644
index 0000000000..9b17600895
--- /dev/null
+++ b/graphics/epix/doc/objects.eepic
@@ -0,0 +1,412 @@
+%% Generated from objects.xp on Thu Jun 28 14:55:45 EDT 2007 by
+%% ePiX-1.1.6
+%%
+%% Cartesian bounding box: [0,5] x [0,2]
+%% Actual size: 3.75 x 1.5in
+%% Figure offset: left by 0in, down by 0in
+%%
+\xdefinecolor{rgb_000000}{rgb}{0,0,0}
+\xdefinecolor{rgb_e5e5e5}{rgb}{0.898039,0.898039,0.898039}
+\xdefinecolor{rgb_ffffff}{rgb}{1,1,1}
+\setlength{\unitlength}{1in}
+\begin{picture}(3.75,1.5)(-0,-0)
+\path(0.675,0.75)(2.325,0.75)(1.5,1.125)(0.675,0.75)
+%%
+\path(3.1875,1.125)(3.18724,1.13481)(3.18647,1.1446)
+ (3.18519,1.15433)(3.1834,1.16398)(3.18111,1.17353)(3.17832,1.18294)
+ (3.17505,1.19219)(3.17129,1.20126)(3.16706,1.21012)
+ (3.16238,1.21875)(3.15725,1.22712)(3.15169,1.23521)(3.14571,1.243)
+ (3.13934,1.25046)(3.13258,1.25758)(3.12546,1.26434)(3.118,1.27071)
+ (3.11021,1.27669)(3.10212,1.28225)(3.09375,1.28738)
+ (3.08512,1.29206)(3.07626,1.29629)(3.06719,1.30005)
+ (3.05794,1.30332)(3.04853,1.30611)(3.03898,1.3084)(3.02933,1.31019)
+ (3.0196,1.31147)(3.00981,1.31224)(3,1.3125)(2.99019,1.31224)
+ (2.9804,1.31147)(2.97067,1.31019)(2.96102,1.3084)(2.95147,1.30611)
+ (2.94206,1.30332)(2.93281,1.30005)(2.92374,1.29629)
+ (2.91488,1.29206)(2.90625,1.28738)(2.89788,1.28225)
+ (2.88979,1.27669)(2.882,1.27071)(2.87454,1.26434)(2.86742,1.25758)
+ (2.86066,1.25046)(2.85429,1.243)(2.84831,1.23521)(2.84275,1.22712)
+ (2.83762,1.21875)(2.83294,1.21012)(2.82871,1.20126)
+ (2.82495,1.19219)(2.82168,1.18294)(2.81889,1.17353)(2.8166,1.16398)
+ (2.81481,1.15433)(2.81353,1.1446)(2.81276,1.13481)(2.8125,1.125)
+ (2.81276,1.11519)(2.81353,1.1054)(2.81481,1.09567)(2.8166,1.08602)
+ (2.81889,1.07647)(2.82168,1.06706)(2.82495,1.05781)
+ (2.82871,1.04874)(2.83294,1.03988)(2.83762,1.03125)
+ (2.84275,1.02288)(2.84831,1.01479)(2.85429,1.007)(2.86066,0.999538)
+ (2.86742,0.992417)(2.87454,0.98566)(2.882,0.979285)
+ (2.88979,0.973309)(2.89788,0.967749)(2.90625,0.96262)
+ (2.91488,0.957936)(2.92374,0.95371)(2.93281,0.949954)
+ (2.94206,0.946677)(2.95147,0.943889)(2.96102,0.941597)
+ (2.97067,0.939808)(2.9804,0.938527)(2.99019,0.937757)(3,0.9375)
+ (3.00981,0.937757)(3.0196,0.938527)(3.02933,0.939808)
+ (3.03898,0.941597)(3.04853,0.943889)(3.05794,0.946677)
+ (3.06719,0.949954)(3.07626,0.95371)(3.08512,0.957936)
+ (3.09375,0.96262)(3.10212,0.967749)(3.11021,0.973309)
+ (3.118,0.979285)(3.12546,0.98566)(3.13258,0.992417)
+ (3.13934,0.999538)(3.14571,1.007)(3.15169,1.01479)(3.15725,1.02288)
+ (3.16238,1.03125)(3.16706,1.03988)(3.17129,1.04874)
+ (3.17505,1.05781)(3.17832,1.06706)(3.18111,1.07647)(3.1834,1.08602)
+ (3.18519,1.09567)(3.18647,1.1054)(3.18724,1.11519)(3.1875,1.125)
+%%
+\path(0.75,0)(2.25,0)(2.25,0.75)(0.75,0.75)(0.75,0)
+%%
+\color{rgb_e5e5e5}%
+\path(2.025,0.00550459)(1.725,0.00550459)
+\path(2.025,0.0110092)(1.725,0.0110092)
+\path(2.025,0.0165138)(1.725,0.0165138)
+\path(2.025,0.0220183)(1.725,0.0220183)
+\path(2.025,0.0275229)(1.725,0.0275229)
+\path(2.025,0.0330275)(1.725,0.0330275)
+\path(2.025,0.0385321)(1.725,0.0385321)
+\path(2.025,0.0440367)(1.725,0.0440367)
+\path(2.025,0.0495413)(1.725,0.0495413)
+\path(2.025,0.0550459)(1.725,0.0550459)
+\path(2.025,0.0605505)(1.725,0.0605505)
+\path(2.025,0.066055)(1.725,0.066055)
+\path(2.025,0.0715596)(1.725,0.0715596)
+\path(2.025,0.0770642)(1.725,0.0770642)
+\path(2.025,0.0825688)(1.725,0.0825688)
+\path(2.025,0.0880734)(1.725,0.0880734)
+\path(2.025,0.093578)(1.725,0.093578)
+\path(2.025,0.0990826)(1.725,0.0990826)
+\path(2.025,0.104587)(1.725,0.104587)
+\path(2.025,0.110092)(1.725,0.110092)
+\path(2.025,0.115596)(1.725,0.115596)
+\path(2.025,0.121101)(1.725,0.121101)
+\path(2.025,0.126606)(1.725,0.126606)
+\path(2.025,0.13211)(1.725,0.13211)
+\path(2.025,0.137615)(1.725,0.137615)
+\path(2.025,0.143119)(1.725,0.143119)
+\path(2.025,0.148624)(1.725,0.148624)
+\path(2.025,0.154128)(1.725,0.154128)
+\path(2.025,0.159633)(1.725,0.159633)
+\path(2.025,0.165138)(1.725,0.165138)
+\path(2.025,0.170642)(1.725,0.170642)
+\path(2.025,0.176147)(1.725,0.176147)
+\path(2.025,0.181651)(1.725,0.181651)
+\path(2.025,0.187156)(1.725,0.187156)
+\path(2.025,0.192661)(1.725,0.192661)
+\path(2.025,0.198165)(1.725,0.198165)
+\path(2.025,0.20367)(1.725,0.20367)
+\path(2.025,0.209174)(1.725,0.209174)
+\path(2.025,0.214679)(1.725,0.214679)
+\path(2.025,0.220183)(1.725,0.220183)
+\path(2.025,0.225688)(1.725,0.225688)
+\path(2.025,0.231193)(1.725,0.231193)
+\path(2.025,0.236697)(1.725,0.236697)
+\path(2.025,0.242202)(1.725,0.242202)
+\path(2.025,0.247706)(1.725,0.247706)
+\path(2.025,0.253211)(1.725,0.253211)
+\path(2.025,0.258716)(1.725,0.258716)
+\path(2.025,0.26422)(1.725,0.26422)
+\path(2.025,0.269725)(1.725,0.269725)
+\path(2.025,0.275229)(1.725,0.275229)
+\path(2.025,0.280734)(1.725,0.280734)
+\path(2.025,0.286239)(1.725,0.286239)
+\path(2.025,0.291743)(1.725,0.291743)
+\path(2.025,0.297248)(1.725,0.297248)
+\path(2.025,0.302752)(1.725,0.302752)
+\path(2.025,0.308257)(1.725,0.308257)
+\path(2.025,0.313761)(1.725,0.313761)
+\path(2.025,0.319266)(1.725,0.319266)
+\path(2.025,0.324771)(1.725,0.324771)
+\path(2.025,0.330275)(1.725,0.330275)
+\path(2.025,0.33578)(1.725,0.33578)
+\path(2.025,0.341284)(1.725,0.341284)
+\path(2.025,0.346789)(1.725,0.346789)
+\path(2.025,0.352294)(1.725,0.352294)
+\path(2.025,0.357798)(1.725,0.357798)
+\path(2.025,0.363303)(1.725,0.363303)
+\path(2.025,0.368807)(1.725,0.368807)
+\path(2.025,0.374312)(1.725,0.374312)
+\path(2.025,0.379817)(1.725,0.379817)
+\path(2.025,0.385321)(1.725,0.385321)
+\path(2.025,0.390826)(1.725,0.390826)
+\path(2.025,0.39633)(1.725,0.39633)
+\path(2.025,0.401835)(1.725,0.401835)
+\path(2.025,0.407339)(1.725,0.407339)
+\path(2.025,0.412844)(1.725,0.412844)
+\path(2.025,0.418349)(1.725,0.418349)
+\path(2.025,0.423853)(1.725,0.423853)
+\path(2.025,0.429358)(1.725,0.429358)
+\path(2.025,0.434862)(1.725,0.434862)
+\path(2.025,0.440367)(1.725,0.440367)
+\path(2.025,0.445872)(1.725,0.445872)
+\path(2.025,0.451376)(1.725,0.451376)
+\path(2.025,0.456881)(1.725,0.456881)
+\path(2.025,0.462385)(1.725,0.462385)
+\path(2.025,0.46789)(1.725,0.46789)
+\path(2.025,0.473394)(1.725,0.473394)
+\path(2.025,0.478899)(1.725,0.478899)
+\path(2.025,0.484404)(1.725,0.484404)
+\path(2.025,0.489908)(1.725,0.489908)
+\path(2.025,0.495413)(1.725,0.495413)
+\path(2.025,0.500917)(1.725,0.500917)
+\path(2.025,0.506422)(1.725,0.506422)
+\path(2.025,0.511927)(1.725,0.511927)
+\path(2.025,0.517431)(1.725,0.517431)
+\path(2.025,0.522936)(1.725,0.522936)
+\path(2.025,0.52844)(1.725,0.52844)
+\path(2.025,0.533945)(1.725,0.533945)
+\path(2.025,0.53945)(1.725,0.53945)
+\path(2.025,0.544954)(1.725,0.544954)
+\path(2.025,0.550459)(1.725,0.550459)
+\path(2.025,0.555963)(1.725,0.555963)
+\path(2.025,0.561468)(1.725,0.561468)
+\path(2.025,0.566972)(1.725,0.566972)
+\path(2.025,0.572477)(1.725,0.572477)
+\path(2.025,0.577982)(1.725,0.577982)
+\path(2.025,0.583486)(1.725,0.583486)
+\path(2.025,0.588991)(1.725,0.588991)
+\path(2.025,0.594495)(1.725,0.594495)
+\path(2.01955,0.6)(2.01955,0)
+\path(2.01409,0.6)(2.01409,0)
+\path(2.00864,0.6)(2.00864,0)
+\path(2.00318,0.6)(2.00318,0)
+\path(1.99773,0.6)(1.99773,0)
+\path(1.99227,0.6)(1.99227,0)
+\path(1.98682,0.6)(1.98682,0)
+\path(1.98136,0.6)(1.98136,0)
+\path(1.97591,0.6)(1.97591,0)
+\path(1.97045,0.6)(1.97045,0)
+\path(1.965,0.6)(1.965,0)
+\path(1.95955,0.6)(1.95955,0)
+\path(1.95409,0.6)(1.95409,0)
+\path(1.94864,0.6)(1.94864,0)
+\path(1.94318,0.6)(1.94318,0)
+\path(1.93773,0.6)(1.93773,0)
+\path(1.93227,0.6)(1.93227,0)
+\path(1.92682,0.6)(1.92682,0)
+\path(1.92136,0.6)(1.92136,0)
+\path(1.91591,0.6)(1.91591,0)
+\path(1.91045,0.6)(1.91045,0)
+\path(1.905,0.6)(1.905,0)
+\path(1.89955,0.6)(1.89955,0)
+\path(1.89409,0.6)(1.89409,0)
+\path(1.88864,0.6)(1.88864,0)
+\path(1.88318,0.6)(1.88318,0)
+\path(1.87773,0.6)(1.87773,0)
+\path(1.87227,0.6)(1.87227,0)
+\path(1.86682,0.6)(1.86682,0)
+\path(1.86136,0.6)(1.86136,0)
+\path(1.85591,0.6)(1.85591,0)
+\path(1.85045,0.6)(1.85045,0)
+\path(1.845,0.6)(1.845,0)
+\path(1.83955,0.6)(1.83955,0)
+\path(1.83409,0.6)(1.83409,0)
+\path(1.82864,0.6)(1.82864,0)
+\path(1.82318,0.6)(1.82318,0)
+\path(1.81773,0.6)(1.81773,0)
+\path(1.81227,0.6)(1.81227,0)
+\path(1.80682,0.6)(1.80682,0)
+\path(1.80136,0.6)(1.80136,0)
+\path(1.79591,0.6)(1.79591,0)
+\path(1.79045,0.6)(1.79045,0)
+\path(1.785,0.6)(1.785,0)
+\path(1.77955,0.6)(1.77955,0)
+\path(1.77409,0.6)(1.77409,0)
+\path(1.76864,0.6)(1.76864,0)
+\path(1.76318,0.6)(1.76318,0)
+\path(1.75773,0.6)(1.75773,0)
+\path(1.75227,0.6)(1.75227,0)
+\path(1.74682,0.6)(1.74682,0)
+\path(1.74136,0.6)(1.74136,0)
+\path(1.73591,0.6)(1.73591,0)
+\path(1.73045,0.6)(1.73045,0)
+\color{rgb_000000}%
+\path(1.725,0)(2.025,0)(2.025,0.6)(1.725,0.6)(1.725,0)
+%%
+\color{rgb_ffffff}%
+\path(1.4941,0.45)(1.5,0.434819)
+\path(1.48819,0.45)(1.5,0.419637)
+\path(1.48229,0.45)(1.5,0.404456)
+\path(1.47639,0.45)(1.5,0.389275)
+\path(1.47049,0.45)(1.5,0.374093)
+\path(1.46458,0.45)(1.5,0.358912)
+\path(1.45868,0.45)(1.5,0.343731)
+\path(1.45278,0.45)(1.5,0.32855)
+\path(1.44688,0.45)(1.5,0.313368)
+\path(1.44097,0.45)(1.5,0.298187)
+\path(1.43507,0.45)(1.5,0.283006)
+\path(1.42917,0.45)(1.5,0.267824)
+\path(1.42327,0.45)(1.5,0.252643)
+\path(1.41736,0.45)(1.5,0.237462)
+\path(1.41146,0.45)(1.5,0.22228)
+\path(1.40556,0.45)(1.5,0.207099)
+\path(1.39966,0.45)(1.5,0.191918)
+\path(1.39375,0.45)(1.5,0.176737)
+\path(1.38785,0.45)(1.5,0.161555)
+\path(1.38195,0.45)(1.49859,0.15)
+\path(1.37605,0.45)(1.49269,0.15)
+\path(1.37014,0.45)(1.48679,0.15)
+\path(1.36424,0.45)(1.48088,0.15)
+\path(1.35834,0.45)(1.47498,0.15)
+\path(1.35244,0.45)(1.46908,0.15)
+\path(1.34653,0.45)(1.46318,0.15)
+\path(1.34063,0.45)(1.45727,0.15)
+\path(1.33473,0.45)(1.45137,0.15)
+\path(1.32883,0.45)(1.44547,0.15)
+\path(1.32292,0.45)(1.43957,0.15)
+\path(1.31702,0.45)(1.43366,0.15)
+\path(1.31112,0.45)(1.42776,0.15)
+\path(1.30522,0.45)(1.42186,0.15)
+\path(1.29931,0.45)(1.41596,0.15)
+\path(1.29341,0.45)(1.41005,0.15)
+\path(1.28751,0.45)(1.40415,0.15)
+\path(1.28161,0.45)(1.39825,0.15)
+\path(1.2757,0.45)(1.39235,0.15)
+\path(1.2698,0.45)(1.38644,0.15)
+\path(1.2639,0.45)(1.38054,0.15)
+\path(1.258,0.45)(1.37464,0.15)
+\path(1.25209,0.45)(1.36874,0.15)
+\path(1.24619,0.45)(1.36283,0.15)
+\path(1.24029,0.45)(1.35693,0.15)
+\path(1.23439,0.45)(1.35103,0.15)
+\path(1.22848,0.45)(1.34513,0.15)
+\path(1.22258,0.45)(1.33922,0.15)
+\path(1.21668,0.45)(1.33332,0.15)
+\path(1.21078,0.45)(1.32742,0.15)
+\path(1.20487,0.45)(1.32152,0.15)
+\path(1.19897,0.45)(1.31561,0.15)
+\path(1.19307,0.45)(1.30971,0.15)
+\path(1.18717,0.45)(1.30381,0.15)
+\path(1.18126,0.45)(1.29791,0.15)
+\path(1.17536,0.45)(1.292,0.15)
+\path(1.16946,0.45)(1.2861,0.15)
+\path(1.16356,0.45)(1.2802,0.15)
+\path(1.15765,0.45)(1.2743,0.15)
+\path(1.15175,0.45)(1.26839,0.15)
+\path(1.14585,0.45)(1.26249,0.15)
+\path(1.13995,0.45)(1.25659,0.15)
+\path(1.13404,0.45)(1.25069,0.15)
+\path(1.12814,0.45)(1.24478,0.15)
+\path(1.12224,0.45)(1.23888,0.15)
+\path(1.11634,0.45)(1.23298,0.15)
+\path(1.11043,0.45)(1.22708,0.15)
+\path(1.10453,0.45)(1.22117,0.15)
+\path(1.09863,0.45)(1.21527,0.15)
+\path(1.09273,0.45)(1.20937,0.15)
+\path(1.08682,0.45)(1.20347,0.15)
+\path(1.08092,0.45)(1.19756,0.15)
+\path(1.07502,0.45)(1.19166,0.15)
+\path(1.06912,0.45)(1.18576,0.15)
+\path(1.06321,0.45)(1.17986,0.15)
+\path(1.05731,0.45)(1.17395,0.15)
+\path(1.05141,0.45)(1.16805,0.15)
+\path(1.05,0.438445)(1.16215,0.15)
+\path(1.05,0.423263)(1.15625,0.15)
+\path(1.05,0.408082)(1.15034,0.15)
+\path(1.05,0.392901)(1.14444,0.15)
+\path(1.05,0.37772)(1.13854,0.15)
+\path(1.05,0.362538)(1.13264,0.15)
+\path(1.05,0.347357)(1.12673,0.15)
+\path(1.05,0.332176)(1.12083,0.15)
+\path(1.05,0.316994)(1.11493,0.15)
+\path(1.05,0.301813)(1.10903,0.15)
+\path(1.05,0.286632)(1.10312,0.15)
+\path(1.05,0.27145)(1.09722,0.15)
+\path(1.05,0.256269)(1.09132,0.15)
+\path(1.05,0.241088)(1.08542,0.15)
+\path(1.05,0.225907)(1.07951,0.15)
+\path(1.05,0.210725)(1.07361,0.15)
+\path(1.05,0.195544)(1.06771,0.15)
+\path(1.05,0.180363)(1.06181,0.15)
+\path(1.05,0.165181)(1.0559,0.15)
+\path(1.05,0.444063)(1.06527,0.45)
+\path(1.05,0.438126)(1.08054,0.45)
+\path(1.05,0.432189)(1.09581,0.45)
+\path(1.05,0.426252)(1.11108,0.45)
+\path(1.05,0.420315)(1.12635,0.45)
+\path(1.05,0.414378)(1.14162,0.45)
+\path(1.05,0.408441)(1.15689,0.45)
+\path(1.05,0.402504)(1.17216,0.45)
+\path(1.05,0.396567)(1.18743,0.45)
+\path(1.05,0.39063)(1.2027,0.45)
+\path(1.05,0.384693)(1.21797,0.45)
+\path(1.05,0.378756)(1.23324,0.45)
+\path(1.05,0.372819)(1.24851,0.45)
+\path(1.05,0.366882)(1.26378,0.45)
+\path(1.05,0.360945)(1.27905,0.45)
+\path(1.05,0.355008)(1.29432,0.45)
+\path(1.05,0.349071)(1.30959,0.45)
+\path(1.05,0.343134)(1.32486,0.45)
+\path(1.05,0.337197)(1.34013,0.45)
+\path(1.05,0.33126)(1.3554,0.45)
+\path(1.05,0.325323)(1.37067,0.45)
+\path(1.05,0.319386)(1.38594,0.45)
+\path(1.05,0.313449)(1.40121,0.45)
+\path(1.05,0.307512)(1.41648,0.45)
+\path(1.05,0.301575)(1.43175,0.45)
+\path(1.05,0.295638)(1.44702,0.45)
+\path(1.05,0.289701)(1.46229,0.45)
+\path(1.05,0.283764)(1.47756,0.45)
+\path(1.05,0.277827)(1.49283,0.45)
+\path(1.05,0.27189)(1.5,0.44685)
+\path(1.05,0.265953)(1.5,0.440913)
+\path(1.05,0.260016)(1.5,0.434976)
+\path(1.05,0.254079)(1.5,0.429039)
+\path(1.05,0.248142)(1.5,0.423102)
+\path(1.05,0.242205)(1.5,0.417165)
+\path(1.05,0.236268)(1.5,0.411228)
+\path(1.05,0.230331)(1.5,0.405291)
+\path(1.05,0.224394)(1.5,0.399354)
+\path(1.05,0.218457)(1.5,0.393417)
+\path(1.05,0.21252)(1.5,0.38748)
+\path(1.05,0.206583)(1.5,0.381543)
+\path(1.05,0.200646)(1.5,0.375606)
+\path(1.05,0.194709)(1.5,0.369669)
+\path(1.05,0.188772)(1.5,0.363732)
+\path(1.05,0.182835)(1.5,0.357795)
+\path(1.05,0.176898)(1.5,0.351858)
+\path(1.05,0.170961)(1.5,0.345921)
+\path(1.05,0.165024)(1.5,0.339984)
+\path(1.05,0.159087)(1.5,0.334047)
+\path(1.05,0.15315)(1.5,0.32811)
+\path(1.05717,0.15)(1.5,0.322173)
+\path(1.07244,0.15)(1.5,0.316236)
+\path(1.08771,0.15)(1.5,0.310299)
+\path(1.10298,0.15)(1.5,0.304362)
+\path(1.11825,0.15)(1.5,0.298425)
+\path(1.13352,0.15)(1.5,0.292488)
+\path(1.14879,0.15)(1.5,0.286551)
+\path(1.16406,0.15)(1.5,0.280614)
+\path(1.17933,0.15)(1.5,0.274677)
+\path(1.1946,0.15)(1.5,0.26874)
+\path(1.20987,0.15)(1.5,0.262803)
+\path(1.22514,0.15)(1.5,0.256866)
+\path(1.24041,0.15)(1.5,0.250929)
+\path(1.25568,0.15)(1.5,0.244992)
+\path(1.27095,0.15)(1.5,0.239055)
+\path(1.28622,0.15)(1.5,0.233118)
+\path(1.30149,0.15)(1.5,0.227181)
+\path(1.31676,0.15)(1.5,0.221244)
+\path(1.33203,0.15)(1.5,0.215307)
+\path(1.3473,0.15)(1.5,0.20937)
+\path(1.36257,0.15)(1.5,0.203433)
+\path(1.37784,0.15)(1.5,0.197496)
+\path(1.39311,0.15)(1.5,0.191559)
+\path(1.40838,0.15)(1.5,0.185622)
+\path(1.42365,0.15)(1.5,0.179685)
+\path(1.43892,0.15)(1.5,0.173748)
+\path(1.45419,0.15)(1.5,0.167811)
+\path(1.46946,0.15)(1.5,0.161874)
+\path(1.48473,0.15)(1.5,0.155937)
+\color{rgb_000000}%
+\path(1.05,0.15)(1.5,0.15)(1.5,0.45)(1.05,0.45)(1.05,0.15)
+%%
+\allinethickness{0.8pt}%
+\path(1.05,0.15)(1.05,0.45)
+%%
+\path(1.275,0.15)(1.275,0.45)
+%%
+\path(1.5,0.15)(1.5,0.45)
+%%
+\path(1.05,0.15)(1.5,0.15)
+%%
+\path(1.05,0.3)(1.5,0.3)
+%%
+\path(1.05,0.45)(1.5,0.45)
+%%
+\path(0,0)(3.75,0)
+%%
+\end{picture}
diff --git a/graphics/epix/doc/objects.xp b/graphics/epix/doc/objects.xp
new file mode 100644
index 0000000000..d0828f0b94
--- /dev/null
+++ b/graphics/epix/doc/objects.xp
@@ -0,0 +1,33 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+int main()
+{
+ picture(P(0,0), P(5,2), "3.75 x 1.5in");
+
+ begin();
+
+ // roof
+ triangle(P(0.9, 1), P(3.1, 1), P(2, 1.5)); // vertices
+
+ // sun
+ circle(P(4,1.5), 0.25); // center and radius
+
+ // house
+ rect(P(1,0), P(3,1)); // opposite corners
+ // grid(P(1,0), P(3,1), 1, 10); // corners, numbers of subdivisions
+
+ // door
+ fill(Black(0.1));
+ rect(P(2.3,0), P(2.7,0.8)); // corners
+
+ fill(White());
+ // window
+ rect(P(1.4,0.2), P(2, 0.6));
+ bold();
+ grid(P(1.4,0.2), P(2, 0.6), 2, 2);
+
+ line(P(xmin(),0), P(xmax(),0));
+ end();
+}
diff --git a/graphics/epix/doc/pathstyle.eepic b/graphics/epix/doc/pathstyle.eepic
new file mode 100644
index 0000000000..531523bf45
--- /dev/null
+++ b/graphics/epix/doc/pathstyle.eepic
@@ -0,0 +1,225 @@
+%% Generated from pathstyle.xp on Tue Jul 17 15:01:22 EDT 2007 by
+%% ePiX-1.1.8
+%%
+%% Cartesian bounding box: [0,4] x [0,4]
+%% Actual size: 4 x 1in
+%% Figure offset: left by 0in, down by 0in
+%%
+\xdefinecolor{rgb_000000}{rgb}{0,0,0}
+\setlength{\unitlength}{1in}
+\begin{picture}(4,1)(-0,-0)
+\path(0,1)(0.0394737,1)
+\path(0.118421,1)(0.157895,1)
+\path(0.157895,1)(0.197368,1)
+\path(0.276316,1)(0.315789,1)
+\path(0.315789,1)(0.355263,1)
+\path(0.434211,1)(0.473684,1)
+\path(0.473684,1)(0.513158,1)
+\path(0.592105,1)(0.631579,1)
+\path(0.631579,1)(0.671053,1)
+\path(0.75,1)(0.789474,1)
+\path(0.789474,1)(0.828947,1)
+\path(0.907895,1)(0.947368,1)
+\path(0.947368,1)(0.986842,1)
+\path(1.06579,1)(1.10526,1)
+\path(1.10526,1)(1.14474,1)
+\path(1.22368,1)(1.26316,1)
+\path(1.26316,1)(1.30263,1)
+\path(1.38158,1)(1.42105,1)
+\path(1.42105,1)(1.46053,1)
+\path(1.53947,1)(1.57895,1)
+\path(1.57895,1)(1.61842,1)
+\path(1.69737,1)(1.73684,1)
+\path(1.73684,1)(1.77632,1)
+\path(1.85526,1)(1.89474,1)
+\path(1.89474,1)(1.93421,1)
+\path(2.01316,1)(2.05263,1)
+\path(2.05263,1)(2.09211,1)
+\path(2.17105,1)(2.21053,1)
+\path(2.21053,1)(2.25,1)
+\path(2.32895,1)(2.36842,1)
+\path(2.36842,1)(2.40789,1)
+\path(2.48684,1)(2.52632,1)
+\path(2.52632,1)(2.56579,1)
+\path(2.64474,1)(2.68421,1)
+\path(2.68421,1)(2.72368,1)
+\path(2.80263,1)(2.84211,1)
+\path(2.84211,1)(2.88158,1)
+\path(2.96053,1)(3,1)
+\put(3.05535,1){\makebox(0,0)[l]{\code{line\_style("-\ \ -")}}}
+\path(0,0.75)(0.0263158,0.75)
+\path(0.131579,0.75)(0.157895,0.75)
+\path(0.157895,0.75)(0.184211,0.75)
+\path(0.289474,0.75)(0.315789,0.75)
+\path(0.315789,0.75)(0.342105,0.75)
+\path(0.447368,0.75)(0.473684,0.75)
+\path(0.473684,0.75)(0.5,0.75)
+\path(0.605263,0.75)(0.631579,0.75)
+\path(0.631579,0.75)(0.657895,0.75)
+\path(0.763158,0.75)(0.789474,0.75)
+\path(0.789474,0.75)(0.815789,0.75)
+\path(0.921053,0.75)(0.947368,0.75)
+\path(0.947368,0.75)(0.973684,0.75)
+\path(1.07895,0.75)(1.10526,0.75)
+\path(1.10526,0.75)(1.13158,0.75)
+\path(1.23684,0.75)(1.26316,0.75)
+\path(1.26316,0.75)(1.28947,0.75)
+\path(1.39474,0.75)(1.42105,0.75)
+\path(1.42105,0.75)(1.44737,0.75)
+\path(1.55263,0.75)(1.57895,0.75)
+\path(1.57895,0.75)(1.60526,0.75)
+\path(1.71053,0.75)(1.73684,0.75)
+\path(1.73684,0.75)(1.76316,0.75)
+\path(1.86842,0.75)(1.89474,0.75)
+\path(1.89474,0.75)(1.92105,0.75)
+\path(2.02632,0.75)(2.05263,0.75)
+\path(2.05263,0.75)(2.07895,0.75)
+\path(2.18421,0.75)(2.21053,0.75)
+\path(2.21053,0.75)(2.23684,0.75)
+\path(2.34211,0.75)(2.36842,0.75)
+\path(2.36842,0.75)(2.39474,0.75)
+\path(2.5,0.75)(2.52632,0.75)
+\path(2.52632,0.75)(2.55263,0.75)
+\path(2.65789,0.75)(2.68421,0.75)
+\path(2.68421,0.75)(2.71053,0.75)
+\path(2.81579,0.75)(2.84211,0.75)
+\path(2.84211,0.75)(2.86842,0.75)
+\path(2.97368,0.75)(3,0.75)
+\put(3.05535,0.75){\makebox(0,0)[l]{\code{line\_style("-\ \ \ \ -")}}}
+\put(0.0789474,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(0.236842,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(0.394737,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(0.552632,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(0.710526,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(0.868421,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(1.02632,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(1.18421,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(1.34211,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(1.5,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(1.65789,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(1.81579,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(1.97368,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(2.13158,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(2.28947,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(2.44737,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(2.60526,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(2.76316,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(2.92105,0.5){\makebox(0,0){\circle{0.0055348}}}
+\put(3.05535,0.5){\makebox(0,0)[l]{\code{line\_style(" .\ ")}}}
+\path(0,0.25)(0.0315789,0.25)
+\put(0.0789474,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(0.126316,0.25)(0.157895,0.25)
+\path(0.157895,0.25)(0.189474,0.25)
+\put(0.236842,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(0.284211,0.25)(0.315789,0.25)
+\path(0.315789,0.25)(0.347368,0.25)
+\put(0.394737,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(0.442105,0.25)(0.473684,0.25)
+\path(0.473684,0.25)(0.505263,0.25)
+\put(0.552632,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(0.6,0.25)(0.631579,0.25)
+\path(0.631579,0.25)(0.663158,0.25)
+\put(0.710526,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(0.757895,0.25)(0.789474,0.25)
+\path(0.789474,0.25)(0.821053,0.25)
+\put(0.868421,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(0.915789,0.25)(0.947368,0.25)
+\path(0.947368,0.25)(0.978947,0.25)
+\put(1.02632,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(1.07368,0.25)(1.10526,0.25)
+\path(1.10526,0.25)(1.13684,0.25)
+\put(1.18421,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(1.23158,0.25)(1.26316,0.25)
+\path(1.26316,0.25)(1.29474,0.25)
+\put(1.34211,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(1.38947,0.25)(1.42105,0.25)
+\path(1.42105,0.25)(1.45263,0.25)
+\put(1.5,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(1.54737,0.25)(1.57895,0.25)
+\path(1.57895,0.25)(1.61053,0.25)
+\put(1.65789,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(1.70526,0.25)(1.73684,0.25)
+\path(1.73684,0.25)(1.76842,0.25)
+\put(1.81579,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(1.86316,0.25)(1.89474,0.25)
+\path(1.89474,0.25)(1.92632,0.25)
+\put(1.97368,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(2.02105,0.25)(2.05263,0.25)
+\path(2.05263,0.25)(2.08421,0.25)
+\put(2.13158,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(2.17895,0.25)(2.21053,0.25)
+\path(2.21053,0.25)(2.24211,0.25)
+\put(2.28947,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(2.33684,0.25)(2.36842,0.25)
+\path(2.36842,0.25)(2.4,0.25)
+\put(2.44737,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(2.49474,0.25)(2.52632,0.25)
+\path(2.52632,0.25)(2.55789,0.25)
+\put(2.60526,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(2.65263,0.25)(2.68421,0.25)
+\path(2.68421,0.25)(2.71579,0.25)
+\put(2.76316,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(2.81053,0.25)(2.84211,0.25)
+\path(2.84211,0.25)(2.87368,0.25)
+\put(2.92105,0.25){\makebox(0,0){\circle{0.0055348}}}
+\path(2.96842,0.25)(3,0.25)
+\put(3.05535,0.25){\makebox(0,0)[l]{\code{line\_style("-\ .\ -")}}}
+\put(0.0157895,0){\makebox(0,0){\circle{0.0055348}}}
+\path(0.0631579,0)(0.0947368,0)
+\put(0.142105,0){\makebox(0,0){\circle{0.0055348}}}
+\put(0.173684,0){\makebox(0,0){\circle{0.0055348}}}
+\path(0.221053,0)(0.252632,0)
+\put(0.3,0){\makebox(0,0){\circle{0.0055348}}}
+\put(0.331579,0){\makebox(0,0){\circle{0.0055348}}}
+\path(0.378947,0)(0.410526,0)
+\put(0.457895,0){\makebox(0,0){\circle{0.0055348}}}
+\put(0.489474,0){\makebox(0,0){\circle{0.0055348}}}
+\path(0.536842,0)(0.568421,0)
+\put(0.615789,0){\makebox(0,0){\circle{0.0055348}}}
+\put(0.647368,0){\makebox(0,0){\circle{0.0055348}}}
+\path(0.694737,0)(0.726316,0)
+\put(0.773684,0){\makebox(0,0){\circle{0.0055348}}}
+\put(0.805263,0){\makebox(0,0){\circle{0.0055348}}}
+\path(0.852632,0)(0.884211,0)
+\put(0.931579,0){\makebox(0,0){\circle{0.0055348}}}
+\put(0.963158,0){\makebox(0,0){\circle{0.0055348}}}
+\path(1.01053,0)(1.04211,0)
+\put(1.08947,0){\makebox(0,0){\circle{0.0055348}}}
+\put(1.12105,0){\makebox(0,0){\circle{0.0055348}}}
+\path(1.16842,0)(1.2,0)
+\put(1.24737,0){\makebox(0,0){\circle{0.0055348}}}
+\put(1.27895,0){\makebox(0,0){\circle{0.0055348}}}
+\path(1.32632,0)(1.35789,0)
+\put(1.40526,0){\makebox(0,0){\circle{0.0055348}}}
+\put(1.43684,0){\makebox(0,0){\circle{0.0055348}}}
+\path(1.48421,0)(1.51579,0)
+\put(1.56316,0){\makebox(0,0){\circle{0.0055348}}}
+\put(1.59474,0){\makebox(0,0){\circle{0.0055348}}}
+\path(1.64211,0)(1.67368,0)
+\put(1.72105,0){\makebox(0,0){\circle{0.0055348}}}
+\put(1.75263,0){\makebox(0,0){\circle{0.0055348}}}
+\path(1.8,0)(1.83158,0)
+\put(1.87895,0){\makebox(0,0){\circle{0.0055348}}}
+\put(1.91053,0){\makebox(0,0){\circle{0.0055348}}}
+\path(1.95789,0)(1.98947,0)
+\put(2.03684,0){\makebox(0,0){\circle{0.0055348}}}
+\put(2.06842,0){\makebox(0,0){\circle{0.0055348}}}
+\path(2.11579,0)(2.14737,0)
+\put(2.19474,0){\makebox(0,0){\circle{0.0055348}}}
+\put(2.22632,0){\makebox(0,0){\circle{0.0055348}}}
+\path(2.27368,0)(2.30526,0)
+\put(2.35263,0){\makebox(0,0){\circle{0.0055348}}}
+\put(2.38421,0){\makebox(0,0){\circle{0.0055348}}}
+\path(2.43158,0)(2.46316,0)
+\put(2.51053,0){\makebox(0,0){\circle{0.0055348}}}
+\put(2.54211,0){\makebox(0,0){\circle{0.0055348}}}
+\path(2.58947,0)(2.62105,0)
+\put(2.66842,0){\makebox(0,0){\circle{0.0055348}}}
+\put(2.7,0){\makebox(0,0){\circle{0.0055348}}}
+\path(2.74737,0)(2.77895,0)
+\put(2.82632,0){\makebox(0,0){\circle{0.0055348}}}
+\put(2.85789,0){\makebox(0,0){\circle{0.0055348}}}
+\path(2.90526,0)(2.93684,0)
+\put(2.98421,0){\makebox(0,0){\circle{0.0055348}}}
+\put(3.05535,0){\makebox(0,0)[l]{\code{line\_style(".\ - .")}}}
+\end{picture}
diff --git a/graphics/epix/doc/pathstyle.xp b/graphics/epix/doc/pathstyle.xp
new file mode 100644
index 0000000000..47fe65e5e1
--- /dev/null
+++ b/graphics/epix/doc/pathstyle.xp
@@ -0,0 +1,24 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+void dash_sample(double ht, std::string pattern)
+{
+ line_style(pattern);
+ line(P(0,ht), P(3,ht));
+ label(P(3, ht), P(4,0), "\\code{line\\_style(\""+pattern+"\")}", r);
+}
+
+int main() {
+ picture(P(0,0), P(4,4), "4x1in");
+
+ begin();
+
+ dash_sample(4, "-\\ \\ -");
+ dash_sample(3, "-\\ \\ \\ \\ -");
+ dash_sample(2, " .\\ ");
+ dash_sample(1, "-\\ .\\ -");
+ dash_sample(0, ".\\ - .");
+
+ end();
+}
diff --git a/graphics/epix/doc/plot_a.eepic b/graphics/epix/doc/plot_a.eepic
new file mode 100644
index 0000000000..bf0e6e787a
--- /dev/null
+++ b/graphics/epix/doc/plot_a.eepic
@@ -0,0 +1,95 @@
+%% Generated from plot_a.xp on Tue Jul 3 00:20:34 EDT 2007 by
+%% ePiX-1.0.25
+%%
+%% Cartesian bounding box: [-1,1] x [-1,1]
+%% Actual size: 1.5in x 1.5in
+%% Figure offset: right by 0in, up by 0in
+%%
+\setlength{\unitlength}{1in}
+\begin{picture}(1.5,1.5)(-0,-0)
+%% ---
+\path(0.75,0.75)(0.709403,0.666178)(0.666551,0.577699)(0.62125,0.484165)
+ (0.573284,0.385128)(0.522412,0.280089)(0.46836,0.168485)
+\path(0.75,0.75)(0.749023,0.665974)(0.74798,0.585752)(0.746855,0.509046)
+ (0.745629,0.435587)(0.744277,0.365124)(0.742767,0.297412)
+\path(0.75,0.75)(0.788831,0.67297)(0.830368,0.605884)(0.875481,0.548895)
+ (0.925286,0.502471)(0.981254,0.467495)(1.04539,0.445422)
+\path(0.75,0.75)(0.824541,0.685618)(0.903621,0.632501)(0.988754,0.590989)
+ (1.08184,0.561798)(1.18533,0.546138)(1.30251,0.545884)
+\path(0.75,0.75)(0.852385,0.702504)(0.959101,0.662234)(1.07131,0.62933)
+ (1.19037,0.604066)(1.31791,0.586882)(1.45594,0.578419)
+\path(0.75,0.75)(0.869635,0.722554)(0.991406,0.694618)(1.11537,0.666178)
+ (1.24159,0.637221)(1.37013,0.607733)(1.50104,0.577699)
+\path(0.75,0.75)(0.874862,0.74491)(0.998815,0.731016)(1.12092,0.708519)
+ (1.24029,0.677746)(1.35609,0.639142)(1.46759,0.593248)
+\path(0.75,0.75)(0.867939,0.768582)(0.982511,0.77261)(1.09249,0.76265)
+ (1.19682,0.739556)(1.29466,0.704421)(1.38541,0.658506)
+\path(0.75,0.75)(0.849863,0.792084)(0.945428,0.818543)(1.03584,0.830052)
+ (1.12046,0.827563)(1.1988,0.812243)(1.27061,0.785404)
+\path(0.75,0.75)(0.822527,0.813279)(0.891435,0.864939)(0.956495,0.905455)
+ (1.01755,0.935412)(1.07452,0.955475)(1.12739,0.966366)
+\path(0.75,0.75)(0.788515,0.829523)(0.825104,0.905071)(0.859908,0.976933)
+ (0.893055,1.04537)(0.924661,1.11063)(0.954829,1.17292)
+\path(0.75,0.75)(0.750924,0.838139)(0.751807,0.93073)(0.752656,1.02814)
+ (0.753481,1.13079)(0.754288,1.23912)(0.755083,1.35363)
+\path(0.75,0.75)(0.713174,0.837085)(0.677771,0.934566)(0.643292,1.043)
+ (0.609295,1.16316)(0.575368,1.29605)(0.541119,1.44293)
+\path(0.75,0.75)(0.678756,0.825621)(0.609753,0.912727)(0.542063,1.01182)
+ (0.47484,1.12367)(0.40728,1.24929)(0.33859,1.39004)
+\path(0.75,0.75)(0.650938,0.804706)(0.554306,0.866713)(0.459296,0.936218)
+ (0.365158,1.01352)(0.27118,1.09902)(0.176669,1.19323)
+\path(0.75,0.75)(0.632446,0.776969)(0.516918,0.803473)(0.403366,0.829523)
+ (0.291738,0.855133)(0.181986,0.880311)(0.0740632,0.905071)
+\path(0.75,0.75)(0.625191,0.746217)(0.501394,0.73363)(0.379543,0.712441)
+ (0.260522,0.68298)(0.145146,0.645689)(0.0341447,0.601107)
+\path(0.75,0.75)(0.630074,0.71664)(0.509637,0.668642)(0.390202,0.606516)
+ (0.273258,0.531127)(0.160206,0.443655)(0.0523099,0.345536)
+\path(0.75,0.75)(0.646869,0.69196)(0.541651,0.618018)(0.435639,0.528643)
+ (0.330189,0.424716)(0.22666,0.307508)(0.126363,0.178624)
+\path(0.75,0.75)(0.674167,0.674761)(0.59542,0.587383)(0.514234,0.48787)
+ (0.431158,0.376427)(0.346809,0.253475)(0.261856,0.119648)
+\path(0.75,0.75)(0.709403,0.666178)(0.666551,0.577699)(0.62125,0.484165)
+ (0.573284,0.385128)(0.522412,0.280089)(0.46836,0.168485)
+\path(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)
+ (0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)
+ (0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)
+ (0.75,0.75)(0.75,0.75)(0.75,0.75)
+\path(0.709403,0.666178)(0.749023,0.665974)(0.788831,0.67297)
+ (0.824541,0.685618)(0.852385,0.702504)(0.869635,0.722554)
+ (0.874862,0.74491)(0.867939,0.768582)(0.849863,0.792084)
+ (0.822527,0.813279)(0.788515,0.829523)(0.750924,0.838139)
+ (0.713174,0.837085)(0.678756,0.825621)(0.650938,0.804706)
+ (0.632446,0.776969)(0.625191,0.746217)(0.630074,0.71664)
+ (0.646869,0.69196)(0.674167,0.674761)(0.709403,0.666178)
+\path(0.666551,0.577699)(0.74798,0.585752)(0.830368,0.605884)
+ (0.903621,0.632501)(0.959101,0.662234)(0.991406,0.694618)
+ (0.998815,0.731016)(0.982511,0.77261)(0.945428,0.818543)
+ (0.891435,0.864939)(0.825104,0.905071)(0.751807,0.93073)
+ (0.677771,0.934566)(0.609753,0.912727)(0.554306,0.866713)
+ (0.516918,0.803473)(0.501394,0.73363)(0.509637,0.668642)
+ (0.541651,0.618018)(0.59542,0.587383)(0.666551,0.577699)
+\path(0.62125,0.484165)(0.746855,0.509046)(0.875481,0.548895)
+ (0.988754,0.590989)(1.07131,0.62933)(1.11537,0.666178)(1.12092,0.708519)
+ (1.09249,0.76265)(1.03584,0.830052)(0.956495,0.905455)(0.859908,0.976933)
+ (0.752656,1.02814)(0.643292,1.043)(0.542063,1.01182)(0.459296,0.936218)
+ (0.403366,0.829523)(0.379543,0.712441)(0.390202,0.606516)
+ (0.435639,0.528643)(0.514234,0.48787)(0.62125,0.484165)
+\path(0.573284,0.385128)(0.745629,0.435587)(0.925286,0.502471)
+ (1.08184,0.561798)(1.19037,0.604066)(1.24159,0.637221)(1.24029,0.677746)
+ (1.19682,0.739556)(1.12046,0.827563)(1.01755,0.935412)(0.893055,1.04537)
+ (0.753481,1.13079)(0.609295,1.16316)(0.47484,1.12367)(0.365158,1.01352)
+ (0.291738,0.855133)(0.260522,0.68298)(0.273258,0.531127)
+ (0.330189,0.424716)(0.431158,0.376427)(0.573284,0.385128)
+\path(0.522412,0.280089)(0.744277,0.365124)(0.981254,0.467495)
+ (1.18533,0.546138)(1.31791,0.586882)(1.37013,0.607733)(1.35609,0.639142)
+ (1.29466,0.704421)(1.1988,0.812243)(1.07452,0.955475)(0.924661,1.11063)
+ (0.754288,1.23912)(0.575368,1.29605)(0.40728,1.24929)(0.27118,1.09902)
+ (0.181986,0.880311)(0.145146,0.645689)(0.160206,0.443655)
+ (0.22666,0.307508)(0.346809,0.253475)(0.522412,0.280089)
+\path(0.46836,0.168485)(0.742767,0.297412)(1.04539,0.445422)
+ (1.30251,0.545884)(1.45594,0.578419)(1.50104,0.577699)(1.46759,0.593248)
+ (1.38541,0.658506)(1.27061,0.785404)(1.12739,0.966366)(0.954829,1.17292)
+ (0.755083,1.35363)(0.541119,1.44293)(0.33859,1.39004)(0.176669,1.19323)
+ (0.0740632,0.905071)(0.0341447,0.601107)(0.0523099,0.345536)
+ (0.126363,0.178624)(0.261856,0.119648)(0.46836,0.168485)
+\end{picture}
diff --git a/graphics/epix/doc/plot_a.xp b/graphics/epix/doc/plot_a.xp
new file mode 100644
index 0000000000..4304d501d3
--- /dev/null
+++ b/graphics/epix/doc/plot_a.xp
@@ -0,0 +1,27 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+P f(double u, double v)
+{
+ double x=u*Cos(v), y=u*Sin(v);
+ // return P(x, y, 0.25*x*(x*x-3*y*y));
+ return P(x, y, x*y);
+}
+
+domain R(P(0,0), P(1,1), mesh(6, 20), mesh(6, 20));
+
+int main()
+{
+ bounding_box(P(-1,-1),P(1,1));
+ unitlength("1in");
+ picture(1.5,1.5);
+
+ begin();
+ revolutions();
+
+ camera.at(P(3, 1, 3));
+
+ plot(f, R);
+
+ end();
+}
diff --git a/graphics/epix/doc/plot_b.eepic b/graphics/epix/doc/plot_b.eepic
new file mode 100644
index 0000000000..cf847bd346
--- /dev/null
+++ b/graphics/epix/doc/plot_b.eepic
@@ -0,0 +1,225 @@
+%% Generated from plot_b.xp on Tue Jul 3 00:20:46 EDT 2007 by
+%% ePiX-1.0.25
+%%
+%% Cartesian bounding box: [-1,1] x [-1,1]
+%% Actual size: 1.5in x 1.5in
+%% Figure offset: right by 0in, up by 0in
+%%
+\setlength{\unitlength}{1in}
+\begin{picture}(1.5,1.5)(-0,-0)
+%% ---
+\path(0.75,0.75)(0.729972,0.708648)(0.709403,0.666178)(0.688271,0.622545)
+ (0.666551,0.577699)(0.64422,0.531591)(0.62125,0.484165)
+ (0.597615,0.435364)(0.573284,0.385128)(0.548228,0.333393)
+ (0.522412,0.280089)(0.495802,0.225146)(0.46836,0.168485)
+\path(0.75,0.75)(0.749519,0.707493)(0.749023,0.665974)(0.74851,0.625406)
+ (0.74798,0.585752)(0.747429,0.546976)(0.746855,0.509046)
+ (0.746256,0.471927)(0.745629,0.435587)(0.744971,0.399997)
+ (0.744277,0.365124)(0.743544,0.330939)(0.742767,0.297412)
+\path(0.75,0.75)(0.769125,0.71024)(0.788831,0.67297)(0.809212,0.638181)
+ (0.830368,0.605884)(0.852415,0.576107)(0.875481,0.548895)
+ (0.899715,0.524319)(0.925286,0.502471)(0.952389,0.483477)
+ (0.981254,0.467495)(1.01215,0.454726)(1.04539,0.445422)
+\path(0.75,0.75)(0.786786,0.716409)(0.824541,0.685618)(0.863426,0.657638)
+ (0.903621,0.632501)(0.945323,0.610259)(0.988754,0.590989)
+ (1.03416,0.574791)(1.08184,0.561798)(1.1321,0.552178)(1.18533,0.546138)
+ (1.24196,0.543935)(1.30251,0.545884)
+\path(0.75,0.75)(0.800717,0.725352)(0.852385,0.702504)(0.905133,0.68146)
+ (0.959101,0.662234)(1.01444,0.644848)(1.07131,0.62933)(1.12989,0.615719)
+ (1.19037,0.604066)(1.25297,0.594429)(1.31791,0.586882)(1.38547,0.581511)
+ (1.45594,0.578419)
+\path(0.75,0.75)(0.809554,0.736337)(0.869635,0.722554)(0.93025,0.708648)
+ (0.991406,0.694618)(1.05311,0.680462)(1.11537,0.666178)(1.1782,0.651765)
+ (1.24159,0.637221)(1.30556,0.622545)(1.37013,0.607733)(1.43528,0.592786)
+ (1.50104,0.577699)
+\path(0.75,0.75)(0.812485,0.748563)(0.874862,0.74491)(0.937011,0.739054)
+ (0.998815,0.731016)(1.06016,0.720825)(1.12092,0.708519)(1.181,0.694142)
+ (1.24029,0.677746)(1.29868,0.659392)(1.35609,0.639142)(1.41242,0.617069)
+ (1.46759,0.593248)
+\path(0.75,0.75)(0.809307,0.761132)(0.867939,0.768582)(0.925727,0.772387)
+ (0.982511,0.77261)(1.03814,0.769331)(1.09249,0.76265)(1.14541,0.752681)
+ (1.19682,0.739556)(1.24659,0.723418)(1.29466,0.704421)(1.34095,0.682727)
+ (1.38541,0.658506)
+\path(0.75,0.75)(0.800408,0.773024)(0.849863,0.792084)(0.89824,0.807232)
+ (0.945428,0.818543)(0.991325,0.826113)(1.03584,0.830052)
+ (1.07891,0.830488)(1.12046,0.827563)(1.16044,0.821428)(1.1988,0.812243)
+ (1.23553,0.800178)(1.27061,0.785404)
+\path(0.75,0.75)(0.786698,0.783117)(0.822527,0.813279)(0.857449,0.840534)
+ (0.891435,0.864939)(0.924458,0.886556)(0.956495,0.905455)
+ (0.987531,0.921714)(1.01755,0.935412)(1.04655,0.946636)(1.07452,0.955475)
+ (1.10147,0.962021)(1.12739,0.966366)
+\path(0.75,0.75)(0.769508,0.790278)(0.788515,0.829523)(0.807041,0.867775)
+ (0.825104,0.905071)(0.842721,0.941445)(0.859908,0.976933)
+ (0.876682,1.01156)(0.893055,1.04537)(0.909044,1.07838)(0.924661,1.11063)
+ (0.939918,1.14213)(0.954829,1.17292)
+\path(0.75,0.75)(0.750468,0.793535)(0.750924,0.838139)(0.75137,0.883856)
+ (0.751807,0.93073)(0.752235,0.978809)(0.752656,1.02814)(0.753071,1.07878)
+ (0.753481,1.13079)(0.753886,1.18421)(0.754288,1.23912)(0.754687,1.29556)
+ (0.755083,1.35363)
+\path(0.75,0.75)(0.731375,0.79227)(0.713174,0.837085)(0.695327,0.884497)
+ (0.677771,0.934566)(0.660445,0.98737)(0.643292,1.043)(0.62626,1.10155)
+ (0.609295,1.16316)(0.592347,1.22794)(0.575368,1.29605)(0.558309,1.36765)
+ (0.541119,1.44293)
+\path(0.75,0.75)(0.714035,0.786396)(0.678756,0.825621)(0.644034,0.867713)
+ (0.609753,0.912727)(0.575798,0.960735)(0.542063,1.01182)
+ (0.508444,1.06609)(0.47484,1.12367)(0.441152,1.18468)(0.40728,1.24929)
+ (0.373126,1.31768)(0.33859,1.39004)
+\path(0.75,0.75)(0.700112,0.776448)(0.650938,0.804706)(0.60237,0.834787)
+ (0.554306,0.866713)(0.506646,0.900512)(0.459296,0.936218)
+ (0.412163,0.973871)(0.365158,1.01352)(0.318192,1.05521)(0.27118,1.09902)
+ (0.224034,1.145)(0.176669,1.19323)
+\path(0.75,0.75)(0.690966,0.763543)(0.632446,0.776969)(0.574432,0.790278)
+ (0.516918,0.803473)(0.459898,0.816554)(0.403366,0.829523)
+ (0.347314,0.842382)(0.291738,0.855133)(0.23663,0.867775)
+ (0.181986,0.880311)(0.127799,0.892743)(0.0740632,0.905071)
+\path(0.75,0.75)(0.687529,0.749216)(0.625191,0.746217)(0.563106,0.741014)
+ (0.501394,0.73363)(0.440168,0.724093)(0.379543,0.712441)
+ (0.319626,0.69872)(0.260522,0.68298)(0.202331,0.665282)
+ (0.145146,0.645689)(0.089057,0.624272)(0.0341447,0.601107)
+\path(0.75,0.75)(0.690195,0.735167)(0.630074,0.71664)(0.569825,0.694447)
+ (0.509637,0.668642)(0.4497,0.639299)(0.390202,0.606516)
+ (0.331328,0.570413)(0.273258,0.531127)(0.216163,0.488817)
+ (0.160206,0.443655)(0.105542,0.395829)(0.0523099,0.345536)
+\path(0.75,0.75)(0.698772,0.72298)(0.646869,0.69196)(0.594442,0.656957)
+ (0.541651,0.618018)(0.488661,0.575214)(0.435639,0.528643)
+ (0.382758,0.478428)(0.330189,0.424716)(0.2781,0.367679)(0.22666,0.307508)
+ (0.176029,0.244413)(0.126363,0.178624)
+\path(0.75,0.75)(0.712474,0.713891)(0.674167,0.674761)(0.63513,0.632594)
+ (0.59542,0.587383)(0.555099,0.539136)(0.514234,0.48787)
+ (0.472895,0.433619)(0.431158,0.376427)(0.389102,0.316355)
+ (0.346809,0.253475)(0.304364,0.187873)(0.261856,0.119648)
+\path(0.75,0.75)(0.729972,0.708648)(0.709403,0.666178)(0.688271,0.622545)
+ (0.666551,0.577699)(0.64422,0.531591)(0.62125,0.484165)
+ (0.597615,0.435364)(0.573284,0.385128)(0.548228,0.333393)
+ (0.522412,0.280089)(0.495802,0.225146)(0.46836,0.168485)
+\path(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)
+ (0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)
+ (0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)
+ (0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)
+ (0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)
+ (0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)
+ (0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)
+ (0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)
+ (0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)
+ (0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)(0.75,0.75)
+ (0.75,0.75)
+\path(0.75,0.75)
+\path(0.709403,0.666178)(0.722321,0.665223)(0.73558,0.665171)
+ (0.749023,0.665974)(0.762487,0.667581)(0.77581,0.669932)
+ (0.788831,0.67297)(0.801393,0.676634)(0.813343,0.680868)
+ (0.824541,0.685618)(0.834856,0.690836)(0.844172,0.696477)
+ (0.852385,0.702504)(0.859411,0.708879)(0.865178,0.715573)
+ (0.869635,0.722554)(0.872745,0.729792)(0.874488,0.737256)
+ (0.874862,0.74491)(0.873876,0.752715)(0.871555,0.760624)
+ (0.867939,0.768582)(0.863075,0.776527)(0.857026,0.784387)
+ (0.849863,0.792084)(0.841664,0.799529)(0.83252,0.806627)
+ (0.822527,0.813279)(0.811787,0.819381)(0.800411,0.82483)
+ (0.788515,0.829523)(0.776218,0.833364)(0.763645,0.836262)
+ (0.750924,0.838139)(0.738185,0.838931)(0.725558,0.83859)
+ (0.713174,0.837085)(0.701162,0.83441)(0.689648,0.830577)
+ (0.678756,0.825621)(0.668601,0.819601)(0.659294,0.812596)
+ (0.650938,0.804706)(0.643624,0.796048)(0.637436,0.786754)
+ (0.632446,0.776969)(0.628712,0.766846)(0.626283,0.756542)
+ (0.625191,0.746217)(0.625457,0.736026)(0.627088,0.72612)
+ (0.630074,0.71664)(0.634394,0.707713)(0.64001,0.699454)(0.646869,0.69196)
+ (0.654905,0.685309)(0.664036,0.679562)(0.674167,0.674761)
+ (0.685188,0.670929)(0.696978,0.668072)(0.709403,0.666178)
+\path(0.709403,0.666178)
+\path(0.666551,0.577699)(0.692974,0.578664)(0.720234,0.581422)
+ (0.74798,0.585752)(0.775839,0.591423)(0.80343,0.598206)
+ (0.830368,0.605884)(0.856279,0.614263)(0.880806,0.623178)
+ (0.903621,0.632501)(0.924433,0.642145)(0.942994,0.65206)
+ (0.959101,0.662234)(0.972601,0.672687)(0.98339,0.683461)
+ (0.991406,0.694618)(0.996632,0.706222)(0.999085,0.718337)
+ (0.998815,0.731016)(0.995896,0.74429)(0.990424,0.758164)
+ (0.982511,0.77261)(0.972282,0.787565)(0.959873,0.802924)
+ (0.945428,0.818543)(0.929098,0.834239)(0.911044,0.849789)
+ (0.891435,0.864939)(0.870449,0.879406)(0.848272,0.892888)
+ (0.825104,0.905071)(0.801155,0.915638)(0.776645,0.924286)
+ (0.751807,0.93073)(0.726882,0.934719)(0.702119,0.936048)
+ (0.677771,0.934566)(0.654093,0.930185)(0.631338,0.922887)
+ (0.609753,0.912727)(0.589573,0.899834)(0.571022,0.884408)
+ (0.554306,0.866713)(0.539611,0.847073)(0.527101,0.825857)
+ (0.516918,0.803473)(0.509181,0.780348)(0.503983,0.756921)
+ (0.501394,0.73363)(0.501461,0.710895)(0.504209,0.689112)
+ (0.509637,0.668642)(0.517723,0.649801)(0.528419,0.632855)
+ (0.541651,0.618018)(0.557321,0.605441)(0.575297,0.595218)
+ (0.59542,0.587383)(0.617495,0.581912)(0.641293,0.578726)
+ (0.666551,0.577699)
+\path(0.666551,0.577699)
+\path(0.62125,0.484165)(0.661714,0.489898)(0.703779,0.498369)
+ (0.746855,0.509046)(0.790294,0.521379)(0.833406,0.534828)
+ (0.875481,0.548895)(0.915825,0.563151)(0.953779,0.577259)
+ (0.988754,0.590989)(1.02025,0.604228)(1.04786,0.616974)(1.07131,0.62933)
+ (1.09041,0.641478)(1.10509,0.653667)(1.11537,0.666178)(1.12133,0.679307)
+ (1.12312,0.693337)(1.12092,0.708519)(1.11493,0.725052)(1.10538,0.743075)
+ (1.09249,0.76265)(1.07646,0.783756)(1.05751,0.806289)(1.03584,0.830052)
+ (1.01166,0.854761)(0.985141,0.880045)(0.956495,0.905455)
+ (0.925925,0.930468)(0.893649,0.954502)(0.859908,0.976933)
+ (0.824965,0.997111)(0.789108,1.01439)(0.752656,1.02814)(0.715955,1.0378)
+ (0.679371,1.04288)(0.643292,1.043)(0.608116,1.0379)(0.574243,1.02749)
+ (0.542063,1.01182)(0.511952,0.991116)(0.484258,0.965743)
+ (0.459296,0.936218)(0.437343,0.903175)(0.418635,0.867345)
+ (0.403366,0.829523)(0.391688,0.790542)(0.383719,0.751241)
+ (0.379543,0.712441)(0.379214,0.674923)(0.382764,0.639401)
+ (0.390202,0.606516)(0.401519,0.576814)(0.416683,0.550743)
+ (0.435639,0.528643)(0.458304,0.510741)(0.484558,0.497152)
+ (0.514234,0.48787)(0.547111,0.48278)(0.582903,0.481654)(0.62125,0.484165)
+\path(0.62125,0.484165)
+\path(0.573284,0.385128)(0.628255,0.398429)(0.685992,0.415579)
+ (0.745629,0.435587)(0.806153,0.457413)(0.866435,0.480025)
+ (0.925286,0.502471)(0.981521,0.523945)(1.03403,0.543843)
+ (1.08184,0.561798)(1.12417,0.577699)(1.16045,0.591675)(1.19037,0.604066)
+ (1.21379,0.615372)(1.23079,0.626204)(1.24159,0.637221)(1.24651,0.649085)
+ (1.24594,0.662413)(1.24029,0.677746)(1.22996,0.695523)(1.21536,0.716063)
+ (1.19682,0.739556)(1.17465,0.766054)(1.14912,0.795468)(1.12046,0.827563)
+ (1.08886,0.861958)(1.0545,0.89813)(1.01755,0.935412)(0.978193,0.973008)
+ (0.936617,1.01)(0.893055,1.04537)(0.847784,1.07804)(0.80113,1.10688)
+ (0.753481,1.13079)(0.705284,1.14872)(0.65704,1.15976)(0.609295,1.16316)
+ (0.562623,1.15839)(0.517613,1.14522)(0.47484,1.12367)(0.434852,1.09408)
+ (0.398146,1.05707)(0.365158,1.01352)(0.336248,0.964504)
+ (0.311704,0.911264)(0.291738,0.855133)(0.276497,0.797481)
+ (0.266074,0.739664)(0.260522,0.68298)(0.259863,0.628631)
+ (0.264107,0.577699)(0.273258,0.531127)(0.287318,0.489709)
+ (0.306294,0.454081)(0.330189,0.424716)(0.358995,0.401924)
+ (0.392679,0.38584)(0.431158,0.376427)(0.474277,0.373467)
+ (0.521781,0.37656)(0.573284,0.385128)
+\path(0.573284,0.385128)
+\path(0.522412,0.280089)(0.592255,0.303678)(0.666599,0.332557)
+ (0.744277,0.365124)(0.823805,0.399632)(0.903434,0.434308)
+ (0.981254,0.467495)(1.05533,0.497794)(1.12387,0.524191)(1.18533,0.546138)
+ (1.23857,0.563575)(1.28285,0.576899)(1.31791,0.586882)(1.34384,0.594557)
+ (1.36104,0.601102)(1.37013,0.607733)(1.37182,0.615613)(1.3669,0.625786)
+ (1.35609,0.639142)(1.34008,0.656388)(1.31944,0.67804)(1.29466,0.704421)
+ (1.26612,0.735658)(1.2341,0.771686)(1.1988,0.812243)(1.16038,0.856871)
+ (1.11892,0.904905)(1.07452,0.955475)(1.02726,1.0075)(0.977251,1.05971)
+ (0.924661,1.11063)(0.86973,1.15865)(0.812793,1.20206)(0.754288,1.23912)
+ (0.694765,1.26811)(0.634877,1.28752)(0.575368,1.29605)(0.517045,1.29277)
+ (0.460742,1.27718)(0.40728,1.24929)(0.35743,1.20959)(0.311875,1.15903)
+ (0.27118,1.09902)(0.235783,1.03125)(0.205991,0.95767)(0.181986,0.880311)
+ (0.163849,0.801232)(0.151584,0.722411)(0.145146,0.645689)
+ (0.144472,0.572724)(0.149503,0.504968)(0.160206,0.443655)
+ (0.17659,0.389804)(0.198709,0.344221)(0.22666,0.307508)
+ (0.260573,0.280059)(0.300586,0.26206)(0.346809,0.253475)
+ (0.39928,0.254024)(0.457909,0.263169)(0.522412,0.280089)
+\path(0.522412,0.280089)
+\path(0.46836,0.168485)(0.553304,0.204953)(0.645257,0.248719)
+ (0.742767,0.297412)(0.843765,0.348317)(0.945636,0.398569)
+ (1.04539,0.445422)(1.13995,0.486548)(1.22644,0.5203)(1.30251,0.545884)
+ (1.36653,0.563399)(1.41769,0.573743)(1.45594,0.578419)(1.48186,0.579303)
+ (1.49647,0.578408)(1.50104,0.577699)(1.49691,0.578964)(1.48538,0.583732)
+ (1.46759,0.593248)(1.44451,0.60847)(1.41692,0.63008)(1.38541,0.658506)
+ (1.35037,0.693935)(1.31206,0.736325)(1.27061,0.785404)(1.22604,0.840659)
+ (1.17832,0.901326)(1.12739,0.966366)(1.07317,1.03445)(1.01563,1.10395)
+ (0.954829,1.17292)(0.890909,1.23916)(0.824171,1.30025)(0.755083,1.35363)
+ (0.684297,1.39674)(0.612645,1.42719)(0.541119,1.44293)(0.470828,1.44243)
+ (0.402935,1.42483)(0.33859,1.39004)(0.278856,1.33875)(0.224644,1.27245)
+ (0.176669,1.19323)(0.135426,1.10367)(0.101196,1.00663)
+ (0.0740632,0.905071)(0.053964,0.801877)(0.0407306,0.699748)
+ (0.0341447,0.601107)(0.0339864,0.508057)(0.0400764,0.422378)
+ (0.0523099,0.345536)(0.0706802,0.278715)(0.0952918,0.222844)
+ (0.126363,0.178624)(0.164213,0.146543)(0.209236,0.126873)
+ (0.261856,0.119648)(0.322456,0.124628)(0.391288,0.141232)
+ (0.46836,0.168485)
+\path(0.46836,0.168485)
+\end{picture}
diff --git a/graphics/epix/doc/plot_b.xp b/graphics/epix/doc/plot_b.xp
new file mode 100644
index 0000000000..f7560071e9
--- /dev/null
+++ b/graphics/epix/doc/plot_b.xp
@@ -0,0 +1,27 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+P f(double u, double v)
+{
+ double x=u*Cos(v), y=u*Sin(v);
+ // return P(x, y, 0.25*x*(x*x-3*y*y));
+ return P(x, y, x*y);
+}
+
+domain R(P(0,0), P(1,1), mesh(6, 20), mesh(12,60));
+
+int main()
+{
+ bounding_box(P(-1,-1),P(1,1));
+ unitlength("1in");
+ picture(1.5,1.5);
+
+ begin();
+ revolutions();
+
+ camera.at(P(3, 1, 3));
+
+ plot(f, R);
+
+ end();
+}
diff --git a/graphics/epix/doc/plotting.eepic b/graphics/epix/doc/plotting.eepic
new file mode 100644
index 0000000000..ca0911610b
--- /dev/null
+++ b/graphics/epix/doc/plotting.eepic
@@ -0,0 +1,82 @@
+%% Generated from plotting.xp on Thu Jun 28 15:36:18 EDT 2007 by
+%% ePiX-1.1.6
+%%
+%% Cartesian bounding box: [-2,2] x [-1,1]
+%% Actual size: 5 x 1in
+%% Figure offset: left by 0in, down by 0in
+%%
+\xdefinecolor{rgb_000000}{rgb}{0,0,0}
+\xdefinecolor{rgb_ff0000}{rgb}{1,0,0}
+\setlength{\unitlength}{1in}
+\begin{picture}(5,1)(-0,-0)
+\path(0,0.5)(5,0.5)
+%%
+\put(0,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(0.3125,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(0.625,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(0.9375,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(1.25,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(1.5625,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(1.875,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(2.1875,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(2.5,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(2.8125,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(3.125,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(3.4375,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(3.75,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(4.0625,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(4.375,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(4.6875,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\put(5,0.5){\makebox(0,0){$\rule{0.5pt}{4pt}$}}
+\path(2.5,0)(2.5,1)
+%%
+\put(2.5,0){\makebox(0,0){$\rule{4pt}{0.5pt}$}}
+\put(2.5,0.25){\makebox(0,0){$\rule{4pt}{0.5pt}$}}
+\put(2.5,0.5){\makebox(0,0){$\rule{4pt}{0.5pt}$}}
+\put(2.5,0.75){\makebox(0,0){$\rule{4pt}{0.5pt}$}}
+\put(2.5,1){\makebox(0,0){$\rule{4pt}{0.5pt}$}}
+\put(0,0.444652){\makebox(0,0)[t]{$-2$}}
+\put(1.25,0.444652){\makebox(0,0)[t]{$-1$}}
+\put(2.5,0.444652){\makebox(0,0)[t]{$\phantom{-}0$}}
+\put(3.75,0.444652){\makebox(0,0)[t]{$\phantom{-}1$}}
+\put(5,0.444652){\makebox(0,0)[t]{$\phantom{-}2$}}
+\color{rgb_ff0000}%
+\path(0,0.5)(0.0416667,0.527125)
+ (0.0833333,0.559633)(0.125,0.601537)(0.166667,0.654364)
+ (0.208333,0.716506)(0.25,0.783173)(0.291667,0.846957)
+ (0.333333,0.898935)(0.375,0.930119)(0.416667,0.933013)
+ (0.458333,0.902995)(0.5,0.839302)(0.541667,0.745419)
+ (0.583333,0.628809)(0.625,0.5)(0.666667,0.371191)
+ (0.708333,0.254581)(0.75,0.160698)(0.791667,0.0970055)
+ (0.833333,0.0669873)(0.875,0.0698806)(0.916667,0.101065)
+ (0.958333,0.153043)(1,0.216827)(1.04167,0.283494)(1.08333,0.345636)
+ (1.125,0.398463)(1.16667,0.440367)(1.20833,0.472875)(1.25,0.5)
+ (1.29167,0.527125)(1.33333,0.559633)(1.375,0.601537)
+ (1.41667,0.654364)(1.45833,0.716506)(1.5,0.783173)
+ (1.54167,0.846957)(1.58333,0.898935)(1.625,0.930119)
+ (1.66667,0.933013)(1.70833,0.902995)(1.75,0.839302)
+ (1.79167,0.745419)(1.83333,0.628809)(1.875,0.5)(1.91667,0.371191)
+ (1.95833,0.254581)(2,0.160698)(2.04167,0.0970055)
+ (2.08333,0.0669873)(2.125,0.0698806)(2.16667,0.101065)
+ (2.20833,0.153043)(2.25,0.216827)(2.29167,0.283494)
+ (2.33333,0.345636)(2.375,0.398463)(2.41667,0.440367)
+ (2.45833,0.472875)(2.5,0.5)(2.54167,0.527125)(2.58333,0.559633)
+ (2.625,0.601537)(2.66667,0.654364)(2.70833,0.716506)(2.75,0.783173)
+ (2.79167,0.846957)(2.83333,0.898935)(2.875,0.930119)
+ (2.91667,0.933013)(2.95833,0.902995)(3,0.839302)(3.04167,0.745419)
+ (3.08333,0.628809)(3.125,0.5)(3.16667,0.371191)(3.20833,0.254581)
+ (3.25,0.160698)(3.29167,0.0970055)(3.33333,0.0669873)
+ (3.375,0.0698806)(3.41667,0.101065)(3.45833,0.153043)(3.5,0.216827)
+ (3.54167,0.283494)(3.58333,0.345636)(3.625,0.398463)
+ (3.66667,0.440367)(3.70833,0.472875)(3.75,0.5)(3.79167,0.527125)
+ (3.83333,0.559633)(3.875,0.601537)(3.91667,0.654364)
+ (3.95833,0.716506)(4,0.783173)(4.04167,0.846957)(4.08333,0.898935)
+ (4.125,0.930119)(4.16667,0.933013)(4.20833,0.902995)(4.25,0.839302)
+ (4.29167,0.745419)(4.33333,0.628809)(4.375,0.5)(4.41667,0.371191)
+ (4.45833,0.254581)(4.5,0.160698)(4.54167,0.0970055)
+ (4.58333,0.0669873)(4.625,0.0698806)(4.66667,0.101065)
+ (4.70833,0.153043)(4.75,0.216827)(4.79167,0.283494)
+ (4.83333,0.345636)(4.875,0.398463)(4.91667,0.440367)
+ (4.95833,0.472875)(5,0.5)
+%%
+\end{picture}
diff --git a/graphics/epix/doc/plotting.xp b/graphics/epix/doc/plotting.xp
new file mode 100644
index 0000000000..ad310f7b02
--- /dev/null
+++ b/graphics/epix/doc/plotting.xp
@@ -0,0 +1,26 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+double f(double x)
+{
+ return 0.75*Sin(x) - 0.25*Sin(2*x);
+}
+
+int main()
+{
+ picture(P(-2,-1),P(2,1), "5x1in");
+
+ begin();
+
+ h_axis(16);
+ v_axis(4);
+
+ h_axis_labels(4, P(0,-4), b); // shift labels down 4pt, align below
+
+ revolutions(); // set angle units
+ red();
+ plot(f, xmin(), xmax(), 120); // use 120 intervals
+
+ end();
+}
diff --git a/graphics/epix/doc/plotting2.eepic b/graphics/epix/doc/plotting2.eepic
new file mode 100644
index 0000000000..5f56a743ec
--- /dev/null
+++ b/graphics/epix/doc/plotting2.eepic
@@ -0,0 +1,1766 @@
+%% Generated from plotting2.xp on Tue Sep 25 00:02:47 EDT 2007 by
+%% ePiX-1.2.0
+%%
+%% Cartesian bounding box: [-1,1] x [-1,1]
+%% Actual size: 2 x 1in
+%% Figure offset: left by 0in, down by 0in
+%%
+%% usepackages pstricks
+%%
+\newcmykcolor{cmy_0000ff}{0 0 1 0}%
+\newcmykcolor{cmy_0101ff}{0 0 0.996078 0.00392157}%
+\newcmykcolor{cmy_0202ff}{0 0 0.992157 0.00784314}%
+\newcmykcolor{cmy_0303ff}{0 0 0.988235 0.0117647}%
+\newcmykcolor{cmy_0505ff}{0 0 0.980392 0.0196078}%
+\newcmykcolor{cmy_0606ff}{0 0 0.976471 0.0235294}%
+\newcmykcolor{cmy_0808ff}{0 0 0.968627 0.0313725}%
+\newcmykcolor{cmy_0909ff}{0 0 0.964706 0.0352941}%
+\newcmykcolor{cmy_0a0aff}{0 0 0.960784 0.0392157}%
+\newcmykcolor{cmy_0b0bff}{0 0 0.956863 0.0431373}%
+\newcmykcolor{cmy_0c0cff}{0 0 0.952941 0.0470588}%
+\newcmykcolor{cmy_0d0dff}{0 0 0.94902 0.0509804}%
+\newcmykcolor{cmy_0e0eff}{0 0 0.945098 0.054902}%
+\newcmykcolor{cmy_0f0fff}{0 0 0.941176 0.0588235}%
+\newcmykcolor{cmy_1111ff}{0 0 0.933333 0.0666667}%
+\newcmykcolor{cmy_1313ff}{0 0 0.92549 0.0745098}%
+\newcmykcolor{cmy_1515ff}{0 0 0.917647 0.0823529}%
+\newcmykcolor{cmy_1616ff}{0 0 0.913725 0.0862745}%
+\newcmykcolor{cmy_1818ff}{0 0 0.905882 0.0941176}%
+\newcmykcolor{cmy_1919ff}{0 0 0.901961 0.0980392}%
+\newcmykcolor{cmy_1b1bff}{0 0 0.894118 0.105882}%
+\newcmykcolor{cmy_1c1cff}{0 0 0.890196 0.109804}%
+\newcmykcolor{cmy_2020ff}{0 0 0.87451 0.12549}%
+\newcmykcolor{cmy_2323ff}{0 0 0.862745 0.137255}%
+\newcmykcolor{cmy_2525ff}{0 0 0.854902 0.145098}%
+\newcmykcolor{cmy_2626ff}{0 0 0.85098 0.14902}%
+\newcmykcolor{cmy_2828ff}{0 0 0.843137 0.156863}%
+\newcmykcolor{cmy_2929ff}{0 0 0.839216 0.160784}%
+\newcmykcolor{cmy_2a2aff}{0 0 0.835294 0.164706}%
+\newcmykcolor{cmy_2d2dff}{0 0 0.823529 0.176471}%
+\newcmykcolor{cmy_3030ff}{0 0 0.811765 0.188235}%
+\newcmykcolor{cmy_3131ff}{0 0 0.807843 0.192157}%
+\newcmykcolor{cmy_3232ff}{0 0 0.803922 0.196078}%
+\newcmykcolor{cmy_3434ff}{0 0 0.796078 0.203922}%
+\newcmykcolor{cmy_3535ff}{0 0 0.792157 0.207843}%
+\newcmykcolor{cmy_3636ff}{0 0 0.788235 0.211765}%
+\newcmykcolor{cmy_3737ff}{0 0 0.784314 0.215686}%
+\newcmykcolor{cmy_3838ff}{0 0 0.780392 0.219608}%
+\newcmykcolor{cmy_3939ff}{0 0 0.776471 0.223529}%
+\newcmykcolor{cmy_3a3aff}{0 0 0.772549 0.227451}%
+\newcmykcolor{cmy_3b3bff}{0 0 0.768627 0.231373}%
+\newcmykcolor{cmy_3c3cff}{0 0 0.764706 0.235294}%
+\newcmykcolor{cmy_3d3dff}{0 0 0.760784 0.239216}%
+\newcmykcolor{cmy_3e3eff}{0 0 0.756863 0.243137}%
+\newcmykcolor{cmy_3f3fff}{0 0 0.752941 0.247059}%
+\newcmykcolor{cmy_4141ff}{0 0 0.745098 0.254902}%
+\newcmykcolor{cmy_4343ff}{0 0 0.737255 0.262745}%
+\newcmykcolor{cmy_4545ff}{0 0 0.729412 0.270588}%
+\newcmykcolor{cmy_4848ff}{0 0 0.717647 0.282353}%
+\newcmykcolor{cmy_4949ff}{0 0 0.713725 0.286275}%
+\newcmykcolor{cmy_4a4aff}{0 0 0.709804 0.290196}%
+\newcmykcolor{cmy_4b4bff}{0 0 0.705882 0.294118}%
+\newcmykcolor{cmy_4c4cff}{0 0 0.701961 0.298039}%
+\newcmykcolor{cmy_4d4dff}{0 0 0.698039 0.301961}%
+\newcmykcolor{cmy_4e4eff}{0 0 0.694118 0.305882}%
+\newcmykcolor{cmy_4f4fff}{0 0 0.690196 0.309804}%
+\newcmykcolor{cmy_5050ff}{0 0 0.686275 0.313725}%
+\newcmykcolor{cmy_5151ff}{0 0 0.682353 0.317647}%
+\newcmykcolor{cmy_5252ff}{0 0 0.678431 0.321569}%
+\newcmykcolor{cmy_5353ff}{0 0 0.67451 0.32549}%
+\newcmykcolor{cmy_5454ff}{0 0 0.670588 0.329412}%
+\newcmykcolor{cmy_5555ff}{0 0 0.666667 0.333333}%
+\newcmykcolor{cmy_5656ff}{0 0 0.662745 0.337255}%
+\newcmykcolor{cmy_5757ff}{0 0 0.658824 0.341176}%
+\newcmykcolor{cmy_5858ff}{0 0 0.654902 0.345098}%
+\newcmykcolor{cmy_5959ff}{0 0 0.65098 0.34902}%
+\newcmykcolor{cmy_5a5aff}{0 0 0.647059 0.352941}%
+\newcmykcolor{cmy_5b5bff}{0 0 0.643137 0.356863}%
+\newcmykcolor{cmy_5c5cff}{0 0 0.639216 0.360784}%
+\newcmykcolor{cmy_5d5dff}{0 0 0.635294 0.364706}%
+\newcmykcolor{cmy_5e5eff}{0 0 0.631373 0.368627}%
+\newcmykcolor{cmy_5f5fff}{0 0 0.627451 0.372549}%
+\newcmykcolor{cmy_6060ff}{0 0 0.623529 0.376471}%
+\newcmykcolor{cmy_6161ff}{0 0 0.619608 0.380392}%
+\newcmykcolor{cmy_6262ff}{0 0 0.615686 0.384314}%
+\newcmykcolor{cmy_6363ff}{0 0 0.611765 0.388235}%
+\newcmykcolor{cmy_6464ff}{0 0 0.607843 0.392157}%
+\newcmykcolor{cmy_6565ff}{0 0 0.603922 0.396078}%
+\newcmykcolor{cmy_6666ff}{0 0 0.6 0.4}%
+\newcmykcolor{cmy_6767ff}{0 0 0.596078 0.403922}%
+\newcmykcolor{cmy_6868ff}{0 0 0.592157 0.407843}%
+\newcmykcolor{cmy_6969ff}{0 0 0.588235 0.411765}%
+\newcmykcolor{cmy_6a6aff}{0 0 0.584314 0.415686}%
+\newcmykcolor{cmy_6b6bff}{0 0 0.580392 0.419608}%
+\newcmykcolor{cmy_6c6cff}{0 0 0.576471 0.423529}%
+\newcmykcolor{cmy_6d6dff}{0 0 0.572549 0.427451}%
+\newcmykcolor{cmy_6e6eff}{0 0 0.568627 0.431373}%
+\newcmykcolor{cmy_6f6fff}{0 0 0.564706 0.435294}%
+\newcmykcolor{cmy_7070ff}{0 0 0.560784 0.439216}%
+\newcmykcolor{cmy_7171ff}{0 0 0.556863 0.443137}%
+\newcmykcolor{cmy_7272ff}{0 0 0.552941 0.447059}%
+\newcmykcolor{cmy_7373ff}{0 0 0.54902 0.45098}%
+\newcmykcolor{cmy_7474ff}{0 0 0.545098 0.454902}%
+\newcmykcolor{cmy_7575ff}{0 0 0.541176 0.458824}%
+\newcmykcolor{cmy_7676ff}{0 0 0.537255 0.462745}%
+\newcmykcolor{cmy_7777ff}{0 0 0.533333 0.466667}%
+\newcmykcolor{cmy_7878ff}{0 0 0.529412 0.470588}%
+\newcmykcolor{cmy_7979ff}{0 0 0.52549 0.47451}%
+\newcmykcolor{cmy_7a7aff}{0 0 0.521569 0.478431}%
+\newcmykcolor{cmy_7b7bff}{0 0 0.517647 0.482353}%
+\newcmykcolor{cmy_7c7cff}{0 0 0.513725 0.486275}%
+\newcmykcolor{cmy_7d7dff}{0 0 0.509804 0.490196}%
+\newcmykcolor{cmy_7e7eff}{0 0 0.505882 0.494118}%
+\newcmykcolor{cmy_7f7fff}{0 0 0.501961 0.498039}%
+\newrgbcolor{rgb_000000}{0 0 0}%
+\newrgbcolor{rgb_19197f}{0.0980392 0.0980392 0.498039}%
+\newrgbcolor{rgb_191980}{0.0980392 0.0980392 0.501961}%
+\newrgbcolor{rgb_191981}{0.0980392 0.0980392 0.505882}%
+\newrgbcolor{rgb_1a1a82}{0.101961 0.101961 0.509804}%
+\newrgbcolor{rgb_1a1a83}{0.101961 0.101961 0.513725}%
+\newrgbcolor{rgb_1a1a84}{0.101961 0.101961 0.517647}%
+\newrgbcolor{rgb_1a1a85}{0.101961 0.101961 0.521569}%
+\newrgbcolor{rgb_1a1a86}{0.101961 0.101961 0.52549}%
+\newrgbcolor{rgb_1b1b87}{0.105882 0.105882 0.529412}%
+\newrgbcolor{rgb_1b1b88}{0.105882 0.105882 0.533333}%
+\newrgbcolor{rgb_1b1b89}{0.105882 0.105882 0.537255}%
+\newrgbcolor{rgb_1b1b8a}{0.105882 0.105882 0.541176}%
+\newrgbcolor{rgb_1b1b8b}{0.105882 0.105882 0.545098}%
+\newrgbcolor{rgb_1c1c8c}{0.109804 0.109804 0.54902}%
+\newrgbcolor{rgb_1c1c8d}{0.109804 0.109804 0.552941}%
+\newrgbcolor{rgb_1c1c8e}{0.109804 0.109804 0.556863}%
+\newrgbcolor{rgb_1c1c8f}{0.109804 0.109804 0.560784}%
+\newrgbcolor{rgb_1c1c90}{0.109804 0.109804 0.564706}%
+\newrgbcolor{rgb_1d1d91}{0.113725 0.113725 0.568627}%
+\newrgbcolor{rgb_1d1d92}{0.113725 0.113725 0.572549}%
+\newrgbcolor{rgb_1d1d93}{0.113725 0.113725 0.576471}%
+\newrgbcolor{rgb_1d1d94}{0.113725 0.113725 0.580392}%
+\newrgbcolor{rgb_1d1d95}{0.113725 0.113725 0.584314}%
+\newrgbcolor{rgb_1e1e96}{0.117647 0.117647 0.588235}%
+\newrgbcolor{rgb_1e1e97}{0.117647 0.117647 0.592157}%
+\newrgbcolor{rgb_1e1e98}{0.117647 0.117647 0.596078}%
+\newrgbcolor{rgb_1e1e99}{0.117647 0.117647 0.6}%
+\newrgbcolor{rgb_1e1e9a}{0.117647 0.117647 0.603922}%
+\newrgbcolor{rgb_1f1f9b}{0.121569 0.121569 0.607843}%
+\newrgbcolor{rgb_1f1f9c}{0.121569 0.121569 0.611765}%
+\newrgbcolor{rgb_1f1f9d}{0.121569 0.121569 0.615686}%
+\newrgbcolor{rgb_1f1f9e}{0.121569 0.121569 0.619608}%
+\newrgbcolor{rgb_1f1f9f}{0.121569 0.121569 0.623529}%
+\newrgbcolor{rgb_2020a0}{0.12549 0.12549 0.627451}%
+\newrgbcolor{rgb_2020a1}{0.12549 0.12549 0.631373}%
+\newrgbcolor{rgb_2020a2}{0.12549 0.12549 0.635294}%
+\newrgbcolor{rgb_2020a3}{0.12549 0.12549 0.639216}%
+\newrgbcolor{rgb_2020a4}{0.12549 0.12549 0.643137}%
+\newrgbcolor{rgb_2121a5}{0.129412 0.129412 0.647059}%
+\newrgbcolor{rgb_2121a6}{0.129412 0.129412 0.65098}%
+\newrgbcolor{rgb_2121a7}{0.129412 0.129412 0.654902}%
+\newrgbcolor{rgb_2121a8}{0.129412 0.129412 0.658824}%
+\newrgbcolor{rgb_2121a9}{0.129412 0.129412 0.662745}%
+\newrgbcolor{rgb_2222aa}{0.133333 0.133333 0.666667}%
+\newrgbcolor{rgb_2222ab}{0.133333 0.133333 0.670588}%
+\newrgbcolor{rgb_2222ac}{0.133333 0.133333 0.67451}%
+\newrgbcolor{rgb_2222ad}{0.133333 0.133333 0.678431}%
+\newrgbcolor{rgb_2222ae}{0.133333 0.133333 0.682353}%
+\newrgbcolor{rgb_2323af}{0.137255 0.137255 0.686275}%
+\newrgbcolor{rgb_2323b0}{0.137255 0.137255 0.690196}%
+\newrgbcolor{rgb_2323b1}{0.137255 0.137255 0.694118}%
+\newrgbcolor{rgb_2323b2}{0.137255 0.137255 0.698039}%
+\newrgbcolor{rgb_2323b3}{0.137255 0.137255 0.701961}%
+\newrgbcolor{rgb_2424b4}{0.141176 0.141176 0.705882}%
+\newrgbcolor{rgb_2424b5}{0.141176 0.141176 0.709804}%
+\newrgbcolor{rgb_2424b6}{0.141176 0.141176 0.713725}%
+\newrgbcolor{rgb_2525b9}{0.145098 0.145098 0.72549}%
+\newrgbcolor{rgb_2525bb}{0.145098 0.145098 0.733333}%
+\newrgbcolor{rgb_2525bd}{0.145098 0.145098 0.741176}%
+\newrgbcolor{rgb_2626bf}{0.14902 0.14902 0.74902}%
+\newrgbcolor{rgb_2626c0}{0.14902 0.14902 0.752941}%
+\newrgbcolor{rgb_2626c1}{0.14902 0.14902 0.756863}%
+\newrgbcolor{rgb_2626c2}{0.14902 0.14902 0.760784}%
+\newrgbcolor{rgb_2727c3}{0.152941 0.152941 0.764706}%
+\newrgbcolor{rgb_2727c4}{0.152941 0.152941 0.768627}%
+\newrgbcolor{rgb_2727c5}{0.152941 0.152941 0.772549}%
+\newrgbcolor{rgb_2727c6}{0.152941 0.152941 0.776471}%
+\newrgbcolor{rgb_2727c7}{0.152941 0.152941 0.780392}%
+\newrgbcolor{rgb_2828c8}{0.156863 0.156863 0.784314}%
+\newrgbcolor{rgb_2828c9}{0.156863 0.156863 0.788235}%
+\newrgbcolor{rgb_2828ca}{0.156863 0.156863 0.792157}%
+\newrgbcolor{rgb_2828cc}{0.156863 0.156863 0.8}%
+\newrgbcolor{rgb_2929cd}{0.160784 0.160784 0.803922}%
+\newrgbcolor{rgb_2929ce}{0.160784 0.160784 0.807843}%
+\newrgbcolor{rgb_2929d1}{0.160784 0.160784 0.819608}%
+\newrgbcolor{rgb_2a2ad4}{0.164706 0.164706 0.831373}%
+\newrgbcolor{rgb_2a2ad5}{0.164706 0.164706 0.835294}%
+\newrgbcolor{rgb_2a2ad6}{0.164706 0.164706 0.839216}%
+\newrgbcolor{rgb_2b2bd8}{0.168627 0.168627 0.847059}%
+\newrgbcolor{rgb_2b2bd9}{0.168627 0.168627 0.85098}%
+\newrgbcolor{rgb_2b2bdb}{0.168627 0.168627 0.858824}%
+\newrgbcolor{rgb_2c2cde}{0.172549 0.172549 0.870588}%
+\newrgbcolor{rgb_2d2de2}{0.176471 0.176471 0.886275}%
+\newrgbcolor{rgb_2d2de3}{0.176471 0.176471 0.890196}%
+\newrgbcolor{rgb_2d2de5}{0.176471 0.176471 0.898039}%
+\newrgbcolor{rgb_2e2ee6}{0.180392 0.180392 0.901961}%
+\newrgbcolor{rgb_2e2ee8}{0.180392 0.180392 0.909804}%
+\newrgbcolor{rgb_2e2ee9}{0.180392 0.180392 0.913725}%
+\newrgbcolor{rgb_2f2feb}{0.184314 0.184314 0.921569}%
+\newrgbcolor{rgb_2f2fed}{0.184314 0.184314 0.929412}%
+\newrgbcolor{rgb_2f2fef}{0.184314 0.184314 0.937255}%
+\newrgbcolor{rgb_3030f0}{0.188235 0.188235 0.941176}%
+\newrgbcolor{rgb_3030f1}{0.188235 0.188235 0.945098}%
+\newrgbcolor{rgb_3030f2}{0.188235 0.188235 0.94902}%
+\newrgbcolor{rgb_3030f3}{0.188235 0.188235 0.952941}%
+\newrgbcolor{rgb_3030f4}{0.188235 0.188235 0.956863}%
+\newrgbcolor{rgb_3131f5}{0.192157 0.192157 0.960784}%
+\newrgbcolor{rgb_3131f6}{0.192157 0.192157 0.964706}%
+\newrgbcolor{rgb_3131f8}{0.192157 0.192157 0.972549}%
+\newrgbcolor{rgb_3131f9}{0.192157 0.192157 0.976471}%
+\newrgbcolor{rgb_3232fb}{0.196078 0.196078 0.984314}%
+\newrgbcolor{rgb_3232fc}{0.196078 0.196078 0.988235}%
+\newrgbcolor{rgb_3232fd}{0.196078 0.196078 0.992157}%
+\newrgbcolor{rgb_3232fe}{0.196078 0.196078 0.996078}%
+\psset{unit=1in,linewidth=0.4pt}%
+\begin{pspicture}(2,1)(0,0)%
+\psline(1,0.5)(0.460099,0.0671161)
+\psset{fillcolor=rgb_000000}%
+\pspolygon[fillstyle=solid](0.513324,0.109791)(0.500341,0.125984)
+ (0.460099,0.0671161)(0.526308,0.093598)(0.513324,0.109791)
+\psline(1,0.5)(2.30211,0.383998)
+\pspolygon[fillstyle=solid](2.19255,0.39376)(2.1907,0.373086)
+ (2.30211,0.383998)(2.19439,0.414433)(2.19255,0.39376)
+\psset{fillcolor=cmy_5e5eff}%
+\psset{linecolor=rgb_2020a0}%
+\pspolygon[fillstyle=solid](1.21563,0.452275)(1.23301,0.375451)
+ (1.17732,0.388446)(1.12142,0.416397)(1.11204,0.483169)
+ (1.164,0.462409)(1.21563,0.452275)
+\psset{fillcolor=cmy_5858ff}%
+\psset{linecolor=rgb_2121a6}%
+\pspolygon[fillstyle=solid](1.31978,0.464555)(1.34701,0.395075)
+ (1.28931,0.377672)(1.23301,0.375451)(1.21563,0.452275)
+ (1.26742,0.453019)(1.31978,0.464555)
+\psset{fillcolor=cmy_6969ff}%
+\psset{linecolor=rgb_1d1d95}%
+\pspolygon[fillstyle=solid](1.11204,0.483169)(1.12142,0.416397)
+ (1.0645,0.458716)(1.0058,0.514406)(1.0053,0.553791)
+ (1.05928,0.513957)(1.11204,0.483169)
+\psset{fillcolor=cmy_5e5eff}%
+\psset{linecolor=rgb_2020a0}%
+\pspolygon[fillstyle=solid](1.42762,0.517893)(1.46924,0.473639)
+ (1.40679,0.427311)(1.34701,0.395075)(1.31978,0.464555)
+ (1.3731,0.486452)(1.42762,0.517893)
+\psset{fillcolor=cmy_7676ff}%
+\psset{linecolor=rgb_1b1b88}%
+\pspolygon[fillstyle=solid](1.0053,0.553791)(1.0058,0.514406)
+ (0.944617,0.581935)(0.880444,0.659087)(0.892338,0.65446)
+ (0.949725,0.601259)(1.0053,0.553791)
+\psset{fillcolor=cmy_6565ff}%
+\psset{linecolor=rgb_1e1e99}%
+\pspolygon[fillstyle=solid](1.19425,0.509734)(1.21563,0.452275)
+ (1.164,0.462409)(1.11204,0.483169)(1.10071,0.531856)
+ (1.14768,0.517332)(1.19425,0.509734)
+\psset{fillcolor=cmy_6161ff}%
+\psset{linecolor=rgb_1f1f9d}%
+\pspolygon[fillstyle=solid](1.28699,0.515829)(1.31978,0.464555)
+ (1.26742,0.453019)(1.21563,0.452275)(1.19425,0.509734)
+ (1.24062,0.509263)(1.28699,0.515829)
+\psset{fillcolor=cmy_6f6fff}%
+\psset{linecolor=rgb_1c1c8f}%
+\pspolygon[fillstyle=solid](1.10071,0.531856)(1.11204,0.483169)
+ (1.05928,0.513957)(1.0053,0.553791)(1.00473,0.579391)
+ (1.05312,0.552809)(1.10071,0.531856)
+\psset{fillcolor=cmy_6666ff}%
+\psset{linecolor=rgb_1e1e98}%
+\pspolygon[fillstyle=solid](1.38015,0.548201)(1.42762,0.517893)
+ (1.3731,0.486452)(1.31978,0.464555)(1.28699,0.515829)
+ (1.33349,0.529041)(1.38015,0.548201)
+\psset{fillcolor=cmy_6c6cff}%
+\psset{linecolor=rgb_1d1d92}%
+\pspolygon[fillstyle=solid](1.54036,0.603855)(1.60334,0.602838)
+ (1.53472,0.5328)(1.46924,0.473639)(1.42762,0.517893)
+ (1.48342,0.557617)(1.54036,0.603855)
+\psset{fillcolor=cmy_7979ff}%
+\psset{linecolor=rgb_1a1a85}%
+\pspolygon[fillstyle=solid](1.00473,0.579391)(1.0053,0.553791)
+ (0.949725,0.601259)(0.892338,0.65446)(0.905094,0.644715)
+ (0.955399,0.610498)(1.00473,0.579391)
+\psset{fillcolor=cmy_7f7fff}%
+\psset{linecolor=rgb_19197f}%
+\pspolygon[fillstyle=solid](0.892338,0.65446)(0.880444,0.659087)
+ (0.812994,0.742797)(0.742326,0.82905)(0.772133,0.767878)
+ (0.833083,0.710977)(0.892338,0.65446)
+\psset{fillcolor=cmy_7070ff}%
+\psset{linecolor=rgb_1c1c8e}%
+\pspolygon[fillstyle=solid](1.1691,0.547312)(1.19425,0.509734)
+ (1.14768,0.517332)(1.10071,0.531856)(1.08754,0.562251)
+ (1.12854,0.552782)(1.1691,0.547312)
+\psset{fillcolor=cmy_7777ff}%
+\psset{linecolor=rgb_1b1b87}%
+\pspolygon[fillstyle=solid](1.08754,0.562251)(1.10071,0.531856)
+ (1.05312,0.552809)(1.00473,0.579391)(1.00408,0.591586)
+ (1.04606,0.57537)(1.08754,0.562251)
+\psset{fillcolor=cmy_6d6dff}%
+\psset{linecolor=rgb_1d1d91}%
+\pspolygon[fillstyle=solid](1.24902,0.548712)(1.28699,0.515829)
+ (1.24062,0.509263)(1.19425,0.509734)(1.1691,0.547312)
+ (1.20925,0.545979)(1.24902,0.548712)
+\psset{fillcolor=cmy_7f7fff}%
+\psset{linecolor=rgb_19197f}%
+\pspolygon[fillstyle=solid](0.905094,0.644715)(0.892338,0.65446)
+ (0.833083,0.710977)(0.772133,0.767878)(0.801956,0.715411)
+ (0.853879,0.680337)(0.905094,0.644715)
+\psset{fillcolor=cmy_7171ff}%
+\psset{linecolor=rgb_1c1c8d}%
+\pspolygon[fillstyle=solid](1.47358,0.599945)(1.54036,0.603855)
+ (1.48342,0.557617)(1.42762,0.517893)(1.38015,0.548201)
+ (1.42692,0.572286)(1.47358,0.599945)
+\psset{fillcolor=cmy_7d7dff}%
+\psset{linecolor=rgb_191981}%
+\pspolygon[fillstyle=solid](1.00408,0.591586)(1.00473,0.579391)
+ (0.955399,0.610498)(0.905094,0.644715)(0.918709,0.630156)
+ (0.961612,0.610155)(1.00408,0.591586)
+\psset{fillcolor=cmy_7171ff}%
+\psset{linecolor=rgb_1c1c8d}%
+\pspolygon[fillstyle=solid](1.32731,0.565028)(1.38015,0.548201)
+ (1.33349,0.529041)(1.28699,0.515829)(1.24902,0.548712)
+ (1.2884,0.555226)(1.32731,0.565028)
+\psset{fillcolor=cmy_7878ff}%
+\psset{linecolor=rgb_1a1a86}%
+\pspolygon[fillstyle=solid](0.772133,0.767878)(0.742326,0.82905)
+ (0.668933,0.912872)(0.593817,0.988506)(0.647182,0.869075)
+ (0.709925,0.821791)(0.772133,0.767878)
+\psset{fillcolor=cmy_7e7eff}%
+\psset{linecolor=rgb_191980}%
+\pspolygon[fillstyle=solid](0.918709,0.630156)(0.905094,0.644715)
+ (0.853879,0.680337)(0.801956,0.715411)(0.832163,0.670073)
+ (0.875495,0.650521)(0.918709,0.630156)
+\psset{fillcolor=cmy_7b7bff}%
+\psset{linecolor=rgb_1a1a83}%
+\pspolygon[fillstyle=solid](1.14055,0.565734)(1.1691,0.547312)
+ (1.12854,0.552782)(1.08754,0.562251)(1.07271,0.575185)
+ (1.10684,0.569509)(1.14055,0.565734)
+\psset{fillcolor=cmy_7979ff}%
+\psset{linecolor=rgb_1a1a85}%
+\pspolygon[fillstyle=solid](1.65578,0.705915)(1.74819,0.763081)
+ (1.67477,0.680906)(1.60334,0.602838)(1.54036,0.603855)
+ (1.59806,0.654266)(1.65578,0.705915)
+\psset{fillcolor=cmy_7d7dff}%
+\psset{linecolor=rgb_191981}%
+\pspolygon[fillstyle=solid](1.07271,0.575185)(1.08754,0.562251)
+ (1.04606,0.57537)(1.00408,0.591586)(1.00338,0.591308)
+ (1.0382,0.582558)(1.07271,0.575185)
+\psset{fillcolor=cmy_7575ff}%
+\psset{linecolor=rgb_1b1b89}%
+\pspolygon[fillstyle=solid](0.801956,0.715411)(0.772133,0.767878)
+ (0.709925,0.821791)(0.647182,0.869075)(0.697531,0.775355)
+ (0.749674,0.74781)(0.801956,0.715411)
+\psset{fillcolor=cmy_7a7aff}%
+\psset{linecolor=rgb_1a1a84}%
+\pspolygon[fillstyle=solid](1.2064,0.564093)(1.24902,0.548712)
+ (1.20925,0.545979)(1.1691,0.547312)(1.14055,0.565734)
+ (1.17375,0.563943)(1.2064,0.564093)
+\psset{fillcolor=cmy_7878ff}%
+\psset{linecolor=rgb_1a1a86}%
+\pspolygon[fillstyle=solid](1.40315,0.59151)(1.47358,0.599945)
+ (1.42692,0.572286)(1.38015,0.548201)(1.32731,0.565028)
+ (1.36563,0.577419)(1.40315,0.59151)
+\psset{fillcolor=cmy_7f7fff}%
+\psset{linecolor=rgb_19197f}%
+\pspolygon[fillstyle=solid](1.00338,0.591308)(1.00408,0.591586)
+ (0.961612,0.610155)(0.918709,0.630156)(0.933183,0.611153)
+ (0.968339,0.601011)(1.00338,0.591308)
+\psset{fillcolor=cmy_6c6cff}%
+\psset{linecolor=rgb_1d1d92}%
+\pspolygon[fillstyle=solid](0.189032,0.289372)(0.105002,0.195832)
+ (0.106173,0.133184)(0.107102,0.0871823)(0.187635,0.204779)
+ (0.187646,0.241139)(0.189032,0.289372)
+\psset{fillcolor=cmy_7c7cff}%
+\psset{linecolor=rgb_1a1a82}%
+\pspolygon[fillstyle=solid](1.26963,0.569425)(1.32731,0.565028)
+ (1.2884,0.555226)(1.24902,0.548712)(1.2064,0.564093)
+ (1.23839,0.566016)(1.26963,0.569425)
+\psset{fillcolor=cmy_7171ff}%
+\psset{linecolor=rgb_1c1c8d}%
+\pspolygon[fillstyle=solid](0.832163,0.670073)(0.801956,0.715411)
+ (0.749674,0.74781)(0.697531,0.775355)(0.746272,0.701846)
+ (0.788976,0.687585)(0.832163,0.670073)
+\psset{fillcolor=cmy_7c7cff}%
+\psset{linecolor=rgb_1a1a82}%
+\pspolygon[fillstyle=solid](1.56495,0.658972)(1.65578,0.705915)
+ (1.59806,0.654266)(1.54036,0.603855)(1.47358,0.599945)
+ (1.51977,0.629498)(1.56495,0.658972)
+\psset{fillcolor=cmy_4949ff}%
+\psset{linecolor=rgb_2424b5}%
+\pspolygon[fillstyle=solid](0.19769,0.416171)(0.10474,0.365653)
+ (0.104222,0.273918)(0.105002,0.195832)(0.189032,0.289372)
+ (0.192187,0.348273)(0.19769,0.416171)
+\psset{fillcolor=cmy_7b7bff}%
+\psset{linecolor=rgb_1a1a83}%
+\pspolygon[fillstyle=solid](0.933183,0.611153)(0.918709,0.630156)
+ (0.875495,0.650521)(0.832163,0.670073)(0.863092,0.630402)
+ (0.898045,0.621157)(0.933183,0.611153)
+\psset{fillcolor=cmy_5656ff}%
+\psset{linecolor=rgb_2121a8}%
+\pspolygon[fillstyle=solid](0.647182,0.869075)(0.593817,0.988506)
+ (0.518501,1.04983)(0.444947,1.09101)(0.524261,0.929508)
+ (0.584894,0.90608)(0.647182,0.869075)
+\psset{fillcolor=cmy_5353ff}%
+\psset{linecolor=rgb_2222ab}%
+\pspolygon[fillstyle=solid](0.697531,0.775355)(0.647182,0.869075)
+ (0.584894,0.90608)(0.524261,0.929508)(0.596275,0.807827)
+ (0.646156,0.795963)(0.697531,0.775355)
+\psset{fillcolor=cmy_7d7dff}%
+\psset{linecolor=rgb_191981}%
+\pspolygon[fillstyle=solid](0.187635,0.204779)(0.107102,0.0871823)
+ (0.107428,0.0586308)(0.107074,0.0480454)(0.191172,0.170524)
+ (0.188802,0.181093)(0.187635,0.204779)
+\psset{fillcolor=cmy_7e7eff}%
+\psset{linecolor=rgb_191980}%
+\pspolygon[fillstyle=solid](1.32922,0.579024)(1.40315,0.59151)
+ (1.36563,0.577419)(1.32731,0.565028)(1.26963,0.569425)
+ (1.29996,0.573925)(1.32922,0.579024)
+\psset{fillcolor=cmy_6c6cff}%
+\psset{linecolor=rgb_1d1d92}%
+\pspolygon[fillstyle=solid](0.863092,0.630402)(0.832163,0.670073)
+ (0.788976,0.687585)(0.746272,0.701846)(0.794552,0.644134)
+ (0.828519,0.638261)(0.863092,0.630402)
+\psset{fillcolor=cmy_7f7fff}%
+\psset{linecolor=rgb_19197f}%
+\pspolygon[fillstyle=solid](1.109,0.566914)(1.14055,0.565734)
+ (1.10684,0.569509)(1.07271,0.575185)(1.05638,0.57247)
+ (1.08289,0.569392)(1.109,0.566914)
+\psset{fillcolor=cmy_7e7eff}%
+\psset{linecolor=rgb_191980}%
+\pspolygon[fillstyle=solid](1.05638,0.57247)(1.07271,0.575185)
+ (1.0382,0.582558)(1.00338,0.591308)(1.00261,0.579992)
+ (1.02959,0.576053)(1.05638,0.57247)
+\pspolygon[fillstyle=solid](1.47456,0.620443)(1.56495,0.658972)
+ (1.51977,0.629498)(1.47358,0.599945)(1.40315,0.59151)
+ (1.43958,0.606246)(1.47456,0.620443)
+\psset{fillcolor=cmy_5050ff}%
+\psset{linecolor=rgb_2222ae}%
+\pspolygon[fillstyle=solid](0.746272,0.701846)(0.697531,0.775355)
+ (0.646156,0.795963)(0.596275,0.807827)(0.663929,0.71633)
+ (0.704444,0.711739)(0.746272,0.701846)
+\psset{fillcolor=cmy_2323ff}%
+\psset{linecolor=rgb_2b2bdb}%
+\pspolygon[fillstyle=solid](0.218731,0.569601)(0.114562,0.578881)
+ (0.107723,0.468479)(0.10474,0.365653)(0.19769,0.416171)
+ (0.206264,0.490868)(0.218731,0.569601)
+\psset{fillcolor=cmy_7b7bff}%
+\psset{linecolor=rgb_1a1a83}%
+\pspolygon[fillstyle=solid](1.00261,0.579992)(1.00338,0.591308)
+ (0.968339,0.601011)(0.933183,0.611153)(0.948523,0.588133)
+ (0.975553,0.584095)(1.00261,0.579992)
+\psset{fillcolor=cmy_7f7fff}%
+\psset{linecolor=rgb_19197f}%
+\pspolygon[fillstyle=solid](1.1597,0.563866)(1.2064,0.564093)
+ (1.17375,0.563943)(1.14055,0.565734)(1.109,0.566914)
+ (1.13464,0.565078)(1.1597,0.563866)
+\psset{fillcolor=cmy_7474ff}%
+\psset{linecolor=rgb_1b1b8a}%
+\pspolygon[fillstyle=solid](0.948523,0.588133)(0.933183,0.611153)
+ (0.898045,0.621157)(0.863092,0.630402)(0.895059,0.594987)
+ (0.921647,0.591852)(0.948523,0.588133)
+\psset{fillcolor=cmy_2828ff}%
+\psset{linecolor=rgb_2a2ad6}%
+\pspolygon[fillstyle=solid](0.524261,0.929508)(0.444947,1.09101)
+ (0.375363,1.10732)(0.311925,1.09597)(0.413159,0.926478)
+ (0.466591,0.936797)(0.524261,0.929508)
+\psset{fillcolor=cmy_7f7fff}%
+\psset{linecolor=rgb_19197f}%
+\pspolygon[fillstyle=solid](1.20765,0.562964)(1.26963,0.569425)
+ (1.23839,0.566016)(1.2064,0.564093)(1.1597,0.563866)
+ (1.18407,0.563204)(1.20765,0.562964)
+\psset{fillcolor=cmy_4f4fff}%
+\psset{linecolor=rgb_2323af}%
+\pspolygon[fillstyle=solid](0.794552,0.644134)(0.746272,0.701846)
+ (0.704444,0.711739)(0.663929,0.71633)(0.729448,0.647866)
+ (0.761441,0.647482)(0.794552,0.644134)
+\psset{fillcolor=cmy_2828ff}%
+\psset{linecolor=rgb_2a2ad6}%
+\pspolygon[fillstyle=solid](0.596275,0.807827)(0.524261,0.929508)
+ (0.466591,0.936797)(0.413159,0.926478)(0.504048,0.800507)
+ (0.548656,0.809592)(0.596275,0.807827)
+\psset{fillcolor=cmy_2929ff}%
+\psset{linecolor=rgb_2a2ad5}%
+\pspolygon[fillstyle=solid](0.663929,0.71633)(0.596275,0.807827)
+ (0.548656,0.809592)(0.504048,0.800507)(0.58863,0.707203)
+ (0.625178,0.714938)(0.663929,0.71633)
+\psset{fillcolor=cmy_3f3fff}%
+\psset{linecolor=rgb_2626bf}%
+\pspolygon[fillstyle=solid](0.298804,0.454436)(0.19769,0.416171)
+ (0.192187,0.348273)(0.189032,0.289372)(0.285765,0.364096)
+ (0.29087,0.406486)(0.298804,0.454436)
+\psset{fillcolor=cmy_6666ff}%
+\psset{linecolor=rgb_1e1e98}%
+\pspolygon[fillstyle=solid](0.895059,0.594987)(0.863092,0.630402)
+ (0.828519,0.638261)(0.794552,0.644134)(0.84333,0.598464)
+ (0.868903,0.597273)(0.895059,0.594987)
+\psset{fillcolor=cmy_7f7fff}%
+\psset{linecolor=rgb_19197f}%
+\pspolygon[fillstyle=solid](1.38364,0.588709)(1.47456,0.620443)
+ (1.43958,0.606246)(1.40315,0.59151)(1.32922,0.579024)
+ (1.35719,0.584157)(1.38364,0.588709)
+\psset{fillcolor=cmy_6464ff}%
+\psset{linecolor=rgb_1e1e9a}%
+\pspolygon[fillstyle=solid](0.285765,0.364096)(0.189032,0.289372)
+ (0.187646,0.241139)(0.187635,0.204779)(0.282956,0.300896)
+ (0.283191,0.328573)(0.285765,0.364096)
+\psset{fillcolor=cmy_0909ff}%
+\psset{linecolor=rgb_3131f5}%
+\pspolygon[fillstyle=solid](0.258703,0.72553)(0.145957,0.803098)
+ (0.126792,0.692284)(0.114562,0.578881)(0.218731,0.569601)
+ (0.235947,0.649066)(0.258703,0.72553)
+\psset{fillcolor=cmy_7e7eff}%
+\psset{linecolor=rgb_191980}%
+\pspolygon[fillstyle=solid](1.2519,0.563022)(1.32922,0.579024)
+ (1.29996,0.573925)(1.26963,0.569425)(1.20765,0.562964)
+ (1.2303,0.562975)(1.2519,0.563022)
+\psset{fillcolor=cmy_7f7fff}%
+\psset{linecolor=rgb_19197f}%
+\pspolygon[fillstyle=solid](1.76674,0.798575)(1.89443,0.91833)
+ (1.82212,0.844276)(1.74819,0.763081)(1.65578,0.705915)
+ (1.71247,0.755316)(1.76674,0.798575)
+\psset{fillcolor=cmy_1b1bff}%
+\psset{linecolor=rgb_2d2de3}%
+\pspolygon[fillstyle=solid](0.324666,0.560164)(0.218731,0.569601)
+ (0.206264,0.490868)(0.19769,0.416171)(0.298804,0.454436)
+ (0.309934,0.506308)(0.324666,0.560164)
+\psset{fillcolor=cmy_2d2dff}%
+\psset{linecolor=rgb_2929d1}%
+\pspolygon[fillstyle=solid](0.729448,0.647866)(0.663929,0.71633)
+ (0.625178,0.714938)(0.58863,0.707203)(0.669881,0.638666)
+ (0.698841,0.644979)(0.729448,0.647866)
+\psset{fillcolor=cmy_0909ff}%
+\psset{linecolor=rgb_3131f5}%
+\pspolygon[fillstyle=solid](0.413159,0.926478)(0.311925,1.09597)
+ (0.256452,1.05661)(0.210141,0.991471)(0.323082,0.85378)
+ (0.36506,0.8984)(0.413159,0.926478)
+\psset{fillcolor=cmy_0a0aff}%
+\psset{linecolor=rgb_3030f4}%
+\pspolygon[fillstyle=solid](0.504048,0.800507)(0.413159,0.926478)
+ (0.36506,0.8984)(0.323082,0.85378)(0.426348,0.750295)
+ (0.463108,0.78052)(0.504048,0.800507)
+\psset{fillcolor=cmy_7f7fff}%
+\psset{linecolor=rgb_19197f}%
+\pspolygon[fillstyle=solid](1.6493,0.708781)(1.76674,0.798575)
+ (1.71247,0.755316)(1.65578,0.705915)(1.56495,0.658972)
+ (1.60841,0.686169)(1.6493,0.708781)
+\psset{fillcolor=cmy_5050ff}%
+\psset{linecolor=rgb_2222ae}%
+\pspolygon[fillstyle=solid](0.84333,0.598464)(0.794552,0.644134)
+ (0.761441,0.647482)(0.729448,0.647866)(0.794573,0.596748)
+ (0.818499,0.598346)(0.84333,0.598464)
+\psset{fillcolor=cmy_0d0dff}%
+\psset{linecolor=rgb_3030f1}%
+\pspolygon[fillstyle=solid](0.58863,0.707203)(0.504048,0.800507)
+ (0.463108,0.78052)(0.426348,0.750295)(0.523665,0.673044)
+ (0.554683,0.693119)(0.58863,0.707203)
+\psset{fillcolor=cmy_0606ff}%
+\psset{linecolor=rgb_3131f8}%
+\pspolygon[fillstyle=solid](0.366464,0.664928)(0.258703,0.72553)
+ (0.235947,0.649066)(0.218731,0.569601)(0.324666,0.560164)
+ (0.343397,0.613816)(0.366464,0.664928)
+\psset{fillcolor=cmy_0000ff}%
+\psset{linecolor=rgb_3232fe}%
+\pspolygon[fillstyle=solid](0.323082,0.85378)(0.210141,0.991471)
+ (0.173421,0.904998)(0.145957,0.803098)(0.258703,0.72553)
+ (0.287629,0.795046)(0.323082,0.85378)
+\psset{fillcolor=cmy_7474ff}%
+\psset{linecolor=rgb_1b1b8a}%
+\pspolygon[fillstyle=solid](1.03875,0.556754)(1.05638,0.57247)
+ (1.02959,0.576053)(1.00261,0.579992)(1.00179,0.559495)
+ (1.02033,0.558175)(1.03875,0.556754)
+\psset{fillcolor=cmy_7676ff}%
+\psset{linecolor=rgb_1b1b88}%
+\pspolygon[fillstyle=solid](1.07488,0.553783)(1.109,0.566914)
+ (1.08289,0.569392)(1.05638,0.57247)(1.03875,0.556754)
+ (1.05696,0.555279)(1.07488,0.553783)
+\psset{fillcolor=cmy_7171ff}%
+\psset{linecolor=rgb_1c1c8d}%
+\pspolygon[fillstyle=solid](1.00179,0.559495)(1.00261,0.579992)
+ (0.975553,0.584095)(0.948523,0.588133)(0.964748,0.561577)
+ (0.983236,0.560652)(1.00179,0.559495)
+\psset{fillcolor=cmy_0000ff}%
+\psset{linecolor=rgb_3232fe}%
+\pspolygon[fillstyle=solid](0.426348,0.750295)(0.323082,0.85378)
+ (0.287629,0.795046)(0.258703,0.72553)(0.366464,0.664928)
+ (0.394092,0.711151)(0.426348,0.750295)
+\psset{fillcolor=cmy_7e7eff}%
+\psset{linecolor=rgb_191980}%
+\pspolygon[fillstyle=solid](1.53831,0.642183)(1.6493,0.708781)
+ (1.60841,0.686169)(1.56495,0.658972)(1.47456,0.620443)
+ (1.50763,0.632843)(1.53831,0.642183)
+\psset{fillcolor=cmy_7777ff}%
+\psset{linecolor=rgb_1b1b87}%
+\pspolygon[fillstyle=solid](1.10948,0.550772)(1.1597,0.563866)
+ (1.13464,0.565078)(1.109,0.566914)(1.07488,0.553783)
+ (1.09241,0.552281)(1.10948,0.550772)
+\psset{fillcolor=cmy_6a6aff}%
+\psset{linecolor=rgb_1d1d94}%
+\pspolygon[fillstyle=solid](0.964748,0.561577)(0.948523,0.588133)
+ (0.921647,0.591852)(0.895059,0.594987)(0.92836,0.562423)
+ (0.946423,0.562194)(0.964748,0.561577)
+\psset{fillcolor=cmy_1515ff}%
+\psset{linecolor=rgb_2e2ee9}%
+\pspolygon[fillstyle=solid](0.669881,0.638666)(0.58863,0.707203)
+ (0.554683,0.693119)(0.523665,0.673044)(0.617846,0.615994)
+ (0.642811,0.628942)(0.669881,0.638666)
+\psset{fillcolor=cmy_0101ff}%
+\psset{linecolor=rgb_3232fd}%
+\pspolygon[fillstyle=solid](0.523665,0.673044)(0.426348,0.750295)
+ (0.394092,0.711151)(0.366464,0.664928)(0.471308,0.617992)
+ (0.495823,0.647676)(0.523665,0.673044)
+\psset{fillcolor=cmy_3838ff}%
+\psset{linecolor=rgb_2727c6}%
+\pspolygon[fillstyle=solid](0.794573,0.596748)(0.729448,0.647866)
+ (0.698841,0.644979)(0.669881,0.638666)(0.750078,0.58872)
+ (0.771713,0.593556)(0.794573,0.596748)
+\psset{fillcolor=cmy_7b7bff}%
+\psset{linecolor=rgb_1a1a83}%
+\pspolygon[fillstyle=solid](1.29137,0.562256)(1.38364,0.588709)
+ (1.35719,0.584157)(1.32922,0.579024)(1.2519,0.563022)
+ (1.27231,0.562867)(1.29137,0.562256)
+\psset{fillcolor=cmy_7e7eff}%
+\psset{linecolor=rgb_191980}%
+\pspolygon[fillstyle=solid](0.191172,0.170524)(0.107074,0.0480454)
+ (0.106268,0.0557124)(0.105573,0.08167)(0.20082,0.188793)
+ (0.195007,0.173177)(0.191172,0.170524)
+\psset{fillcolor=cmy_7979ff}%
+\psset{linecolor=rgb_1a1a85}%
+\pspolygon[fillstyle=solid](0.282956,0.300896)(0.187635,0.204779)
+ (0.188802,0.181093)(0.191172,0.170524)(0.28937,0.271374)
+ (0.284992,0.281718)(0.282956,0.300896)
+\psset{fillcolor=cmy_7676ff}%
+\psset{linecolor=rgb_1b1b88}%
+\pspolygon[fillstyle=solid](1.14185,0.547647)(1.20765,0.562964)
+ (1.18407,0.563204)(1.1597,0.563866)(1.10948,0.550772)
+ (1.12599,0.549239)(1.14185,0.547647)
+\psset{fillcolor=cmy_0505ff}%
+\psset{linecolor=rgb_3131f9}%
+\pspolygon[fillstyle=solid](0.471308,0.617992)(0.366464,0.664928)
+ (0.343397,0.613816)(0.324666,0.560164)(0.432412,0.550565)
+ (0.450178,0.585184)(0.471308,0.617992)
+\psset{fillcolor=cmy_6161ff}%
+\psset{linecolor=rgb_1f1f9d}%
+\pspolygon[fillstyle=solid](0.92836,0.562423)(0.895059,0.594987)
+ (0.868903,0.597273)(0.84333,0.598464)(0.893412,0.561425)
+ (0.910657,0.56219)(0.92836,0.562423)
+\psset{fillcolor=cmy_1616ff}%
+\psset{linecolor=rgb_2e2ee8}%
+\pspolygon[fillstyle=solid](0.432412,0.550565)(0.324666,0.560164)
+ (0.309934,0.506308)(0.298804,0.454436)(0.406584,0.481275)
+ (0.417922,0.515489)(0.432412,0.550565)
+\psset{fillcolor=cmy_7b7bff}%
+\psset{linecolor=rgb_1a1a83}%
+\pspolygon[fillstyle=solid](1.43089,0.593568)(1.53831,0.642183)
+ (1.50763,0.632843)(1.47456,0.620443)(1.38364,0.588709)
+ (1.40831,0.592049)(1.43089,0.593568)
+\psset{fillcolor=cmy_0909ff}%
+\psset{linecolor=rgb_3131f5}%
+\pspolygon[fillstyle=solid](0.617846,0.615994)(0.523665,0.673044)
+ (0.495823,0.647676)(0.471308,0.617992)(0.574906,0.58195)
+ (0.595165,0.600168)(0.617846,0.615994)
+\psset{fillcolor=cmy_3636ff}%
+\psset{linecolor=rgb_2828c8}%
+\pspolygon[fillstyle=solid](0.406584,0.481275)(0.298804,0.454436)
+ (0.29087,0.406486)(0.285765,0.364096)(0.392802,0.420142)
+ (0.398255,0.449137)(0.406584,0.481275)
+\psset{fillcolor=cmy_2626ff}%
+\psset{linecolor=rgb_2b2bd8}%
+\pspolygon[fillstyle=solid](0.750078,0.58872)(0.669881,0.638666)
+ (0.642811,0.628942)(0.617846,0.615994)(0.711075,0.574268)
+ (0.729819,0.582261)(0.750078,0.58872)
+\psset{fillcolor=cmy_5555ff}%
+\psset{linecolor=rgb_2121a9}%
+\pspolygon[fillstyle=solid](0.893412,0.561425)(0.84333,0.598464)
+ (0.818499,0.598346)(0.794573,0.596748)(0.860696,0.558086)
+ (0.876726,0.560071)(0.893412,0.561425)
+\psset{fillcolor=cmy_7474ff}%
+\psset{linecolor=rgb_1b1b8a}%
+\pspolygon[fillstyle=solid](1.17127,0.54409)(1.2519,0.563022)
+ (1.2303,0.562975)(1.20765,0.562964)(1.14185,0.547647)
+ (1.15697,0.54595)(1.17127,0.54409)
+\psset{fillcolor=cmy_0b0bff}%
+\psset{linecolor=rgb_3030f3}%
+\pspolygon[fillstyle=solid](0.574906,0.58195)(0.471308,0.617992)
+ (0.450178,0.585184)(0.432412,0.550565)(0.542015,0.540801)
+ (0.557169,0.561937)(0.574906,0.58195)
+\psset{fillcolor=cmy_4848ff}%
+\psset{linecolor=rgb_2424b6}%
+\pspolygon[fillstyle=solid](0.860696,0.558086)(0.794573,0.596748)
+ (0.771713,0.593556)(0.750078,0.58872)(0.830997,0.552142)
+ (0.845422,0.555444)(0.860696,0.558086)
+\psset{fillcolor=cmy_5a5aff}%
+\psset{linecolor=rgb_2020a4}%
+\pspolygon[fillstyle=solid](0.392802,0.420142)(0.285765,0.364096)
+ (0.283191,0.328573)(0.282956,0.300896)(0.390156,0.374904)
+ (0.390121,0.395173)(0.392802,0.420142)
+\psset{fillcolor=cmy_7575ff}%
+\psset{linecolor=rgb_1b1b89}%
+\pspolygon[fillstyle=solid](1.32484,0.558669)(1.43089,0.593568)
+ (1.40831,0.592049)(1.38364,0.588709)(1.29137,0.562256)
+ (1.30893,0.560936)(1.32484,0.558669)
+\psset{fillcolor=cmy_1c1cff}%
+\psset{linecolor=rgb_2d2de2}%
+\pspolygon[fillstyle=solid](0.711075,0.574268)(0.617846,0.615994)
+ (0.595165,0.600168)(0.574906,0.58195)(0.678618,0.554358)
+ (0.693971,0.564896)(0.711075,0.574268)
+\psset{fillcolor=cmy_7171ff}%
+\psset{linecolor=rgb_1c1c8d}%
+\pspolygon[fillstyle=solid](1.19703,0.539628)(1.29137,0.562256)
+ (1.27231,0.562867)(1.2519,0.563022)(1.17127,0.54409)
+ (1.18465,0.542005)(1.19703,0.539628)
+\psset{fillcolor=cmy_1818ff}%
+\psset{linecolor=rgb_2e2ee6}%
+\pspolygon[fillstyle=solid](0.542015,0.540801)(0.432412,0.550565)
+ (0.417922,0.515489)(0.406584,0.481275)(0.519554,0.497979)
+ (0.529474,0.519246)(0.542015,0.540801)
+\psset{fillcolor=cmy_3d3dff}%
+\psset{linecolor=rgb_2626c1}%
+\pspolygon[fillstyle=solid](0.830997,0.552142)(0.750078,0.58872)
+ (0.729819,0.582261)(0.711075,0.574268)(0.805053,0.543639)
+ (0.817512,0.548194)(0.830997,0.552142)
+\psset{fillcolor=cmy_6666ff}%
+\psset{linecolor=rgb_1e1e98}%
+\pspolygon[fillstyle=solid](1.01993,0.53134)(1.03875,0.556754)
+ (1.02033,0.558175)(1.00179,0.559495)(1.00092,0.532012)
+ (1.01046,0.531756)(1.01993,0.53134)
+\psset{fillcolor=cmy_6565ff}%
+\psset{linecolor=rgb_1e1e99}%
+\pspolygon[fillstyle=solid](1.00092,0.532012)(1.00179,0.559495)
+ (0.983236,0.560652)(0.964748,0.561577)(0.98189,0.532011)
+ (0.991382,0.5321)(1.00092,0.532012)
+\psset{fillcolor=cmy_6868ff}%
+\psset{linecolor=rgb_1e1e96}%
+\pspolygon[fillstyle=solid](1.03849,0.530055)(1.07488,0.553783)
+ (1.05696,0.555279)(1.03875,0.556754)(1.01993,0.53134)
+ (1.02929,0.53077)(1.03849,0.530055)
+\psset{fillcolor=cmy_1c1cff}%
+\psset{linecolor=rgb_2d2de2}%
+\pspolygon[fillstyle=solid](0.678618,0.554358)(0.574906,0.58195)
+ (0.557169,0.561937)(0.542015,0.540801)(0.653524,0.530867)
+ (0.66511,0.542917)(0.678618,0.554358)
+\psset{fillcolor=cmy_6262ff}%
+\psset{linecolor=rgb_1f1f9c}%
+\pspolygon[fillstyle=solid](0.98189,0.532011)(0.964748,0.561577)
+ (0.946423,0.562194)(0.92836,0.562423)(0.963262,0.531266)
+ (0.972499,0.531735)(0.98189,0.532011)
+\psset{fillcolor=cmy_6868ff}%
+\psset{linecolor=rgb_1e1e96}%
+\pspolygon[fillstyle=solid](1.05617,0.528201)(1.10948,0.550772)
+ (1.09241,0.552281)(1.07488,0.553783)(1.03849,0.530055)
+ (1.04746,0.529197)(1.05617,0.528201)
+\psset{fillcolor=cmy_5e5eff}%
+\psset{linecolor=rgb_2020a0}%
+\pspolygon[fillstyle=solid](0.963262,0.531266)(0.92836,0.562423)
+ (0.910657,0.56219)(0.893412,0.561425)(0.945465,0.52972)
+ (0.954234,0.530596)(0.963262,0.531266)
+\psset{fillcolor=cmy_3232ff}%
+\psset{linecolor=rgb_2828cc}%
+\pspolygon[fillstyle=solid](0.519554,0.497979)(0.406584,0.481275)
+ (0.398255,0.449137)(0.392802,0.420142)(0.507551,0.458909)
+ (0.512249,0.477666)(0.519554,0.497979)
+\psset{fillcolor=cmy_7575ff}%
+\psset{linecolor=rgb_1b1b89}%
+\pspolygon[fillstyle=solid](1.59029,0.647141)(1.71949,0.731475)
+ (1.68666,0.724552)(1.6493,0.708781)(1.53831,0.642183)
+ (1.56604,0.647284)(1.59029,0.647141)
+\psset{fillcolor=cmy_6868ff}%
+\psset{linecolor=rgb_1e1e96}%
+\pspolygon[fillstyle=solid](1.07258,0.525802)(1.14185,0.547647)
+ (1.12599,0.549239)(1.10948,0.550772)(1.05617,0.528201)
+ (1.06456,0.527069)(1.07258,0.525802)
+\psset{fillcolor=cmy_7070ff}%
+\psset{linecolor=rgb_1c1c8e}%
+\pspolygon[fillstyle=solid](1.46867,0.589042)(1.59029,0.647141)
+ (1.56604,0.647284)(1.53831,0.642183)(1.43089,0.593568)
+ (1.45111,0.592716)(1.46867,0.589042)
+\psset{fillcolor=cmy_3737ff}%
+\psset{linecolor=rgb_2727c7}%
+\pspolygon[fillstyle=solid](0.805053,0.543639)(0.711075,0.574268)
+ (0.693971,0.564896)(0.678618,0.554358)(0.783529,0.532958)
+ (0.793701,0.538535)(0.805053,0.543639)
+\psset{fillcolor=cmy_6c6cff}%
+\psset{linecolor=rgb_1d1d92}%
+\pspolygon[fillstyle=solid](1.21844,0.533751)(1.32484,0.558669)
+ (1.30893,0.560936)(1.29137,0.562256)(1.19703,0.539628)
+ (1.20832,0.536895)(1.21844,0.533751)
+\psset{fillcolor=cmy_5959ff}%
+\psset{linecolor=rgb_2121a5}%
+\pspolygon[fillstyle=solid](0.945465,0.52972)(0.893412,0.561425)
+ (0.876726,0.560071)(0.860696,0.558086)(0.928911,0.52734)
+ (0.937007,0.528634)(0.945465,0.52972)
+\psset{fillcolor=cmy_7878ff}%
+\psset{linecolor=rgb_1a1a86}%
+\pspolygon[fillstyle=solid](1.71949,0.731475)(1.86122,0.850819)
+ (1.81692,0.831665)(1.76674,0.798575)(1.6493,0.708781)
+ (1.68666,0.724552)(1.71949,0.731475)
+\psset{fillcolor=cmy_6868ff}%
+\psset{linecolor=rgb_1e1e96}%
+\pspolygon[fillstyle=solid](1.08732,0.52286)(1.17127,0.54409)
+ (1.15697,0.54595)(1.14185,0.547647)(1.07258,0.525802)
+ (1.08018,0.524399)(1.08732,0.52286)
+\psset{fillcolor=cmy_6a6aff}%
+\psset{linecolor=rgb_1d1d94}%
+\pspolygon[fillstyle=solid](1.35106,0.550511)(1.46867,0.589042)
+ (1.45111,0.592716)(1.43089,0.593568)(1.32484,0.558669)
+ (1.33893,0.555247)(1.35106,0.550511)
+\psset{fillcolor=cmy_2525ff}%
+\psset{linecolor=rgb_2b2bd9}%
+\pspolygon[fillstyle=solid](0.653524,0.530867)(0.542015,0.540801)
+ (0.529474,0.519246)(0.519554,0.497979)(0.636366,0.506205)
+ (0.643926,0.518523)(0.653524,0.530867)
+\psset{fillcolor=cmy_5454ff}%
+\psset{linecolor=rgb_2222aa}%
+\pspolygon[fillstyle=solid](0.928911,0.52734)(0.860696,0.558086)
+ (0.845422,0.555444)(0.830997,0.552142)(0.913992,0.524138)
+ (0.921223,0.525839)(0.928911,0.52734)
+\psset{fillcolor=cmy_7373ff}%
+\psset{linecolor=rgb_1b1b8b}%
+\pspolygon[fillstyle=solid](0.390156,0.374904)(0.282956,0.300896)
+ (0.284992,0.281718)(0.28937,0.271374)(0.398466,0.350056)
+ (0.392913,0.35979)(0.390156,0.374904)
+\psset{fillcolor=cmy_3636ff}%
+\psset{linecolor=rgb_2828c8}%
+\pspolygon[fillstyle=solid](0.783529,0.532958)(0.678618,0.554358)
+ (0.66511,0.542917)(0.653524,0.530867)(0.76699,0.520758)
+ (0.774605,0.526998)(0.783529,0.532958)
+\psset{fillcolor=cmy_7979ff}%
+\psset{linecolor=rgb_1a1a85}%
+\pspolygon[fillstyle=solid](1.86122,0.850819)(2.0226,1.01759)
+ (1.96232,0.978383)(1.89443,0.91833)(1.76674,0.798575)
+ (1.81692,0.831665)(1.86122,0.850819)
+\psset{fillcolor=cmy_6666ff}%
+\psset{linecolor=rgb_1e1e98}%
+\pspolygon[fillstyle=solid](1.10005,0.519369)(1.19703,0.539628)
+ (1.18465,0.542005)(1.17127,0.54409)(1.08732,0.52286)
+ (1.09396,0.521183)(1.10005,0.519369)
+\psset{fillcolor=cmy_5050ff}%
+\psset{linecolor=rgb_2222ae}%
+\pspolygon[fillstyle=solid](0.913992,0.524138)(0.830997,0.552142)
+ (0.817512,0.548194)(0.805053,0.543639)(0.90107,0.520175)
+ (0.90726,0.522245)(0.913992,0.524138)
+\psset{fillcolor=cmy_5151ff}%
+\psset{linecolor=rgb_2222ad}%
+\pspolygon[fillstyle=solid](0.507551,0.458909)(0.392802,0.420142)
+ (0.390121,0.395173)(0.390156,0.374904)(0.50598,0.427985)
+ (0.505457,0.442216)(0.507551,0.458909)
+\psset{fillcolor=cmy_7f7fff}%
+\psset{linecolor=rgb_19197f}%
+\pspolygon[fillstyle=solid](0.28937,0.271374)(0.191172,0.170524)
+ (0.195007,0.173177)(0.20082,0.188793)(0.306183,0.276904)
+ (0.296309,0.269877)(0.28937,0.271374)
+\psset{fillcolor=cmy_6363ff}%
+\psset{linecolor=rgb_1f1f9b}%
+\pspolygon[fillstyle=solid](1.23484,0.526055)(1.35106,0.550511)
+ (1.33893,0.555247)(1.32484,0.558669)(1.21844,0.533751)
+ (1.2273,0.530147)(1.23484,0.526055)
+\psset{fillcolor=cmy_3737ff}%
+\psset{linecolor=rgb_2727c7}%
+\pspolygon[fillstyle=solid](0.636366,0.506205)(0.519554,0.497979)
+ (0.512249,0.477666)(0.507551,0.458909)(0.62752,0.482848)
+ (0.630886,0.49422)(0.636366,0.506205)
+\psset{fillcolor=cmy_4d4dff}%
+\psset{linecolor=rgb_2323b1}%
+\pspolygon[fillstyle=solid](0.90107,0.520175)(0.805053,0.543639)
+ (0.793701,0.538535)(0.783529,0.532958)(0.890469,0.515566)
+ (0.895461,0.517942)(0.90107,0.520175)
+\psset{fillcolor=cmy_6363ff}%
+\psset{linecolor=rgb_1f1f9b}%
+\pspolygon[fillstyle=solid](1.11043,0.515333)(1.21844,0.533751)
+ (1.20832,0.536895)(1.19703,0.539628)(1.10005,0.519369)
+ (1.10555,0.517419)(1.11043,0.515333)
+\psset{fillcolor=cmy_3a3aff}%
+\psset{linecolor=rgb_2727c4}%
+\pspolygon[fillstyle=solid](0.76699,0.520758)(0.653524,0.530867)
+ (0.643926,0.518523)(0.636366,0.506205)(0.755889,0.507874)
+ (0.760736,0.514347)(0.76699,0.520758)
+\psset{fillcolor=cmy_3c3cff}%
+\psset{linecolor=rgb_2626c2}%
+\pspolygon[fillstyle=solid](1.6438,0.0321256)(1.71591,-0.120081)
+ (1.76775,-0.074723)(1.81976,-0.0100767)(1.73326,0.116772)
+ (1.68934,0.0674669)(1.6438,0.0321256)
+\psset{fillcolor=cmy_4b4bff}%
+\psset{linecolor=rgb_2323b3}%
+\pspolygon[fillstyle=solid](0.890469,0.515566)(0.783529,0.532958)
+ (0.774605,0.526998)(0.76699,0.520758)(0.882464,0.510471)
+ (0.886127,0.513068)(0.890469,0.515566)
+\psset{fillcolor=cmy_5858ff}%
+\psset{linecolor=rgb_2121a6}%
+\pspolygon[fillstyle=solid](1.36891,0.536746)(1.49483,0.572133)
+ (1.48332,0.582232)(1.46867,0.589042)(1.35106,0.550511)
+ (1.36109,0.544356)(1.36891,0.536746)
+\psset{fillcolor=cmy_5f5fff}%
+\psset{linecolor=rgb_1f1f9f}%
+\pspolygon[fillstyle=solid](1.1182,0.510778)(1.23484,0.526055)
+ (1.2273,0.530147)(1.21844,0.533751)(1.11043,0.515333)
+ (1.11466,0.513118)(1.1182,0.510778)
+\psset{fillcolor=cmy_5b5bff}%
+\psset{linecolor=rgb_2020a3}%
+\pspolygon[fillstyle=solid](1.49483,0.572133)(1.62644,0.6285)
+ (1.61057,0.641013)(1.59029,0.647141)(1.46867,0.589042)
+ (1.48332,0.582232)(1.49483,0.572133)
+\psset{fillcolor=cmy_5858ff}%
+\psset{linecolor=rgb_2121a6}%
+\pspolygon[fillstyle=solid](1.24569,0.516371)(1.36891,0.536746)
+ (1.36109,0.544356)(1.35106,0.550511)(1.23484,0.526055)
+ (1.24099,0.52146)(1.24569,0.516371)
+\psset{fillcolor=cmy_5d5dff}%
+\psset{linecolor=rgb_2020a1}%
+\pspolygon[fillstyle=solid](1,0.5)(1.01993,0.53134)
+ (1.01046,0.531756)(1.00092,0.532012)(1,0.5)
+\pspolygon[fillstyle=solid](1,0.5)(1.00092,0.532012)
+ (0.991382,0.5321)(0.98189,0.532011)(1,0.5)
+\pspolygon[fillstyle=solid](1,0.5)(1.03849,0.530055)
+ (1.02929,0.53077)(1.01993,0.53134)(1,0.5)
+\pspolygon[fillstyle=solid](1,0.5)(0.98189,0.532011)
+ (0.972499,0.531735)(0.963262,0.531266)(1,0.5)
+\pspolygon[fillstyle=solid](1,0.5)(1.05617,0.528201)
+ (1.04746,0.529197)(1.03849,0.530055)(1,0.5)
+\psset{fillcolor=cmy_5c5cff}%
+\psset{linecolor=rgb_2020a2}%
+\pspolygon[fillstyle=solid](1,0.5)(0.963262,0.531266)
+ (0.954234,0.530596)(0.945465,0.52972)(1,0.5)
+\psset{fillcolor=cmy_4343ff}%
+\psset{linecolor=rgb_2525bb}%
+\pspolygon[fillstyle=solid](0.755889,0.507874)(0.636366,0.506205)
+ (0.630886,0.49422)(0.62752,0.482848)(0.750565,0.495176)
+ (0.752488,0.50145)(0.755889,0.507874)
+\psset{fillcolor=cmy_5e5eff}%
+\psset{linecolor=rgb_2020a0}%
+\pspolygon[fillstyle=solid](1,0.5)(1.07258,0.525802)
+ (1.06456,0.527069)(1.05617,0.528201)(1,0.5)
+\psset{fillcolor=cmy_5c5cff}%
+\psset{linecolor=rgb_2020a2}%
+\pspolygon[fillstyle=solid](1,0.5)(0.945465,0.52972)
+ (0.937007,0.528634)(0.928911,0.52734)(1,0.5)
+\psset{fillcolor=cmy_4c4cff}%
+\psset{linecolor=rgb_2323b2}%
+\pspolygon[fillstyle=solid](0.882464,0.510471)(0.76699,0.520758)
+ (0.760736,0.514347)(0.755889,0.507874)(0.877275,0.505078)
+ (0.879506,0.507799)(0.882464,0.510471)
+\pspolygon[fillstyle=solid](0.62752,0.482848)(0.507551,0.458909)
+ (0.505457,0.442216)(0.50598,0.427985)(0.627253,0.462871)
+ (0.6263,0.472334)(0.62752,0.482848)
+\psset{fillcolor=cmy_5f5fff}%
+\psset{linecolor=rgb_1f1f9f}%
+\pspolygon[fillstyle=solid](1,0.5)(1.08732,0.52286)
+ (1.08018,0.524399)(1.07258,0.525802)(1,0.5)
+\psset{fillcolor=cmy_5a5aff}%
+\psset{linecolor=rgb_2020a4}%
+\pspolygon[fillstyle=solid](1,0.5)(0.928911,0.52734)
+ (0.921223,0.525839)(0.913992,0.524138)(1,0.5)
+\pspolygon[fillstyle=solid](1.12312,0.505768)(1.24569,0.516371)
+ (1.24099,0.52146)(1.23484,0.526055)(1.1182,0.510778)
+ (1.12103,0.508324)(1.12312,0.505768)
+\psset{fillcolor=cmy_5e5eff}%
+\psset{linecolor=rgb_2020a0}%
+\pspolygon[fillstyle=solid](1.62644,0.6285)(1.76797,0.713246)
+ (1.74686,0.728005)(1.71949,0.731475)(1.59029,0.647141)
+ (1.61057,0.641013)(1.62644,0.6285)
+\psset{fillcolor=cmy_6a6aff}%
+\psset{linecolor=rgb_1d1d94}%
+\pspolygon[fillstyle=solid](0.50598,0.427985)(0.390156,0.374904)
+ (0.392913,0.35979)(0.398466,0.350056)(0.515019,0.407859)
+ (0.509149,0.416487)(0.50598,0.427985)
+\psset{fillcolor=cmy_5959ff}%
+\psset{linecolor=rgb_2121a5}%
+\pspolygon[fillstyle=solid](1,0.5)(0.913992,0.524138)
+ (0.90726,0.522245)(0.90107,0.520175)(1,0.5)
+\psset{fillcolor=cmy_5f5fff}%
+\psset{linecolor=rgb_1f1f9f}%
+\pspolygon[fillstyle=solid](1,0.5)(1.10005,0.519369)
+ (1.09396,0.521183)(1.08732,0.52286)(1,0.5)
+\psset{fillcolor=cmy_5252ff}%
+\psset{linecolor=rgb_2222ac}%
+\pspolygon[fillstyle=solid](1.54709,0.00607935)(1.61087,-0.15044)
+ (1.66387,-0.145468)(1.71591,-0.120081)(1.6438,0.0321256)
+ (1.59652,0.0115261)(1.54709,0.00607935)
+\psset{fillcolor=cmy_5757ff}%
+\psset{linecolor=rgb_2121a7}%
+\pspolygon[fillstyle=solid](1,0.5)(0.90107,0.520175)
+ (0.895461,0.517942)(0.890469,0.515566)(1,0.5)
+\psset{fillcolor=cmy_5e5eff}%
+\psset{linecolor=rgb_2020a0}%
+\pspolygon[fillstyle=solid](1,0.5)(1.11043,0.515333)
+ (1.10555,0.517419)(1.10005,0.519369)(1,0.5)
+\psset{fillcolor=cmy_5050ff}%
+\psset{linecolor=rgb_2222ae}%
+\pspolygon[fillstyle=solid](0.877275,0.505078)(0.755889,0.507874)
+ (0.752488,0.50145)(0.750565,0.495176)(0.875059,0.499586)
+ (0.875788,0.502332)(0.877275,0.505078)
+\psset{fillcolor=cmy_5656ff}%
+\psset{linecolor=rgb_2121a8}%
+\pspolygon[fillstyle=solid](1,0.5)(0.890469,0.515566)
+ (0.886127,0.513068)(0.882464,0.510471)(1,0.5)
+\psset{fillcolor=cmy_5d5dff}%
+\psset{linecolor=rgb_2020a1}%
+\pspolygon[fillstyle=solid](1,0.5)(1.1182,0.510778)
+ (1.11466,0.513118)(1.11043,0.515333)(1,0.5)
+\psset{fillcolor=cmy_2626ff}%
+\psset{linecolor=rgb_2b2bd8}%
+\pspolygon[fillstyle=solid](1.73326,0.116772)(1.81976,-0.0100767)
+ (1.87193,0.0727816)(1.92376,0.172159)(1.81542,0.25192)
+ (1.77544,0.178833)(1.73326,0.116772)
+\psset{fillcolor=cmy_4b4bff}%
+\psset{linecolor=rgb_2323b3}%
+\pspolygon[fillstyle=solid](1.25055,0.504845)(1.37753,0.517385)
+ (1.37441,0.527719)(1.36891,0.536746)(1.24569,0.516371)
+ (1.24889,0.510816)(1.25055,0.504845)
+\psset{fillcolor=cmy_5656ff}%
+\psset{linecolor=rgb_2121a8}%
+\pspolygon[fillstyle=solid](1,0.5)(0.882464,0.510471)
+ (0.879506,0.507799)(0.877275,0.505078)(1,0.5)
+\psset{fillcolor=cmy_5b5bff}%
+\psset{linecolor=rgb_2020a3}%
+\pspolygon[fillstyle=solid](1,0.5)(1.12312,0.505768)
+ (1.12103,0.508324)(1.1182,0.510778)(1,0.5)
+\psset{fillcolor=cmy_5454ff}%
+\psset{linecolor=rgb_2222aa}%
+\pspolygon[fillstyle=solid](1.12505,0.500414)(1.25055,0.504845)
+ (1.24889,0.510816)(1.24569,0.516371)(1.12312,0.505768)
+ (1.12447,0.503125)(1.12505,0.500414)
+\psset{fillcolor=cmy_4f4fff}%
+\psset{linecolor=rgb_2323af}%
+\pspolygon[fillstyle=solid](0.750565,0.495176)(0.62752,0.482848)
+ (0.6263,0.472334)(0.627253,0.462871)(0.751245,0.483425)
+ (0.750144,0.489142)(0.750565,0.495176)
+\psset{fillcolor=cmy_4141ff}%
+\psset{linecolor=rgb_2525bd}%
+\pspolygon[fillstyle=solid](1.37753,0.517385)(1.50776,0.542368)
+ (1.50301,0.558773)(1.49483,0.572133)(1.36891,0.536746)
+ (1.37441,0.527719)(1.37753,0.517385)
+\psset{fillcolor=cmy_5757ff}%
+\psset{linecolor=rgb_2121a7}%
+\pspolygon[fillstyle=solid](1,0.5)(0.877275,0.505078)
+ (0.875788,0.502332)(0.875059,0.499586)(1,0.5)
+\psset{fillcolor=cmy_5858ff}%
+\psset{linecolor=rgb_2121a6}%
+\pspolygon[fillstyle=solid](1,0.5)(1.12505,0.500414)
+ (1.12447,0.503125)(1.12312,0.505768)(1,0.5)
+\psset{fillcolor=cmy_7e7eff}%
+\psset{linecolor=rgb_191980}%
+\pspolygon[fillstyle=solid](0.398466,0.350056)(0.28937,0.271374)
+ (0.296309,0.269877)(0.306183,0.276904)(0.418616,0.346439)
+ (0.406961,0.34569)(0.398466,0.350056)
+\psset{fillcolor=cmy_5454ff}%
+\psset{linecolor=rgb_2222aa}%
+\pspolygon[fillstyle=solid](0.875059,0.499586)(0.750565,0.495176)
+ (0.750144,0.489142)(0.751245,0.483425)(0.875906,0.494186)
+ (0.875097,0.496864)(0.875059,0.499586)
+\psset{fillcolor=cmy_5858ff}%
+\psset{linecolor=rgb_2121a6}%
+\pspolygon[fillstyle=solid](1,0.5)(0.875059,0.499586)
+ (0.875097,0.496864)(0.875906,0.494186)(1,0.5)
+\psset{fillcolor=cmy_6161ff}%
+\psset{linecolor=rgb_1f1f9d}%
+\pspolygon[fillstyle=solid](1.76797,0.713246)(1.92548,0.836328)
+ (1.8979,0.852992)(1.86122,0.850819)(1.71949,0.731475)
+ (1.74686,0.728005)(1.76797,0.713246)
+\psset{fillcolor=cmy_5656ff}%
+\psset{linecolor=rgb_2121a8}%
+\pspolygon[fillstyle=solid](1,0.5)(1.1239,0.494874)
+ (1.12486,0.497656)(1.12505,0.500414)(1,0.5)
+\psset{fillcolor=cmy_3b3bff}%
+\psset{linecolor=rgb_2727c3}%
+\pspolygon[fillstyle=solid](1.50776,0.542368)(1.64384,0.584677)
+ (1.63759,0.609591)(1.62644,0.6285)(1.49483,0.572133)
+ (1.50301,0.558773)(1.50776,0.542368)
+\psset{fillcolor=cmy_6161ff}%
+\psset{linecolor=rgb_1f1f9d}%
+\pspolygon[fillstyle=solid](0.627253,0.462871)(0.50598,0.427985)
+ (0.509149,0.416487)(0.515019,0.407859)(0.635784,0.447596)
+ (0.630406,0.4546)(0.627253,0.462871)
+\psset{fillcolor=cmy_5a5aff}%
+\psset{linecolor=rgb_2020a4}%
+\pspolygon[fillstyle=solid](1,0.5)(0.875906,0.494186)
+ (0.877488,0.491574)(0.879836,0.489043)(1,0.5)
+\psset{fillcolor=cmy_4e4eff}%
+\psset{linecolor=rgb_2323b0}%
+\pspolygon[fillstyle=solid](1.1239,0.494874)(1.24918,0.491962)
+ (1.25065,0.498531)(1.25055,0.504845)(1.12505,0.500414)
+ (1.12486,0.497656)(1.1239,0.494874)
+\psset{fillcolor=cmy_5555ff}%
+\psset{linecolor=rgb_2121a9}%
+\pspolygon[fillstyle=solid](1,0.5)(1.11965,0.48934)
+ (1.12216,0.492093)(1.1239,0.494874)(1,0.5)
+\psset{fillcolor=cmy_5c5cff}%
+\psset{linecolor=rgb_2020a2}%
+\pspolygon[fillstyle=solid](1,0.5)(0.879836,0.489043)
+ (0.882942,0.486608)(0.886789,0.484281)(1,0.5)
+\psset{fillcolor=cmy_5555ff}%
+\psset{linecolor=rgb_2121a9}%
+\pspolygon[fillstyle=solid](1,0.5)(1.11239,0.484027)
+ (1.11639,0.486643)(1.11965,0.48934)(1,0.5)
+\psset{fillcolor=cmy_3e3eff}%
+\psset{linecolor=rgb_2626c0}%
+\pspolygon[fillstyle=solid](1.24918,0.491962)(1.37644,0.493576)
+ (1.37822,0.505923)(1.37753,0.517385)(1.25055,0.504845)
+ (1.25065,0.498531)(1.24918,0.491962)
+\psset{fillcolor=cmy_5e5eff}%
+\psset{linecolor=rgb_2020a0}%
+\pspolygon[fillstyle=solid](1,0.5)(0.886789,0.484281)
+ (0.89136,0.482071)(0.896629,0.479987)(1,0.5)
+\psset{fillcolor=cmy_5959ff}%
+\psset{linecolor=rgb_2121a5}%
+\pspolygon[fillstyle=solid](0.875906,0.494186)(0.751245,0.483425)
+ (0.753877,0.478082)(0.758047,0.473156)(0.879836,0.489043)
+ (0.877488,0.491574)(0.875906,0.494186)
+\psset{fillcolor=cmy_5656ff}%
+\psset{linecolor=rgb_2121a8}%
+\pspolygon[fillstyle=solid](1,0.5)(1.10226,0.479146)
+ (1.10767,0.48152)(1.11239,0.484027)(1,0.5)
+\psset{fillcolor=cmy_5a5aff}%
+\psset{linecolor=rgb_2020a4}%
+\pspolygon[fillstyle=solid](0.751245,0.483425)(0.627253,0.462871)
+ (0.630406,0.4546)(0.635784,0.447596)(0.758047,0.473156)
+ (0.753877,0.478082)(0.751245,0.483425)
+\psset{fillcolor=cmy_5e5eff}%
+\psset{linecolor=rgb_2020a0}%
+\pspolygon[fillstyle=solid](1,0.5)(0.896629,0.479987)
+ (0.902567,0.478033)(0.909139,0.476214)(1,0.5)
+\psset{fillcolor=cmy_5757ff}%
+\psset{linecolor=rgb_2121a7}%
+\pspolygon[fillstyle=solid](1,0.5)(1.08949,0.474885)
+ (1.09619,0.476928)(1.10226,0.479146)(1,0.5)
+\psset{fillcolor=cmy_4a4aff}%
+\psset{linecolor=rgb_2424b4}%
+\pspolygon[fillstyle=solid](1.11965,0.48934)(1.24148,0.478487)
+ (1.24612,0.485243)(1.24918,0.491962)(1.1239,0.494874)
+ (1.12216,0.492093)(1.11965,0.48934)
+\psset{fillcolor=cmy_2a2aff}%
+\psset{linecolor=rgb_2a2ad4}%
+\pspolygon[fillstyle=solid](1.37644,0.493576)(1.50673,0.502132)
+ (1.50899,0.523306)(1.50776,0.542368)(1.37753,0.517385)
+ (1.37822,0.505923)(1.37644,0.493576)
+\psset{fillcolor=cmy_5959ff}%
+\psset{linecolor=rgb_2121a5}%
+\pspolygon[fillstyle=solid](1,0.5)(1.07439,0.47139)
+ (1.08221,0.473035)(1.08949,0.474885)(1,0.5)
+\psset{fillcolor=cmy_5e5eff}%
+\psset{linecolor=rgb_2020a0}%
+\pspolygon[fillstyle=solid](1,0.5)(0.909139,0.476214)
+ (0.916306,0.474532)(0.924023,0.47299)(1,0.5)
+\psset{fillcolor=cmy_7878ff}%
+\psset{linecolor=rgb_1a1a86}%
+\pspolygon[fillstyle=solid](0.20082,0.188793)(0.105573,0.08167)
+ (0.105946,0.125602)(0.108805,0.186635)(0.221782,0.25564)
+ (0.209394,0.216686)(0.20082,0.188793)
+\psset{fillcolor=cmy_3939ff}%
+\psset{linecolor=rgb_2727c5}%
+\pspolygon[fillstyle=solid](1.64384,0.584677)(1.78949,0.650223)
+ (1.78228,0.687084)(1.76797,0.713246)(1.62644,0.6285)
+ (1.63759,0.609591)(1.64384,0.584677)
+\psset{fillcolor=cmy_5a5aff}%
+\psset{linecolor=rgb_2020a4}%
+\pspolygon[fillstyle=solid](1,0.5)(1.05734,0.468753)
+ (1.06608,0.469961)(1.07439,0.47139)(1,0.5)
+\psset{fillcolor=cmy_5d5dff}%
+\psset{linecolor=rgb_2020a1}%
+\pspolygon[fillstyle=solid](1,0.5)(0.924023,0.47299)
+ (0.932243,0.471589)(0.940912,0.470334)(1,0.5)
+\psset{fillcolor=cmy_5b5bff}%
+\psset{linecolor=rgb_2020a3}%
+\pspolygon[fillstyle=solid](1,0.5)(1.03876,0.46701)
+ (1.04821,0.467769)(1.05734,0.468753)(1,0.5)
+\psset{fillcolor=cmy_5c5cff}%
+\psset{linecolor=rgb_2020a2}%
+\pspolygon[fillstyle=solid](1,0.5)(0.940912,0.470334)
+ (0.949975,0.469227)(0.959372,0.468273)(1,0.5)
+\psset{fillcolor=cmy_6363ff}%
+\psset{linecolor=rgb_1f1f9b}%
+\pspolygon[fillstyle=solid](1.92548,0.836328)(2.1079,1.01222)
+ (2.07205,1.03012)(2.0226,1.01759)(1.86122,0.850819)
+ (1.8979,0.852992)(1.92548,0.836328)
+\psset{fillcolor=cmy_5b5bff}%
+\psset{linecolor=rgb_2020a3}%
+\pspolygon[fillstyle=solid](1,0.5)(1.01915,0.466147)
+ (1.02906,0.466471)(1.03876,0.46701)(1,0.5)
+\psset{fillcolor=cmy_5e5eff}%
+\psset{linecolor=rgb_2020a0}%
+\pspolygon[fillstyle=solid](0.879836,0.489043)(0.758047,0.473156)
+ (0.763749,0.468665)(0.770971,0.464613)(0.886789,0.484281)
+ (0.882942,0.486608)(0.879836,0.489043)
+\psset{fillcolor=cmy_5b5bff}%
+\psset{linecolor=rgb_2020a3}%
+\pspolygon[fillstyle=solid](1,0.5)(0.959372,0.468273)
+ (0.969041,0.467478)(0.978917,0.466848)(1,0.5)
+\psset{fillcolor=cmy_7878ff}%
+\psset{linecolor=rgb_1a1a86}%
+\pspolygon[fillstyle=solid](0.515019,0.407859)(0.398466,0.350056)
+ (0.406961,0.34569)(0.418616,0.346439)(0.535179,0.399064)
+ (0.523664,0.402099)(0.515019,0.407859)
+\psset{fillcolor=cmy_5b5bff}%
+\psset{linecolor=rgb_2020a3}%
+\pspolygon[fillstyle=solid](1,0.5)(0.999023,0.466116)
+ (1.00912,0.466032)(1.01915,0.466147)(1,0.5)
+\pspolygon[fillstyle=solid](1,0.5)(0.978917,0.466848)
+ (0.988933,0.466391)(0.999023,0.466116)(1,0.5)
+\psset{fillcolor=cmy_3535ff}%
+\psset{linecolor=rgb_2828c9}%
+\pspolygon[fillstyle=solid](1.24148,0.478487)(1.36555,0.467434)
+ (1.37221,0.480637)(1.37644,0.493576)(1.24918,0.491962)
+ (1.24612,0.485243)(1.24148,0.478487)
+\psset{fillcolor=cmy_4848ff}%
+\psset{linecolor=rgb_2424b6}%
+\pspolygon[fillstyle=solid](1.11239,0.484027)(1.22757,0.465351)
+ (1.23529,0.471816)(1.24148,0.478487)(1.11965,0.48934)
+ (1.11639,0.486643)(1.11239,0.484027)
+\psset{fillcolor=cmy_1b1bff}%
+\psset{linecolor=rgb_2d2de3}%
+\pspolygon[fillstyle=solid](1.50673,0.502132)(1.64155,0.520244)
+ (1.64513,0.55453)(1.64384,0.584677)(1.50776,0.542368)
+ (1.50899,0.523306)(1.50673,0.502132)
+\psset{fillcolor=cmy_2d2dff}%
+\psset{linecolor=rgb_2929d1}%
+\pspolygon[fillstyle=solid](1.56058,0.160334)(1.6438,0.0321256)
+ (1.68934,0.0674669)(1.73326,0.116772)(1.6364,0.222327)
+ (1.59977,0.186629)(1.56058,0.160334)
+\psset{fillcolor=cmy_6464ff}%
+\psset{linecolor=rgb_1e1e9a}%
+\pspolygon[fillstyle=solid](0.758047,0.473156)(0.635784,0.447596)
+ (0.64341,0.441874)(0.653304,0.437383)(0.770971,0.464613)
+ (0.763749,0.468665)(0.758047,0.473156)
+\psset{fillcolor=cmy_6f6fff}%
+\psset{linecolor=rgb_1c1c8f}%
+\pspolygon[fillstyle=solid](0.635784,0.447596)(0.515019,0.407859)
+ (0.523664,0.402099)(0.535179,0.399064)(0.653304,0.437383)
+ (0.64341,0.441874)(0.635784,0.447596)
+\psset{fillcolor=cmy_1b1bff}%
+\psset{linecolor=rgb_2d2de3}%
+\pspolygon[fillstyle=solid](1.36555,0.467434)(1.49191,0.456177)
+ (1.501,0.479507)(1.50673,0.502132)(1.37644,0.493576)
+ (1.37221,0.480637)(1.36555,0.467434)
+\psset{fillcolor=cmy_1919ff}%
+\psset{linecolor=rgb_2d2de5}%
+\pspolygon[fillstyle=solid](1.6364,0.222327)(1.73326,0.116772)
+ (1.77544,0.178833)(1.81542,0.25192)(1.7012,0.317458)
+ (1.67032,0.266403)(1.6364,0.222327)
+\psset{fillcolor=cmy_6161ff}%
+\psset{linecolor=rgb_1f1f9d}%
+\pspolygon[fillstyle=solid](0.886789,0.484281)(0.770971,0.464613)
+ (0.779692,0.460981)(0.78988,0.457739)(0.896629,0.479987)
+ (0.89136,0.482071)(0.886789,0.484281)
+\psset{fillcolor=cmy_4949ff}%
+\psset{linecolor=rgb_2424b5}%
+\pspolygon[fillstyle=solid](1.10226,0.479146)(1.20772,0.4535)
+ (1.21837,0.45921)(1.22757,0.465351)(1.11239,0.484027)
+ (1.10767,0.48152)(1.10226,0.479146)
+\psset{fillcolor=cmy_1111ff}%
+\psset{linecolor=rgb_2f2fed}%
+\pspolygon[fillstyle=solid](1.81542,0.25192)(1.92376,0.172159)
+ (1.97421,0.285475)(2.02166,0.408983)(1.88544,0.421119)
+ (1.85244,0.33369)(1.81542,0.25192)
+\psset{fillcolor=cmy_3030ff}%
+\psset{linecolor=rgb_2929ce}%
+\pspolygon[fillstyle=solid](1.22757,0.465351)(1.34511,0.441628)
+ (1.3565,0.454315)(1.36555,0.467434)(1.24148,0.478487)
+ (1.23529,0.471816)(1.22757,0.465351)
+\psset{fillcolor=cmy_1313ff}%
+\psset{linecolor=rgb_2f2feb}%
+\pspolygon[fillstyle=solid](1.64155,0.520244)(1.78302,0.550882)
+ (1.78963,0.60413)(1.78949,0.650223)(1.64384,0.584677)
+ (1.64513,0.55453)(1.64155,0.520244)
+\psset{fillcolor=cmy_3939ff}%
+\psset{linecolor=rgb_2727c5}%
+\pspolygon[fillstyle=solid](1.78949,0.650223)(1.94995,0.746725)
+ (1.94296,0.80048)(1.92548,0.836328)(1.76797,0.713246)
+ (1.78228,0.687084)(1.78949,0.650223)
+\psset{fillcolor=cmy_0808ff}%
+\psset{linecolor=rgb_3131f6}%
+\pspolygon[fillstyle=solid](1.49191,0.456177)(1.62063,0.44471)
+ (1.63329,0.483148)(1.64155,0.520244)(1.50673,0.502132)
+ (1.501,0.479507)(1.49191,0.456177)
+\psset{fillcolor=cmy_4c4cff}%
+\psset{linecolor=rgb_2323b2}%
+\pspolygon[fillstyle=solid](1.08949,0.474885)(1.18236,0.443736)
+ (1.1957,0.448317)(1.20772,0.4535)(1.10226,0.479146)
+ (1.09619,0.476928)(1.08949,0.474885)
+\psset{fillcolor=cmy_6464ff}%
+\psset{linecolor=rgb_1e1e9a}%
+\pspolygon[fillstyle=solid](0.896629,0.479987)(0.78988,0.457739)
+ (0.801491,0.454842)(0.81447,0.452238)(0.909139,0.476214)
+ (0.902567,0.478033)(0.896629,0.479987)
+\psset{fillcolor=cmy_7c7cff}%
+\psset{linecolor=rgb_1a1a82}%
+\pspolygon[fillstyle=solid](0.306183,0.276904)(0.20082,0.188793)
+ (0.209394,0.216686)(0.221782,0.25564)(0.336923,0.313416)
+ (0.319506,0.291774)(0.306183,0.276904)
+\psset{fillcolor=cmy_1515ff}%
+\psset{linecolor=rgb_2e2ee9}%
+\pspolygon[fillstyle=solid](1.34511,0.441628)(1.46416,0.410519)
+ (1.47958,0.432922)(1.49191,0.456177)(1.36555,0.467434)
+ (1.3565,0.454315)(1.34511,0.441628)
+\psset{fillcolor=cmy_0808ff}%
+\psset{linecolor=rgb_3131f6}%
+\pspolygon[fillstyle=solid](1.7012,0.317458)(1.81542,0.25192)
+ (1.85244,0.33369)(1.88544,0.421119)(1.75179,0.433026)
+ (1.72856,0.373711)(1.7012,0.317458)
+\psset{fillcolor=cmy_5050ff}%
+\psset{linecolor=rgb_2222ae}%
+\pspolygon[fillstyle=solid](1.07439,0.47139)(1.15207,0.436591)
+ (1.16779,0.439816)(1.18236,0.443736)(1.08949,0.474885)
+ (1.08221,0.473035)(1.07439,0.47139)
+\psset{fillcolor=cmy_6b6bff}%
+\psset{linecolor=rgb_1d1d93}%
+\pspolygon[fillstyle=solid](0.770971,0.464613)(0.653304,0.437383)
+ (0.665477,0.434016)(0.679931,0.431611)(0.78988,0.457739)
+ (0.779692,0.460981)(0.770971,0.464613)
+\psset{fillcolor=cmy_3131ff}%
+\psset{linecolor=rgb_2929cd}%
+\pspolygon[fillstyle=solid](1.20772,0.4535)(1.31566,0.418861)
+ (1.33147,0.429708)(1.34511,0.441628)(1.22757,0.465351)
+ (1.21837,0.45921)(1.20772,0.4535)
+\psset{fillcolor=cmy_4545ff}%
+\psset{linecolor=rgb_2525b9}%
+\pspolygon[fillstyle=solid](1.4744,0.138283)(1.54709,0.00607935)
+ (1.59652,0.0115261)(1.6438,0.0321256)(1.56058,0.160334)
+ (1.51884,0.144112)(1.4744,0.138283)
+\psset{fillcolor=cmy_0101ff}%
+\psset{linecolor=rgb_3232fd}%
+\pspolygon[fillstyle=solid](1.62063,0.44471)(1.75179,0.433026)
+ (1.77018,0.49296)(1.78302,0.550882)(1.64155,0.520244)
+ (1.63329,0.483148)(1.62063,0.44471)
+\psset{fillcolor=cmy_6464ff}%
+\psset{linecolor=rgb_1e1e9a}%
+\pspolygon[fillstyle=solid](0.909139,0.476214)(0.81447,0.452238)
+ (0.828748,0.449869)(0.844242,0.44768)(0.924023,0.47299)
+ (0.916306,0.474532)(0.909139,0.476214)
+\psset{fillcolor=cmy_0505ff}%
+\psset{linecolor=rgb_3131f9}%
+\pspolygon[fillstyle=solid](1.46416,0.410519)(1.58342,0.369794)
+ (1.6039,0.406438)(1.62063,0.44471)(1.49191,0.456177)
+ (1.47958,0.432922)(1.46416,0.410519)
+\psset{fillcolor=cmy_0202ff}%
+\psset{linecolor=rgb_3232fc}%
+\pspolygon[fillstyle=solid](1.58342,0.369794)(1.7012,0.317458)
+ (1.72856,0.373711)(1.75179,0.433026)(1.62063,0.44471)
+ (1.6039,0.406438)(1.58342,0.369794)
+\psset{fillcolor=cmy_0e0eff}%
+\psset{linecolor=rgb_3030f0}%
+\pspolygon[fillstyle=solid](1.53245,0.306569)(1.6364,0.222327)
+ (1.67032,0.266403)(1.7012,0.317458)(1.58342,0.369794)
+ (1.55951,0.336116)(1.53245,0.306569)
+\psset{fillcolor=cmy_6969ff}%
+\psset{linecolor=rgb_1d1d95}%
+\pspolygon[fillstyle=solid](1.43923,0.040527)(1.49747,-0.0982892)
+ (1.55585,-0.134733)(1.61087,-0.15044)(1.54709,0.00607935)
+ (1.49491,0.0158499)(1.43923,0.040527)
+\psset{fillcolor=cmy_5555ff}%
+\psset{linecolor=rgb_2121a9}%
+\pspolygon[fillstyle=solid](1.05734,0.468753)(1.11756,0.432255)
+ (1.13529,0.434074)(1.15207,0.436591)(1.07439,0.47139)
+ (1.06608,0.469961)(1.05734,0.468753)
+\psset{fillcolor=cmy_6464ff}%
+\psset{linecolor=rgb_1e1e9a}%
+\pspolygon[fillstyle=solid](0.924023,0.47299)(0.844242,0.44768)
+ (0.860857,0.44562)(0.878483,0.443646)(0.940912,0.470334)
+ (0.932243,0.471589)(0.924023,0.47299)
+\psset{fillcolor=cmy_1818ff}%
+\psset{linecolor=rgb_2e2ee6}%
+\pspolygon[fillstyle=solid](1.31566,0.418861)(1.42461,0.371119)
+ (1.44579,0.3897)(1.46416,0.410519)(1.34511,0.441628)
+ (1.33147,0.429708)(1.31566,0.418861)
+\psset{fillcolor=cmy_5959ff}%
+\psset{linecolor=rgb_2121a5}%
+\pspolygon[fillstyle=solid](1.03876,0.46701)(1.07968,0.43057)
+ (1.09898,0.431103)(1.11756,0.432255)(1.05734,0.468753)
+ (1.04821,0.467769)(1.03876,0.46701)
+\psset{fillcolor=cmy_1111ff}%
+\psset{linecolor=rgb_2f2fed}%
+\pspolygon[fillstyle=solid](1.78302,0.550882)(1.93401,0.597589)
+ (1.94669,0.677812)(1.94995,0.746725)(1.78949,0.650223)
+ (1.78963,0.60413)(1.78302,0.550882)
+\psset{fillcolor=cmy_7777ff}%
+\psset{linecolor=rgb_1b1b87}%
+\pspolygon[fillstyle=solid](0.653304,0.437383)(0.535179,0.399064)
+ (0.549666,0.398476)(0.567233,0.399933)(0.679931,0.431611)
+ (0.665477,0.434016)(0.653304,0.437383)
+\psset{fillcolor=cmy_0101ff}%
+\psset{linecolor=rgb_3232fd}%
+\pspolygon[fillstyle=solid](1.75179,0.433026)(1.88544,0.421119)
+ (1.91311,0.510505)(1.93401,0.597589)(1.78302,0.550882)
+ (1.77018,0.49296)(1.75179,0.433026)
+\psset{fillcolor=cmy_7f7fff}%
+\psset{linecolor=rgb_19197f}%
+\pspolygon[fillstyle=solid](0.418616,0.346439)(0.306183,0.276904)
+ (0.319506,0.291774)(0.336923,0.313416)(0.452538,0.361054)
+ (0.433703,0.351806)(0.418616,0.346439)
+\psset{fillcolor=cmy_3737ff}%
+\psset{linecolor=rgb_2727c7}%
+\pspolygon[fillstyle=solid](1.18236,0.443736)(1.27784,0.401367)
+ (1.29775,0.409345)(1.31566,0.418861)(1.20772,0.4535)
+ (1.1957,0.448317)(1.18236,0.443736)
+\psset{fillcolor=cmy_0c0cff}%
+\psset{linecolor=rgb_3030f2}%
+\pspolygon[fillstyle=solid](1.42461,0.371119)(1.53245,0.306569)
+ (1.55951,0.336116)(1.58342,0.369794)(1.46416,0.410519)
+ (1.44579,0.3897)(1.42461,0.371119)
+\psset{fillcolor=cmy_2020ff}%
+\psset{linecolor=rgb_2c2cde}%
+\pspolygon[fillstyle=solid](1.46963,0.263451)(1.56058,0.160334)
+ (1.59977,0.186629)(1.6364,0.222327)(1.53245,0.306569)
+ (1.50244,0.282108)(1.46963,0.263451)
+\psset{fillcolor=cmy_6363ff}%
+\psset{linecolor=rgb_1f1f9b}%
+\pspolygon[fillstyle=solid](0.940912,0.470334)(0.878483,0.443646)
+ (0.896998,0.44173)(0.916271,0.43986)(0.959372,0.468273)
+ (0.949975,0.469227)(0.940912,0.470334)
+\psset{fillcolor=cmy_5d5dff}%
+\psset{linecolor=rgb_2020a1}%
+\pspolygon[fillstyle=solid](1.01915,0.466147)(1.03945,0.431091)
+ (1.05979,0.43059)(1.07968,0.43057)(1.03876,0.46701)
+ (1.02906,0.466471)(1.01915,0.466147)
+\psset{fillcolor=cmy_7e7eff}%
+\psset{linecolor=rgb_191980}%
+\pspolygon[fillstyle=solid](0.535179,0.399064)(0.418616,0.346439)
+ (0.433703,0.351806)(0.452538,0.361054)(0.567233,0.399933)
+ (0.549666,0.398476)(0.535179,0.399064)
+\psset{fillcolor=cmy_3939ff}%
+\psset{linecolor=rgb_2727c5}%
+\pspolygon[fillstyle=solid](1.94995,0.746725)(2.13284,0.884999)
+ (2.12834,0.963057)(2.1079,1.01222)(1.92548,0.836328)
+ (1.94296,0.80048)(1.94995,0.746725)
+\psset{fillcolor=cmy_6262ff}%
+\psset{linecolor=rgb_1f1f9c}%
+\pspolygon[fillstyle=solid](0.959372,0.468273)(0.916271,0.43986)
+ (0.936157,0.438041)(0.956509,0.436296)(0.978917,0.466848)
+ (0.969041,0.467478)(0.959372,0.468273)
+\psset{fillcolor=cmy_5f5fff}%
+\psset{linecolor=rgb_1f1f9f}%
+\pspolygon[fillstyle=solid](0.999023,0.466116)(0.997986,0.433208)
+ (1.0188,0.431991)(1.03945,0.431091)(1.01915,0.466147)
+ (1.00912,0.466032)(0.999023,0.466116)
+\psset{fillcolor=cmy_6f6fff}%
+\psset{linecolor=rgb_1c1c8f}%
+\pspolygon[fillstyle=solid](0.78988,0.457739)(0.679931,0.431611)
+ (0.696648,0.429965)(0.71559,0.428845)(0.81447,0.452238)
+ (0.801491,0.454842)(0.78988,0.457739)
+\psset{fillcolor=cmy_6161ff}%
+\psset{linecolor=rgb_1f1f9d}%
+\pspolygon[fillstyle=solid](0.978917,0.466848)(0.956509,0.436296)
+ (0.977171,0.434667)(0.997986,0.433208)(0.999023,0.466116)
+ (0.988933,0.466391)(0.978917,0.466848)
+\psset{fillcolor=cmy_0303ff}%
+\psset{linecolor=rgb_3232fb}%
+\pspolygon[fillstyle=solid](1.88544,0.421119)(2.02166,0.408983)
+ (2.06392,0.537585)(2.09838,0.664828)(1.93401,0.597589)
+ (1.91311,0.510505)(1.88544,0.421119)
+\psset{fillcolor=cmy_4141ff}%
+\psset{linecolor=rgb_2525bd}%
+\pspolygon[fillstyle=solid](1.15207,0.436591)(1.23246,0.39052)
+ (1.25605,0.395068)(1.27784,0.401367)(1.18236,0.443736)
+ (1.16779,0.439816)(1.15207,0.436591)
+\psset{fillcolor=cmy_2323ff}%
+\psset{linecolor=rgb_2b2bdb}%
+\pspolygon[fillstyle=solid](1.27784,0.401367)(1.37438,0.342743)
+ (1.40077,0.355325)(1.42461,0.371119)(1.31566,0.418861)
+ (1.29775,0.409345)(1.27784,0.401367)
+\psset{fillcolor=cmy_1b1bff}%
+\psset{linecolor=rgb_2d2de3}%
+\pspolygon[fillstyle=solid](1.37438,0.342743)(1.46963,0.263451)
+ (1.50244,0.282108)(1.53245,0.306569)(1.42461,0.371119)
+ (1.40077,0.355325)(1.37438,0.342743)
+\psset{fillcolor=cmy_7171ff}%
+\psset{linecolor=rgb_1c1c8d}%
+\pspolygon[fillstyle=solid](0.81447,0.452238)(0.71559,0.428845)
+ (0.736691,0.427999)(0.759855,0.427181)(0.844242,0.44768)
+ (0.828748,0.449869)(0.81447,0.452238)
+\psset{fillcolor=cmy_3939ff}%
+\psset{linecolor=rgb_2727c5}%
+\pspolygon[fillstyle=solid](1.39584,0.245193)(1.4744,0.138283)
+ (1.51884,0.144112)(1.56058,0.160334)(1.46963,0.263451)
+ (1.43409,0.251074)(1.39584,0.245193)
+\psset{fillcolor=cmy_0f0fff}%
+\psset{linecolor=rgb_2f2fef}%
+\pspolygon[fillstyle=solid](1.93401,0.597589)(2.09838,0.664828)
+ (2.12222,0.783232)(2.13284,0.884999)(1.94995,0.746725)
+ (1.94669,0.677812)(1.93401,0.597589)
+\psset{fillcolor=cmy_4e4eff}%
+\psset{linecolor=rgb_2323b0}%
+\pspolygon[fillstyle=solid](1.11756,0.432255)(1.18041,0.386614)
+ (1.20721,0.387725)(1.23246,0.39052)(1.15207,0.436591)
+ (1.13529,0.434074)(1.11756,0.432255)
+\psset{fillcolor=cmy_7b7bff}%
+\psset{linecolor=rgb_1a1a83}%
+\pspolygon[fillstyle=solid](0.679931,0.431611)(0.567233,0.399933)
+ (0.587968,0.402922)(0.611934,0.40685)(0.71559,0.428845)
+ (0.696648,0.429965)(0.679931,0.431611)
+\psset{fillcolor=cmy_3434ff}%
+\psset{linecolor=rgb_2828ca}%
+\pspolygon[fillstyle=solid](1.23246,0.39052)(1.31435,0.328195)
+ (1.34554,0.333655)(1.37438,0.342743)(1.27784,0.401367)
+ (1.25605,0.395068)(1.23246,0.39052)
+\psset{fillcolor=cmy_3131ff}%
+\psset{linecolor=rgb_2929cd}%
+\pspolygon[fillstyle=solid](1.31435,0.328195)(1.39584,0.245193)
+ (1.43409,0.251074)(1.46963,0.263451)(1.37438,0.342743)
+ (1.34554,0.333655)(1.31435,0.328195)
+\psset{fillcolor=cmy_5a5aff}%
+\psset{linecolor=rgb_2020a4}%
+\pspolygon[fillstyle=solid](1.07968,0.43057)(1.1228,0.388846)
+ (1.15222,0.387052)(1.18041,0.386614)(1.11756,0.432255)
+ (1.09898,0.431103)(1.07968,0.43057)
+\psset{fillcolor=cmy_7272ff}%
+\psset{linecolor=rgb_1c1c8c}%
+\pspolygon[fillstyle=solid](0.844242,0.44768)(0.759855,0.427181)
+ (0.784951,0.42616)(0.811811,0.424741)(0.878483,0.443646)
+ (0.860857,0.44562)(0.844242,0.44768)
+\psset{fillcolor=cmy_6060ff}%
+\psset{linecolor=rgb_1f1f9e}%
+\pspolygon[fillstyle=solid](1.3764,0.157338)(1.43923,0.040527)
+ (1.49491,0.0158499)(1.54709,0.00607935)(1.4744,0.138283)
+ (1.42703,0.142821)(1.3764,0.157338)
+\psset{fillcolor=cmy_6363ff}%
+\psset{linecolor=rgb_1f1f9b}%
+\pspolygon[fillstyle=solid](1.03945,0.431091)(1.06103,0.395505)
+ (1.09234,0.391756)(1.1228,0.388846)(1.07968,0.43057)
+ (1.05979,0.43059)(1.03945,0.431091)
+\psset{fillcolor=cmy_7272ff}%
+\psset{linecolor=rgb_1c1c8c}%
+\pspolygon[fillstyle=solid](0.878483,0.443646)(0.811811,0.424741)
+ (0.840235,0.422779)(0.869988,0.42019)(0.916271,0.43986)
+ (0.896998,0.44173)(0.878483,0.443646)
+\psset{fillcolor=cmy_4a4aff}%
+\psset{linecolor=rgb_2424b4}%
+\pspolygon[fillstyle=solid](1.18041,0.386614)(1.24529,0.327916)
+ (1.2809,0.32634)(1.31435,0.328195)(1.23246,0.39052)
+ (1.20721,0.387725)(1.18041,0.386614)
+\psset{fillcolor=cmy_7f7fff}%
+\psset{linecolor=rgb_19197f}%
+\pspolygon[fillstyle=solid](0.567233,0.399933)(0.452538,0.361054)
+ (0.47545,0.373217)(0.502743,0.387128)(0.611934,0.40685)
+ (0.587968,0.402922)(0.567233,0.399933)
+\psset{fillcolor=cmy_6a6aff}%
+\psset{linecolor=rgb_1d1d94}%
+\pspolygon[fillstyle=solid](0.997986,0.433208)(0.996875,0.404353)
+ (1.02913,0.399802)(1.06103,0.395505)(1.03945,0.431091)
+ (1.0188,0.431991)(0.997986,0.433208)
+\psset{fillcolor=cmy_7171ff}%
+\psset{linecolor=rgb_1c1c8d}%
+\pspolygon[fillstyle=solid](0.916271,0.43986)(0.869988,0.42019)
+ (0.900811,0.41696)(0.932427,0.413148)(0.956509,0.436296)
+ (0.936157,0.438041)(0.916271,0.43986)
+\psset{fillcolor=cmy_6e6eff}%
+\psset{linecolor=rgb_1c1c90}%
+\pspolygon[fillstyle=solid](0.956509,0.436296)(0.932427,0.413148)
+ (0.964546,0.408882)(0.996875,0.404353)(0.997986,0.433208)
+ (0.977171,0.434667)(0.956509,0.436296)
+\psset{fillcolor=cmy_7d7dff}%
+\psset{linecolor=rgb_191981}%
+\pspolygon[fillstyle=solid](0.71559,0.428845)(0.611934,0.40685)
+ (0.639145,0.411067)(0.669551,0.414914)(0.759855,0.427181)
+ (0.736691,0.427999)(0.71559,0.428845)
+\psset{fillcolor=cmy_5656ff}%
+\psset{linecolor=rgb_2121a8}%
+\pspolygon[fillstyle=solid](1.31112,0.252497)(1.3764,0.157338)
+ (1.42703,0.142821)(1.4744,0.138283)(1.39584,0.245193)
+ (1.35487,0.24577)(1.31112,0.252497)
+\psset{fillcolor=cmy_4e4eff}%
+\psset{linecolor=rgb_2323b0}%
+\pspolygon[fillstyle=solid](1.24529,0.327916)(1.31112,0.252497)
+ (1.35487,0.24577)(1.39584,0.245193)(1.31435,0.328195)
+ (1.2809,0.32634)(1.24529,0.327916)
+\psset{fillcolor=cmy_5f5fff}%
+\psset{linecolor=rgb_1f1f9f}%
+\pspolygon[fillstyle=solid](1.1228,0.388846)(1.16806,0.339925)
+ (1.20762,0.332598)(1.24529,0.327916)(1.18041,0.386614)
+ (1.15222,0.387052)(1.1228,0.388846)
+\psset{fillcolor=cmy_7c7cff}%
+\psset{linecolor=rgb_1a1a82}%
+\pspolygon[fillstyle=solid](0.452538,0.361054)(0.336923,0.313416)
+ (0.359168,0.34034)(0.38701,0.370633)(0.502743,0.387128)
+ (0.47545,0.373217)(0.452538,0.361054)
+\psset{fillcolor=cmy_7d7dff}%
+\psset{linecolor=rgb_191981}%
+\pspolygon[fillstyle=solid](0.759855,0.427181)(0.669551,0.414914)
+ (0.703026,0.417762)(0.739356,0.419062)(0.811811,0.424741)
+ (0.784951,0.42616)(0.759855,0.427181)
+\psset{fillcolor=cmy_6e6eff}%
+\psset{linecolor=rgb_1c1c90}%
+\pspolygon[fillstyle=solid](1.06103,0.395505)(1.08409,0.360109)
+ (1.1268,0.349318)(1.16806,0.339925)(1.1228,0.388846)
+ (1.09234,0.391756)(1.06103,0.395505)
+\psset{fillcolor=cmy_7474ff}%
+\psset{linecolor=rgb_1b1b8a}%
+\pspolygon[fillstyle=solid](0.336923,0.313416)(0.221782,0.25564)
+ (0.239289,0.303779)(0.263419,0.358433)(0.38701,0.370633)
+ (0.359168,0.34034)(0.336923,0.313416)
+\psset{fillcolor=cmy_6767ff}%
+\psset{linecolor=rgb_1e1e97}%
+\pspolygon[fillstyle=solid](1.16806,0.339925)(1.21527,0.281861)
+ (1.26458,0.264805)(1.31112,0.252497)(1.24529,0.327916)
+ (1.20762,0.332598)(1.16806,0.339925)
+\psset{fillcolor=cmy_7e7eff}%
+\psset{linecolor=rgb_191980}%
+\pspolygon[fillstyle=solid](0.611934,0.40685)(0.502743,0.387128)
+ (0.53466,0.401467)(0.571331,0.414834)(0.669551,0.414914)
+ (0.639145,0.411067)(0.611934,0.40685)
+\psset{fillcolor=cmy_6d6dff}%
+\psset{linecolor=rgb_1d1d91}%
+\pspolygon[fillstyle=solid](0.221782,0.25564)(0.108805,0.186635)
+ (0.116083,0.263023)(0.130252,0.351753)(0.263419,0.358433)
+ (0.239289,0.303779)(0.221782,0.25564)
+\psset{fillcolor=cmy_7d7dff}%
+\psset{linecolor=rgb_191981}%
+\pspolygon[fillstyle=solid](0.811811,0.424741)(0.739356,0.419062)
+ (0.778241,0.418391)(0.819298,0.415485)(0.869988,0.42019)
+ (0.840235,0.422779)(0.811811,0.424741)
+\psset{fillcolor=cmy_7676ff}%
+\psset{linecolor=rgb_1b1b88}%
+\pspolygon[fillstyle=solid](0.996875,0.404353)(0.99567,0.382977)
+ (1.04025,0.371574)(1.08409,0.360109)(1.06103,0.395505)
+ (1.02913,0.399802)(0.996875,0.404353)
+\psset{fillcolor=cmy_7a7aff}%
+\psset{linecolor=rgb_1a1a84}%
+\pspolygon[fillstyle=solid](1.31393,0.130943)(1.36413,0.0350099)
+ (1.43413,-0.0414045)(1.49747,-0.0982892)(1.43923,0.040527)
+ (1.3792,0.0793428)(1.31393,0.130943)
+\psset{fillcolor=cmy_7d7dff}%
+\psset{linecolor=rgb_191981}%
+\pspolygon[fillstyle=solid](0.869988,0.42019)(0.819298,0.415485)
+ (0.862077,0.410271)(0.906078,0.402876)(0.932427,0.413148)
+ (0.900811,0.41696)(0.869988,0.42019)
+\psset{fillcolor=cmy_7b7bff}%
+\psset{linecolor=rgb_1a1a83}%
+\pspolygon[fillstyle=solid](0.932427,0.413148)(0.906078,0.402876)
+ (0.950781,0.393616)(0.99567,0.382977)(0.996875,0.404353)
+ (0.964546,0.408882)(0.932427,0.413148)
+\psset{fillcolor=cmy_7070ff}%
+\psset{linecolor=rgb_1c1c8e}%
+\pspolygon[fillstyle=solid](1.21527,0.281861)(1.26407,0.212769)
+ (1.32218,0.181056)(1.3764,0.157338)(1.31112,0.252497)
+ (1.26458,0.264805)(1.21527,0.281861)
+\psset{fillcolor=cmy_7676ff}%
+\psset{linecolor=rgb_1b1b88}%
+\pspolygon[fillstyle=solid](1.26407,0.212769)(1.31393,0.130943)
+ (1.3792,0.0793428)(1.43923,0.040527)(1.3764,0.157338)
+ (1.32218,0.181056)(1.26407,0.212769)
+\psset{fillcolor=cmy_7777ff}%
+\psset{linecolor=rgb_1b1b87}%
+\pspolygon[fillstyle=solid](1.08409,0.360109)(1.10888,0.325677)
+ (1.1633,0.302583)(1.21527,0.281861)(1.16806,0.339925)
+ (1.1268,0.349318)(1.08409,0.360109)
+\psset{fillcolor=cmy_7d7dff}%
+\psset{linecolor=rgb_191981}%
+\pspolygon[fillstyle=solid](0.669551,0.414914)(0.571331,0.414834)
+ (0.612735,0.425841)(0.658661,0.43323)(0.739356,0.419062)
+ (0.703026,0.417762)(0.669551,0.414914)
+\psset{fillcolor=cmy_7676ff}%
+\psset{linecolor=rgb_1b1b88}%
+\pspolygon[fillstyle=solid](0.502743,0.387128)(0.38701,0.370633)
+ (0.42117,0.401992)(0.462221,0.431813)(0.571331,0.414834)
+ (0.53466,0.401467)(0.502743,0.387128)
+\psset{fillcolor=cmy_7e7eff}%
+\psset{linecolor=rgb_191980}%
+\pspolygon[fillstyle=solid](0.99567,0.382977)(0.994341,0.37309)
+ (1.05238,0.34969)(1.10888,0.325677)(1.08409,0.360109)
+ (1.04025,0.371574)(0.99567,0.382977)
+\psset{fillcolor=cmy_7d7dff}%
+\psset{linecolor=rgb_191981}%
+\pspolygon[fillstyle=solid](0.739356,0.419062)(0.658661,0.43323)
+ (0.708693,0.435991)(0.762219,0.433471)(0.819298,0.415485)
+ (0.778241,0.418391)(0.739356,0.419062)
+\pspolygon[fillstyle=solid](1.10888,0.325677)(1.13571,0.293061)
+ (1.20191,0.250812)(1.26407,0.212769)(1.21527,0.281861)
+ (1.1633,0.302583)(1.10888,0.325677)
+\psset{fillcolor=cmy_7f7fff}%
+\psset{linecolor=rgb_19197f}%
+\pspolygon[fillstyle=solid](0.906078,0.402876)(0.87651,0.412187)
+ (0.935442,0.394373)(0.994341,0.37309)(0.99567,0.382977)
+ (0.950781,0.393616)(0.906078,0.402876)
+\psset{fillcolor=cmy_7e7eff}%
+\psset{linecolor=rgb_191980}%
+\pspolygon[fillstyle=solid](0.819298,0.415485)(0.762219,0.433471)
+ (0.818456,0.425453)(0.87651,0.412187)(0.906078,0.402876)
+ (0.862077,0.410271)(0.819298,0.415485)
+\psset{fillcolor=cmy_6a6aff}%
+\psset{linecolor=rgb_1d1d94}%
+\pspolygon[fillstyle=solid](0.38701,0.370633)(0.263419,0.358433)
+ (0.295756,0.416063)(0.337777,0.472291)(0.462221,0.431813)
+ (0.42117,0.401992)(0.38701,0.370633)
+\psset{fillcolor=cmy_7272ff}%
+\psset{linecolor=rgb_1c1c8c}%
+\pspolygon[fillstyle=solid](0.571331,0.414834)(0.462221,0.431813)
+ (0.51047,0.457371)(0.565855,0.476055)(0.658661,0.43323)
+ (0.612735,0.425841)(0.571331,0.414834)
+\psset{fillcolor=cmy_7f7fff}%
+\psset{linecolor=rgb_19197f}%
+\pspolygon[fillstyle=solid](1.13571,0.293061)(1.16504,0.263219)
+ (1.2427,0.193231)(1.31393,0.130943)(1.26407,0.212769)
+ (1.20191,0.250812)(1.13571,0.293061)
+\pspolygon[fillstyle=solid](0.994341,0.37309)(0.99284,0.379708)
+ (1.0658,0.336973)(1.13571,0.293061)(1.10888,0.325677)
+ (1.05238,0.34969)(0.994341,0.37309)
+\pspolygon[fillstyle=solid](1.16504,0.263219)(1.19745,0.237271)
+ (1.28572,0.129037)(1.36413,0.0350099)(1.31393,0.130943)
+ (1.2427,0.193231)(1.16504,0.263219)
+\psset{fillcolor=cmy_7272ff}%
+\psset{linecolor=rgb_1c1c8c}%
+\pspolygon[fillstyle=solid](0.658661,0.43323)(0.565855,0.476055)
+ (0.62787,0.485674)(0.695551,0.484744)(0.762219,0.433471)
+ (0.708693,0.435991)(0.658661,0.43323)
+\psset{fillcolor=cmy_5d5dff}%
+\psset{linecolor=rgb_2020a1}%
+\pspolygon[fillstyle=solid](0.263419,0.358433)(0.130252,0.351753)
+ (0.154241,0.448121)(0.191195,0.545437)(0.337777,0.472291)
+ (0.295756,0.416063)(0.263419,0.358433)
+\psset{fillcolor=cmy_7b7bff}%
+\psset{linecolor=rgb_1a1a83}%
+\pspolygon[fillstyle=solid](0.87651,0.412187)(0.842212,0.450088)
+ (0.917852,0.418332)(0.99284,0.379708)(0.994341,0.37309)
+ (0.935442,0.394373)(0.87651,0.412187)
+\psset{fillcolor=cmy_7676ff}%
+\psset{linecolor=rgb_1b1b88}%
+\pspolygon[fillstyle=solid](0.762219,0.433471)(0.695551,0.484744)
+ (0.767541,0.472718)(0.842212,0.450088)(0.87651,0.412187)
+ (0.818456,0.425453)(0.762219,0.433471)
+\psset{fillcolor=cmy_6262ff}%
+\psset{linecolor=rgb_1f1f9c}%
+\pspolygon[fillstyle=solid](0.462221,0.431813)(0.337777,0.472291)
+ (0.390602,0.522128)(0.454699,0.560441)(0.565855,0.476055)
+ (0.51047,0.457371)(0.462221,0.431813)
+\psset{fillcolor=cmy_7c7cff}%
+\psset{linecolor=rgb_1a1a82}%
+\pspolygon[fillstyle=solid](0.99284,0.379708)(0.991097,0.4096)
+ (1.08095,0.336955)(1.16504,0.263219)(1.13571,0.293061)
+ (1.0658,0.336973)(0.99284,0.379708)
+\psset{fillcolor=cmy_6262ff}%
+\psset{linecolor=rgb_1f1f9c}%
+\pspolygon[fillstyle=solid](0.565855,0.476055)(0.454699,0.560441)
+ (0.52964,0.582636)(0.613978,0.585437)(0.695551,0.484744)
+ (0.62787,0.485674)(0.565855,0.476055)
+\psset{fillcolor=cmy_7474ff}%
+\psset{linecolor=rgb_1b1b8a}%
+\pspolygon[fillstyle=solid](0.842212,0.450088)(0.800716,0.529938)
+ (0.896933,0.475736)(0.991097,0.4096)(0.99284,0.379708)
+ (0.917852,0.418332)(0.842212,0.450088)
+\psset{fillcolor=cmy_6a6aff}%
+\psset{linecolor=rgb_1d1d94}%
+\pspolygon[fillstyle=solid](0.695551,0.484744)(0.613978,0.585437)
+ (0.705338,0.567542)(0.800716,0.529938)(0.842212,0.450088)
+ (0.767541,0.472718)(0.695551,0.484744)
+\psset{fillcolor=cmy_7878ff}%
+\psset{linecolor=rgb_1a1a86}%
+\pspolygon[fillstyle=solid](0.991097,0.4096)(0.989001,0.47266)
+ (1.09845,0.354344)(1.19745,0.237271)(1.16504,0.263219)
+ (1.08095,0.336955)(0.991097,0.4096)
+\psset{fillcolor=cmy_4f4fff}%
+\psset{linecolor=rgb_2323af}%
+\pspolygon[fillstyle=solid](0.337777,0.472291)(0.191195,0.545437)
+ (0.244003,0.635089)(0.314618,0.707241)(0.454699,0.560441)
+ (0.390602,0.522128)(0.337777,0.472291)
+\psset{fillcolor=cmy_6b6bff}%
+\psset{linecolor=rgb_1d1d93}%
+\pspolygon[fillstyle=solid](0.800716,0.529938)(0.747762,0.67368)
+ (0.870898,0.582631)(0.989001,0.47266)(0.991097,0.4096)
+ (0.896933,0.475736)(0.800716,0.529938)
+\psset{fillcolor=cmy_4f4fff}%
+\psset{linecolor=rgb_2323af}%
+\pspolygon[fillstyle=solid](0.454699,0.560441)(0.314618,0.707241)
+ (0.403301,0.752297)(0.50809,0.762937)(0.613978,0.585437)
+ (0.52964,0.582636)(0.454699,0.560441)
+\psset{fillcolor=cmy_5c5cff}%
+\psset{linecolor=rgb_2020a2}%
+\pspolygon[fillstyle=solid](0.613978,0.585437)(0.50809,0.762937)
+ (0.624809,0.736041)(0.747762,0.67368)(0.800716,0.529938)
+ (0.705338,0.567542)(0.613978,0.585437)
+\end{pspicture}%
diff --git a/graphics/epix/doc/plotting2.xp b/graphics/epix/doc/plotting2.xp
new file mode 100644
index 0000000000..2a0ed661e5
--- /dev/null
+++ b/graphics/epix/doc/plotting2.xp
@@ -0,0 +1,29 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+P f(double r, double th)
+{
+ return P(r*Cos(th), r*Sin(th), pow(r, 3)*Cos(3*th));
+}
+
+int main()
+{
+ picture(P(-1,-1),P(1,1), "2x1in");
+
+ begin();
+
+ domain R(P(0,0), P(1, 2*M_PI), mesh(8,40), mesh(8,80));
+
+ camera.at(3,1,2); // set the viewpoint
+
+ arrow(P(0,0,0), P(1.25,0,0));
+ arrow(P(0,0,0), P(0,1.25,0));
+
+ plain(Blue(1.2));
+ fill(Yellow()); // shade
+ surface(f, R);
+
+ pst_format();
+ end();
+}
diff --git a/graphics/epix/doc/plotting3.eepic b/graphics/epix/doc/plotting3.eepic
new file mode 100644
index 0000000000..d61bee76c4
--- /dev/null
+++ b/graphics/epix/doc/plotting3.eepic
@@ -0,0 +1,146 @@
+%% Generated from plotting3.xp on Tue Sep 25 18:08:09 EDT 2007 by
+%% ePiX-1.2.0
+%%
+%% Cartesian bounding box: [0,18.8496] x [-1,1]
+%% Actual size: 5 x 1in
+%% Figure offset: left by 0in, down by 0in
+%%
+%% usepackages epic,eepic,xcolor
+%%
+\xdefinecolor{rgb_000000}{rgb}{0,0,0}%
+\xdefinecolor{rgb_0000ff}{rgb}{0,0,1}%
+\xdefinecolor{rgb_00ff00}{rgb}{0,1,0}%
+\xdefinecolor{rgb_3f00bf}{rgb}{0.247059,0,0.74902}%
+\xdefinecolor{rgb_7f007f}{rgb}{0.498039,0,0.498039}%
+\xdefinecolor{rgb_bf003f}{rgb}{0.74902,0,0.247059}%
+\setlength{\unitlength}{1in}%
+\begin{picture}(5,1)(0,0)%
+\path(0,0.5)(2.5,0.5)(5,0.5)
+\put(0,0.5){\makebox(0,0){\hbox{\color{rgb_000000}$\rule{0.5pt}{6pt}$}}}
+\put(1.25,0.5){\makebox(0,0){\hbox{\color{rgb_000000}$\rule{0.5pt}{6pt}$}}}
+\put(2.5,0.5){\makebox(0,0){\hbox{\color{rgb_000000}$\rule{0.5pt}{6pt}$}}}
+\put(3.75,0.5){\makebox(0,0){\hbox{\color{rgb_000000}$\rule{0.5pt}{6pt}$}}}
+\put(5,0.5){\makebox(0,0){\hbox{\color{rgb_000000}$\rule{0.5pt}{6pt}$}}}
+\path(0,0)(0,0.5)(0,1)
+\put(0,0){\makebox(0,0){\hbox{\color{rgb_000000}$\rule{6pt}{0.5pt}$}}}
+\put(0,1){\makebox(0,0){\hbox{\color{rgb_000000}$\rule{6pt}{0.5pt}$}}}
+\allinethickness{0.8pt}%
+\color{rgb_00ff00}%
+\path(0,0.5)(0.0416667,0.578217)(0.0833333,0.654508)
+ (0.125,0.726995)(0.166667,0.793893)(0.208333,0.853553)
+ (0.25,0.904508)(0.291667,0.945503)(0.333333,0.975528)
+ (0.375,0.993844)(0.416667,1)(0.458333,0.993844)(0.5,0.975528)
+ (0.541667,0.945503)(0.583333,0.904508)(0.625,0.853553)
+ (0.666667,0.793893)(0.708333,0.726995)(0.75,0.654508)
+ (0.791667,0.578217)(0.833333,0.5)(0.875,0.421783)
+ (0.916667,0.345492)(0.958333,0.273005)(1,0.206107)
+ (1.04167,0.146447)(1.08333,0.0954915)(1.125,0.0544967)
+ (1.16667,0.0244717)(1.20833,0.00615583)(1.25,0)(1.29167,0.00615583)
+ (1.33333,0.0244717)(1.375,0.0544967)(1.41667,0.0954915)
+ (1.45833,0.146447)(1.5,0.206107)(1.54167,0.273005)
+ (1.58333,0.345492)(1.625,0.421783)(1.66667,0.5)(1.70833,0.578217)
+ (1.75,0.654508)(1.79167,0.726995)(1.83333,0.793893)(1.875,0.853553)
+ (1.91667,0.904508)(1.95833,0.945503)(2,0.975528)(2.04167,0.993844)
+ (2.08333,1)(2.125,0.993844)(2.16667,0.975528)(2.20833,0.945503)
+ (2.25,0.904508)(2.29167,0.853553)(2.33333,0.793893)(2.375,0.726995)
+ (2.41667,0.654508)(2.45833,0.578217)(2.5,0.5)(2.54167,0.421783)
+ (2.58333,0.345492)(2.625,0.273005)(2.66667,0.206107)
+ (2.70833,0.146447)(2.75,0.0954915)(2.79167,0.0544967)
+ (2.83333,0.0244717)(2.875,0.00615583)(2.91667,0)
+ (2.95833,0.00615583)(3,0.0244717)(3.04167,0.0544967)
+ (3.08333,0.0954915)(3.125,0.146447)(3.16667,0.206107)
+ (3.20833,0.273005)(3.25,0.345492)(3.29167,0.421783)(3.33333,0.5)
+ (3.375,0.578217)(3.41667,0.654508)(3.45833,0.726995)(3.5,0.793893)
+ (3.54167,0.853553)(3.58333,0.904508)(3.625,0.945503)
+ (3.66667,0.975528)(3.70833,0.993844)(3.75,1)(3.79167,0.993844)
+ (3.83333,0.975528)(3.875,0.945503)(3.91667,0.904508)
+ (3.95833,0.853553)(4,0.793893)(4.04167,0.726995)(4.08333,0.654508)
+ (4.125,0.578217)(4.16667,0.5)(4.20833,0.421783)(4.25,0.345492)
+ (4.29167,0.273005)(4.33333,0.206107)(4.375,0.146447)
+ (4.41667,0.0954915)(4.45833,0.0544967)(4.5,0.0244717)
+ (4.54167,0.00615583)(4.58333,0)(4.625,0.00615583)
+ (4.66667,0.0244717)(4.70833,0.0544967)(4.75,0.0954915)
+ (4.79167,0.146447)(4.83333,0.206107)(4.875,0.273005)
+ (4.91667,0.345492)(4.95833,0.421783)(5,0.5)
+\color{rgb_bf003f}%
+\path(0,0.5)(0.0416667,0.578217)(0.0833333,0.654508)
+ (0.125,0.726995)(0.166667,0.793893)(0.208333,0.853553)
+ (0.25,0.904508)(0.291667,0.945503)(0.333333,0.975528)
+ (0.375,0.993844)(0.416667,1)(0.458333,0.993844)(0.5,0.975528)
+ (0.541667,0.945503)(0.583333,0.904508)(0.625,0.853553)
+ (0.666667,0.793893)(0.708333,0.726995)(0.75,0.654508)
+ (0.791667,0.578217)(0.833333,0.5)(0.875,0.421783)
+ (0.916667,0.345492)(0.958333,0.273005)(1,0.206107)
+ (1.04167,0.146447)(1.08333,0.0954915)(1.125,0.0544967)
+ (1.16667,0.0244717)(1.20833,0.00615583)(1.25,0)(1.29167,0.00615583)
+ (1.33333,0.0244717)(1.375,0.0544967)(1.41667,0.0954915)
+ (1.45833,0.146447)(1.5,0.206107)(1.54167,0.273005)
+ (1.58333,0.345492)(1.625,0.421783)(1.66667,0.5)(1.70833,0.578217)
+ (1.75,0.654508)(1.79167,0.726995)(1.83333,0.793893)(1.875,0.853553)
+ (1.91667,0.904508)(1.95833,0.945503)(2,0.975528)(2.04167,0.993844)
+ (2.08333,1)(2.125,0.993844)(2.16667,0.975528)(2.20833,0.945503)
+ (2.25,0.904508)(2.29167,0.853553)(2.33333,0.793893)(2.375,0.726995)
+ (2.41667,0.654508)(2.45833,0.578217)(2.5,0.5)(2.54167,0.421783)
+ (2.58333,0.345491)(2.625,0.273005)(2.66667,0.206107)
+ (2.70833,0.146446)(2.75,0.0954902)(2.79167,0.0544945)
+ (2.83333,0.0244679)(2.875,0.00614921)(2.91667,0)
+ (2.95833,0.00613686)(3,0.02444)(3.04167,0.054444)
+ (3.08333,0.0954044)(3.125,0.146304)(3.16667,0.205875)
+ (3.20833,0.272628)(3.25,0.344886)(3.29167,0.420815)
+ (3.33333,0.498463)(3.375,0.57579)(3.41667,0.650696)
+ (3.45833,0.721039)(3.5,0.78464)(3.54167,0.839253)(3.58333,0.882522)
+ (3.625,0.911868)(3.66667,0.924325)(3.70833,0.916271)(3.75,0.883026)
+ (3.79167,0.818266)(3.83333,0.713166)(3.875,0.555181)
+ (3.91667,0.326308)(3.95833,0.000641819)(3.95839,0)
+\color{rgb_7f007f}%
+\path(0,0.5)(0.0416667,0.578217)(0.0833333,0.654508)
+ (0.125,0.726995)(0.166667,0.793893)(0.208333,0.853553)
+ (0.25,0.904508)(0.291667,0.945503)(0.333333,0.975528)
+ (0.375,0.993844)(0.416667,1)(0.458333,0.993844)(0.5,0.975528)
+ (0.541667,0.945503)(0.583333,0.904508)(0.625,0.853553)
+ (0.666667,0.793893)(0.708333,0.726995)(0.75,0.654508)
+ (0.791667,0.578217)(0.833333,0.5)(0.875,0.421783)
+ (0.916667,0.345492)(0.958333,0.273005)(1,0.206107)
+ (1.04167,0.146447)(1.08333,0.0954915)(1.125,0.0544967)
+ (1.16667,0.0244717)(1.20833,0.00615583)(1.25,0)(1.29167,0.00615583)
+ (1.33333,0.0244717)(1.375,0.0544967)(1.41667,0.0954915)
+ (1.45833,0.146447)(1.5,0.206107)(1.54167,0.273005)
+ (1.58333,0.345492)(1.625,0.421783)(1.66667,0.5)(1.70833,0.578218)
+ (1.75,0.654509)(1.79167,0.726996)(1.83333,0.793895)(1.875,0.853557)
+ (1.91667,0.904515)(1.95833,0.945515)(2,0.975549)(2.04167,0.993881)
+ (2.08291,1)
+\path(2.08376,1)(2.125,0.993951)(2.16667,0.975708)
+ (2.20833,0.945803)(2.25,0.905003)(2.29167,0.854363)
+ (2.33333,0.795206)(2.375,0.729106)(2.41667,0.657874)
+ (2.45833,0.583539)(2.5,0.50835)(2.54167,0.434785)(2.58333,0.365591)
+ (2.625,0.303858)(2.66667,0.253144)(2.70833,0.21768)(2.75,0.202677)
+ (2.79167,0.214776)(2.83333,0.262697)(2.875,0.358157)
+ (2.91667,0.51715)(2.95833,0.761732)(2.98586,1)
+\color{rgb_3f00bf}%
+\path(0,0.5)(0.0416667,0.578217)(0.0833333,0.654508)
+ (0.125,0.726995)(0.166667,0.793893)(0.208333,0.853553)
+ (0.25,0.904508)(0.291667,0.945503)(0.333333,0.975528)
+ (0.375,0.993844)(0.416667,1)(0.458333,0.993844)(0.5,0.975528)
+ (0.541667,0.945503)(0.583333,0.904508)(0.625,0.853553)
+ (0.666667,0.793893)(0.708333,0.726995)(0.75,0.654508)
+ (0.791667,0.578217)(0.833333,0.5)(0.875,0.421782)(0.916667,0.34549)
+ (0.958333,0.273001)(1,0.206099)(1.04167,0.14643)(1.08333,0.0954587)
+ (1.125,0.0544347)(1.16667,0.0243571)(1.20833,0.00594841)
+ (1.24757,0)
+\path(1.2526,0)(1.29167,0.00551665)(1.33333,0.02338)
+ (1.375,0.0526628)(1.41667,0.0924591)(1.45833,0.141506)
+ (1.5,0.198171)(1.54167,0.260422)(1.58333,0.325792)(1.625,0.391305)
+ (1.66667,0.453377)(1.70833,0.507659)(1.75,0.548813)
+ (1.79167,0.570203)(1.83333,0.563454)(1.875,0.517876)
+ (1.91667,0.419672)(1.95833,0.250906)(1.99812,0)
+\color{rgb_0000ff}%
+\path(0,0.5)(0.0416667,0.578217)(0.0833333,0.654509)
+ (0.125,0.726996)(0.166667,0.793896)(0.208333,0.853572)
+ (0.25,0.904573)(0.291667,0.945693)(0.333333,0.976009)
+ (0.375,0.994933)(0.403805,1)
+\path(0.439996,1)(0.458333,0.998222)
+ (0.5,0.983515)(0.541667,0.959373)(0.583333,0.927598)
+ (0.625,0.890616)(0.666667,0.851521)(0.708333,0.814127)
+ (0.75,0.783009)(0.791667,0.763557)(0.833333,0.762022)
+ (0.875,0.785563)(0.916667,0.842295)(0.958333,0.941339)(0.974464,1)
+\end{picture}%
diff --git a/graphics/epix/doc/plotting3.xp b/graphics/epix/doc/plotting3.xp
new file mode 100644
index 0000000000..e5d1088978
--- /dev/null
+++ b/graphics/epix/doc/plotting3.xp
@@ -0,0 +1,43 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+P sin_n(double x, double n) // Taylor polynomial of sin x
+{
+ const int N((int) floor(n)); // convert y to an index bound
+ const double sqx(-pow(x, 2)); // store -x^2 for efficiency
+ double val(x), summand(x); // places to store results of evaluation
+
+ // step through odd numbers from 1 to 2N+1
+ for (int i=1; i <= 2*N+1; i += 2)
+ {
+ summand *= (sqx/((i+1)*(i+2))); // (-1)^i x^{2i+1}/(2i+1)!
+ val += summand;
+ }
+
+ return P(x, val);
+}
+
+int main()
+{
+ picture(P(0,-1),P(6*M_PI, 1), "5x1in");
+
+ begin();
+
+ set_crop();
+ h_axis(4);
+ v_axis(1);
+
+ bold();
+ green();
+ plot(Sin, 0, xmax(), 120);
+
+ domain R(P(0,1), P(6*M_PI, 41), mesh(60, 40), mesh(120, 40));
+ for (int i=3; 0 <= i; --i)
+ {
+ rgb(0.25*i, 0, 1-0.25*i);
+ plot(sin_n, R.slice2(5*i+1));
+ }
+
+ end();
+}
diff --git a/graphics/epix/doc/scaling.eepic b/graphics/epix/doc/scaling.eepic
new file mode 100644
index 0000000000..0b6231c4ee
--- /dev/null
+++ b/graphics/epix/doc/scaling.eepic
@@ -0,0 +1,56 @@
+%% Generated from scaling.xp on Sat Sep 1 14:17:35 EDT 2007 by
+%% ePiX-1.1.15
+%%
+%% Cartesian bounding box: [0,4] x [0,1]
+%% Actual size: 4 x 0.75in
+%% Figure offset: left by 0in, down by 0in
+%%
+%% usepackages epic,eepic,xcolor
+%%
+\xdefinecolor{rgb_000000}{rgb}{0,0,0}%
+\setlength{\unitlength}{1in}%
+\begin{picture}(4,0.75)(0,0)%
+\path(1.75,0.375)(2.75,0.375)
+\path(2.63584,0.359433)(2.66438,0.359433)
+\path(2.63584,0.364622)(2.69292,0.364622)
+\path(2.63584,0.369811)(2.72146,0.369811)
+\path(2.63584,0.375)(2.75,0.375)
+\path(2.63584,0.380189)(2.72146,0.380189)
+\path(2.63584,0.385378)(2.69292,0.385378)
+\path(2.63584,0.390567)(2.66438,0.390567)
+\path(2.74456,0.374012)(2.74456,0.375988)
+\path(2.73913,0.373023)(2.73913,0.376977)
+\path(2.73369,0.372035)(2.73369,0.377965)
+\path(2.72826,0.371047)(2.72826,0.378953)
+\path(2.72282,0.370058)(2.72282,0.379942)
+\path(2.71738,0.36907)(2.71738,0.38093)
+\path(2.71195,0.368081)(2.71195,0.381919)
+\path(2.70651,0.367093)(2.70651,0.382907)
+\path(2.70108,0.366105)(2.70108,0.383895)
+\path(2.69564,0.365116)(2.69564,0.384884)
+\path(2.6902,0.364128)(2.6902,0.385872)
+\path(2.68477,0.36314)(2.68477,0.38686)
+\path(2.67933,0.362151)(2.67933,0.387849)
+\path(2.6739,0.361163)(2.6739,0.388837)
+\path(2.66846,0.360175)(2.66846,0.389825)
+\path(2.66302,0.359186)(2.66302,0.390814)
+\path(2.65759,0.358198)(2.65759,0.391802)
+\path(2.65215,0.35721)(2.65215,0.39279)
+\path(2.64672,0.356221)(2.64672,0.393779)
+\path(2.64128,0.355233)(2.64128,0.394767)
+\path(2.63584,0.354244)(2.63584,0.395756)
+\path(2.63584,0.375)(2.63584,0.354244)(2.75,0.375)
+ (2.63584,0.395756)(2.63584,0.375)
+\put(0.027674,0.121424){\makebox(0,0)[bl]{\hbox{\color{rgb_000000}\scriptsize \hbox{\color{rgb_000000}\scriptsize $(x_\mathrm{min},y_\mathrm{min})$}}}}
+\put(0,0.09375){\makebox(0,0){\hbox{\color{rgb_000000}\scriptsize $\circle{0.0069185}\circle{0.013837}\circle{0.0207555}\circle{0.027674}$}}}
+\put(1.47233,0.722326){\makebox(0,0)[tr]{\hbox{\color{rgb_000000}\scriptsize \hbox{\color{rgb_000000}\scriptsize $(x_\mathrm{max},y_\mathrm{max})$}}}}
+\put(1.5,0.75){\makebox(0,0){\hbox{\color{rgb_000000}\scriptsize $\circle{0.0069185}\circle{0.013837}\circle{0.0207555}\circle{0.027674}$}}}
+\put(0.75,0.038402){\makebox(0,0)[t]{\hbox{\color{rgb_000000}\scriptsize \hbox{\color{rgb_000000}\scriptsize Canvas (virtual)}}}}
+\path(1.5,0.09375)(1.5,0.75)(0,0.75)(0,0.09375)(1.5,0.09375)
+\put(3.02767,0.121424){\makebox(0,0)[bl]{\hbox{\color{rgb_000000}\scriptsize \hbox{\color{rgb_000000}\scriptsize $(0,0)$}}}}
+\put(3,0.09375){\makebox(0,0){\hbox{\color{rgb_000000}\scriptsize $\circle{0.0069185}\circle{0.013837}\circle{0.0207555}\circle{0.027674}$}}}
+\put(3.97233,0.628576){\makebox(0,0)[tr]{\hbox{\color{rgb_000000}\scriptsize \hbox{\color{rgb_000000}\scriptsize $(h_\mathrm{size}, v_\mathrm{size})$}}}}
+\put(4,0.65625){\makebox(0,0){\hbox{\color{rgb_000000}\scriptsize $\circle{0.0069185}\circle{0.013837}\circle{0.0207555}\circle{0.027674}$}}}
+\put(3.5,0.038402){\makebox(0,0)[t]{\hbox{\color{rgb_000000}\scriptsize \hbox{\color{rgb_000000}\scriptsize Page (actual)}}}}
+\path(4,0.09375)(4,0.65625)(3,0.65625)(3,0.09375)(4,0.09375)
+\end{picture}%
diff --git a/graphics/epix/doc/scaling.xp b/graphics/epix/doc/scaling.xp
new file mode 100644
index 0000000000..7d243caabc
--- /dev/null
+++ b/graphics/epix/doc/scaling.xp
@@ -0,0 +1,37 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+int main()
+{
+ picture(P(0,0), P(4,1), "4x0.75in");
+
+ begin();
+
+ font_size("scriptsize");
+
+ screen canv(P(0,0), P(1,1));
+ activate(canv);
+
+ border();
+ ddot(canv.bl(), P(2,2), "$(x_\\mathrm{min},y_\\mathrm{min})$", tr);
+ ddot(canv.tr(), P(-2,-2), "$(x_\\mathrm{max},y_\\mathrm{max})$", bl);
+ label(canv.b(), P(0,-4), "Canvas (virtual)", b);
+ deactivate(canv);
+
+ screen pg(P(0,0), P(1,1));
+ activate(pg);
+
+ border();
+ ddot(pg.bl(), P(2,2), "$(0,0)$", tr);
+ ddot(pg.tr(), P(-2,-2), "$(h_\\mathrm{size}, v_\\mathrm{size})$", bl);
+ label(pg.b(), P(0,-4), "Page (actual)", b);
+ deactivate(pg);
+
+ arrow(P(1.75, 0.5), P(2.75,0.5));
+
+ inset(canv, P(0,0.125), P(1.5, 1));
+ inset(pg, P(3,0.125), P(4,0.875));
+
+ end();
+}
diff --git a/graphics/epix/doc/sgn.eepic b/graphics/epix/doc/sgn.eepic
new file mode 100644
index 0000000000..0aafc5d5af
--- /dev/null
+++ b/graphics/epix/doc/sgn.eepic
@@ -0,0 +1,30 @@
+%% Generated from sgn.xp on Tue Jan 4 15:32:30 EST 2005 by
+%% ePiX-1.0.3
+%%
+%% Cartesian bounding box: [-2,2] x [-1,1]
+%% Actual size: 1.5in x 0.75in
+%% Figure offset: right by 0in, up by 0in
+%%
+\setlength{\unitlength}{1in}
+\begin{picture}(1.5,0.75)(-0,-0)
+%% ---
+\path(0,0.375)(1.5,0.375)
+\put(0,0.375){\makebox(0,0)[c]{\rule{0.5pt}{4pt}}}
+\put(0.375,0.375){\makebox(0,0)[c]{\rule{0.5pt}{4pt}}}
+\put(0.75,0.375){\makebox(0,0)[c]{\rule{0.5pt}{4pt}}}
+\put(1.125,0.375){\makebox(0,0)[c]{\rule{0.5pt}{4pt}}}
+\put(1.5,0.375){\makebox(0,0)[c]{\rule{0.5pt}{4pt}}}
+%% ---
+\path(0.75,0)(0.75,0.75)
+\put(0.75,0){\makebox(0,0)[c]{\rule{4pt}{0.5pt}}}
+\put(0.75,0.75){\makebox(0,0)[c]{\rule{4pt}{0.5pt}}}
+%% ---
+\thicklines
+\path(0,0)(0.75,0)
+\path(1.5,0.75)(0.75,0.75)
+\thinlines
+\put(0.75,0.375){\makebox(0,0)[c]{{\circle*{0.041511}}}}
+\whiten\put(0.75,0){\makebox(0,0)[c]{{\circle{0.041511}}}}
+\whiten\put(0.75,0.75){\makebox(0,0)[c]{{\circle{0.041511}}}}
+\put(0.75,-0.055348){\makebox(0,0)[t]{\code{sgn}}}
+\end{picture}
diff --git a/graphics/epix/doc/sgn.xp b/graphics/epix/doc/sgn.xp
new file mode 100644
index 0000000000..5296973ba4
--- /dev/null
+++ b/graphics/epix/doc/sgn.xp
@@ -0,0 +1,28 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+int main()
+{
+ bounding_box(P(-2,-1),P(2,1));
+ unitlength("1in");
+ picture(1.5,0.75);
+
+ begin();
+
+ h_axis(4);
+ v_axis(1);
+
+ bold();
+ line(P(x_min,-1), P(0,-1));
+ line(P(x_max, 1), P(0, 1));
+
+ plain();
+ dot(P(0,0));
+ circ(P(0,-1));
+ circ(P(0,1));
+
+ label(P(0,y_min), P(0,-4), "\\code{sgn}", b);
+
+ end();
+}
diff --git a/graphics/epix/doc/sinx.eepic b/graphics/epix/doc/sinx.eepic
new file mode 100644
index 0000000000..c62bf19e00
--- /dev/null
+++ b/graphics/epix/doc/sinx.eepic
@@ -0,0 +1,40 @@
+%% Generated from sinx.xp on Tue Jan 4 15:32:32 EST 2005 by
+%% ePiX-1.0.3
+%%
+%% Cartesian bounding box: [-2,2] x [-1,1]
+%% Actual size: 1.5in x 0.75in
+%% Figure offset: right by 0in, up by 0in
+%%
+\setlength{\unitlength}{1in}
+\begin{picture}(1.5,0.75)(-0,-0)
+%% ---
+\path(0,0.375)(1.5,0.375)
+\put(0,0.375){\makebox(0,0)[c]{\rule{0.5pt}{4pt}}}
+\put(0.375,0.375){\makebox(0,0)[c]{\rule{0.5pt}{4pt}}}
+\put(0.75,0.375){\makebox(0,0)[c]{\rule{0.5pt}{4pt}}}
+\put(1.125,0.375){\makebox(0,0)[c]{\rule{0.5pt}{4pt}}}
+\put(1.5,0.375){\makebox(0,0)[c]{\rule{0.5pt}{4pt}}}
+%% ---
+\path(0.75,0)(0.75,0.75)
+\put(0.75,0){\makebox(0,0)[c]{\rule{4pt}{0.5pt}}}
+\put(0.75,0.75){\makebox(0,0)[c]{\rule{4pt}{0.5pt}}}
+%% ---
+\thicklines
+\path(0,0.375)(0.025,0.362444)(0.05,0.351239)(0.075,0.343466)(0.1,0.340756)
+ (0.125,0.343988)(0.15,0.353074)(0.175,0.366907)(0.2,0.383461)
+ (0.225,0.400058)(0.25,0.413765)(0.275,0.42186)(0.3,0.422302)
+ (0.325,0.414135)(0.35,0.397758)(0.375,0.375)(0.4,0.348991)
+ (0.425,0.323823)(0.45,0.304047)(0.475,0.29406)(0.5,0.297469)
+ (0.525,0.316532)(0.55,0.351733)(0.575,0.40159)(0.6,0.462702)
+ (0.625,0.530061)(0.65,0.597586)(0.675,0.65881)(0.7,0.707649)
+ (0.725,0.73913)(0.75,0.75)(0.775,0.73913)(0.8,0.707649)(0.825,0.65881)
+ (0.85,0.597586)(0.875,0.530061)(0.9,0.462702)(0.925,0.40159)
+ (0.95,0.351733)(0.975,0.316532)(1,0.297469)(1.025,0.29406)(1.05,0.304047)
+ (1.075,0.323823)(1.1,0.348991)(1.125,0.375)(1.15,0.397758)
+ (1.175,0.414135)(1.2,0.422302)(1.225,0.42186)(1.25,0.413765)
+ (1.275,0.400058)(1.3,0.383461)(1.325,0.366907)(1.35,0.353074)
+ (1.375,0.343988)(1.4,0.340756)(1.425,0.343466)(1.45,0.351239)
+ (1.475,0.362444)(1.5,0.375)
+\path(1.5,0.375)
+\put(0.75,-0.055348){\makebox(0,0)[t]{\code{sinx}}}
+\end{picture}
diff --git a/graphics/epix/doc/sinx.xp b/graphics/epix/doc/sinx.xp
new file mode 100644
index 0000000000..62c08bbc48
--- /dev/null
+++ b/graphics/epix/doc/sinx.xp
@@ -0,0 +1,23 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+int main()
+{
+ bounding_box(P(-2,-1),P(2,1));
+ unitlength("1in");
+ picture(1.5,0.75);
+
+ begin();
+ revolutions();
+
+ h_axis(4);
+ v_axis(1);
+
+ bold();
+ plot(sinx, x_min, x_max, 60);
+
+ label(P(0,y_min), P(0,-4), "\\code{sinx}", b);
+
+ end();
+}
diff --git a/graphics/epix/doc/slices.eepic b/graphics/epix/doc/slices.eepic
new file mode 100644
index 0000000000..4aebe69de4
--- /dev/null
+++ b/graphics/epix/doc/slices.eepic
@@ -0,0 +1,45 @@
+%% Generated from slices.xp on Sun Dec 31 13:11:11 EST 2006 by
+%% ePiX-1.0.22
+%%
+%% Cartesian bounding box: [0,7] x [0,2]
+%% Actual size: 5in x 0.75in
+%% Figure offset: right by 0in, up by 0in
+%%
+\setlength{\unitlength}{1in}
+\begin{picture}(5,0.75)(-0,-0)
+%% ---
+\thicklines
+\path(0,0)(0,0.75)
+\path(0.178571,0)(0.178571,0.75)
+\path(0.357143,0)(0.357143,0.75)
+\path(0.535714,0)(0.535714,0.75)
+\path(0.714286,0)(0.714286,0.75)
+\path(0.892857,0)(0.892857,0.75)
+\path(1.07143,0)(1.07143,0.75)
+\path(1.25,0)(1.25,0.75)
+\path(1.42857,0)(1.42857,0.75)
+\path(0,0)(1.42857,0)
+\path(0,0.107143)(1.42857,0.107143)
+\path(0,0.214286)(1.42857,0.214286)
+\path(0,0.321429)(1.42857,0.321429)
+\path(0,0.428571)(1.42857,0.428571)
+\path(0,0.535714)(1.42857,0.535714)
+\path(0,0.642857)(1.42857,0.642857)
+\path(0,0.75)(1.42857,0.75)
+\put(0.714286,-0.055348){\makebox(0,0)[t]{\code{R}}}
+\path(1.78571,0)(1.78571,0.75)
+\path(1.96429,0)(1.96429,0.75)
+\path(2.14286,0)(2.14286,0.75)
+\path(2.32143,0)(2.32143,0.75)
+\path(2.5,0)(2.5,0.75)
+\path(2.67857,0)(2.67857,0.75)
+\path(2.85714,0)(2.85714,0.75)
+\path(3.03571,0)(3.03571,0.75)
+\path(3.21429,0)(3.21429,0.75)
+\put(2.5,-0.055348){\makebox(0,0)[t]{\code{R.slices1()}}}
+\path(3.57143,0)(5,0)
+\path(3.57143,0.25)(5,0.25)
+\path(3.57143,0.5)(5,0.5)
+\path(3.57143,0.75)(5,0.75)
+\put(4.28571,-0.055348){\makebox(0,0)[t]{\code{R.slices2(3)}}}
+\end{picture}
diff --git a/graphics/epix/doc/slices.xp b/graphics/epix/doc/slices.xp
new file mode 100644
index 0000000000..c67dddf876
--- /dev/null
+++ b/graphics/epix/doc/slices.xp
@@ -0,0 +1,39 @@
+/* -*-ePiX-*- */
+#include "epix.h"
+using namespace ePiX;
+
+void my_grid(const P& loc, int N1, int N2, std::string lab)
+{
+ if (0 < N1)
+ {
+ const double dx(1.0/N1);
+ for (int i=-N1; i<= N1; ++i)
+ line(loc+P(i*dx,0), loc+P(i*dx,2));
+ }
+
+ if (0 < N2)
+ {
+ const double dy(1.0/N2);
+ for (int i=0; i<= N2; ++i)
+ line(loc+P(-1,2*i*dy), loc+P(1,2*i*dy));
+ }
+
+ label(loc, P(0,-4), "\\code{"+lab+"}", b);
+}
+
+int main()
+{
+ bounding_box(P(0,0),P(7,2));
+ unitlength("1in");
+ picture(5,0.75);
+
+ begin();
+
+ bold();
+
+ my_grid(P(1,0), 4, 7, "R");
+ my_grid(P(3.5,0), 4, 0, "R.slices1()");
+ my_grid(P(6,0), 0, 3, "R.slices2(3)");
+
+ end();
+}