Greater priority
----------------
libplot: decide whether to provide a workaround for a font problem in
recent releases of XFree86: the Type 1 versions of the Symbol and
ZapfDingbats font use an erroneous coding scheme (character codes are
offset by 0x20 = 32).
libplot: enhance the SVG driver to keep track of whether the output is
consistent with the `Full' or `Tiny' SVG profile. The only relevant
differences appear to be that in SVGT, "all numbers must be limited in
range between -32,767.9999 to +32,767.9999 or the scientific notation
equivalent", and that when drawing paths, the elliptical arc commands
A (absolute ell. arc) and a (relative ell. arc) are not available.
libplot: enhance the SVG driver to use SVG's .. construct
for styling and positioning substrings. Our present scheme for changing
fonts, adding subscripts, etc., in the middle of a label, works fine if the
font(s) are available on the SVG viewer and have the metrics we believe
they do. But either of those two assumptions may fail. So the
.. construct should always be used. Nested tspans will be
needed. Note: SVGT does not support tspans.
libplot: enhance the SVG driver to adjust the width of text strings to be
what it should be, according to our internal font database. This is
important if a requested font is unavailable.
libplot: improve the handling of compound paths to support non-nested
subpaths, i.e. multiple simple paths that may intersect each other, as well
as themselves. For this, use Raph Levien's libart? SVG Plotters already
support non-nested subpaths, though it isn't documented.
libplot: add support for a user-level `closepath' operation. Internally,
drawing of Hershey fonts should use it.
libplot: to CGM Plotters, add support for the version-4 WebCGM features,
i.e., hyperlinks based on CGM `application structures'. Maybe set up a
standard way of defining hyperlinks, which could be used by SVG and
Illustrator Plotters too?
libplot: add the display list concept, i.e. retained 2-D graphical objects
(will also facilitate adding support for compound objects and redrawing).
libplot must become more widget-like; cf. guppi.
libplot: support copying graphics from one Plotter to another (e.g., via
display list; cf. OpenGL).
libplot: support object-level clipping, via computation of a bounding box;
maybe precise rectangle-level clipping too? Will require addition of
clipping support to libxmi. Maybe PS-style clipping by arbitrary paths?
If so, a new PS-like drawing model, with a new interpretation of
savestate/restorestate, will be needed.
libplot: add support for gradient fill. Which output formats provide
native support for it? WebCGM, SVG and Illustrator certainly do.
graph: continue librarifying the plotting routines, and incorporate them in
libsciplot? Maybe a GUILE interface?
graph: need better clipping for filled regions (present gnuplot-style
clipping scheme is right for unfilled regions but wrong for filled ones)
libplot: add support for compound objects (supported by Fig, idraw, AI).
Support should be compatible with support for SVG's `containers'.
libplot: add support for rectangular raster objects ("device independent
rasters"). Supported in SVG and CGM format, etc.
libplot: add support for tiling of paths (with device-dependent rasters).
libxmi already supports this.
libplot: compare its functionality with other graphics libraries,
e.g. Allegro's shading and texture-mapping features, and gd.
Intermediate Priority
---------------------
libplot: extend parsing of BITMAPSIZE parameter to include options
xsize,ysize,xorigin,yorigin,xoffset,yoffset, just like PAGESIZE. This
would affect the graphing utilities (--bitmap-size option, when producing
bitmap output, would be invoked similarly to to --page-size).
libsciplot: new graphing library. Incorporate all functionality of VOGLE,
PGPLOT, and PLPLOT libraries; check into GLE, PLOTPLUS, XYPLOT, DISLIN (not
open-source; see http://www.linmpi.mpg.de/dislin/). Think about Guile, and
Tcl/Tk, and Python. libsciplot will support contouring, but not 3d surface
plots yet.
libsciplot: when plotting a curve containing data points, symbols should be
plotted _last_, after endpath() is called.
libplot: In Illustrator format, colors may be specified by CMYK values or
(in recent Illustrator versions) by RGB values. Illustrator's mapping
between them is not documented, and does not seem to be the usual one.
When generating Illustrator format we use CMYK, but maybe we should use RGB
instead?
libplot: distinguish between PSPlotter and IdrawPlotter (latter will use
current PSPlotter code for emitting `stateless PS', former has yet to be
written).
libplot bitmap Plotter support: add sub-parameters to the BITMAPSIZE
parameter, for specifying offset of viewport within bitmap? Clipping too?
pic2plot: extend parser to support the Bell Labs `picasso' constructions
(extensions of the pic grammar).
libplot: use freeware rasterizer for type 1 fonts [t1lib, by Rainer
Menzner; see
ftp://ftp.neuroinformatik.ruhr-uni-bochum.de/pub/software/t1lib ].
Or, if patent worries can be overcome, FreeType or FreeType2.
libplot: PNG driver should optionally use indexed rather than true color.
Also, should include a user-specifiable gAMA chunk?
libplot: add alpha support to color specification. Maybe via new
operations penalpha(), fillalpha(). (WebCGM format already includes alpha
support, via a registered escape element.)
libplot: if the pen level has been set to `0' by invoking pentype(),
thereby turning off the edging of paths, and the drawing of marker symbols
and points, then the drawing of text should be turned off too? In the
texinfo documentation we've promised to do this.
libplot: when path edges are not drawn (i.e. when `pentype' is called with
an argument of 0), the scheme used by the PS driver for quantizing fill
colors for idraw is suboptimal. Could be much improved (would need to
optimize over choices of idraw's fg color, bg color, and shading level,
i.e. a 3D search).
ode: extend parser to plot functions as well as solve differential equations.
libplot: redo X driver, to support window reuse (`persistence') by any
X Plotter. Will require forking off an outboard process.
graph: allow all command-line options in input data files, on comment
lines; maybe write alternative parser for interactive version (gnuplot
replacement).
libplot: add interactivity (e.g. getloc()), during openpl()...closepl().
Need to translate back to user coordinates. [For libsciplot, even
further?] For Tektronix driver, implement GIN mode (need stty twiddling?).
Also need char input (cf. starbase).
Break out spline() as subroutine(s), cf. fitpack? Cf. IMSL interface.
Similarly with plot frame / axis drawing. For this, check into NCAR
Graphics package, `autograph' routines.
ode: should support popen() for output; cf. gnuplot.
graph: add `boxes', `steps', `impulses', `bars' plot types (as in gnuplot).
Boxes, bars should properly support --fill-fraction option.
graph: add support for polar/spherical plots, 3-D (surface) plotting.
Low-priority (and idle thoughts)
--------------------------------
libplot: PNG driver, when outputing a grayscale image, should use the
optimal bit depth. PNG grayscale (without alpha channel) supports bit
depths of 1, 2, 4, 8, 16. Right now, we use bit depth 1 for bitonal
images, as we should, but for grayscale images that aren't bitonal, we
always use bitdepth 8. We should use 2 or 4 instead, if reasonable.
libplot: Fig output format now supports specifying a `transparent color',
for use when xfig exports GIF files. It would be good to support this.
libplot: add a warning about color exhaustion to the GIF driver (cf. the
warnings issued by the Fig and X drivers).
libplot: internally, text string handling oscillates wildly back and forth
between (char *) and (unsigned char *). Fix this.
libplot: _flush_plotter_outstreams() method, a non-public member function
of the Plotter class, should really be static.
libplot: there should be a way for the "none" background color to take
effect on Metafile Plotters; currently, it does not.
libplot: add support for a `rounded rectangle' primitive (pic2plot will use
it). SVG and Fig formats support rounded rectangles, though xfig insists
that the rounded corners be quarter circles, not just quarter ellipses.
libplot: finish adding support for the filling of paths to the ReGIS driver
(i.e. handle the case when the paths to be filled extend beyond the edge of
the ReGIS display, requiring clipping). Also make the driver do real-time
display of unfilled paths, segment by segment, like the Tektronix driver.
libplot: Tektronix driver used to have a feature of waiting for 1 second
after performing a screen erasure, if -DGENUINE_TEKTRONIX was defined
during compilation (Tektronix storage tubes took that long to clear).
Restore it?
plot: the --line-width and --font-size options, which are useful only when
plotting old files in Unix plot(5) format, are implemented poorly. The
computation, from the command-line arguments (fractional line width and
font size), of the line width and font size in user coordinates, is
currently correct only for graphics displays that are square.
libplot: pl_parampl_r should support taking a NULL pointer (to a
plPlotterParams struct), as its final argument.
libplot: if HP-GL/2 driver draws with a restricted palette of pens (the
default), it follows a policy of never quantizing a nonwhite color to
white, i.e. to pen #0. Is this the right thing to do? (Note: this policy
applies only to the pen color, not the fill color.)
libplot: Ponder the comment taken from an earlier version of the source
code: "We don't allow openpl() to reset the frame number to zero (in
XDrawable Plotters that is, unlike XPlotters). Incrementing the frame
number monotonically facilitates color cell management, since we've only
got one connection to the X display (see x_erase.c)."
plot: should document that `plot -TX' will use double buffering if
environment variable USE_DOUBLE_BUFFERING is "yes". Maybe make that
user-settable via an option? Similarly, effect of setting X_AUTO_FLUSH on
graphics utilities needs to be documented.
libplot: should document that a user of X Drawable Plotters or X Plotters,
if desiring true thread-safety, must manually invoke XInitThreads() and
possibly XtToolkitThreadInitialize(). Also, in libplot code
(e.g. libplot/p_defplot.c) must add appropriate #define's so that ctime_r()
and localtime_r() are defined and used. Haven't figured out how to do that
yet; on some systems, defining _REENTRANT and _POSIX_SOURCE is not enough.
libplot: subclass the GIF Plotter class from the generic Bitmap Plotter
class. Will facilitate importing a bitmap file to serve as a background
for drawing.
libplot: need a queryable PRECISE_DASHING capability, indicating whether or
not a Plotter supports linedash().
spline: add support for smoothing splines as well as interpolatory splines?
graph: add legend support (need new --legend :string1:string2: option),
i.e. gnuplot-style `key'. Maybe arbitrarily positioned arrows, text
strings also. See how NCAR Graphics does it.
internationalization: think about removing strcasecmp (what if user called
setlocale i.e. set LOCALE env var)? Similarly worry about . vs , everywhere,
e.g. in PS files.
libplot: improve appearance of octagonal marker symbols (symbol #30 and
#31), i.e., make the octagon regular. Present non-regular shape dates back
to Bob Beach's mid-1970s Unified Graphics System, from which many marker
symbols were taken.
libplotter: add overloaded (floating point) versions of integer operations?
graph: tweak positioning of top labels, especially at large sizes.
ode: add atan2() function.
documentation: write more man pages.
double: document it in plotutils.texi.
libplot: after doing XCreatePixmap(), should check for success. See
John Cwikla's article on the Motif Zone site (no graceful thread-safe way?).
libplot: CQVXuv<>" are the remaining metafile op codes (printable ASCII
characters other than space). Of these, CQVX are flagged as recently
obsolete and should not soon be reused. What to do when op codes run out?
libplot: should X driver use a non-default visual if the default visual
isn't read-only? Do we wish other applications to be able to modify our
color cells? Is this a genuine concern? Also, should we use a non-default
visual if user specifies double buffering and the default visual doesn't
support it via the X11 extension? (E.g. Xsgi.)
libplot: check that Corel Draw can import generated HP-GL and HP-GL/2
files, and CGM files too. As of Corel Draw 8, a single font seems to be
used for all text (by default TrueType Courier New). Check also Adobe
Photoshop, Illustrator.
HP-GL/2 Java viewer available at
http://www.vanguard.at/products/partshpgl/english/index.htm . Should check
whether it can parse our HP-GL/2 output.
libplot: could spline the Hershey fonts, and use Bezier primitives to draw
them?
libplot: kern the HP vector fonts (Stick and Arc) that are available when
producing PCL5 and HP-GL/2 output. Kerning was apparently dropped by HP in
the transition from HP-GL to HP-GL/2, but we have the kerning tables.
Marker symbol #1 should really be drawn as a pendown-penup motion in both
HP-GL and pre-HP-GL/2, in the same way that a `point' is drawn.
Very old HP-GL pen plotters can't handle full range of coordinates in many
of our page types. [See our viewport sizes in libplot/g_pagetype.h; the
sizes we use, taken from AutoCAD, may not be appropriate for very old pen
plotters?]
libplot: improve error reporting: change libplot error handler to allow use
of name of executable.
libplot: to the API, add a comment() method, taking printable string as
argument (no control chars). For some drivers, it would appear in the
output file. Could also add a title() or description() method, since some
output formats support a document-level title or description string.
ode: need to avoid any possibility, no matter how theoretical, of a stack
blowout.
Hershey fonts: add euro and cedilla.
graph, plot, tek2plot, plotfont, etc.: add --display and --geometry
options, for use with `-T X'?
tests: check into test/plot2ai.test, test/plot2gif.test, test/plot2tek.test
(not currently run, seem to give system-dependent behavior, possibly
depending on rounding of floating-point numbers?)
libplot: in text string format, \mk..\rt etc. could be stack machine;
should also include overline, underline, radical, display fractions etc.
Cf. eqn and Allen Hershey's typesetting.
libplot: support hatch-filling of paths, as well as solid filling? HP-GL
and CGM support hatching natively. For other formats, will need to wait
until clipping is added.
Other needed math software:
fitting capability
contour plotting via level curves; also compute enclosed area
surface plotting (cf. IDL for plotting and contouring)
EBCDIC. Need I say more?