GRAPH Examples

From STX Wiki
< Programmer Guide‎ | Shell Items‎ | Graph
Revision as of 11:05, 1 December 2015 by Jw (talk | contribs) (Created page with "{{DISPLAYTITLE:{{SUBPAGENAME}}}} {{Graph Item}} {{Examples}} ===Basic GUI Example=== A basic script displaying an x/y plot. <pre> /*++ Macro: gui_basic_example Description...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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

Navigation menu

Personal tools