QQ Plot module library v4.0
Grafic output from Fortran- or C-programs.

Description of the subroutine calls

With version 4.0 you can create black/white files as well as grayscale- or 256 colors files. Also you have a font that can be redefined and you can create more fonts as well.
You will find samples for all calls in the delivery: muecke.for (just lines, b/w),
quader.for (with polygon and clipping, 256 colors) und schach.for (with circle, greyscales)

Details

Define size and filename of the bitmap
call qqopen (x,y,filename,setxscale,setyscale)
or qqopengr (grayscale) or qqopenco (256 colors)

Parameter:
x,y: real*4, imagesize in units
filename: character*255, filename (with/without thread)
setxscale,setyscale: real*4, scalefactor for units

With this values all coordinate become multiplied for transformation in dots

Paint into existing pictures
oder qqopenin (namein,nameout,setxscale,setyscale)

Parameter:
namein, nameout: character*255, filename (with/without thread)
setxscale,setyscale: real*4, scalefactor for units
The picture “namein” becomes the background for the picture named “nameout”. Bitmaps with 2, 256 colors or true color (24 or 32 Bits) can be used.

Set clipping coordinates
(from now on only the part inside these coordinates will be drawn)
call qqborder (switch,x1,y1,x2,y2)

Parameter:
switch: logical*4, true=on, false=off
x1,y1: real*4, lower left corner
x1,y1: real*4, upper right corner
switch=off sets clipping to imagesize,
permuted coordinats become swapped,
identical coordinaten lead to switch=off.

Zero shift
call qqpoorig (x,y)

Parameter:
x,y: real*4, drift values in units



Define pen color
call qqcolor (color)

Parameter:
pen color: integer*4, pen color. 0=white, 1=black
or 0..255 with greyscale / 256 colors

Define fill color
call qqfillc (color)

Parameter:
fillcolor: integer*4, polygon-fillcolor. 0=white, 1=black,
or 0..255 with greyscale / 256 colors
-1=unfilled

Define user color
call qqfillc (color, red, green, blue)

Parameter:
fillcolor: integer*4, 0=white, 1=black,
or 0..255 with greyscale / 256 colors
red, green, blue: integer*4, range of values is 0..255

Define pen thickness
call qqthickn (thickness)

Parameter:
Pen thickness: real*4, in units

Define printout size
call qqdpi (xdpi,ydpi)

Parameter:
dots per inch in x and y: real*4

The value has no effect for the outputted bitmap. It is only a value in the bitmap header.

Define outline color
call qqoutdef (color)

Parameter:
outline color: integer*4, 0=white, 1=black or 0..255 with greyscale / 256 colors

Define outline pen thickness
call qqoutdef (thickness)

Parameter:
outline pen thickness: real*4, in percent of the regular pen thickness
Beginning with this call all lines become painted as outline with the defined outline pen thickness and color. The color and pen thickness of the original lines are not changed.
This function ends by changing the pen color or with the following call:

Outline end
call qqoutend

Ends the painting of lines as outline.

Paint a dot
call qqpoint (x,y)

Parameter:
x,y: real*4, dot coordinates in units

Paint a line from the last coordinates to the actual ones
call qqline (x,y)

Parameter:
x,y: real*4, target point coordinates in units
paints a line from the last coordinates to the target ones

Paint a polygon, optional white, black or not filled
call qqpoly (npolygon, polygon)

Parameter:
npolygon: integer*4, number of polygonpoint pairs (x,y)
polygon: real*4, point coordinates in units

Give the polygon coordinates x,y in an array pair by pair
Polygons have to be closed to become filled

Paint a bow from the last coordinates to the actual ones
call qqbow (x,y)

Parameter:
x,y: real*4, dot coordinates in units

The bow will be drawn in elongation of the last drawn line to x,y. If the last call was a point, the bow will be painted in elongation of the thought line between the last reached points.
See also “call qqmove”

Move
call qqmove (x,y)

Parameter:
x,y: real*4, dot coordinates in units

like qqpoint without painting. Makes sense only to define the coordinates for a bow that shall start at qqpoint coordinates without a painted line.
I.e.: call qqmove(x1,y1), call qqpoint(x2,y2), call qqbow(x3,y3) is like call qqpoint(x1,y1), call qqline(x2,y2), call qqbow(x3,y3) with no line from x1/y1 to x2/y2.
Do not use qqmove in any other way. The next line will not have a rounded start.

Paint a text
call qqfont1 (x,y,size,text)

Parameter:
x,y: real*4, dot coordinates of left baseline start in units
size: real*4, font size in units
text: character, the text that shall be painted
length: integer*4, number of characters in text

The text must be terminated by a leading zero.
sample:
call qqfont1 (x,y,30.,text//char(0))
The resulting fontsize (size multiplied by scale) should not be under 12 dots. Best results from 30 dots and up.

Paint a number
call qqifont1 (x,y,size,number,length)

Parameter:
x,y: real*4, dot coordinates of left baseline start in units
size: real*4, font size in units
number: integer*4, the number that shall be painted
length: integer*4, number of digits in number

The resulting fontsize (size multiplied by scale) should not be under 12 dots. Best results from 30 dots and up.

The painted number will be filled up with leading spaces, if necessary. If the number will not fit in the defined length, the length will become set to the necessary value to fit. This value will not be returned.

call qqrfont1 (x,y,size,number,length,decimals)

like qqifont1 with the following differences:
number: real*4, the number that shall be painted
decimals: integer, the number of decimal places

The number of decimal places will become reduces if the number doesn’t fit in the defined length. This value will not be returned.

call qqdfont1 (x,y,size,number,length,decimals)

like qqrfont1 with the following differences:
number: real*8, the number that shall be painted

Paint a circle
call qqcircle (a1,a2,x,y,r1,r2)

Parameter:
a1,a2: real*4, Start- and endangle in degrees, complete circle: (0.,360.)
x,y: real*4, centerpoint coordinates in units
r1,r2: real*4, radiuses in units. r1=left/right, r2=top/bottom

Rotation
call qqrotate (x,y,w)

Parameter:
x,y: real*4, center of rotation coordinates in units
w: real*4, angle of rotation in degrees

The rotation has effect on the following calls.
Rotation and deformation are mutually exclusive.

Finish. Write the file
call qqclose

(Quasi-) random number
n=qqrandom (i)

Parameter:
i: integer*4, 0: next number, different to the one before
             -1: start with quasi random number (always the same)
             -2: start with a real random number