home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
graphics.zip
/
GRAPHICS.TXT
< prev
next >
Wrap
Text File
|
1993-10-28
|
12KB
|
256 lines
Scientific Graphic Library
Product Overview (Version 0.2)
This graphics package is a high level Application Programming
Interface(API) library which can be used to create two-dimensional,
scientific graphs.
Graph Relationship to an Application Window
The graphics package creates a window that can be sized and positioned
by the developer. It can therefore be used as a standard control in any
window or dialog box.
Creating a Graph
To create a graph, the developer can use on of two methods. The
first method uses the function GraphCreate. This function is used to
place a graph object within a client window. You can position
the graph window using GraphSetDimensions and paint the graph using
GraphPaint. The graph window can be positioned using GraphSetWindowPos.
The second method involves creating a graph as a User defined control.
In this case the graph must first be registered by using GraphRegister.
This function registers a user defined control. This control name can
then be used by any user defined control and placed in resource files.
The handle of the graph can be obtained using the function GraphQueryHandle.
A graph control can be positioned (as usual) using WinSetWindowPos.
Graph Types
The graphics package initially supports five types of graphs.
These graph types are Scatter, Line, XY-Line, Spectral, and Area graphs.
In the future, support for Polar, Bar, Pie, Tabular, Radar, HILO, Stacked
Bar, Step and thier 3D compliments will be included.
Graph Regions
The graph is currently sub-divided into ten areas. These areas are as
follows:
o Graph Window
o Heading
o X-Axis Text
o X-Axis Labels and Tick Marks
o Y-Axis Text
o Y-Axis Labels and Tick Marks
o 2Y-Axis Text
o Plot
o Legend
o Company Classification (Upper Left, Lower Right)
Other areas to be defined in an enhanced version are:
o X-Axis Units
o Y-Axis Units
o 2Y-Axis Labels and Tick Marks
o 2Y-Axis Units
o User defined Notation Text
o User defined arrows
The graph window contains all other regions. The Plot is positioned within
the graph window using the function GraphPositionPlot. The plot is
positioned by specifing the plots Heading, Left Margin, Right Margin, and
Footing with respect to the graph window.
The parameters for this function are in percentages of the total graph
window, not pixels or inches. The automatic default for these regions
are heading=10%, footing=15%, left margin = 15%, right margin = 20%.
The area bounded by the vertical and horizontal borders is call the Plot.
The vertical size of the plot is controlled by the Heading and Footing
percentage. The horizontal size of the plot is controlled by the Left and
Right margins. The default parameters provide a plot area of approximately
70% in height and 75% in width.
Graph Text, Alignment, Fonts, Colors
The developer can specify the text for the Title, X-Axis, Y-Axis,
and 2Y-Axis. Any available vector font can be assigned to each text
region. Fonts resize automatically when necessary as the graph size changes.
Text can be aligned in thier areas either horizontally or vertically.
Besides using the standard sixteen color indexes, you can specify
any RGB color.
Graph Fonts
Only vector fonts are supported and a font is described by name
(e.g. "Times Roman Bold"). In addition to a font name, a point size may also
be provided. The graphics package will use the point size specified as long
as the text will fit into the text boundary. If the text does not fit, the
font is automatically scaled so that it fits the text boundary.
Each data group and its associated data points can be provided a name that
will be used in the graph legend. The fonts for the legend are can be set
by the developer as described above.
Data Groups
Before any data can be added to the graph, the number of groups must be
specified using the function GraphSetGroupCount. Groups are numbered starting
with group 1. Once a group has been specified, the develpoer can modifiy
group parameters such as group legend text, color, marker type, line type,
and pattern using the GraphSetGroup... function calls.
Specifying Graph Data
After a groups creation, the developer provides the graph with the data
points to display. The data points are given as a set of points, hereafter
called a group. A group can contain any number of points. The graphics
package can support any number of groups within memory and performance
constraints. Each data group and its associated data points are initially
defined with the function GraphSetupData which specifies the data types and
pre-allocates storage. The function GraphSetData can then be used to add
X and Y data pairs upto the maximum number of points specified in
GraphSetupData. To initialize any array of data points, you can use the
functions GraphSetXData and GraphSetYData. These function assume an array
of points as long as specified in graph setup data.
Data can be appended to a group using the function GraphAppendData. If more
memory is required, this function will re-allocate memory as necessary. The
number of data points can be reduced by calling GraphSetupData with the
required number of data points.
All data points are Zero based indexed.
Graph Axis Support
The X-Axis and Y-axis support manual or automatic scaling for positive
and negative data. Automatic axis support for linear and
logarithmic numbers is included. In the future support for calendar
(days, weeks, months, years), time (seconds, minutes, hours), and
military/international hours will be included.
Graph Axis Scaling
The Axis scaling algorithm will automatically compute the maximum and
minimum values for the axis from the data groups. To insure readibility,
the scaling algorithm provides axis major tick increments. These
increments are from the base set or a multiple of 10 from the base set.
The base set is 1, 2, 5, 10, 15. 20, 25. Minor tick increments are either
2, 3, 5, 10, the increment must make sense given a major increment.
The automatic scaling algorithm will roundup the maximum data point or round
down the minimum data point to fit the major tick increment as required.
The font for the text labels can be set by the developer. This font size is
used by the automatic scaling algorithm in determinig the labeling increment.
The automatic labeling algorithm can be disabled (using GraphSet(X,Y)Options)
by setting the GRAPH_AUTO_LABEL and GRAPH_AUTO_RANGE flags off (e.g.
GraphSetXOptions(hGraph, GRAPH_AUTO_RANGE, FALSE)). Once the automatic
labeling and ranging are disabled, a manual range or label increment can
be set using the functions GraphSet(X,Y)DataRange and GraphSet(X,Y)Labeling.
Graph Tactile Feedback
Two functions are provided to allow an application to interact with the
graph. The first is GraphQueryPointer. This API allows the developer to
pass x and y coordinates to the graph and determine what data region , data
group, and, if in the graphic region, the corresponding x,y data coordinates.
This function is useful in-conjunction with the mouse pointing device.
The second function is GraphQueryLocation. The developer can ask for
the coordinates of a specific item display in a graph. The application can
the provide a note, information, or position the mouse pointing device in
this location.
Graph Metafiles, Bitmaps, and Printing
The graph can be saved to disk as a bitmap or metafile using the
functions GraphOutputBitmap and GraphOutputMetafile. These can be
replayed using a utility such as the OS/2 Picture Viewer found in the
productivity folder. Bitmaps and metafiles used the current screen
size for the basis of thier output.
The GraphPrint API supports printing. The graph can be sent to a designated
printer or the default printer can be used by specifying a NULL for the
printer queue name. The printer job name is also optional. In addition,
the function GraphSetPrintQData can be used to locally define the printer
Queue information directly. The function GraphSetPrintMargin can be used
to set the print margins and GraphPreview can be used to get a look at the
printed graph.
When creating a metafile, bitmap, or printed page, color printing can be
enabled or disabled (default) using the function GraphEnableColorPrint.
By disabling color output, a good quality Black & White copy can be created.
Graph Menus
Built in menus are provided to allow the user to manipulate the style of
the graph. These menus are not complete but can be activated by using the
function GraphPopupMenu (note: that the menus are designed to be used as
popup menus and are region specific). The function GraphSelectObject is
used to set the menu reference to a particular region and group within
the graph. The function GraphSelectMenuItem is then used to process the
menu items. The predefined menu items can be found in gmenu.h.
I have not yet decided how to proceed with menus, using SOM would help.
Future Direction
This was done initially for an internal need and because I had so much
fun I decided to expand it. Besides implementing all functionality such as
graph types and 3D (including possibly 3D grahics and wireframe capability)
I'm not sure how I want to proceed. I've done this in plain C, but it really
needs to be an object implementation. C++ seems to limited to me and as I
have done other projects in SOM, I think thats where I will head. I would like
to use DSOM actually as soon as I can get my hands on the kit (cost is
always a problem). Any inputs to this line of anquish would be appreciated.
Problems
Do not set the graph axis type to PERCENT as this will cause the program
to generate a divide by zero (function is not yet implemented).
Metafile generation contains a clip region. This region does not always
correlate to the plot area causing pre-mature clipping to occur in some
instances.
Selection of printer font does not work correctly.
Fixes
Version 0.2
(1) Fixed problem with graph crashing on minimize
(2) Fixed problem with selecting a graph area pattern
Enhancements
Version 0.2
(1) Added encode file formats for PM version 1.x Bitmaps,
Windows Version 3.x Bitmaps, and GIF.
(2) Enable clipboard copy of the graphic image
(3) Added printer font selection (does not work correctly)
Notes
Use the right mouse button to view the menu selections available
for the test cases. This will demonstrate most of the graph features.
If you can do it with the menus, you can programm it.
Since this is so porly documented, the best advise I can give is look
at the sample code provided and the header files.
Any comments or suggestions can be forwarded to:
Steven Murray
100 Stoney Hollow Road
Tiverton, RI 02878
COMPUSERVE 71053,1346
==========================================================================
TERMS
==========================================================================
This API is Freeware. You are free to use it and give it to others,
as long as you don't sell it. It is NOT public domain; I retain copyright.