#!@xtk02_LOCATION@ -f # -*-tcl-*- # Geoffrey Furnish # 11 April 1994 # # @> A script for using Tk to control xtk02, using the PLplot itcl interface. ############################################################################### package require Pltk eval package require $pl_itk_package_name wm title . "x01c -- Tk/Itcl version" plstdwin . ############################################################################### # Set up the menubar and message widgets. frame .menu -relief raised -borderwidth 3 button .menu.one -text "One" -command "myplot1" pack append .menu .menu.one {left expand fill} button .menu.two -text "Two" -command "myplot 2" pack append .menu .menu.two {left expand fill} button .menu.three -text "Three" -command "plot2" pack append .menu .menu.three {left expand fill} button .menu.four -text "Four" -command "myplot 4" pack append .menu .menu.four {left expand fill} button .menu.five -text "Five" -command "gumbyplot" pack append .menu .menu.five {left expand fill} button .menu.six -text "Six" -command "snoopy" pack .menu.six -side left -expand 1 -fill x button .menu.exit -text "Exit" -command "quit 0" pack append .menu .menu.exit {right expand fill} message .msg \ -font -Adobe-helvetica-medium-r-normal--*-240* -aspect 200 \ -width 500 -borderwidth 1 \ -text "TK02: Demo \[incr Tcl\] interface to PLplot" #PLXWin .plw Pltkwin .plw pack append . .menu {top fillx} \ .msg {top padx 5 pady 5 fill} \ .plw {bottom expand fill} update tk_menuBar .menu .menu.one .menu.two .menu.three .menu.four .menu.exit ############################################################################### # Definitions of procedures used in this script. proc myplot1 {} { global xscale yscale xoff yoff set xscale 6 set yscale 1 set xoff 0 set yoff 0 plot1 } # This is supposed to work just like the plot1() in x01c.c/xtk02.c proc plot1 {} { global xscale yscale xoff yoff matrix x1 float 10 matrix y1 float 10 for {set i 2; set n1 0} {$i < 60} {incr i 10; incr n1} { set x [expr $xoff + $xscale * ($i + 1) / 60] x1 $n1 = $x y1 $n1 = [expr $yoff + $yscale * pow($x,2)] } set n2 60 matrix x2 float $n2 matrix y2 float $n2 for {set i 0} {$i < $n2} {incr i} { set x [expr $xoff + $xscale * ($i + 1) / $n2] x2 $i = $x y2 $i = [expr $yoff + $yscale * pow($x,2)] } set xmax [x2 [expr $n2-1]] set ymax [y2 [expr $n2-1]] .plw plcol0 1 .plw plenv $xoff $xmax $yoff $ymax 0 0 .plw plcol0 6 .plw pllab "(x)" "(y)" "#frPLPLOT Example 1 - y=x#u2" # plot the data points .plw plcol0 9 matrix xplot f $n1 = [x1 :] matrix yplot f $n1 = [y1 :] .plw plpoin xplot yplot 9 # plot the data points .plw plcol0 4 .plw plline x2 y2 } # This is supposed to work just like the plot2() in x01c.c/xtk02.c proc plot2 {} { .plw plcol0 1 .plw plenv -2 10 -.4 1.2 0 1 .plw plcol0 2 .plw pllab "(x)" "sin(x)/x" "#frPLPLOT Example 1 - Sinc Function" # Fill up the array matrix x1 float 101 matrix y1 float 101 for {set i 0} {$i < 101} {incr i} { set x [expr ($i - 19.)/6.] x1 $i = $x y1 $i = 1 if {$x != 0} { y1 $i = [expr sin($x)/$x] } } .plw plcol0 3 .plw plline x1 y1 } proc gumbyplot {} { .plw plcol0 1 .plw plenv 0 1 0 1 0 0 .plw plcol0 6 .plw pllab "(x)" "(y)" "#frPLplot Example 1 - y=1-2x+2x#u2" matrix x1 float 101 matrix y1 float 101 for {set i 0} {$i < 101} {incr i} { set x [expr $i * .01] x1 $i = $x y1 $i = [expr 1 - 2 * $x + 2 * $x * $x] } .plw plline x1 y1 } # This proc shows off the use of a matrix extension subcommand. proc snoopy {} { matrix x float 101 matrix y float 101 for {set i 0} {$i < 101} {incr i} { set xx [expr $i * .01] x $i = $xx } y stuff .plw plcol0 1 .plw plenv 0 1 0 1 0 0 .plw plcol0 6 .plw pllab "(x)" "(y)" "#frDemo of Matrix extension subcommand" .plw plline x y } # Punch eject and hold onto your seat !!! proc quit a { exit } # Utility routine. proc dpos w { wm geometry $w +300+300 } ###############################################################################