This is the AthenaTools Plotter Widget Set Version 6.0 ------------------------------------------------------------------------------ The initial version of the AthenaTools Plotter Widget Set, known as V4, as far as I know, was written by David Flanagan, Chris Craig, and Kambiz Soroushian at M.I.T. in 1990. In 1991 Gregory Bond re-wrote important parts of this code and called his version V5-beta. His version works fine for more business-like graphs, but unfortunately, there was dropped out a lot of stuff needed for scientific graphs. This version V6.0 is based on Gregory Bond's version V5-beta. I added some stuff for scientific graphs, i.e. log axes, free scalable axes, XY-lineplots and some more, and re-added plotter callbacks from V4, e.g. to request the current pointer position, or to cut off a rectangle from the plotting area for zooming-in. Version V6.0 has a log of bugs fixed and a log of improvements against V6-beta. Additionally I did some other changes/extensions, besides - Origin and frame lines for axes. - Subgrid lines on subtic positions. - Line plots in different line types (lines, points, lines+points, impulses, lines+impulses, steps, bars), line styles (solid, dotted, dashed, dot-dashed) and marker types for data points. - Legend at the right or left hand side of the plot. - Optional drawing to a pixmap instead of a window. - Drag and slide callback for zooming. - Legend select callback for selecting lines. - Layout callback for aligning axis positions when using multiple plotters in one application. - ... and much more ... I called this version V6.0 because I plan and I have to add some other features to the plotter widgets in the future (i.e. polar axes, a new plotter form widget, ...). Some ideas, hints and algorithms I got from gnuplot V3.0 written by Colin Kelley and Thomas Williams. The plotter widgets need X11R4 or X11R5 to get compiled. I couldn't compile on AIX 3.1 and X11R3. You can ftp the plotter widgets from the Paderborner FTP-Server: ftp.uni-paderborn.de (131.234.2.32) Login: ftp Passwd: e-mail-address Directory: /unix/tools Files: plotter.v60.tar.Z (contains all the sources including manual pages, demo programs and some documentation. You need groff and the me-macros to format the documentation!) plotter.doc.tar.Z (PostScript files from all manual pages and the reference document 'Using The AthenaTools Plotter Widget Set') plotter.afm.tar.Z (contains font metric files which are needed for the plotters PostScript output. Many TeX distributions contain these files) The subdirectories and their contents are: At contains the source of the plotter widget set and the include files man contains the manual pages of the plotter widgets motif contains a motif demo of the plotter. The file Plot.c contains all interesting code for programming and using the plotter widget set athena contains demos using the athena widget set. All files contain interesting code for programming and using the plotter widget set doc contains some documentation from version V5 and this version V6-beta. Installation: - Edit and change At/Imakefile and create the library libAt.a - Edit and change motif/Imakefile and/or athena/Imakefile to create the test programs or check and edit the files Makefile.simple if you are missing imake - Install the include files and the library from the At subdirectory - Install the postscript metric fonts from the afm subdirectory - Install the manual pages from subdirectory man Bugs and misfits: - Many features are not yet well tested at this point in time! - Known bugs are i.e. in the linear XY axis code! What's to do: o A plotter form widget for aligning multiple plotters (axis positions, legends, titles, PS output, ...) o Polar axes o Contour and Error plot widgets o Color PostScript output (I'm working on) o More and better Motif support or Motif wrappers (???) Extensions, bug reports, patches, hints and so on are *very* welcome. Paderborn, Mon Aug 17 16:03:26 1992 Peter Klingebiel Universitaet-Gesamthochschule Paderborn FB10 - Automatisierungstechnik Paderborn GERMANY klin@iat.uni-paderborn.de ------------------------------------------------------------------------------ The AthenaTools Plotter Widget Set Version 6.0 CHANGES ------------------------------------------------------------------------------ Changes from version 6-beta to version 6.0 ------------------------------------------------------------------------------ o Patchlevel 1 - klin, Sun Jul 19 09:39:15 1992 patchlevel.h added Plotter.h, Plotter.c Added the global function AtPlotterGetLegendWidth() to get the maximal legend width from within application programs to give the possibility that the legends of multiple plotters are of the same width. RecalcLegend() changed: returns True if legend width OR heigth changed. RedrawLegend() always calls RecalcLegend() and calculates the correct legend_y value. XYAxis.c Stop infinite loop in calculation of linear tic interval using a simple counter in procedure LinAxisRange(). This is a workaround only! The linear axis core should be rewritten. - klin, Wed Jul 22 09:32:26 1992 AxisCore.c Ken Rempe (ken@caesar.uucp) reported a bug in the setvalues procedure when changing the axis label and sent a bug fix. - klin, Fri Jul 24 15:06:19 1992 PlotterPS.c Fixed a bug in PostScript code for star marker. o Patchlevel 2 - klin, Mon Jul 27 14:14:32 1992 Plotter.h PlotterP.h Plotter.c PlotterPS.c Added the new resource XtNlegendLeft (legend_left) which defaults to False. Setting this resource to True causes the plotter to display the legend on the left hand side of the plotting area. Added the new resource XtNautoRedisplay (auto_redisplay) which defaults to True. Setting this resource to False causes the plotter to avoid redisplaying after changes. When then this resource is set to True the new full state is displayed. This may be useful to avoid unnecessary flickering when changing multiple values or to do not visible changes, i.e. when writing PostScript output with different line styles instead of colors. Added the new resource XtNuseCursor (use_cursors) which defaults to True. If this resource is set then the plotter will use different cursors when in click or drag callback. Added the new callback XtNbusyCallback. Procedures of the busy callback list are called when the plotter starts redisplay with callback data from type AtBusyCallbackData and the item busy set to True. When the plotter finished the redisplay process this item will be set to False. Added the new resource XtNusePixmap (use_pixmap) which defaults to False. If this resource is set the plotter draws to a pixmap instead to a window. This helps avoid flickering when data often change, but uses more memory, especially on color terminals. To implement this feature, the draw procedure of all of the plotters child widgets (axes and plots) and the AtText code had to be changed. Increased the valid plotting area in callbacks some pixels. AtPlotterGeneratePostscript() generates a core dump when the plotter widget is not realized. Bug reported by Gustaf Neumann at 92/07/27 (neumann@dec4.wu-wien.ac.at, neumann@awiwuw11.bitnet). AxisCore.h AxisCoreP.h AxisCore.c Added the public function AtAxisGetNumberWidth() which can be used by applications to get the current number width of an axis. Added the resource XtNnumberWidth (default_number_width) which defaults to 0. This resource can be used to set the number width to a default value, i.e. to align the axes of multiple plotters in one application after the maximal number width of the axes are requested using AtAxisGetNumberWidth(). XY*.[ch] Shorter names for procedures XYLinePlot.c When drawing impulse plots in PostScript the first impulse was missing. Bug in DrawPS() fixed. Added the new line types AtPlotSTEPS and AtPlotBARS. XYAxis.c Register axis transform converter in the new class initialize procedure ClassInitialize(). Reported by Gustaf Neumann at 92/07/27. Text.c When destroying an NIL AtText object AtTextDestroy() generates a core dump. Fixed and reported by Gustaf Neumann at 92/07/27 o patchlevel 3 - klin, Sun Aug 2 18:25:42 1992 XYAxis.c Accept initial min/max values set with XtNmin/XtNmax in Initialize(). Plotter.h PlotterP.h Plotter.c Added the layout callback (layout_callback) which defaults to NULL and is called when the plotter is in layout. Client data of this callback of the new type AtAxisPositions contain the positions of the X and Y axes and may be changed by applications or other plotters to align the axes of multiple plotters in one application. The additional function AtPlotterGetAxisPositions() may be used to get the current axis positions, the procedure AtPlotterSetAxisPosition() may be used to set aligned positions. A better way to do such axis alignment would be to create a new plotter form widget which holds and manages his child plotters and exempts the user from doing this. Added the new resource XtNtitleHeight (default_title_height) which defaults to 0. This resource may be used to set a default height for the title text, for i.e. aligning multiple plotters. The real height of the title string can be requested with the new function AtPlotterGetTitleHeight(). Internal callback EnterLeave() when entering or leaving the plotter window added. This callback is called when entering or leaving the plotter window to set appropiate cursors, i.e. when procs in the motion callback list are defined. Cursor resources XtNxxxCursor (xxx_cursor) added. Method query_geometry in QueryGeometry() added. FontFamily.h Defined all font resource names and classes within FontFamily.h. Include FontFamily.h in all modules which use this stuff. ------------------------------------------------------------------------------ Changes to version 6.0 ------------------------------------------------------------------------------ o patchlevel 4 - klin, Wed Aug 12 07:33:12 1992 AxisCoreP.h Bug in type of default_number_width fixed. Patch by Gustaf Neumann at 92/08/11 (neumann@dec4.wu-wien.ac.at, neumann@awiwuw11.bitnet). XYPlot.h XYPlotP.h XYPlot.c Added the new resources XtNxOffset (x_offset) and XtNyOffset (y_offset) and all needed stuff for resources and set values. - klin, Sat Aug 15 10:27:55 1992 *.h *.c Imakefile Makefile.simple All X stuff should go to X directories as pointed out by S. Beck (beck@qtp.ufl.edu). Therefore changed to . *.man All needed updates. FontFamilyP.h SPlot.c PlotterP.h Some typo fixes. Reported by S. Beck (beck@qtp.ufl.edu). PlotterPS.c AxisCore.c BarPlot.c LinePlot.c XYLinePlot.c Minor changes in PostScript output. Plotter.h PlotterP.h Plotter.c PlotterPS.c Added resources XtNslideCallback and XtNslideCursor and all needed stuff for this callback. Added resources XtNselectCallback and XtNselectCursor and all needed stuff for this callback. Added busy callback in PostScript output routines. Added reason item to callback data structs. Some more minor changes in callbacks. ------------------------------------------------------------------------------