GRAPH Examples
From STX Wiki
< Programmer Guide | Shell Items | Graph
Jump to navigationJump to search
| Graph Item | |||||
|---|---|---|---|---|---|
| INTRODUCTION | NEW | SET | ATTRIBUTES | MESSAGES | EXAMPLES |
Basic GUI Example
A basic script displaying an x/y plot.
/*++
Macro: gui_basic_example
Descriptions:
Creates a basic graphical user interface,
Parameters:
#standalone Set to 1 if the script is running on it's own
(i.e. not called by another script). This is the default.
Otherwise set to 0.
Author:
Jonnie White
History:
2006-11-13 First implemented
2007-10-04 Dialog button now toggles function color
2009-06-25 Modernising
--*/
[macro gui_basic_example #standalone=1]
//
// create and configure display
//
#display := new display * 'Display Title' 1 1 /Dialog=Above
if '$#display[?]' != 'display' then
em -1 ; display creation failed ($emsg)
end
$#display enabled restore 0 0 600 600
//
// create spu to generate data for graph
//
// generate some data
#nValues := 100
#vector := eval fill($#nValues,0,1)
// create and run spu
#spu := new spu * table2output $#vector 1 0 1 /n
if '$#spu[?]' != 'spu' then
em -1 ; spu creation failed ($emsg)
end
//
// create and configure graph
//
#graph := new graph * 1 $#display 0 0
if '$#graph[?]' != 'graph' then
em -1 ; graph creation failed ($emsg)
end
theGraph := $#graph // shell variable used for graph commands in message handler
$#graph axis both both * yellow both both
$#graph xscale 0 $#nValues-1 '' 'X'
$#graph yscale 0 $#nValues-1 '' 'Y'
$#graph y 0 $#spu.x0 xyplot 1 green lines solid 2
$#graph x $#spu.x0 /a // set x data and apply all graph settings
//
// run spu (sending data to graph
//
$#spu run 1
// return if this is not a standalone call
// caller should clean up
if '$#standalone' != 1 exit 1
//
// create and configure the dialog
//
#dialog := new menu * $#display
if '$#dialog[?]' != 'menu' then
em -1 ; dialog creation failed ($emsg)
end
$#dialog $#dialog[!controls] button 0 0 'Toggle function color'
$#dialog enabled restored
//
// process messages until display is close
// by the user
//
setmsghandler display $#display gui_basic_example_mh
//
// process dialog messages too
//
setmsghandler menu $#dialog gui_basic_example_mh
AppMode := 1
do while '$AppMode' != '0'
GetMessage
end
setmsghandler display $#display
//
// clean up
//
delete $#graph $#display $#dialog $#spu
exit
[MACRO gui_basic_example_mh #objtype #objname #msgid #msgpar]
if '$#objtype' == display || '$#objtype' == shell then
if '$#msgid' == Close || '$#msgId' == Exit then
AppMode := 0
end
else if '$#objtype' == 'menu' then
if '$#msgid' == 'command' && '$#msgpar' == '0' then
// toggle function color
fcolor := COND '$fcolor' == 'green' || '$fcolor' == '' ? 'blue' : 'green'
$theGraph y 0 * * * $fcolor * * * /Apply
end
end
exit 1
Cursor Script Example
The following STx script example demonstrates basic use of the graphical cursors.
[macro gui_cursors_example #standalone=1]
//
// create display, graph and dialog
// and configure
//
if '$#standalone' == 1 then
if '$(load macrocode $scriptdirectory\gui_basic_example.sts)' > 0 em $rc ; $#mac - $emsg
gui_basic_example 0
end
//
// display cursor styles combobox in dialog
// and static control for cursor position values.
//
cursorStyle := set '0'
cursorStyleList := set 'cross crosshair hbar vbar hbarcross vbarcross harmonic rangeselection'
functionBound := set '0'
functionBoundList := set 'unbound bound'
//
// show cursors in graph
//
$myGraph cursormode both $cursorStyle on $(int $functionBound-1) off off red yellow /Apply
//
// connect them with a value item, so the value can be
// extracted at any time using the syntax $cursors[!data,$#i]
//
myCursors := new value *
if '$myCursors[?]' != 'value' em -1 ; value creation failed ($emsg)
$myCursors input $myGraph.cursors /Read
//
// return if this is not a standalone call
//
if '$#standalone' != 1 exit 1 // caller will clean up
//
// create dialog controls and show
// the display
//
$myDialog $myDialog[!controls] combobox 0 0 'Cursor Style' cursorStyle * * cursorStyleList
functionBound := set '0'
functionBoundList := set 'unbound bound'
$myDialog $myDialog[!controls] combobox 1 0 'Function Bound' functionBound * * functionBoundList
staticCtrlId := $myDialog[!controls]
$myDialog $staticCtrlId static 2 0 'text' * 50 1
$myDialog enabled restored /Write // update dialog
$myDisplay enabled restored 100 100 800 800
//
// process messages until display is close
// by the user
//
setmsghandler display $myDisplay gui_cursors_example_mh
setmsghandler menu $myDialog gui_cursors_example_mh
setmsghandler value $myCursors gui_cursors_example_mh
AppMode := 1
do while '$AppMode' != '0'
GetMessage
end
setmsghandler display $myDisplay
setmsghandler menu $myDialog
setmsghandler value $myCursors
//
// clean up
//
delete $myGraph $myDisplay $myDialog $mySpu $myCursors
exit
[MACRO gui_cursors_example_mh #objtype #objname #msgid #msgpar]
if '$#objtype' == display || '$#objtype' == shell then
if '$#msgid' == Close || '$#msgId' == Exit then
AppMode := 0
end
else if '$#objtype' == 'menu' then
if '$#msgid' == 'update' then
$#objname /Read // retrieve new
$myGraph cursormode both $(word $cursorStyle $cursorStyleList) * $(int $functionBound-1) /Apply
end
else if '$#objtype' == 'value' then
if '$#objname' == '$myCursors' then
#x1 := format '%.2f' $myCursors[!data,5]
#y1 := format '%.2f' $myCursors[!data,6]
#x2 := format '%.2f' $myCursors[!data,10]
#y2 := format '%.2f' $myCursors[!data,11]
$myDialog $staticCtrlId * 'x1=$#x1 y1=$#y1 x2=$#x2 y2=$#y2'
end
end
exit 1
Color Settings Script Example
The following script demonstrates how to set a graphs colors, fonts etc.
[macro gui_colors_example #standalone=1]
//
// create display, graph and dialog
// and configure, display cursors
//
if '$#standalone' == 1 then
if '$(load macrocode $scriptdirectory\gui_basic_example.sts)' > 0 em $rc ; $#mac - $emsg
gui_basic_example 0
if '$(load macrocode $scriptdirectory\gui_cursors_example.sts)' > 0 em $rc ; $#mac - $emsg
gui_cursors_example 0
end
//
// configure graph
//
// the title (top left) of the graph
$myGraph title on 'arial:13:italic' black 'Graph Title'
// axis data range, units and title
// this data is used for the labels as well as the cursor
// position data.
$myGraph xscale 0 $#nValues-1 'X Unit' 'X Title'
$myGraph yscale 0 $#nValues-1 'Y Unit' 'Y Title'
// colors / fonts / labels etc
// specify the background color
$myGraph bgcolor hlgray white
// specify which axes labels to display, the font and color to use
$myGraph axis below left 'courier:10' gray below left 'arial:12:bold' black on on
// specify which axes to display and whether to display a grid or not
// and the number of steps between labels (ticks).
$myGraph frame below left gray both gray 5 5 -20 -10
// plot type and data source
$myGraph y 0 * * 1 red lines solid 3
// cursors
$myGraph cursormode both cross on 0 off off red yellow /Apply
//
// set the display position
//
$myDisplay enabled restored 100 100 800 800
//
// process messages until display is close
// by the user
//
setmsghandler display $myDisplay gui_colors_example_mh
AppMode := 1
do while '$AppMode' != '0'
GetMessage
end
setmsghandler display $myDisplay
//
// clean up
//
delete $myGraph $myDisplay $myDialog $mySpu $myCursors
exit
[MACRO gui_colors_example_mh #objtype #objname #msgid #msgpar]
if '$#objtype' == display || '$#objtype' == shell then
if '$#msgid' == Close || '$#msgId' == Exit then
AppMode := 0
end
end
exit 1