Release Notes for Version 1.91 The precision of the 3D perspective sizing routines were improved. The offset in transformed 3D labels with render=0 was fixed. 3D planar arrowhead gaps were fixed; a duplicate 3D arrow angle factor was removed. Pen width contributions to the box and ellipse envelopes were fixed. A more robust contour algorithm based on paraboloid approximation was implemented. A polargraph routine for arrays was implemented. Default font problems were fixed. The pdfborder={0 0 0} option was added to settings.hyperrefOptions; the hypersetup command is now used to avoid hyperref option clashes. The size of pngalpha images was fixed; the pngalpha driver is used only if antialias=2. The -alpha Off default convert option was removed in favour of convertOptions="-alpha Off". Inlinetex support for xelatex was updated. Picture transformations are now respected by latticeshade. The Bessel functions J and Y were renamed to Jn and Yn. An operator --(block, block) was implemented to simplify the flowchart syntax. The expression % expands to the last result returned at the interactive prompt. The GLU-1.3 library included in the MSWIndows distribution was fixed. Release Notes for Version 1.90 SVG axial, radial, and emulated tensor-patch shading were fixed; the dependency on dvisvgm-0.8.7 was documented. Release Notes for Version 1.89 The draw, fill, and clip commands now pass raw SVG code directly to dvisvgm (version 0.8.6 required); zero-length paths are output as circles. Unsupported SVG elements are converted to PNG images; unimplemented SVG features such as Gouraud and tensor-patch shading can be (partially) emulated as vector elements using the -svgemulation option. The control point normalization of rational NURBS surfaces was fixed; 3D NURBS curves are now implemented. A problem with inlinemovie3 was fixed. The linetype pattern is now a real array: for backwards compatibility, a string is still accepted, but the return type of linetype(pen) is now real[] instead of string (backwards incompatible). The split routine was changed so that an empty delimiter splits on spaces, discarding duplicates. The palette routines are now guaranteed to generate at least the specified number of colours. PNG output produces a transparent background. Surface and path3 garbage collection was fixed. Release Notes for Version 1.88 Compilation without OpenGL was fixed. PRC billboard labels were implemented; settings.billboard was renamed to settings.autobillboard and by default enabled for all 3D labels. The surface constructor for embedding labels on surfaces now draws both the top and bottom faces by default. The meshpen, knot, weight, and color arrays are now properly cached. The example fequlogo.asy illustrates how to draw an arbitrary 3D background plane. The intermediate dvi file is now removed when producing SVG output. Improvements were made to the tutorial. Release Notes for Version 1.87 Support for SVG output was added (requires dvisvgm-0.8.4). Billboard labels were implemented for the OpenGL renderer. OpenGL animations were improved: reverse and step menu items were added, along with a framerate setting. An addStereoViews function and example stereoscopic.asy were added. The addViews function was generalized to handle any layout; the default layout was changed from ThreeViewsFR to SixViewsUS. PRC node names are now implemented for curves, surface, labels, and dots. OmitTick was generalized to omit both major and minor ticks. A graphicx.tex workaround was implemented to parse paths properly. A viewportsize bug was fixed. A memory deallocation bug was fixed. The ENDIAN test was fixed. The ucyclic and vcyclic parameters are no longer set for conditional surfaces. The erase() function clears the PostScript canvas again. A projection() function that returns the interactive camera parameters was implemented. A hyperrefOptions setting was implemented. The tutorial was improved. Release Notes for Version 1.86 PRC polygons were optimized. Surface memory usage was reduced. The automatic sizing of NURBS surfaces was fixed. A bug in the radius of curvature computation at nodes was fixed. The configuration test for the GNU readline library was improved. The naming of PRC parts was implemented. Release Notes for Version 1.85 Compilation is now supported again on platforms lacking OpenGL. Missing pen dimensions were added to a 3D picture sizing routine. The labelsurface routine was renamed to surface and extended to surfaces containing a single patch. Release Notes for Version 1.84 The perspective PRC viewportmargin was fixed. Unwanted spaces were removed from (version 1.10 of) asymptote.sty. Support for drawing PRC and OpenGL NURBS surfaces was added. Obsolete code, including an unwanted inline qualifier, was removed. A split structure that can be adapted for splitting intersecting patches was added, along with the example splitpatch.asy. Release Notes for Version 1.83 OpenGL animations, illustrated in glmovie.asy, were implemented. Viewportshift flicker was fixed. An empirical translation between OpenGL and PRC shininess was implemented. Splined parametric surfaces are now used to implement smooth thick lines and tubes. The projected bounding box calculation and angle calculations were fixed. A labelsurface function was added. The Headlamp light is now the default light; a light argument was added to shipout. Patches are now constructed with the usual orientation for a counterclockwise external path; the convention for tensor product shading was updated. Picture environments for TeX clipping are no longer nested. A texpath initialization bug was fixed. An ASYMPTOTE_HOME environment variable was added. Viewing was fixed for file names containing spaces. A picture sizing bug was fixed. An example of an inset graph was added. Type information for variables is now returned at the interactive prompt. Warning message suppression was improved; warnings in Asymptote code can now be disabled. The cyclic member of an array is now writeable; the obsolete cyclicflag and void cyclic(bool) functions were removed. File mode functions are now virtual members; this backwards incompatibility requires that line(file f) be changed to f.line(), etc. Release Notes for Version 1.82 Threaded exports were fixed. The texpath fontsize was fixed for PDF tex engines. A default currentprojection argument was added to transform3(projection). The -gray and -bw settings are now respected in PRC output. A consistent approximation is now used for drawing tube centers. Missing pt units were added to all fontsize examples. Release Notes for Version 1.81 A boolean targetsize option can now be used to draw 3D labels with the apparent size they would have on the target plane. The camera adjustment algorithms were fixed; the autoadjust flag is respected. Missing path3 functions such as endpoint(path3) were added. The doubleclick timeout under MSWindows was fixed. A workaround for a ConTeXT small font bug is illustrated in contextfonts.asy. File associations are now used under MSWindows for psviewer, pdfviewer, display, and animate. Single quotation marks are now allowed in filenames. Deconstruction is now only supported in PNG format; the xformat setting was removed. The example lmfit illustrates Levenberg-Marquardt nonlinear least-squares fitting. Release Notes for Version 1.80 The interface for changing the precision for XDR/binary files was simplified; file parameters can now be queried as virtual members. The zoom/menu action was improved to emulate a double-click and assigned again to the right mouse button; a left-button binding bug was fixed. New settings zoomfactor, zoomstep, spinstep, arcballradius, resizestep, and doubleclick were added. The OpenGL thread is now exited gracefully; idle state and other parameters are properly reset on quitting. Lighting is now initialized only in home(). Animations with global=false were fixed. An improved (and free) psview PostScript viewer is now suggested for MSDOS users. A mechanism for disabling annoying warnings like "writeoverloaded" was implemented. The documentation directory under TeXLive was fixed. Release Notes for Version 1.79 The perp vector calculation in the solids module was fixed. A bug in the mouse motion functions was fixed. A pan action (which differs from shift due to perspective distortion) was added to the OpenGl renderer; the Camera (c) menu item now outputs all camera settings. The default right mouse button mouse binding was changed from "zoom/menu" to "zoom". User-initiated exports no longer cause the renderer to quit. Dynamic time stepping was fixed in the ode module; the "integrate" routines now return the array of computed values. Operators == and != were added for all built-in arithmetic 2D arrays; a segmentation fault was fixed. The etc/fstab kludge for Cygwin 1.7 was removed. The configuration directory under TeXLive is now $TEXMFCONFIG/asymptote. Release Notes for Version 1.78 Thread locking issues were fixed. The linegranularity is now respected when drawing thick curved lines. A bug in FSAL ODE integrators when using a fixed time step was fixed. Missing miterlimit defaults were added. Xasy was updated to use Python 2.6.2 and Imaging-1.1.7b1 (which requires no alpha support patches). Obsolete patches were removed. More TeXLive build issues were addressed: the install-prebuilt target omits texhash and does not attempt to install PNG files for asymptote.info. A configuration problem with --disable-gc was fixed. The 3D mouse bindings are now customizable. Support was added for generating syntax highlighting for the KDE editor Kate. Release Notes for Version 1.77 Splined parametric surfaces were implemented; a bug in the Cartesian splined surface routines was fixed. An ode module for solving ordinary differential equations was added. A bug in maxtimes and mintimes was fixed. A Levenberg-Marquardt nonlinear fitting routine was added. The format command now returns TeX compatible output only in math mode. A path3 label alignment problem was fixed. The MSWindows support for TeXLive 2009 was fixed. Release Notes for Version 1.76 A bezulate bug was fixed. The resolution and caching of texpath were improved; for PDF tex engines, the basealign pen attribute is now respected. Support for OCG layers was added. Lights Headlamp and White were implemented; the predefined adobe light was removed. Holes are now handled in superpath-to-surface constructor when planar=true. A degenerate transform3 issue was fixed. The alignment of rendered and PRC images was improved; the angle for rendering absolute projections was fixed. Inaccurate TeX and ConTeXt font scalings were fixed. A texsize(string, pen=currentpen) function returns the raw TeX dimensions {width,height,depth}. A new version of asymptote.sty (1.07) fixes attach=true mode. Release Notes for Version 1.75 Issues with 3D labels and texpath, both in inlinetex mode and with the ConTeXt TeX engine, were resolved. A bug in bezulate was fixed. A partial workaround was added for the unimplememented -output-directory ConTeXt option (the current directory must still be writeable). The aspect ratio and viewportmargin calculation in module three was improved, with tighter 3D bounds. A bug in the intersections(path3, surface) routine was fixed. Release Notes for Version 1.74 An error in the surface bounding box routines was fixed. Path/surface intersection routines were added. PDF tex engines are now supported for 3D labels and texpath. The new ConTeXT tex engine can be used for both 2D and non-PRC 3D drawings. Projections LeftView, RightView, FrontView, BackView, BottomView, and TopView, along with an addViews function, were implemented. Portability fixes and various updates to support TeXLive builds were made. The dependence on currentprojection in label(Label, path3) was removed. The font command for LaTeX tex engines now requires all four NFSS (encoding, family, series, shape) arguments. Release Notes for Version 1.73 An alternative OpenGL background color can now be specified with the pen currentlight.background. A new textpath command allows 3D labels to be drawn with settings.texengine="none". Minor bugs in the geometry package were fixed. The interface to the vectorfield routines was improved. The autoadjust parameter was removed from orthographic projections; autoadjust=false is now always respected for perspective projections. Optional warn=true arguments were added to the polar, azimuth, colatitude, and latitude functions. A call to reportError interrupts execution again. A segmentation fault that can occur after file mode errors was fixed. Release Notes for Version 1.72 PostScript calculator function shading was implemented. Interactive camera parameters of the native OpenGL renderer can now be queried. The effective camera positions for oblique projections was fixed. Philippe Ivaldi's geometry_dev module was merged into geometry.asy; trembling_pi was added as trembling.asy. The GSL module was expanded. An extrude routine for labels was implemented. Rotated path label alignments were fixed. The alignment of 3D axis labels was fixed. The basealign pen now always typesets "ace" and "acg" at the same location. Arrow endpoint detection was fixed. A sysdir setting was added, along with an --enable-tetex-build configure option. The store argument of saveline is respected again. Left-justified trailingzero alignment was fixed; a signedtrailingzero specifier was added. Boolean conditions on linearly interpolated surfaces now suppress function evaluation. The adaptive algorithm used for rendering thick lines and tubes was improved. An ambiguity in the flowchart module was fixed. A patch is included to work around an MSWindows XP problem with 3Dgetview in the 2009/03/23 version of movie15.sty. A problem with spurious menu interaction zooming was fixed. The asy.bat MSWindows batch file now respects all command-line arguments. Release Notes for Version 1.70 A labelpath3 module for typesetting curved labels in 3D, contributed by Jens Schwaiger, was added. PenMargin2 was defined for use with planar arrowhead types like DefaultHead2. A center=false parameter was added to projections to allow one to automatically center the target within the bounding volume. The ambiguity in the surface function was resolved. Problems with spaces in filenames were fixed. Release Notes for Version 1.69 Internal patch degeneracies were removed by splitting. Bugs in the windingnumber and the intersection routines were fixed. The inside(path) routine was improved; a fillrule argument was added. The bezulate connect routine was improved. Bezulate is now automatically applied to path arrays: surfaces should be constructed directly, without first calling bezulate. A workaround for recent changes in the hyperref package was implemented. The divisor setting was replaced with purge(divisor=0). The calls to baseline in graph.asy were fixed. A miterlimit attribute was added to pens. Animation problems were fixed. Lighting problems with multiple exports and a quit deadlock were fixed. A new version of asymptote.sty (1.06) fixes an undefined \ASYbox. Release Notes for Version 1.68 Support for 3D inline pdf movies was added. Camera adjustment was fixed; the filesurface.asy example illustrates automated camera and target computation. A deadlock in the export loop was fixed. A new version of asymptote.sty (1.05) fixes the definition of \ASYanimategraphics. The handling of intersection fuzz was improved. The baseline routine was generalized. New paragraphs are now allowed in minipage labels. Some minor errors in the documentation were fixed. Release Notes for Version 1.67 Spurious annotation question marks in 3D PDF attachments were fixed; attached images are now printable. The asy environment defined in the new (1.04) version of asymptote.sty supports keyval options width, height, viewportwidth, viewportheight, and attach; the obsolete asyattach environment was removed. The default viewportwidth is the linewidth in inline mode and 0 in attached mode. Planar projected arrows were fixed. Automatic camera adjustment was improved. A minimum viewportsize can now be specified. The control points for cyclic segments produced by texpath were fixed. Overlap issues in planar surface patches were fixed. Surface constructors were simplified: the routine planar has been replaced by surface(path3) and in most cases there is no need to call bezulate directly. An Align constant was added. The parameter limits used in buildcycle were fixed. The intersection routines now respect the fuzz parameter. Segmentation faults involving null cyclic guides were fixed. Subpath now preserves the straight flag. Pictures containing graphs now transform correctly; unextended axes limits and tick selection were improved. Axial and radial shading respect now respect -gray. The animation prefix was fixed. An example of drawing a surface from irregular data was added. A work around was implemented for an intermittent hang on exit in the 3D native renderer. An auto3D option was added for controlling the poster option. The 2008/10/08 version of movie15.sty is now compulsory. The cd %USERPROFILE% command was removed from asy.bat. Release Notes for Version 1.66 An alignment problem with the pdflatex tex engine was fixed. Problems in the animations module were fixed, including a broken ImageMagick layers optimization. Optional direction arguments were added for three-dimensional bars. The appearance and alignment of the planar arrowheads DefaultHead2, HookHead2, and TeXHead2 was improved; they now accept an optional normal argument and respect the filltype. A transverse/longitudinal confusion was fixed in the solids module. The camera adjustment routine was improved and is now controlled by the autoadjust=true option for perspective projections; the user is notified when the camera is moved. The obsolete featpost3D.asy module was removed. Midpoint interpolation was reinstated for drawing contours. The Asymptote license was upgraded to the GNU Lesser General Public License. Release Notes for Version 1.65 The xelatex tex engine was implemented. Bugs in pdflatex output and the xelatex alignment were fixed. Release Notes for Version 1.64 Support was added for XeLaTeX PDF specials. The target point is not forced to be part of the control volume for absolute projections. The directory is now stripped from the animation prefix; generated PDF animations are no longer automatically deleted. New parameters xsize and ysize of the asyinclude function of the slide module are illustrated in interactive 3D examples in intro.asy. A Protein Data Bank example was added to illustrate the generation of predefined views. The slidedemo example was fixed. The license of the PRC code and tools was upgraded from GPL to LGPL. Release Notes for Version 1.63 Support was added for XeLaTeX (which requires a modified version of movie15.sty; note however that PDF specials are not yet implemented in dvipdfmx). The 2D contour routines were generalized to handle nonuiform lattices; interpolation artifacts are now avoided when the midpoint function values are unknown. The ncell parameter for 3D contours was replaced by nmesh. The complex gamma function was implemented. Interactive rendering of preview images is now properly synchronized. The bounding volume is now automatically expanded to include the target position. An interactive 3D surface of revolution example was added to slidedemo; rendered images are now automatically included when fitting non-PRC pictures. Duplicate beginclip/endclip functions in pstoedit.asy were removed and the pstoedit-3.45 patch was updated to fix compilation errors. Errors on EOF after reading 0 values are no longer reported. One-column legends are now handled correctly. Old-style constructors were replaced with operator init. An electromagnetic spectrum example was added. Release Notes for Version 1.62 Outputting PDF format to other directories was fixed. An int hex(string) function that casts a hexidecimal string to an integer and a pen rgb(string) routine that returns a pen corresponding to a given 6-character RGB hexidecimal string were added. In the dot routines, Label arguments were added and minor bugs were fixed. A parametric version of markuniform was added. Release Notes for Version 1.61 A workaround was implemented for a dvips misconfiguration in TeXlive 2008 that introduces unwanted %%BeginPaperSize commands into the EPS output. The -q option was reinstated; the asymptote.py Python module was fixed. The bezulate.asy module now enforces the same zerowinding fillrule as used by dvips. In solids.asy, a warning is issued if the silhouette routine is used in a fully 3d context. The freeglut extensions to support user-specified multisampling values were re-instated. A freeglut segmentation fault triggered by spurious window creation in the export loop was fixed. An aspect ratio problem was fixed. A string[] to int[] ecast was added. A Pentype function was added. The asydir() function was fixed under MSDOS. Release Notes for Version 1.60 An optional bool3 condition was added to the graph functions, allowing one to skip points or segment a graph into distinct branches, based on a user-supplied test (see the example gamma.asy). A gettriple routine was added. The interp function first promotes its pen arguments to the highest colorspace. Export exceptions are now caught gracefully. Under UNIX, xasy can now be run from a write-protected directory again. A work around was implemented for the inability of the movie15.sty package to handle spaces in filenames. Stack overflow diagnostics were improved. A read from pipe failure under MSDOS was fixed. Release Notes for Version 1.59 A missing filltype option for projected 2D arrowheads was added. The scaling of plain TeX fonts was fixed. Examples that mix 3D exporting and viewing now work properly. With the -nothreads option, the main process now waits for 3D exports to finish before proceeding. Conflicts in slide presentations were fixed; the asy(string) function assigns defaultfilename correctly. A bug in processing command-line options was fixed. Release Notes for Version 1.58 Two-dimensional arrowheads are now drawn automatically for 2D projections. ArcArrow3 routines were added. Standard pen arithmetic is now used in all colorspaces, so that interp(pen,pen,real) and Gradient(pen[] p) now work as expected. A Wheel palette was added and is used in the example gamma3 to indicate the phase of the complex Gamma function. A silhouette routine for solids of revolution is illustrated in the examples spheresilhouette.asy and hyperboloidsilhouette.asy. Problems with 3D axis label alignments were fixed. The example scaledgraph illustrates how to factor out an axis scaling. Interactive mode is now exited on EOF, unless exitonEOF=false. Support for open function signatures was added. A conflict between asymptote.sty and the breqn package was fixed. PNG images for the manual are now built in a separate directory so that they don't take precedence over PDF files. A problem with xasy under MSDOS was fixed. Release Notes for Version 1.57 The pdflatex texengine was fixed. The default MSDOS "start-in" directory is now %USERPROFILE%, for compatibility with the MSWindows Vista operating system. Temporary files are now generated in the directory specified by the -outname (-o) command-line option, so that write access to the current directory is no longer required. Various font size problems were fixed. The axis coverage calculation was improved. An object(Label, envelope, ...) constructor was added, along with support for object transformation and alignment. Clipping is now allowed across page boundaries; beginclip(picture, path[]) and endclip(picture) functions were implemented. Release Notes for Version 1.56 A bounding box bug in the latex texengine was fixed. The font scaling is now rounded to the nearest integer. The wait=true argument of shipout was fixed. The documentation of grid3 was fixed; examples of using grid3 with scale(true) were added. The handling of the asydef environment within Emacs lasy-mode was fixed. An asyinclude function for embedding 3D PRC graphs in slides was implemented. Release Notes for Version 1.55 A serious bug in drawing paths of length 0 that broke the dot(pair) routine was fixed. Problems in guide to path and path to guide conversions were fixed. A triple invert(pair) routine was added to invert a pair z onto the projection plane. The obsolete field of view factor was removed. Release Notes for Version 1.54 The filltype of three-dimensional labels is now respected when render=0. Multiple file batch mode under MSWindows was fixed. The reverse(guide) and guide examination routines were fixed. A reverse(guide3) routine was added. Curved cyclic paths of size 1 were fixed. Fork is now used by default under MSWindows pending stable CYGWIN POSIX thread support; this can be overridden with settings.threads=true. The need to remove latexusage_.pre along with latexusage-* and latexusage.aux when switching between latex and pdflatex usage was documented. Release Notes for Version 1.53 Forking problems under Windows 2000 were fixed and MS-DOS style path warnings were suppressed. Problems with PRC projection sizing and the rendering logic were fixed. The toolbar is now enabled by default within the asyattach environment. Two-dimensional transforms no longer prevent three-dimensional labels from being projected onto the initial viewing plane. Out-of-memory errors in the OpenGL renderer are caught again. The new tube module was documented and a trefoilknot example was added. Release Notes for Version 1.52 Support for generating PRC output on bigendian machines was added. Multisampling was improved: by updating the freeglut library to svn version 761, one can now specify an antialiasing pixel width with the parameter multisample, which is now an integer. The asymptote.sty and asycolors.sty files are now installed by default in $TEXMFLOCAL/tex/latex. The OpenGL renderer by default now uses POSIX threads instead of fork. A work around for the nonstandardized signature of gluNurbsCallback on various MacOS platforms was implemented. Planar vertex shading was fixed. A planar argument to surface was added. To work around rendering problems with some graphics cards, the window is now hidden only when iconify=true. A tube module was added. A setlocale segmentation fault was fixed. Now that we require a multithreaded version of the Boehm garbage collector, the installation instructions were updated for using the system version. An optional user=false argument was added to min(picture), max(picture), and size(picture). The dependency of asy-mode.el on the cc-mode.el source file was removed. Release Notes for Version 1.51 A separate multisample setting is used to control screen antialiasing; multisampling is now only enabled when viewing. The problem of multiple glInit calls is fixed. A more conservative multisampling patch for freeglut is supplied. The OpenGL process is now always forked for better performance. The last freeglut extension was removed. Release Notes for Version 1.50 Detection and support for the native glut library on MacOSX now allows Asymptote's adaptive OpenGL renderer to be used on all major platforms. The OpenGL renderer now supports antialiasing; a race condition and export problems were fixed. The new default value of maxtile=(0,0) denotes the screen dimensions. Lighting problems due to incorrect normal orientations were fixed. The up vector for embedded PRC output was fixed. A viewportmargin parameter was added to allow for a larger viewport. An iconify setting was added for UNIX systems that support rendering in an iconified state. An embed option (default true) was added to allow one to suppress the embedding of a rendered preview image. A new version of asymptote.sty (1.01) supports file attachments, which provide a better way of embedding 3D PRC files in a LaTeX document. The latexusage file prefix was renamed from latexusage_ to latexusage-. A numerical precision issue in the surface of revolution constructor was fixed. Support for three-dimensional dimension bars was added; PenMargin3 and DotMargin3 were fixed. The argument put=Above (put=Below) should now be replaced by above=true (above=false); this is a backwards incompatible change. Release Notes for Version 1.49 Issues with surface normals that led to incorrect lighting were fixed. By default, the mean(pen[]) routine now returns an interpolated pen with the minimum opacity of all given pens. A patch reverse(patch) function was added. The settings.keep flag is now handled correctly in texpath and strokepath. A cornermean function for surfaces was added. Several examples that illustrate patch and vertex shading were updated. Release Notes for Version 1.48 High-resolution OpenGL tiled rendering was implemented. Support for vertex-dependent colors was added. Centering of perspective projections was improved. Rendering artifacts in planar surfaces and thick lines were fixed. A Gradient palette that varies linearly over a specified range of pens was added. An improved surface constructor for convex three-dimensional paths was added; the planar constructor should now only be used for nonconvex paths. A DefaultHead2(filltype filltype=Fill) arrowhead was implemented, along with an optional filltype argument for HookHead2. New maxheight, hstretch, and vstretch parameters were added to legend(). A boolean user=true argument was added to the point(picture, pair) function; the framepoint routine was removed in favour of truepoint(picture, pair, user=false). A roundbox envelope routine was added. An antialias setting (default true) was added. A bug in xasy and an incorrect precontrol bug in write(path) was fixed. Compilation with standard glut for systems without freeglut is now supported. Release Notes for Version 1.47 Support for simple obj files and patch-specific surfacepens and meshpens was added. Surface constructors for triangles were added. Three-dimensional margins were implemented. Flat 3D arrowhead types HookHead2 and TeXHead2 were implemented. By default, 3D arrowheads are now always drawn with currentlight. A missing angle parameter in HookHead3 was added. Functions that construct a pen array from a given function and palette were added, as illustrated in the example elevation.asy. A bug in the cyclic path write functions was fixed. A strokepath(path g, pen p) function was implemented. A missing put argument in grid3 and a missing transform for projected 3D mesh lines were fixed. File prefix problems were fixed. Spurious "camera too close" errors were fixed. Tighter three-dimensional bounds are generated. Release Notes for Version 1.46 Support was added for embedding 3D PRC files within LaTeX even when settings.render=0. An error is now signalled if the user tries to render an image without freeglut library support. The Klein bottle example was updated to use lightgray instead of the new default surface color (black). The sphere animation example was updated to work with the new skeleton structure in the solids module. Release Notes for Version 1.45 Bugs in the solids of revolution and graph3 modules were fixed; longitudinal curves are split into front and back pieces. Min and max arguments were added to axes and axes3. Rendering artifacts are now avoided. When render=0, 2D and 3D objects are now sized consistently. The automatic camera adjustment was improved. Bugs in thick three-dimensional lines were fixed; thick lines are now drawn with fewer Bezier patches and 3D Linetype offsets are supported. The appearance of unitcones and arrows was improved. New arrowhead3 types HookHead3 and TeXHead3 were added. The default surface color is now black. New surface and path constructors were added. Secure options can now be queried as read-only settings. Release Notes for Version 1.44 Full interactive 3D support has been added to Asymptote, with the option of generating and embedding 3D PRC data in PDF files or rendering scenes directly with Asymptote's own fast OpenGL-based renderer. The implicit casts from 3D to 2D objects were removed (in favour of call explicit calls to project). A path[][] texpath(string s) routine was added to convert string into the paths that TeX would fill. Add boolean stroke parameter was added for shading (and clipping to) stroked paths. The Circle and Arc routines were fixed. Autoscaling of graph axes limits is now disabled by default. A path3 path3(path p, triple plane(pair)=XYplane) constructor was added; the path3 routines were moved to C++ code. Optimized and robust versions of the intersection, windingnumber, inside, and surface extrema routines were implemented. The lighting routines were replaced by the OpenGL model. Each Asymptote process once again uses a separate currentpen. A segmentation fault and an incorrect parameter in the Delaunay triangulation routine were fixed. This major overhaul of the three-dimensional graphics has necessitated a few backwards incompatibilities. The most significant change involves filldraw: filldraw(polygon(5),red); should be replaced by draw(surface(bezulate(polygon(5))),red); Also, the solids module has been improved so that revolution a=revolution(O--X+Z,Z); a.filldraw(red,blue); is now more sensibly written as revolution a=revolution(O--X+Z,Z); draw(surface(a),red); draw(a,blue); Release Notes for Version 1.43 A new array(n, value) function returns an array consisting of n copies of value. Conditional drawing of surfaces meshes was implemented. Vector field support was improved. Graph tick selection without autoscaling was improved. By default, all 2D axes are drawn below existing objects. An interface for drawing contours on arbitrary nonoverlapping meshes was added. Optional support for Jonathan Shewchuk's more robust triangulation routines was added. The file precision setting can now be queried. A beep() function was added. The partialsum function now returns an array of the same length as its argument (backwards incompatible). Dash offset and font selection bugs were fixed. Modules to redefine LaTeX named fontsizes for 10pt and 11pt article documentclasses were added. Problems in asy-mode.el were fixed. A problem with label alignment was fixed. The international inch is now used instead of the U.S. survey inch. The code now compiles cleanly under gcc-4.3.0. Release Notes for Version 1.42 A routine was added for projecting a Label onto a given plane; an ambiguity in the three-dimensional scale routine was resolved. An inside(path p, path q, pen fillrule=currentpen) routine was added to determine if one path is strictly within another. Optional arrows were added to the slopefield routines. The movie function now generates multipage PDF animations when format="pdf" and global=true; a fit argument was added to support an optional filled bounding box for each movie frame. Casts were added between the hsv structure and pens. Bad casts from TeX bidirectional pipe are now caught. In inline latex mode, TeX headers are now output only when needed. A bug in the cancellation of text addition in xasy was fixed. The sticky bit is no longer set when creating the ~/.asy directory. The documentation and FAQ were updated. The dot(real[] a, real[] b) routine now returns the dot product of the vectors a and b; this introduced a backwards incompatibility: dot(x,y) should now be replaced with dot(pairs(x,y)). Release Notes for Version 1.41 Python-style array slices were added. The array virtual field A.keys returns the indices of initialized entries. The concat routine can now take an arbitrary number of arguments. The write functions now output nothing for uninitialized values instead of producing an error. A bounding path is stored in the object structure to allow connections to noncardinal boundary points. The buildcycle algorithm was improved. The expression dir(E) is a synonym for E. The visibility of unsplit solid slices is now properly resolved. A drawpen argument was added to FillDraw. The uniform(real a, real b, int n) function returns a uniform partition of [a,b] into n subintervals. Complex exp, log, sin, and cos functions were added. An interface to the internal adaptive simpson integration routine was added. History lines are now stored immediately after input (as well at exit, after stifling). Support for the HSV colorspace was added. The dependence of non-PDF animations on the animate.sty package was removed by renaming animate.asy to animation.asy (PDF animations still need to import animate.asy). Transparency groups are now respected by xasy. TeX diagnostics were improved. An obsolete function for drawing boxes on pictures was removed in favour of draw(Label,box). Release Notes for Version 1.40 Hatch widths for PDF output were fixed by disabling dynamic line width adjustment. A nurb-related bug in solid shading was also fixed. Release Notes for Version 1.39 In the animate module, a constructor bug was fixed and the temporary multipage pdf movie file is deleted by default. Release Notes for Version 1.38 For perspective projection, nonuniform rational B-splines (NURBS) are now approximated by adding additional control points to Bezier curves. Inline PDF movies can be generated directly within LaTeX files (requires animate package, version 2007/11/30 or later). SimpleHead, HookHead, and TeXHead (Computer Modern) arrow styles were added. FillDraw is automatically reduced to Draw for noncyclic paths. Empty clipping bounding boxes were fixed. The xasy diagnostic Console should now work reliably on all platforms. Graph and interpolation array length diagnostics were improved. The axes routines now take optional xlabel, ylabel, and zlabel arguments defaulting to empty strings. The autoformat axes tick label routines now try to add an extra digit of precision. Pen arguments were added to the flowchart block routines. A path&cycle operator was added. The read1, read2, and read3 routines now affect only the current operation. A -c (command) option and exit() command were implemented. Ambiguous expressions are now resolved by interactiveWrite (with a warning). A patch is included for fixing problems with the Asymptote backend for pstoedit-3.45. Release Notes for Version 1.37 The speed and useability of the graphical user interface has been greatly improved, including full transparency support under MSWindows. The intersections routine was fixed, and an optional fuzz parameter was added. A bug in the arrow routines was fixed. The 2D graph routines were improved when autoscaling is disabled, secondary axis bugs were fixed, and the automatic logarithmic axis coverage routine was re-enabled. Degenerate 3D reference vectors are now handled and the default 3D tick directions were improved. The array returned by intersections is now automatically sorted. A patch is applied to avoid out-of-memory segmentation faults with gc-7.0. A history(int n=1) function can be used to return the interactive history. Automatic semicolons are now added to the history. Locale bugs were fixed. A string[] split function was added. Installation, uninstallation, and diagnostics under MSWindows were improved. A marker dot routine was added. The output(s,update=true) function was fixed. Configure now uses a system version of Boehm GC if the recommended local version isn't present. Release Notes for Version 1.36 Recently introduced bugs in the tex(), postscript(), gsave(), and grestore() commands were fixed. Release Notes for Version 1.35 A hang in testing for the intersection of nearly identical paths in solids.asy was fixed. The numeric formatting of setdash arguments was fixed. Release Notes for Version 1.34 An innovative graphical front end to Asymptote (xasy) has been developed. Clipping of labels is done within a picture environment to avoid unwanted page breaks. The default LaTeX font is now package-dependent. The syntax was generalized to allow expressions such as (x). Comments are now supported when reading strings in csv mode. Nesting capacity overflows in arctime were fixed. The autoscaling of graphs for close minimum and maximum values was improved, the default tick format is automatically adjusted to make tick labels unique, and a general trailingzero format string was added. Improved, robust versions of intersect and intersectionpoints were implemented (based on a new routine intersections). A permissions bug was fixed. A filltype argument was added to the dot routines. Printer stack use was optimized by pruning unneeded gsave/grestore commands. Temporary EPS files are now removed in inline PDF mode. A discussion of the 3D generalization of Hobby's algorithm used in Asymptote was added (intro.asy). Release Notes for Version 1.33 Routines to find the 3D and projected 2D bounding boxes of Bezier surfaces were added to the surface module, along with the standard teapot example. Extended for loops were documented. The page numbering of slide presentations with stepping enabled was fixed. The int type is now a long long type (typically a 64-bit integer). Support for reading and writing 64-bit integers in binary and XDR modes and large file support were added. Input files are now opened in input-only mode. Multiple invocations of labelpath now work. A projection bug in the grid3 module was fixed. The search path order was changed: directories specified by the dir configuration variable are now examined before the .asy subdirectory in the user's home directory. User configuration files are ignored during installation. Some bugs in asy-mode.el were fixed. Texput files are removed again. A memory allocation incompatibility in the workaround for old, broken readline libraries was fixed. The framepoint and truepoint routines now work even when an exact picture size estimate is unavailable; a picture scaling bug was fixed. Writing to a file specified with -o /dir/file.eps is allowed again. A quarticroots solver was added, the cubicroots solver was improved, and a complex quadraticroots solver was added. A workaround for broken texi2dvi installations was implemented. Memory leaks were fixed. The garbage collector was update to gc-7.0; upgrading to gv-3.6.3 is also recommended. A segmentation fault in complement was fixed. Release Notes for Version 1.32 A recently introduced segmentation fault in subpath was fixed. The current directory can now be examined with cd() even if globalwrite is false. The cd path is now only written once in interactive mode. Further garbage collection improvements and leak fixes were made. Release Notes for Version 1.31 Garbage collection was dramatically improved, resulting in reduced memory usage and increased speed. The options -compact and -divisor and the function purge() were added to give the user more control over garbage collection. The array virtual member function delete() with no arguments explicitly deletes all elements of the array. An interpolate(real[][] f, pen[] palette) function was added for constructing the pen array needed by the latticeshade routine. A nullpath frame and picture sizing bug was fixed. LaTeX diagnostics were improved. A facility that does not rely on garbage collection finalizers was implemented for closing open files at the end of each asy process. Release Notes for Version 1.30 Constructors were added. Routines to allow access to guide components were added. The three-dimensional projection and contour routines were optimized. A tickmodifier NoZero and ticklabel format NoZeroFormat were added. A simplified gouraudshade interface was added. A linewidth bug was fixed. The array insert and delete routines were generalized. The new array virtual member "initialized" can be used to detect whether an element is initialized. All fonts are now automatically embedded in PDF files. Inline PDF animations now require version 2007/05/24 or later of the animate.sty package. General root solving routines were added. The implicit initializer for files is null. Boolean arguments were added to the image and shading routines to allow one to disable data buffering. The functionality of the readline routine was split into the routines history, readline, and saveline. Many fixes were made to the Emacs asy-mode.el. Release Notes for Version 1.29 Support for drawing surfaces described by the null space of real-valued functions of three variables was added. The dir command now works correctly for degenerate Bezier paths; an optional final argument can be used to examine incoming and outgoing tangent directions. Numerical overflow and precision issues were addressed. A piecewise monotonic spline type and example were added. Optional fillpen and legend entries were added to histogram. The "q" command quits in interactive mode only if there is no top-level variable of that name. Standard input of strings was fixed. Support for transparent PNG images in xasy was added. Animation support was upgraded to use the new animate.sty package rather than the interim pdfanim_temp.sty package. Release Notes for Version 1.28 TeX error handling was improved. A dvipsOptions configuration variable was added. A recently introduced bug in the XDR routine xinput was fixed. Compilation under the upcoming GCC 4.3 release is now supported. Nonglobal PDF animations, where each frame is separately scaled and written to a file, were implemented. Reading from standard input now works correctly even in the absence of a working readline library. A build problem under Fedora Core 5 was fixed. Parallel builds are now supported. Release Notes for Version 1.27 A Hermite spline graph interpolate type was added for smoothly joining sampled functions. The cycle3, tension3, and curl3 keywords were respectively renamed cycle, tension, and curl. Assignments no longer write the value at the prompt. A bug in longitudinal skeleton detection was fixed. The filloutside routine now works with paths that extend beyond the current boundary. The unit n-point cross function returns a cyclic path. The "append" argument of the output function was renamed to "update", which now allows both reads and writes to the data file. Negative arguments to seek mean relative to the end-of-file; a seekeof function was added. PDF animations can now be loaded from an external file. The TeX pipe handshaking was improved. TeXLive 2007 is now supported under MSWindows. A work around was implemented for a MikTeX bug in handling file names containing spaces. Release Notes for Version 1.26 The correct surface normal is now used when calculating lighting; a Klein bottle example was added. The front/back detection of the transverse skeleton of solids of revolution is fixed. A better camera-independent reference value for resolving path3 orientation is used. A 3D midpoint routine was added. Tick values for broken axes can now be autogenerated; broken logarithmic axes are also supported. A 2D aligned axes example was added. A patch that fixes a redisplay bug in gv-3.6.2 is included. Release Notes for Version 1.25 A new picture size routine, which maps specified user coordinates to a given final size, provides a convenient way of forcing the plotted subregion of a graph to have a fixed size. The correct surface normal is chosen when calculating lighting. The comment character can now be escaped when reading strings from data files (but is disabled when reading raw characters with getc). The new word file mode is useful for reading white space-delimited strings. PostScript output files are now explicitly designated as EPSF in the header line. The minimum width and height of flowchart blocks may now be controlled separately. Interpolation and knot theory modules were added. The usage of path vs. guide in the base files was standardized. Release Notes for Version 1.24 Structures now have implicit initializers. PDF animations are supported in inline tex mode by communicating the texpreamble to LaTeX. The asypreamble environment was removed in favour of corresponding Asymptote commands in the asydef environment. Default y tick values were fixed. The binary space partition now works correctly for projections from infinity; an arbitrary target point can be specified for perspective projections. A 3D version of the intersectionpoints routine was added. Unconditional binary logical operators & and | and bitwise integer functions AND, OR, XOR, and NOT were defined; the array boolean operators && and || were renamed to & and |. The PostScript clipping code was fixed. The angle(rotate(x)) routine now always returns x (mod 360). User debugging errors are now cleared. The fontsize package was updated to use fix-cm.sty instead of type1cm.sty. The Microsoft Windows registry is checked for both GPL and AFPL Ghostscript. A workaround was implemented for a pdflatex vertical offset bug. Segmentation faults in the Delaunay triangulation and image codes were fixed. Release Notes for Version 1.23 Microsoft Windows autoconfiguration has been implemented by querying the registry: Asymptote and the applications it depends on may now be installed in any location. The shipout command is allowed to write to other directories if and only if -global is true. An autoimport configuration setting was added. Importing the Gnu Scientific Library (gsl) now works on all platforms. A texpreamble environment to contain the LaTeX preamble for both LaTeX and Asymptote was added to asymptote.sty. A conflict with the French babel packages was fixed. Background picture sizing in the slide presentation package was fixed. Release Notes for Version 1.22 Problems with loading LaTeX packages and slide presentations were fixed. Non-static variables in every loop iteration are now allocated anew. Formatting under locales with nonperiod decimal separators was fixed, along with logarithmic tick labels near the machine epsilon. Concatenation of nullpaths was fixed. New path markers were added and the perpendicular symbol in the geometry module was improved. The skeleton routines in the solids module were split to provide finer control. Routines to facilitate drawing 3d contours were added. Reading portable XDR binary data into arrays works again; functions for reading and writing also in native binary formats were added. The TeX preamble is no longer output in inline mode. The TeX pipe is now aware of a previously generated aux file. Memory leaks were fixed. An inline limit is now imposed on old compilers to speed up compilation. Setlocale warnings are disabled unless debugging is on. A colorspace command for extracting the colorspace of a pen was added. An Asymptote introductory slide presentation was added and a user-written Asymptote tutorial is now cited in the manual. Release Notes for Version 1.21 Expressions entered at the interactive prompt are automatically evaluated and written to stdout. The routine intersectionpoints returns all intersection points of two paths. Bounding box computations of paths drawn with transformed pen nibs were fixed. Transparency and automatic colorspace promotion are supported when shading and drawing images. A grid3 module for drawing 3D grids and a binary tree module were added. Automatic tick computations were improved: the actual tick value is now passed to the ticklabel formatting routine, even for logarithmic axes. A tickmodifier routine gives users complete control over which of the auto-generated ticks actually get drawn. The contour drawing and filling routines were improved. A --where option makes --listvariables show where global functions and variables are declared. Emacs asy-mode was improved, including function source code lookup. An optional labelpath interface to the PSTricks pstextpath macro was implemented for drawing curved labels along paths. In inline latex usage, picture are no longer scaled by default (use \begin{asy}[\the\linewidth] to recover previous default of scaling to line width). A texcommand option was added to override the tex engine command name. The slide presentation module no longer forces pdflatex; bibliography support was added, figuremattpen was reimplemented, and the spurious vertical shifting of bullets was fixed. Compilation under AIX and IRIX systems is supported. Release Notes for Version 1.20 Explicit yaxis label angles were fixed. Loading and including diagnostics under the -vv option were improved. The Emacs asy-mode now respects TeX-electric-sub-and-superscript. The texpath configuration variable and diagnostics were fixed under MSWindows. Low-resolution palettes now display correctly. A routine to fill cyclic contours was added, along with the example fillcontour.asy. A command-line option to change the current working directory was added. The FAQ was updated. Release Notes for Version 1.19 Bezier surfaces were implemented, along with tensor and Coons patch shading. The cylinder function was changed to be consistent with the cone function. The intersect routine now returns an array of two reals. The unitsize, xunitsize, and yunitsize arguments of shipout have been replaced with a unitsize function. The seconds() function now works portably. Minor bugs in inside() were fixed; a winding number routine was added. The movie bounding box is set to the largest bounding box of all pictures. Portable high-quality embedded PDF movies are now supported, as well as portable external movies. An embedded U3D example was added. Alignment positioning transformation was fixed; a Rotate(pair) and a string(real x) routine was added. Flowchart routines and the labelbox and advection examples now work with pictures as well as frames. An add(picture pic=currentpicture, drawer d) wrapper was added; a picture rescaling bug was fixed. Tex error handling was improved. Optional bounds arguments were added to verbatim postscript and tex commands. Writing to only the local directory is allowed unless the -global (or -unsafe) option is specified. A final backslash continues a line on the interactive prompt; a new multiline option is convenient for cutting and pasting code in interactive mode. Clipping now sets the true size coordinates to 0. Memory usage was reduced. The documentation was updated, including a description of how to produce Debian binaries from RPM binaries. Release Notes for Version 1.18 A pen caching problem and clipping bugs were fixed. Bugs in interactive mode and in linemode string reads were fixed. The picture.scale() routine now guards against division by zero. The drawing of surface meshes was fixed. The minbound and maxbound functions were implemented also for arrays. The labelx, labely, xtick, and ytick routines respect the current graph scaling. The asycolors.sty file was updated to remove the pstricks dependency. The slide package now works with both latex and pdflatex; the colordvi dependency was removed. A nativeformat() function returns "eps" or "pdf", depending on the current tex engine. The pdf() and latex() functions are now visible. The usepackage and minilatex modules check for latex mode. Static variable allocation is now discussed in the FAQ. An image histogram and contour example was added. The diatom example was modified to illustrate interaction of fixed-sized and scaled coordinates. Release Notes for Version 1.17 A workaround for a garbage collection bus error under MacOS X was implemented. A uniform histogram routine was added to the stats module. New frequency binning routines were added. The argument order of the nonuniform frequency binning routines was interchanged for consistency (backwards incompatible). The FAQ was updated. Release Notes for Version 1.16 Inline LaTeX mode was fixed. The legend routine was generalized to allow multiple entries per line; an example was added. The truepoint function was renamed framepoint. A function truepoint that works like point but accounts for fixed-sized objects was added. The picture.calculateTransform function now returns the actual transform used for fitting in the case where only an approximate picture size was available. A 2d frequency binning routine was added to the stats module. A memory leak was fixed. Release Notes for Version 1.15 Graphics label bounds and incorrect path bounds in latticeshade were fixed. The LaTeX color package is now used for the latex and pdflatex engines, to keep them informed of the current color. A unitlength of 1pt is now enforced in inlinetex mode. In cases like 2D graphs where only an approximate picture size estimate is available, the transform is adjusted so that the fitted frame meets the size specification. The cube animation and binary space partition were fixed. The determinant of a singular matrix now returns 0 instead of an error. Temporary pdf files are removed. The gv patches were removed since these are included in the long-awaited gv-3.6.2 release. A workaround for a compilation problem under MacOS X 10.3.9 was implemented. A DIN 15 CAD package and new examples were added. Release Notes for Version 1.14 General affine transforms and clipping may be applied to TeX labels; bugs in label alignment transformation were fixed. The TeX engines latex, pdflatex, tex, and pdftex are supported. Separate xunitsize and yunitsize scalings are allowed. Graph axis bound communication was added to allow axes with ticks and unextended axes to be called on an empty picture. Path labels are drawn after the path (to support UnFill). Filltype definitions were standardized; a Draw filltype was added (for drawing a bounding box around a label). New filloutside routines were added. Images can be drawn for irregular mesh contours and two-dimensional pen arrays. Landscape slides automatically enable PDF autorotate option. A MetaPost buildcycle routine was added. Setlocale errors are ignored. The "Cannot write to venn_.tex" error under Windows XP was fixed. Very old readline libraries found on many MacOS X systems are detected. The editing mode asy-mode.el supports Emacs version 21. The option \usepackage[inline]{asymptote} is now supported under both latex and pdflatex. Release Notes for Version 1.13 Image and contour transposition conventions for matrices were standardized; resolution arguments were removed from the matrix contour routines. The bounding box is now correctly calculated for square pen caps. A bug in drawline was fixed. An up argument was added to the projection routines to specify the camera orientation. The definition and documentation of cone was fixed; surface function signatures were consolidated. New 3d examples were added. Legends and markers are now allowed when drawing superpaths. Zero page alignment no longer suppresses labels; bounding box fuzz was removed. Intelligent interactive auto-completion was added. If scroll is negative, an entire page is scrolled. Support for Adobe Reader annotations was added. Write without data arguments now works like write with data arguments. A list function displays all global functions and variables in a module. The Emacs asy-mode.el was improved. A FAQ was added. Release Notes for Version 1.12 PDF transparency was implemented. The documentation of Bezier curves was improved. Bounding box calculations now account for label scaling. A special case of the Step calculation in graph.asy was fixed. The function scroll(int) was changed to a setting; a quit (q) option was added to the scroll facility. To avoid an unwanted ghostscript window, gswin32c (rather than gswin32) is used by default for producing pdf files under MSDOS. Release Notes for Version 1.11 The defaultformat string is used again for graph tick labelling commands instead of an empty format string. A workaround for the broken libsigsegv-2.3 library that caused a premature exit(1) was implemented. An extra blank line at the end of 3D array writes was removed; 3D array transpose and copy functions were added. The realmult routine was moved to runtime and documented. The example embeddedmovie of embedding movies within PDF files was added. Overflow diagnostic messages during mpeg merges are now suppressed. A twice setting was added to resolve LaTeX references. The settings module is now globally accessible. Duplicate trace messages were pruned. Debugger breakpoints can now be set using a matching substring instead of a line number. Conditional breakpoints are now supported. Runtime errors and interrupts no longer reset the interactive environment. Release Notes for Version 1.10 Parametric surfaces were implemented and parametric graphs now respect picture scaling. Fill and FillDraw now work for markers and superpaths. A bug in reading strings from files was fixed. Support for MikTeX 2.5 and Autoconf > 2.59 was added. Asymptote and output filenames can now contain spaces. Interrupts are working again. A line-based debugger was implemented. Release Notes for Version 1.09 The workaround for the gv-3.6.1 option handling bug now supports earlier versions of gv, including gv-3.5.8. By default, Ghostscript version 8.54 is used by the MSWindows version to produce PDF files. Release Notes for Version 1.08 Resolution problems in the contour routines were fixed; null contour labels are now suppressed. Configuration problems were fixed; the malloc configuration checks were removed and the help command again knows the correct location of the manual. In the slides package, some stepping bugs were fixed, an institution field was added to the titlepage, and vbox support (say for aligned equations) was added. A colorless(pen) function that strips pen color attributes was added. A clean copy of the source files is now shipped. Release Notes for Version 1.07 This release implements uniform and irregular mesh contour drawing algorithms: contours can be individually labelled or filled using a colour density palette. The flowchart interface and alignment were improved. A slope fields package was added. The arrow size limiting code was fixed. Some bugs in makepen were fixed. Image and shading functions now respect the -gray, -rgb, -cmyk, and -bw options. Date arithmetic routines were added. Several small bugs in the graph routines were fixed. Custom three-dimensional projections can now be easily constructed. The public keyword is now the default permission modifer. A new keyword, restricted, makes variables readable but not writeable outside the structure in which they are defined (previous this was the default behaviour). A user-transparent work around for the backwards-incompatible command-line options of gv-3.6.1 was implemented. Various configuration problems were addressed to better support the Asymptote rpm for the Fedora Core Extras project. A cputime() function was added. Release Notes for Version 1.06 General flowchart routines and an example were added. Papersizes other than letter now work with -outformat pdf again. Performance was improved by avoiding unnecessary output flushing. An asycolors.sty package was added to make LaTeX aware of CMYK versions of predefined Asymptote colours. The default pdf viewer for MacOS is now "open". The -u option can now be specified multiple times on the command line. Optional x and y margin arguments were added to Fill. A reverse video option was added to slide.asy; titlepage and title by default call newslide, unless the currentpicture is empty. An argument was added to newslide to allow stepping to be turned off for that slide. The slidedemo example now generates any required eps files. A segmentation fault in eval was fixed. Release Notes for Version 1.05 Shaded and skeletal representations of surfaces of rotation were implemented. New oblique projections were added and bugs in the 3D graph routines were fixed. An argument reversal in one of the add routines was fixed. A clipping margin was added to unfill. General determinants were added. Sin, Cos, Tan, aSin, aCos, and aTan, which use degrees, are now built-in functions. The dash adjustment algorithm was improved. The cubicroots solver now works again when R=0. Internal operations are now added for all variable declarations of new arrays and functions. Automatic viewing can easily be turned off under MSDOS. Nonstandard paper sizes are now correctly handled. The C locale is always used when producing postscript patterns. Configuration problems were fixed. The editor customization files asy.vim and asy-mode.el were moved to the Asymptote system directory. Stepping of slide presentations can now be enabled from the command line. Many new tests were implemented. The examples were moved to the examples subdirectory of the documentation directory. RPM files are now released. Release Notes for Version 1.04 A convenient presentation slide package was developed. The misalignment of TeX and PostScript layers was fixed by giving includegraphics the exact bounding box. The overall bounding box was also fixed. The tension atleast command and the clipping of remote labels by unfill near the frame boundary were fixed. Permission checking for types was added. The new point-like truepoint function uses the actual current picture size. Locale support, the ', I, and F format specifiers, and custom pagewidth and pageheight settings were added. A Ticks specifier draws ticks on both sides of the path; format="%" also suppress tick labels for logarithmic axis. The linetype adjustment to the arclength was improved and can now be optionally disabled. Color names were systematized, including texcolors and x11colors. A general purpose user command-line option accepts arbitrary Asymptote code as a string. All duplicate path points in three.asy are now removed. A convenient fixedscaling picture sizing routine was added. Selected special functions from the GNU scientific library, DESTDIR support, and a Python module to access Asymptote commands were added. The legend skip is now based on the actual legend entry height, not the fontsize. A backwards incompatibility was introduced in attach, add, and legends (add and attach take arguments in the same order as label): attach(point(E),legend(20E),UnFill) -> attach(legend(),point(E),20E,UnFill). Release Notes for Version 1.03 Support was added for compiling under gcc-4.1.0. A memory leak in interactive mode was fixed. A procedure for using CJK fonts was documented. The return type of the three-dimensional intersectionpoint routines was fixed. A function for inverting 2D points projected from 3D back onto a specified plane was added, along with a solid geometry package with routines to draw cylinders. New xaxis(triple,real), min(guide3[]), and max(guide3[]) convenience functions were added. A Degrees function like degrees(pair), except that it returns 0 for a (0,0) argument rather than generating an error, was added. Interactive mode (without command-line editing or history) now works even in the absence of the GNU readline library. An upper limit (100000) on the number of calls to intersectcubics per cubic segment was imposed on the intersection routines. The documentation was updated. Release Notes for Version 1.02 Lighting was implemented for surfaces described by functions and matrices. A bug in the positioning of axis labels was fixed. The type of randMax was fixed. Configuration and diagnostics were improved; the "dir" setting in configuration files is respected. Under MSDOS, the configuration file is now %USERPROFILE%/.asy/config.asy; configuration settings now work as documented. On UNIX systems, installation can optionally be performed without root privileges. Errors thrown by the parser while reading the configuration file are now handled gracefully. The patches to pstoedit were removed since they are now included in pstoedit-3.44. Release Notes for Version 1.01 A bug in the surface plot of a matrix was fixed. A workaround was implemented for the broken GNU readline/history library under MacOS. Release Notes for Version 1.00 A pen bounds error was fixed. A bug in the linear equations solver was fixed. Images now transform properly and nonsquare images appear correctly. The legend argument of draw accepts a Label. An interface to the movie15 package for embedding movies, sounds, and 3D objects within a PDF file was added. A bug where nonsolid pen types were ignored was fixed. Missing xpart, ypart, and zpart functions were re-added. A segmentation fault in format was fixed. An interface to the GNU readline function was added to allow editing of input. A complement function was added. A bug in the 2D graph tick selection routines was fixed; xlimits and ylimits no longer crop data by default. For consistency, the "includegraphics" labeling function was renamed to "graphic". Release Notes for Version 0.99 A bus error and compilation error under MacOS X were fixed. If -debug is set, execution continues after the first error. The "make check" code was fixed. The contributed MacOS X binary site is now mentioned in the documentation. Release Notes for Version 0.98 Command-line options and configuration variables were reorganized into an Asymptote settings module, allowing default values to be set in ~/.asy/config.asy (~/.asy/options is obsolete). Command-line options can be negated by prepending -no to the option name. Type-dependent function and record operators are now added to the parent record. Execution stops after the first error in a runnable. Two- and three-dimensional array min/max functions for all ordered builtin types were implemented. Comments are now allowed within 3d data blocks. The base file plain.asy was split into many subfiles. The currentpen nib is respected. Warning messages are suppressed when shipping out an empty picture. The tick computation was fixed when xaxis and yaxis are called with explicit limits. The -t option was removed as it is no longer needed for generating inline tex files. Machine constants are now implemented as variables rather than functions. Release Notes for Version 0.97 An uninitialized pen transform bug was fixed. A workaround was added for a readline incompatibility under MacOS X 10.4.3. Incorrect and missing names for builtin function arguments were fixed. Duplicate functions were removed. Release Notes for Version 0.96 A MetaPost-style makepen function allows the default pen nib to be changed to any polygonal (possibly nonconvex) cyclic path. A unitsize argument was added to the shipout command. Three-dimensional lighting effects were added and illustrated with the Gouraud shading of a sphere. The MidArrow attribute was fixed. Builtin functions now have named arguments. Brackets are now part of the quote syntax. The write command was generalized to allow writing a list of vectors as columns. Drawing to standard output now works even when there are no labels. The -noView command was replace by -nView or -no View. Several segmentation faults were fixed. Custom axis types were documented. Release Notes for Version 0.95 A memory leak was fixed; garbage collection messages are now suppressed unless the -d option is given. In interactive mode, a reset keyword was implemented to restore the environment, except for the scroll setting. The interactive input command now does an automatic reset. A link was added to the GNU readline library documentation for customizing interactive key bindings. A hang in scroll mode on an end-of-file condition was fixed. To reduce LaTeX memory usage, the scalebox macro is used only where required. A legend problem was fixed. The documentation was updated. Release Notes for Version 0.94 A label bug arising from a conflict between some versions of the LaTeX pstricks and graphicx packages was fixed. Embedded LaTeX files are always run in quiet (-noView) mode. Frame loading issues with imported types (for example, with the triangle SAS constructor in the geometry module) was fixed. The command import graph is now an abbreviation for access graph; unravel graph. Release Notes for Version 0.93 The import scheme was completely redesigned, with new keywords access, unravel, from, and include. A true (rather than emulated) interactive mode and runtime imports have been implemented. The default pdf browser is now acroread; the pdf fuzz workaround for gv was removed. The tension3 and curl3 keywords were re-added; a surface graph routine for matrices was implemented. Problems with csv mode were fixed. The function defaultpen() was renamed to resetdefaultpen(). Integer division via quotient(int,int) is now consistent with the modulo (%) operator. Checks for integer overflow and erf, erfc, and gamma functions were added. More descriptive names latticeshade, axialshade, radialshade, and gouraudshade for the shading routines were chosen. Horizontal and vertical label scaling was implemented. Default command line style-parameters can now be stored in ~/.asy/options. The interactive history file is now ~/.asy/history by default unless -localhistory is specified. Outputting to standard output via "-o -" is now allowed. Release Notes for Version 0.92 Clipping now clips labels and all layers of a picture, not just the most recent one. A bug in precontrol and postcontrol was fixed. A ticklabel bug and precision errors at +/-1e-4 were fixed. An example of a "broken" x axis was added. A dot product now requires explicit pair arguments. The implicit cast from real to pen was removed. Straight flags are now preserved when using a path as part of a guide. An UnFill filltype was added for clipping underneath labels and legends. A struct marker was added to support arbitrary marker locations. Directories are no longer stripped from explicit output filenames. A function inside was implemented to test whether a point is inside a cyclic path. The routines inside, quadratic solver, and intersect in math.asy were replaced by internal C++ routines. A robust real cubic root solver was added. A floating point exception in complex powers when base is zero was fixed. Colinearity checks were added to the leastsquares routine. The interface to plane was changed to return a representation of the plane through point O with normal cross(u,v). The routine intersectionpoint was moved to plain.asy and a 3d version was added to three.asy. We now draw over existing TeX layers when doing 3d hidden surface removal. A 3d aspect ratio can now be specified. A gui() function and MSWindows support for xasy was added; this will require renaming "gui(" to "GUI(" in any existing .gui files. The dir argument of picture.fit() was moved to add(frame,pair) and attach(frame,pair): add(pic.fit(E)) -> add(pic.fit(),E). Release Notes for Version 0.91 Fixed GUI transforms: grouping should not depend on deconstruct flag. Release Notes for Version 0.90 Default function arguments are now evaluated in the scope where the function is defined, not in the scope of the caller. The depth handling of deferred TeX labels was fixed. The positioning of 3d axes labels was improved; an example showing tick and axis label rotation was added. A minimum value of fuzz in the intersect routines is enforced to prevent infinite loops. An error in the man page regarding the -t option was fixed. The write function was generalized to handle an arbitrary number of data values. Release Notes for Version 0.89 The processing of GUI files was fixed. User-specified ticks now work also with logarithmic axes. The arguments of LeftTicks and RightTicks were standardized; it is now possible to include a general string(real) routine to typeset each label. Logarithmic axes ranges of less than a decade are no longer upscaled when autoscaling is disabled. All references to the mailing list were removed from the documentation since the forum is now used in its place. The temporary included PostScript file suffix was renamed from "ps" to "eps". Release Notes for Version 0.88 The graph routines were overhauled to support both two- and three- dimensional axes, partitioning them uniformly in tick value space, not with respect to arclength. An empty format string is treated as defaultformat. A fuzz parameter was added to the intersect routines; these routines now work for points. Data file comments were implemented. The perpendicular routine now uses an alignment argument; scale(pair) was removed. An option was added to asymptote.sty to make all LaTeX symbols visible, along with a second optional string to Label for providing a size estimate for undefined labels. Numerous small bugs were fixed; the pstoedit patch was updated. The installation and instructions were improved. An environment variable for every external command was added. The argument order of the axes routines was standardized; a call like xaxis(min,max,"$x$",red,Bottom,LeftTicks); should now be written xaxis("$x$",Bottom,min,max,red,LeftTicks); Release Notes for Version 0.87 This release implements general hidden surface removal using a binary space partition and adds three-dimensional versions of the standard path functions (arclength, subpath, intersect, etc.), along with circle and arc functions. Hidden surfaces in regular mesh surface plots now are properly handled from any camera location. The arclength rather than the length is used for determining default label position on paths; Relative(real) and Relative(pair) functions were added for labelling paths relative to the total arclength and local path direction. Structure constructors and operators == and != were implemented and documented. The permissions of static functions within structures was fixed. A pen argument to filltype Fill to specify an interior pen distinct from the boundary pen was added. For convenience, array push members now return the pushed element. A missing shift in Label.out(frame) was added. The feynman module was updated to include a new function texshipout; MidArrow was moved to plain.asy. The optional position arguments of BeginArrow and related functions were fixed. A numerically robust quadratic equation solver was added. Release Notes for Version 0.86 Fixed make man problems. Release Notes for Version 0.85 A fully three-dimensional, rotationally invariant, generalization of the two-dimensional MetaPost path construction algorithms has been implemented. A tridiagonal solver was added. Adobe's automatic rotation of PDF files was disabled. Cyclic indices are now allowed only on arrays having the virtual cyclic flag set to true. The bug fix in simplex was generalized. An online help option was added to interactive mode; exit is now a synonym for quit. Microsoft Windows resource fields and an icon were added. ASYMPTOTE_DIR can now be a list of directories. Since some files were moved in this release, Microsoft users may wish to first uninstall the previous release to avoid duplicate files. Release Notes for Version 0.84 This release ports Asymptote to the Microsoft Windows operating system; an executable file is distributed. Label parameters are now in a structure called Label, to which strings are implicitly cast, and which can be rotated and shifted with a transform. Automatic sizing under picture transformation was fixed. A bug in the simplex method was fixed. Lattice and Gouraud shading were added. An array append method, virtual transform components, and transform 6-tuple notation were added. A pen and filltype were added to legend. The 2d graph and palette code were cleaned up. An extend option was added to draw ticks across the graph for producing a grid. Problems with nullguide3 were fixed, the arguments of 3d rotate were swapped, and 3d reflections were added. A spurious papersize comment inserted by newer versions of dvips was removed. Pstoedit support was updated. This release introduces a few minor backward incompatibilities. Here is a summary of the main changes: draw("text",(0,0)--(1,1),1.0) -> draw(Label("text",1.0),(0,0)--(1,1)) label("text",90,(0,0)) -> label(rotate(90)*"text",(0,0)) labeldot("text",(0,0)) -> dot("text",(0,0)) labeldot((0,0)) -> dot(Label,(0,0)) labelbox(2mm,2mm,"text",(0,0)) -> box(Label("text",(0,0)),2mm,2mm) xaxis("$x$",0.5) -> xaxis(Label("$x$",0.5)) labelxtick(1) -> xtick(Label,1) Release Notes for Version 0.83 This release extends Asymptote to three dimensions. A triple type (which replaces the old vector type in math.asy) and a guide3 type were added, along with the 3D projection routines in three.asy. Three-dimensional arrays can now be read in line mode, using blank lines as block delimiters. An array pop function was added. Math mode ($ delimiters) were moved to within the "defaultformat" string, to allow use of non-math mode fonts in tick labels (by overriding the default format). A pticklabel option for drawing tick labels with a different pen was added. Routines labelxtick and labelytick were added, and the tick size and shift in xtick were fixed. The autoscaling of unextended axes was fixed. The xline and yline routines were renamed to xequals and yequals, Dot was renamed to dot, Cross was renamed to cross, the function "Angle(pair)" was renamed to "degrees(pair)", and a "Degrees(pair)" function was added to math.asy. The Metapost --- operator and the replacement :: for the MetaPost ... operator were implemented. A segmentation fault involving controls points with direction specifiers and a bug in "string font(pen)" were fixed. Tensions in straight sections of paths are now handled as in MetaPost. The -l option was reimplemented. Release Notes for Version 0.82 Initializers for structures and general cast operators can be specified. Functions can be called with named (keyword) arguments, in any order. Rest arguments are supported. Size and aspect ratio arguments, which may be specified with "size", were removed from "shipout". The tick routines were standardized; custom tick locations and arrows on axes were implemented. The default frame initializer nullframe was renamed to newframe. A segmentation fault in the file garbage collection code and an optimization-related bug in fill were fixed. Unlike in the C and C++ languages, an assignment in a function argument is now interpreted as an assignment to a parameter of the same name in the function signature, not within the local scope. The command-line option -d may be used to check Asymptote code for cases where a named function argument may be mistaken for a local assignment. Release Notes for Version 0.81 A guide solver bug was fixed, allowing the construction of graphs with a single data point. Compilation under g++-4.0.0 is now supported. Release Notes for Version 0.80 A segmentation fault on the alpha (cxx) and mac platforms was fixed. All members of the picture structure are now deep copied. The latest Boehm garbage collector (version 6.5) is used by default. Release Notes for Version 0.79 Types are now cached to speed up parsing. All outstanding garbage collection issues were addressed. The autoscaling of scaled axes was fixed. Another example of a secondary axis was added to the documentation. A Pythagorean tree example illustrates picture transforms. Release Notes for Version 0.78 A binary search routine was added for sorted arrays. The handling of NAN values was fixed. The "checkaxis" test in graph.asy was improved. A problem with implicit closing of files was fixed. Minor changes were made to support compilation under Cygwin. A workaround for the garbage collection warning about repeated allocation of very large blocks was introduced, along with other miscellaneous garbage collection updates. A configuration option was added to request use of a (slower, multi-theaded) system version of the Boehm garbage collector. Release Notes for Version 0.77 Integer arguments are now converted to real values before dividing and a real quotient is returned. The "quotient(int, int)" function returns the integer part of that result. Garbage collection has been implemented to fix memory leaks. A knot solving bug was fixed. Pen "plabel" vs. "p" issues were addressed. The eval function was renamed to map and the new eval(string) function was documented. The concat function can be used to concatenate two arrays. Complex exponential and logarithmic functions were added. The new function reltime can be used to compute the label position argument for draw. A new geometry module includes a triangle structure and functions to draw interior arcs of triangles and perpendicular symbols. Release Notes for Version 0.76 Installation has been simplified by removing the last remaining dependency on the boost header files. A "plabel" argument was added to "draw" to allow labels and legends to use a different pen than the curve itself. The pen arguments in the axes routines were rearranged to be consistent with "draw". TeX errors in interactive mode and the TeX preamble are now handled properly. New functions "getstring" and "getreal" can get and remember user parameters. Marker frame arrays, a "Mark(int)" function, and "node", "value", and "slope" path computation functions were added. Problems with implicit scaling were addressed. The "without side-effect" warning was removed. An option was added to list all loaded global functions. The documentation of structures was improved. Release Notes for Version 0.75 This release fixes a number of bugs with the new parser controller, including a segmentation fault with the -p option, problems with interactive mode, and problems reading from standard input. The graph module now uses a better default value of axislabelmargin for positioning axis labels. The put argument of the axis routines was moved to the end of the argument list, for consistency with draw. Convenient xline and yline interfaces to the axis routines were added. The definition of the correlation coefficient in the least squares routine was fixed, and a fit function was added to the 'linefit' structure. A linear interpolation (with endpoint extrapolation) and a binary search routine were added to math.asy. Release Notes for Version 0.74 This release fixes a segmentation fault in version 0.73 and also reduces the default number of colors in image palettes to work around PostScript/PDF limitations (that can cause the manual not to print). Release Notes for Version 0.73 A more efficient type-safe union was used to speed up the virtual machine by roughly a factor of 5. New routines "ellipse" and "labelellipse" were added for drawing ovals around frames and labels. The function "bbox(frame)" was renamed "box(frame)". These routines now prepend to the frame for filling with a background color; they also return the boundary as a guide. A workaround was added for a bug in gcc version 3.3 to facilitate compilation under Darwin (MacOS). Many internal coding improvements were made.