Short version (if you are in hurry):
g2 is a simple to use graphics library for 2D graphical applications
written in Ansi-C. This library provides a comprehensive set of functions
for simultaneous generation of graphical output on different types of devices.
Presently, following devices are currently supported by g2: X11, GIF, PostScript
(xfig and Win32 are in developement).
One major feature of the g2_library is the concept of virtual devices.
An arbitrary number of physical devices (such as GIF, or X11) can be grouped
to create a so-called virtual device. Commands sent to such a virtual devices
will automatically issued to all attached physical devices. This allows
for example simultaneous output to a GIF file and a Postscript file. A
virtual device in turn can be attached to another virtual device, allowing
to construct trees of devices.
Virtual devices can also be useful when using different user-coordinate
systems. E.g. one X11 window showing an overview of a graphical output,
and a second window showing a zoom of a more detailed area of the
graphic. Drawing in both windows is performed by one single command to
the virtual device.
/-------> GIF: g2_attach(id_GIF,.. ----------------------- g2_plot---> | Virtual device: id |--------> X11: g2_attach(id_X11,... ----------------------- \-------> PS: g2_attach(id_PS,...If you don't need or like the concept of virtual devices, simply ignore it.
Try to extract either the tar.gz or the zip distribution (whatever is easier for you) wait for the next release for a descrip.mms file.
1.) Always include <g2.h>. Additionally include header files for all types of devices you want to use.#include <g2.h> #include <g2_PS.h> main() { int id; id = g2_open_PS("rect.ps", g2_A4, g2_PS_land); g2_rectangle(id,20,20,150,150); g2_close(id); }
2.) Open devices using g2_open functions. The open function returns a device id of type int, which you need to refer to the device.
3.) use g2 functions for drawing, changing drawing styles, or doing other stuff
4.) call g2_close to close device
You want to draw a GIF file instead of a PostScript file ?
replace the PS header file with
#include <g2_GIF.h>and replace the g2_open_PS function call with
id = g2_open_GIF("rect.gif",300,200);You want to draw to a GIF file and a PostScript file with one plot command ?
Here we use the concept of virtual devices. Open a GIF and PostScript device, then open a virtual device and attach both the GIF and PostScript device to the virtual device. Plot commands to the virtual device will be issued to both GIF and PostScript device. You can attach and detatch further devices at any time.
#include <g2.h> #include <g2_PS.h> #include <g2_GIF.h> main() { int id_PS,id_GIF,id; id_PS = g2_open_PS("rect.ps", g2_A4, g2_PS_land); id_GIF = g2_open_GIF("rect.gif",300,200); id = g2_open_vd();
g2_attach(id,id_PS); g2_attach(id,id_GIF);
g2_rectangle(id,20,20,150,150); g2_circle(id,50,60,100); g2_close(id); }Note: closing a virtual device automatically closes all attached devices.
The Fortran interface for g2 is currently tested for Linux and Digital Unix/OSF. Function names for Fortran are the same as in C, however following differences exist:
program demo
real d,color
d=g2_open_PS('demo_f.ps', 4.0, 1.0)
call g2_plot(d, 50.0, 50.0)
call g2_draw_string(d, 25.0, 75.0, 'TEST ')
color=g2_ink(d, 1.0, 0.0, 0.0)
write (6,*) color
call g2_pen(d, color)
call g2_circle(d, 20.0, 20.0, 10.0)
call g2_flush(d)
call g2_close(d)
stop
end
int g2_open_X11(int width, int height)open an X11 window
width,height: width and height of X11 window in pixels
returns : device id of new X11 device.
int g2_open_X11X(int width, int height, int x, int y, char *window_name, char *icon_name, char *icon_data, int icon_width, int icon_height);
open an X11 window supporting additional features as icons and window title.
width,height: width and height of X11 window in pixels
x,y: position of window on screen
window_name: \0 terminated string of name of window
icon_name:
icon_data:
icon_width,icon_height:
returns : device id of new X11 device.
int g2_open_PS(const char *file_name, enum g2_PS_paper paper, enum g2_PS_orientation orientation)
attach a PostScript file
file_name: name of PostScript file
paper: Paper size (e.g. g2_A4, g2_Letter). See PostScript paper sizes for a full list of supported sizes.
orientation: paper orientation. Either g2_PS_land for landscape or g2_PS_port for portrait
returns : device id of new PostScript device.
int g2_open_GIF(int width, int height, const char *filename)
open a new GIF device
width,height: width and height of GIF image in pixels
filename: name of GIF file.
returns : device id of new GIF device
int g2_open_vd(void)
void g2_attach(int vd_dev, int dev)open a new virtual device
returns : device id of new virtual device.
void g2_detach(int
vd_dev, int dev)
detach a device attached to a virtual device
vd_dev : device id of virtual device to detach from.
dev : device id of device to detach.
void g2_plot_r(int dev, double dx, double dy)
void g2_line_to(int dev, double x,
double y)
Draw a line from current
position on device dev
x,y: ending point
Legend:
x ............ Native support
E ........... Emulation of function
K ........... Kernel internal function
Function |
|
|
|
|
Win32 |
---|---|---|---|---|---|
g2_close |
|
|
|
|
|
g2_output_to |
|
|
|
|
|
g2_set_auto_flush |
|
|
|
|
|
g2_set_coordinate_system |
|
|
|
|
|
g2_flush |
|
||||
g2_save |
|
Function |
|
|
|
|
Win32 |
|
g2_clear |
|
|
|
|
||
g2_set_background |
|
|
|
|
||
g2_move |
|
|
|
|
|
|
g2_move_r |
|
|
|
|
|
|
g2_plot |
|
|
|
|
||
g2_plot_r |
|
|
|
|
|
|
g2_set_QP |
|
|
|
|
|
|
g2_plot_QP |
|
|
|
|
|
|
g2_line |
|
|
|
|
||
g2_line_to |
|
|
|
|
|
|
g2_line_r |
|
|
|
|
|
|
g2_poly_line |
|
|
|
|
g2_line | |
g2_triangle |
|
|
|
|
g2_line | |
g2_filled_triangle |
|
|
|
|
g2_filled_polygon | |
g2_rectangle |
|
|
|
|
g2_line | |
g2_filled_rectangle |
|
|
|
|
g2_filled_polygon | |
g2_polygon |
|
|
|
|
g2_line | |
g2_filled_polygon |
|
|
|
|
||
g2_circle |
|
|
|
|
g2_ellipse | |
g2_filled_circle |
|
|
|
|
g2_filled_ellipse | |
g2_ellipse |
|
|
|
|
g2_arc | |
g2_filled_ellipse |
|
|
|
|
g2_filled_arc | |
g2_arc |
|
|
|
|
||
g2_filled_arc |
|
|
|
|
||
g2_draw_string |
|
|
|
|
(This section is obviously still in work)
Name | Size(Pt) | |
---|---|---|
g2_A0 | A0 | 2384 x 3370 |
g2_A1 | A1 | 1684 x 2384 |
g2_A2 | A2 | 1191 x 1684 |
g2_A3 | A3 | 842 x 1191 |
g2_A4 | A4 | 595 x 842 |
g2_A5 | A5 | 420 x 595 |
g2_A6 | A6 | 297 x 420 |
g2_A7 | A7 | 210 x 297 |
g2_A8 | A8 | 148 x 210 |
g2_A9 | A9 | 105 x 148 |
g2_B0 | B0 | 2920 x 4127 |
g2_B1 | B1 | 2064 x 2920 |
g2_B2 | B2 | 1460 x 2064 |
g2_B3 | B3 | 1032 x 1460 |
g2_B4 | B4 | 729 x 1032 |
g2_B5 | B5 | 516 x 729 |
g2_B6 | B6 | 363 x 516 |
g2_B7 | B7 | 258 x 363 |
g2_B8 | B8 | 181 x 258 |
g2_B9 | B9 | 127 x 181 |
g2_B10 | B10 | 91 x 127 |
g2_Comm_10_Envelope | Comm #10 Envelope | 297 x 684 |
g2_C5_Envelope | C5 Envelope | 461 x 648 |
g2_DL_Envelope | DL Envelope | 312 x 624 |
g2_Folio | Folio | 595 x 935 |
g2_Executive | Executive | 522 x 756 |
g2_Letter | Letter | 612 x 792 |
g2_Legal | Legal | 612 x 1008 |
g2_Ledger | Ledger | 1224 x 792 |
g2_Tabloid | Tabloid | 792 x 1224 |