TODO 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. Greater priority
  2. ----------------
  3. libplot: take account of the fact that many versions of the Symbol font
  4. (in PS output, at least) now have the Euro symbol in position #160 of the
  5. ISO-Latin-1 encoding, rather than having a (nonbreakable) space.
  6. libplot: enhance the SVG driver to keep track of whether the output is
  7. consistent with the `Full' or `Tiny' SVG profile. The only relevant
  8. differences appear to be that in SVGT, "all numbers must be limited in
  9. range between -32,767.9999 to +32,767.9999 or the scientific notation
  10. equivalent", and that when drawing paths, the elliptical arc commands
  11. `A' (absolute ell. arc) and `a' (relative ell. arc) are not available.
  12. libplot: enhance the SVG driver to use SVG's <tspan>..</tspan> construct
  13. for styling and positioning substrings. Our present scheme for changing
  14. fonts, adding subscripts, etc., in the middle of a label, works fine if the
  15. font(s) are available on the SVG viewer and have the metrics we believe
  16. they do. But either of those two assumptions may fail. So the
  17. <tspan>..</tspan> construct should always be used. Nested tspans will be
  18. needed. Note: SVGT does not support tspans.
  19. libplot: enhance the SVG driver to adjust the width of text strings to be
  20. what it should be, according to our internal font database. This is
  21. important if a requested font is unavailable.
  22. libplot: decide whether to provide a workaround for a font problem in
  23. recent releases of XFree86: the Type 1 versions of the Symbol and
  24. ZapfDingbats font use an erroneous coding scheme (character codes are
  25. offset by 0x20 = 32).
  26. libplot: improve the handling of compound paths to support non-nested
  27. subpaths, i.e. multiple simple paths that may intersect each other, as well
  28. as themselves. For this, use Raph Levien's libart? SVG Plotters already
  29. support non-nested subpaths, though it isn't documented.
  30. libplot: add support for a user-level `closepath' operation. Internally,
  31. drawing of Hershey fonts should use it.
  32. libplot: to CGM Plotters, add support for the version-4 WebCGM features,
  33. i.e., hyperlinks based on CGM `application structures'. Maybe set up a
  34. standard way of defining hyperlinks, which could be used by SVG and
  35. Illustrator Plotters too?
  36. libplot: add the display list concept, i.e. retained 2-D graphical objects
  37. (will also facilitate adding support for compound objects and redrawing).
  38. libplot must become more widget-like; cf. guppi.
  39. libplot: support copying graphics from one Plotter to another (e.g., via
  40. display list; cf. OpenGL).
  41. libplot: support object-level clipping, via computation of a bounding box;
  42. maybe precise rectangle-level clipping too? Will require addition of
  43. clipping support to libxmi. Maybe PS-style clipping by arbitrary paths?
  44. If so, a new PS-like drawing model, with a new interpretation of
  45. savestate/restorestate, will be needed.
  46. libplot: add support for gradient fill. Which output formats provide
  47. native support for it? WebCGM, SVG and Illustrator certainly do.
  48. graph: continue librarifying the plotting routines, and incorporate them in
  49. libsciplot? Maybe a GUILE interface?
  50. graph: need better clipping for filled regions (present gnuplot-style
  51. clipping scheme is right for unfilled regions but wrong for filled ones)
  52. libplot: add support for compound objects (supported by Fig, idraw, AI).
  53. Support should be compatible with support for SVG's `containers'.
  54. libplot: add support for rectangular raster objects ("device independent
  55. rasters"). Supported in SVG and CGM format, etc.
  56. libplot: add support for tiling of paths (with device-dependent rasters).
  57. libxmi already supports this.
  58. libplot: compare its functionality with other graphics libraries,
  59. e.g. Allegro's shading and texture-mapping features, and gd.
  60. Intermediate Priority
  61. ---------------------
  62. libplot: extend parsing of BITMAPSIZE parameter to include options
  63. xsize,ysize,xorigin,yorigin,xoffset,yoffset, just like PAGESIZE. This
  64. would affect the graphing utilities (--bitmap-size option, when producing
  65. bitmap output, would be invoked similarly to to --page-size).
  66. libsciplot: new graphing library. Incorporate all functionality of VOGLE,
  67. PGPLOT, and PLPLOT libraries; check into GLE, PLOTPLUS, XYPLOT, DISLIN (not
  68. open-source; see http://www.linmpi.mpg.de/dislin/). Think about Guile, and
  69. Tcl/Tk, and Python. libsciplot will support contouring, but not 3d surface
  70. plots yet.
  71. libsciplot: when plotting a curve containing data points, symbols should be
  72. plotted _last_, after endpath() is called.
  73. libplot: In Illustrator format, colors may be specified by CMYK values or
  74. (in recent Illustrator versions) by RGB values. Illustrator's mapping
  75. between them is not documented, and does not seem to be the usual one.
  76. When generating Illustrator format we use CMYK, but maybe we should use RGB
  77. instead?
  78. libplot: distinguish between PSPlotter and IdrawPlotter (latter will use
  79. current PSPlotter code for emitting `stateless PS', former has yet to be
  80. written).
  81. libplot bitmap Plotter support: add sub-parameters to the BITMAPSIZE
  82. parameter, for specifying offset of viewport within bitmap? Clipping too?
  83. pic2plot: extend parser to support the Bell Labs `picasso' constructions
  84. (extensions of the pic grammar).
  85. libplot: use freeware rasterizer for type 1 fonts [t1lib, by Rainer
  86. Menzner; see
  87. ftp://ftp.neuroinformatik.ruhr-uni-bochum.de/pub/software/t1lib ].
  88. Or, if patent worries can be overcome, FreeType or FreeType2.
  89. libplot: PNG driver should optionally use indexed rather than true color.
  90. Also, should include a user-specifiable gAMA chunk?
  91. libplot: add alpha support to color specification. Maybe via new
  92. operations penalpha(), fillalpha(). (WebCGM format already includes alpha
  93. support, via a registered escape element.)
  94. libplot: if the pen level has been set to `0' by invoking pentype(),
  95. thereby turning off the edging of paths, and the drawing of marker symbols
  96. and points, then the drawing of text should be turned off too? In the
  97. texinfo documentation we've promised to do this.
  98. libplot: when path edges are not drawn (i.e. when `pentype' is called with
  99. an argument of 0), the scheme used by the PS driver for quantizing fill
  100. colors for idraw is suboptimal. Could be much improved (would need to
  101. optimize over choices of idraw's fg color, bg color, and shading level,
  102. i.e. a 3D search).
  103. ode: extend parser to plot functions as well as solve differential equations.
  104. libplot: redo X driver, to support window reuse (`persistence') by any
  105. X Plotter. Will require forking off an outboard process.
  106. graph: allow all command-line options in input data files, on comment
  107. lines; maybe write alternative parser for interactive version (gnuplot
  108. replacement).
  109. libplot: add interactivity (e.g. getloc()), during openpl()...closepl().
  110. Need to translate back to user coordinates. [For libsciplot, even
  111. further?] For Tektronix driver, implement GIN mode (need stty twiddling?).
  112. Also need char input (cf. starbase).
  113. Break out spline() as subroutine(s), cf. fitpack? Cf. IMSL interface.
  114. Similarly with plot frame / axis drawing. For this, check into NCAR
  115. Graphics package, `autograph' routines.
  116. ode: should support popen() for output; cf. gnuplot.
  117. graph: add `boxes', `steps', `impulses', `bars' plot types (as in gnuplot).
  118. Boxes, bars should properly support --fill-fraction option.
  119. graph: add support for polar/spherical plots, 3-D (surface) plotting.
  120. Low-priority (and idle thoughts)
  121. --------------------------------
  122. libplot: PNG driver, when outputing a grayscale image, should use the
  123. optimal bit depth. PNG grayscale (without alpha channel) supports bit
  124. depths of 1, 2, 4, 8, 16. Right now, we use bit depth 1 for bitonal
  125. images, as we should, but for grayscale images that aren't bitonal, we
  126. always use bitdepth 8. We should use 2 or 4 instead, if reasonable.
  127. libplot: Fig output format now supports specifying a `transparent color',
  128. for use when xfig exports GIF files. It would be good to support this.
  129. libplot: add a warning about color exhaustion to the GIF driver (cf. the
  130. warnings issued by the Fig and X drivers).
  131. libplot: internally, text string handling oscillates wildly back and forth
  132. between (char *) and (unsigned char *). Fix this.
  133. libplot: _flush_plotter_outstreams() method, a non-public member function
  134. of the Plotter class, should really be static.
  135. libplot: there should be a way for the "none" background color to take
  136. effect on Metafile Plotters; currently, it does not.
  137. libplot: add support for a `rounded rectangle' primitive (pic2plot will use
  138. it). SVG and Fig formats support rounded rectangles, though xfig insists
  139. that the rounded corners be quarter circles, not just quarter ellipses.
  140. libplot: finish adding support for the filling of paths to the ReGIS driver
  141. (i.e. handle the case when the paths to be filled extend beyond the edge of
  142. the ReGIS display, requiring clipping). Also make the driver do real-time
  143. display of unfilled paths, segment by segment, like the Tektronix driver.
  144. libplot: Tektronix driver used to have a feature of waiting for 1 second
  145. after performing a screen erasure, if -DGENUINE_TEKTRONIX was defined
  146. during compilation (Tektronix storage tubes took that long to clear).
  147. Restore it?
  148. plot: the --line-width and --font-size options, which are useful only when
  149. plotting old files in Unix plot(5) format, are implemented poorly. The
  150. computation, from the command-line arguments (fractional line width and
  151. font size), of the line width and font size in user coordinates, is
  152. currently correct only for graphics displays that are square.
  153. libplot: pl_parampl_r should support taking a NULL pointer (to a
  154. plPlotterParams struct), as its final argument.
  155. libplot: if HP-GL/2 driver draws with a restricted palette of pens (the
  156. default), it follows a policy of never quantizing a nonwhite color to
  157. white, i.e. to pen #0. Is this the right thing to do? (Note: this policy
  158. applies only to the pen color, not the fill color.)
  159. libplot: Ponder the comment taken from an earlier version of the source
  160. code: "We don't allow openpl() to reset the frame number to zero (in
  161. XDrawable Plotters that is, unlike XPlotters). Incrementing the frame
  162. number monotonically facilitates color cell management, since we've only
  163. got one connection to the X display (see x_erase.c)."
  164. plot: should document that `plot -TX' will use double buffering if
  165. environment variable USE_DOUBLE_BUFFERING is "yes". Maybe make that
  166. user-settable via an option? Similarly, effect of setting X_AUTO_FLUSH on
  167. graphics utilities needs to be documented.
  168. libplot: should document that a user of X Drawable Plotters or X Plotters,
  169. if desiring true thread-safety, must manually invoke XInitThreads() and
  170. possibly XtToolkitThreadInitialize(). Also, in libplot code
  171. (e.g. libplot/p_defplot.c) must add appropriate #define's so that ctime_r()
  172. and localtime_r() are defined and used. Haven't figured out how to do that
  173. yet; on some systems, defining _REENTRANT and _POSIX_SOURCE is not enough.
  174. libplot: subclass the GIF Plotter class from the generic Bitmap Plotter
  175. class. Will facilitate importing a bitmap file to serve as a background
  176. for drawing.
  177. libplot: need a queryable PRECISE_DASHING capability, indicating whether or
  178. not a Plotter supports linedash().
  179. spline: add support for smoothing splines as well as interpolatory splines?
  180. graph: add legend support (need new --legend :string1:string2: option),
  181. i.e. gnuplot-style `key'. Maybe arbitrarily positioned arrows, text
  182. strings also. See how NCAR Graphics does it.
  183. internationalization: think about removing strcasecmp (what if user called
  184. setlocale i.e. set LOCALE env var)? Similarly worry about . vs , everywhere,
  185. e.g. in PS files.
  186. libplot: improve appearance of octagonal marker symbols (symbol #30 and
  187. #31), i.e., make the octagon regular. Present non-regular shape dates back
  188. to Bob Beach's mid-1970s Unified Graphics System, from which many marker
  189. symbols were taken.
  190. libplotter: add overloaded (floating point) versions of integer operations?
  191. graph: tweak positioning of top labels, especially at large sizes.
  192. ode: add atan2() function.
  193. documentation: write more man pages.
  194. double: document it in plotutils.texi.
  195. libplot: after doing XCreatePixmap(), should check for success. See
  196. John Cwikla's article on the Motif Zone site (no graceful thread-safe way?).
  197. libplot: CQVXuv<>" are the remaining metafile op codes (printable ASCII
  198. characters other than space). Of these, CQVX are flagged as recently
  199. obsolete and should not soon be reused. What to do when op codes run out?
  200. libplot: should X driver use a non-default visual if the default visual
  201. isn't read-only? Do we wish other applications to be able to modify our
  202. color cells? Is this a genuine concern? Also, should we use a non-default
  203. visual if user specifies double buffering and the default visual doesn't
  204. support it via the X11 extension? (E.g. Xsgi.)
  205. libplot: check that Corel Draw can import generated HP-GL and HP-GL/2
  206. files, and CGM files too. As of Corel Draw 8, a single font seems to be
  207. used for all text (by default TrueType Courier New). Check also Adobe
  208. Photoshop, Illustrator.
  209. HP-GL/2 Java viewer available at
  210. http://www.vanguard.at/products/partshpgl/english/index.htm . Should check
  211. whether it can parse our HP-GL/2 output.
  212. libplot: could spline the Hershey fonts, and use Bezier primitives to draw
  213. them?
  214. libplot: kern the HP vector fonts (Stick and Arc) that are available when
  215. producing PCL5 and HP-GL/2 output. Kerning was apparently dropped by HP in
  216. the transition from HP-GL to HP-GL/2, but we have the kerning tables.
  217. Marker symbol #1 should really be drawn as a pendown-penup motion in both
  218. HP-GL and pre-HP-GL/2, in the same way that a `point' is drawn.
  219. Very old HP-GL pen plotters can't handle full range of coordinates in many
  220. of our page types. [See our viewport sizes in libplot/g_pagetype.h; the
  221. sizes we use, taken from AutoCAD, may not be appropriate for very old pen
  222. plotters?]
  223. libplot: improve error reporting: change libplot error handler to allow use
  224. of name of executable.
  225. libplot: to the API, add a comment() method, taking printable string as
  226. argument (no control chars). For some drivers, it would appear in the
  227. output file. Could also add a title() or description() method, since some
  228. output formats support a document-level title or description string.
  229. ode: need to avoid any possibility, no matter how theoretical, of a stack
  230. blowout.
  231. Hershey fonts: add euro and cedilla.
  232. graph, plot, tek2plot, plotfont, etc.: add --display and --geometry
  233. options, for use with `-T X'?
  234. tests: check into test/plot2ai.test, test/plot2gif.test, test/plot2tek.test
  235. (not currently run, seem to give system-dependent behavior, possibly
  236. depending on rounding of floating-point numbers?)
  237. libplot: in text string format, \mk..\rt etc. could be stack machine;
  238. should also include overline, underline, radical, display fractions etc.
  239. Cf. eqn and Allen Hershey's typesetting.
  240. libplot: support hatch-filling of paths, as well as solid filling? HP-GL
  241. and CGM support hatching natively. For other formats, will need to wait
  242. until clipping is added.
  243. Other needed math software:
  244. fitting capability
  245. contour plotting via level curves; also compute enclosed area
  246. surface plotting (cf. IDL for plotting and contouring)
  247. EBCDIC. Need I say more?