DEFINITION MODULE WGraph;
(********************************************************)
(* *)
(* Graph module For GWindows. *)
(* *)
(* Programmer: S.P.Lontis, P. Moylan. *)
(* Last edited: 15 February 1993 *)
(* Status: *)
(* Basically working, but still fiddling with *)
(* the details. *)
(* *)
(* It's not clear whether OpenGraph needs so many *)
(* parameters. Also not clear how bar graphs *)
(* fit into the overall picture. *)
(* *)
(********************************************************)
FROM GWindows IMPORT
(* type *) Window;
(************************************************************************)
TYPE
Graph; (* is private *)
(* Types of graphs that can be drawn. *)
GraphType = (linear, loglinear, loglog, bar);
(* Line Types that can be used. *)
LineType = (dots, joined, vertical, normal);
(* Marker Types for individual points plotted. *)
MarkType = (none, square, cross, plus, diamond);
BarType = (One, Two, Three, Four, Five);
(************************************************************************)
PROCEDURE OpenGraph (VAR (*OUT*) G: Graph; w: Window; GrphType: GraphType;
LnType: LineType; xst, yst, xen, yen: CARDINAL;
xmin, ymin, xmax, ymax: LONGREAL; Mark: MarkType);
(* Creates graph G in window w. The Graph will occupy a rectangle *)
(* with a bottom left corner of (xs,ys) and top right corner of *)
(* (xe,ye) relative to the window. The range of values which can be *)
(* plotted is from (xmin,ymin) to (xmax,ymax). NOTE: for a bar *)
(* graph, xmin gives the width of the bars and xmax gives the *)
(* distance between different bars. *)
PROCEDURE DrawXAxis (G: Graph; xinc: LONGREAL;
yoffset, DecPlaces: CARDINAL; numbering: BOOLEAN);
(* Draws the x-axis for a graph; xinc is the distance between tick *)
(* marks, and yoffset gives the distance that the axis will lie *)
(* below the line y=ys (ys is defined in OpenGraph). The option *)
(* yoffset <> 0 allows for the case where more than one graph *)
(* occupies the same window, since the graphs may have different *)
(* scales. DecPlaces gives the number of decimal places that will *)
(* be used. If numbering is FALSE, the axis is drawn but not *)
(* labelled. *)
PROCEDURE DrawYAxis (G: Graph; yinc: LONGREAL;
xoffset, DecPlaces: CARDINAL; numbering: BOOLEAN);
(* Draws the y-axis for a graph; yinc is the space between tick *)
(* marks, and xoffset gives the distance that the axis will lie to *)
(* the left of the line x=xs (xs is defined in OpenGraph). *)
(* DecPlaces gives the number of decimal places that will be used. *)
(* If numbering is FALSE, the axis is drawn but not labelled. *)
PROCEDURE DrawAxes (G: Graph;
xinc: LONGREAL; yoffset, xdecplaces: CARDINAL; numberx: BOOLEAN;
yinc: LONGREAL; xoffset, ydecplaces: CARDINAL; numbery: BOOLEAN);
(* Draws both the X and Y axes. See the definitions of *)
(* DrawXAxis and DrawYAxis above. *)
PROCEDURE AddPoint (G: Graph; x, y: LONGREAL);
(* For lines of type *)
(* 'dots' : only the marker will be displayed. *)
(* 'joined': draws a line from the last point and marker. *)
(* 'vertical' : draws a vertical line and a marker. *)
(* NOTE: lines of type 'normal' are used for discontinuous graphs *)
(* and are not drawn using this procedure. *)
(* Points outside the region (xmin <= x <= xmax, ymin <= y <= ymax *)
(* will be clipped. *)
PROCEDURE DrawLines (G: Graph; x, y: ARRAY OF LONGREAL);
(* Allows vectors of x and y points to be drawn. Refer to *)
(* procedure AddPoint for specifications of the line types. *)
PROCEDURE DrawLine (G: Graph; x0, y0, x1, y1: LONGREAL);
(* Used for drawing discontinuous lines. The line is drawn between *)
(* (x0,y0) and (x1,y1) relative to graph G. *)
PROCEDURE BarGraph (G: Graph; y: ARRAY OF LONGREAL; del: CARDINAL; bt: BarType);
(* Displays a BarGraph of the vector y. Parameter del gives the *)
(* number of stripes per bar, in the case of striped fill patterns. *)
END WGraph.