Object Type: xgraph Description: Main object class for displaying

advertisement
Object Type:
xgraph
Description:
Main object class for displaying graphs. Subclassed
from coredraw. This widget provides many special functions
for helping to display graphs.
Like other coredraw subclasses, graph can be thought of as
providing a window into a space where pixes reside, or a
screen onto which pixes are projected. Usually the only
pixes displayed in a graph widget are xplots and xaxis
pixes. Furthermore, xplots are usually not created explicitly
and are instead automatically generated when the graph is
created or receives messages. The axis pixes for the x and
y axes are created automatically when the xgraph is created.
The functions provided by xgraph, which are inherited or
overridden from the coredraw class, include:
Displaying and managing pixes.
Handling forward transforms for drawing pixes
Handling backward transforms for identifying
location of mouse events
Keyboard control over transformation parameters
such as zoom and pan.
Providing a mechanism for deciding which child
pix should recieve mouse events
The graph widget can only display pixes in the xy plane.
The graph widget has a number of special key and mouse
mappings:
event
operation
------------------------------------------------------'a'
'all' : Change the axes to display all
the plots in their entirety.
arrow keys change the x and y axis offsets.
shift-arrow Change the scale on the x and y axes.
keys
ctrl-arrow Change the lower boundaries of the graph
keys
shift-ctrl-arrow
keys
Change the upper boundaries of the graph
Mouse events
Selects plots, and passes appropriate
on labels actions to the scripts associated with the
for plots plots.
Click and drag
on upper/lower
values of axes
Changes the selected axis range
Click and drag
on middle
values of axes
ctrl-p
Author:
Changes the selected axis offset.
Prints the graph to a postscript
printer/file
Upi Bhalla Mt. Sinai May 93
---------------------------------------------------------------------------ELEMENT PARAMETERS
DataStructure:
Size:
Fields:
xgraph_type [in src/Xodus/graph/xgraph_struct.h]
184 bytes
fg
Foreground color of graph (not used)
Background color.
Position of left edge of graph.
Position of upper edge of graph.
Width of graph
Height of graph
x lower limit for axis for plots. Note that the is
NOT the lower limit of the region in which pixes
can be drawn. That is given by cdxmin.
ymin y lower limit for axis
xmax x upper limit for axis
ymax y upper limit for axis
cdxmin
x lower limit for draw region of graph
bg
xgeom
ygeom
wgeom
hgeom
xmin
cdymin
cdxmax
cdymax
xoffset
y lower limit for
x upper limit for
y upper limit for
X-offset to apply
draw region of graph
draw region of graph
draw region of graph
to successive plots in the
yoffset
Y-offset to apply to successive plots in the
graph.
graph.
overlay Flag for whether or not to save old plots. If
set to 0, old plots are discarde. If set to 1,
old plots are retained and moved into the
subelement 'xoverlay' which is a child of the
graph.
script
Script operation(s) to perform on a mouse
click. The script calls to the graph widget
are only made if none of the child pixes has
expressed an interest in the event.
--------------------------------------------------------------------------SIMULATION PARAMETERS
Function:
XGraph [in src/Xodus/widg/xgraph.c]
Classes:
widget output
Actions:
XUPDATE: update internal fields when
displayed widget is changed.
XOCOMMAND: an action that can invoke the functions
in the 'script' field
XODROP:
Called when a pix is dropped into a draw widget.
ADDMSGIN: Monitors commands for adding messages. If a
PLOT, PLOTSCALE or WAVEPLOT message is received,
the appropriate xplot pixes are created.
Messages:
PLOT
data name color
In this mode successive data points are added to
the end of the plot as the simulation progresses.
PLOTSCALE data name color scale yoffset
Similar to PLOT, except that the scale and yoffset
of this plot are also included in the message.
X
x-coordinate-of-PLOT-msg name-of-corresponding-PLOT-msg
This is used for creating xy (phase) plots. To use
this, first the PLOT msg must be sent, then the
corresponding X msg can be set up. See the
example below.
WAVEPLOT data name color
This is used to create a plot whose y coordinates
vary as the simulation progresses. For example,
if we have 10 waveplot messages with the same name,
they will specify 10 successive y coordinates on
a line. With every timestep the y coordinates get
updated so the effect is like the profile of a
travelling wave.
--------------------------------------------------------------------------Notes:
Can only be displayed in a form widget
The xgraph does not actually handle messages itself.
Instead it forwards them to the appropriate xplot
pix.
Example.
================================= cut here
=================================
//genesis
// This example tests the various graph modes. First click 'runit',
// then click reset and then runit again.
// Click on any of the plots to toggle their visibility
create xform /form [1,1,500,800] -title "OUTPUT" -fg black
ce /form
create xbutton runit
setfield runit script \
"step 1000; setfield /form/instr1 fg black; setfield /form/instr2 fg
blue"
create xbutton reset -wgeom 50% -script reset
create xbutton quit -ygeom 0:runit -xgeom 50% -wgeom 50% -script quit
create xgraph /form/graph -hgeom 30%
ce /form/graph
setfield script "echo in graph" xmin 0 xmax 100 ymin -1 ymax 5
setfield yoffset 2
setfield xmax 1000 ymax 15
setfield overlay 1
create xgraph /form/phasegraph -hgeom 30%
ce /form/phasegraph
setfield script "echo in graph" xmin 0 xmax 100 ymin -1 ymax 5
setfield yoffset 2
setfield xmin -1 xmax 1 ymin -1 ymax 3
setfield overlay 1
create xgraph /form/wavegraph -hgeom 20%
ce /form/wavegraph
setfield script "echo in graph" xmin 0 xmax 100 ymin -1 ymax 5
setfield xmin -0.5 xmax 1.5 ymin -1 ymax 1
create xlabel /form/instr1 \
-label "First click 'runit' to activate the demo." -fg blue
create xlabel /form/instr2 \
-label "After the run ends, click 'reset' and 'runit' again."
create xlabel /form/instr3 \
-label "Click on any of the plot names to toggle their visibility"
int i
create xplot /form/graph/foo
ce /form/graph/foo
for(i = 0; i < 200 ; i = i + 1)
setfield xpts->table[{i}] {i}
setfield ypts->table[{i}] {sin {i/10.0} }
end
setfield npts 200 fg blue wx 1 wy 1
//set xmin 0 xmax 100 ymin -1 ymax 1 wx 1 wy 1
ce ..
create table /tab
call /tab TABCREATE 400 0 400
setfield /tab step_mode 1 stepsize 1
for(i = 0; i < 400 ; i = i + 1)
setfield /tab table->table[{i}] {cos {5+ i/30.0} }
end
create table /tab2
call /tab2 TABCREATE 400 0 400
setfield /tab2 step_mode 1 stepsize 1
for(i = 0; i < 400 ; i = i + 1)
setfield /tab2 table->table[{i}] {sin {4 +i/16.0} }
end
addmsg /tab /form/graph PLOT output *output *yellow
addmsg /tab2 /form/graph PLOT output *output *green
addmsg /tab2 /form/graph PLOTSCALE output *plotscale *red -0.5 0.5
addmsg /tab /form/phasegraph PLOT output *output *yellow
addmsg /tab2 /form/phasegraph X output *output
addmsg /tab /form/wavegraph WAVEPLOT output *wave *blue
addmsg /tab2 /form/wavegraph WAVEPLOT output *wave *blue
setfield /form/#[TYPE=xgraph]/#[TYPE=xplot] script "toggle_visibility
<w>"
function toggle_visibility(widget)
str widget
if ({getfield {widget} pixflags} & 1)
setfield {widget} pixflags ~v
else
setfield {widget} pixflags v
end
end
xshow /form
================================= cut here
=================================
See also:
xplot, xaxis, XODUS documentation, pix documentation,
documentation for coredraw and other subclasses.
Download