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, gd (PNG and JPEG),
PostScript (xfig is in developement).
One major feature of the g2_library is the concept of virtual devices.
An arbitrary number of physical devices (such as PostScript, 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 PNG 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.
If you don't need or like the concept of virtual devices, simply ignore it./-------> PNG: g2_attach(id_PNG,.. ----------------------- g2_plot---> | Virtual device: id |--------> X11: g2_attach(id_X11,... ----------------------- \-------> PS: g2_attach(id_PS,...
g2 uses the gd library by Thomas Boutell to generate PNG files. This package is freeware (however not GPL) and can be downloaded at http://www.boutell.com/gd/.
Linux users might prefer to install a pre-compiled gd rpm package which should be available at your local RedHat mirrorsite.
NT users should install the gd source package in a subdirectory named "gd" which should be located in the same directory as the g2 subdirectory (but not in the g2 directory itself). Otherwise file locations for gd must be modified in the g2 project workspace.
Unix and VMS users will have to build and install gd according to the instructions found in the gd distribution.
LINUX
Try to extract either the tar.gz or the zip distribution (whatever is easier for you) type mms to compile library (descrip.mms file is suplied) run mms in demo directory to compile demo applications
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 PNG file instead of a PostScript file ?
replace the PS header file with
#include <g2_gd.h>and replace the g2_open_PS function call with
id = g2_open_gd("rect.png",300,200,g2_gd_png);You want to draw to a PNG file and a PostScript file with one plot command ?
Here we use the concept of virtual devices. Open a PNG and PostScript device, then open a virtual device and attach both the PNG and PostScript device to the virtual device. Plot commands to the virtual device will be issued to both PNG and PostScript device. You can attach and detatch further devices at any time.
Note: closing a virtual device automatically closes all attached devices.#include <g2.h> #include <g2_PS.h> #include <g2_gd.h> main() { int id_PS,id_PNG,id; id_PS = g2_open_PS("rect.ps", g2_A4, g2_PS_land); id_PNG = g2_open_gd("rect.png",300,200,g2_gd_png); id = g2_open_vd(); g2_attach(id,id_PS); g2_attach(id,id_PNG); g2_rectangle(id,20,20,150,150); g2_circle(id,50,60,100); g2_close(id); }
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_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
The perl interface for g2 is currently tested for Linux and Digital
Unix/OSF. Function names in perl are the same as in C, however the
device itself is implemented object orientated, i.e. the device argument
is ommited in all functions.
E.g., following simple perl script:
use G2; $d = newX11 G2::Device(100,100); $d->circle(10, 10, 20); $d->string(20, 40, "Hello World"); print "\nDone.\n[Enter]\n"; getc(STDIN); $d->close()
The creator functions are newX11, newGIF, newPS, etc. and accept
the same arguments as the open functions in the C version.
See the perl documentation (perldoc G2) for more details and the test.pl
script for a more extensive example.
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)
open a new PostScript deviceint g2_open_win32(int width, int height, const char *name, int type)
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.open a new Win32 device
width,height: width and height of win32 window in pixels
name: depending on the value of "type" (see below) either window title or name of the metafile.
type: Defines the output type of win32 device:
0: output to a window
1: output to an enhanced metafile (EMF)
returns : device id of new win32 device
int g2_open_gd( const char *filename, int width, int height, enum g2_gd_type gd_type)
open a new gd device
filename: name of the file.
width,height: width and height of the image in pixels
gd_type: corrently supported g2_gd_png and g2_gd_jpeg
returns : device id of new gd 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
void g2_filled_rectangle(int
dev, double x1, double y1, double x2, double y2)
draw a filled rectangle
on device dev
x1,y1,x2,y2: coordinates
of the corners of the rectangle
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_string |
|
|
|
|
|
(This section is obviously still in work. Please use copy-paste method
to add new devices, i.e. copy code from an implemented device and replace
function code with the code appropriate for your use case.)
$d = newX11(100,100);
.....
$d->close();
$d = newX11(200,200);
will not work properly. This should be fixed in the next release.
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 |