From: klin@uni-paderborn.de (Peter Klingebiel)
Newsgroups: comp.windows.x.motif
Subject: Plotter Widgets V6.0
Keywords: Motif, plotter, widget
Date: 18 Aug 92 14:13:39 GMT
Organization: Uni-GH Paderborn, Germany



      Announcement of the AthenaTools Plotter Widget Set Version 6.0

After distribution of plotter v6-beta I did some bug fixes and added a lot
of new features to the plotter widgets. They seem to run stable on X11R4
and X11R5 with Xaw and Xm. For changes from V6-beta to V6.0 see below.

N.B. If there is anyone in U.S. who receives the plotter widgets, please
put them to export.lcs.edu. Thanks.

------------------------------------------------------------------------------

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.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

------------------------------------------------------------------------------

			   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.
	These may be useful for displaying plot with free setable offsets
	in X and/or Y direction.

    - 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 Sullivan Beck
	(beck@qtp.ufl.edu). Therefore changed <At/...> to <X11/At/...>.

    *.man

	All needed updates for version 6.0

    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. Use the PS builtin transformation
	functions to avoid unexpected results in line thickness, especially
	when drawing thin lines.

    Plotter.h PlotterP.h Plotter.c PlotterPS.c

	Added resources XtNslideCallback and XtNslideCursor and all needed
	stuff for this callback. When i.e. for zooming a rectangle is
	defined on the plotting area (using the drag callback) this
	callback my be useful for sliding the drag rectangle over the
	plotting area.
	Added resources XtNselectCallback and XtNselectCursor and all needed
	stuff for this callback. This is useful for selecting plots from
	within the plotter's legend, i.e. for further changes to this plot.
	Added busy callback in PostScript output routines.
	Added reason item to callback data structs.
	Some more minor changes in callbacks.

------------------------------------------------------------------------------