#!/usr/local/bin/wish # # tkgproll: Rolling rolling for GNUPLOT (GNUPLOT Graphical Interface). # # [1996/08/19] OSHIRO Naoki. # [1996/12/05] OSHIRO Naoki. # ・グラフィック表示部は gnuplot に任せることにしてとりあえず完成. # ・オプションで表示式または表示ファイルを受け取れるようにした. # [1997/02/15] OSHIRO Naoki. # ・ファイル名指定が '-f' と明示的でデフォルトが数式だったのを入れ換え. # 数式指定を '-e' とした. # [1997/02/24] OSHIRO Naoki. # ・オプション引数に -using と -title を追加 (Thanks to Ken'ichi Noda). # [1997/03/01] OSHIRO Naoki. # -line option # [1998/02/01] OSHIRO Naoki. # ・複数グラフの指定を可能にした. # [1998/02/09] OSHIRO Naoki. # ・グラフのファイル出力を可能にした(出力ターミナル選択可). # ・gnuplot をパイプ経由で起動するようにした. # [1998/11/16] OSHIRO Naoki. # ・"Plot Style" のメニューを上位層へ移動. # [1998/11/20] OSHIRO Naoki. # ・"Option" メニューの未実装分を後ろへ移動 # [1999/02/01] OSHIRO Naoki. # ・Open File メニューの実体を追加 # # $Log: tkgproll,v $ # Revision 1.5 1997/02/24 15:03:29+09 oshiro # add some options: -using, -title and -option # # Revision 1.4 1997/02/21 18:27:51+09 oshiro # add 'using' and 'title'. # # Revision 1.3 1997/02/15 07:07:21+09 oshiro # revive -f option # # Revision 1.2 1997/02/15 06:52:59+09 oshiro # option exchange -f and -e. ingnored -f. # # Revision 1.1 1996/12/06 19:32:52+09 oshiro # Initial revision # # # Usage: tkgproll # tkgproll -e 'x**2+y**2' # tkgproll [-{xyz}range s:e] [-{xyz}label label] [-param] [-grid] [-dgrid3d] [-hidden] [-help] {foo.dat | -e equation} # Todo: # [1996/12/05] # @任意グラフを表示指定できるようにする. # [1996/12/08] # @データファイルはオプションなしで, # 数式はオプションをつけて指定するようにする. # [1997/01/05] # ウィンドウタイトルバーに,現在の表示グラフも併記するようにする. ### set gprollPlotForm "splot" set gprollSaveScriptFileName "tkgproll_tmp.gpt" set gprollOutputFileName "" set gprollTitleString "" set preExt "" set gprollDefaultTermName tgif set gprollTermList { {tgif "TGIF X-Window draw tool (file version 10)" .obj} {postscript "PostScript graphics language [mode \"fontname\" font_size]" .ps} {texdraw "LaTeX texdraw environment" .tex} {emtex "LaTeX picture environment with emTeX specials" .tex} {latex "LaTeX picture environment" .tex} {pslatex "LaTeX picture environment with PostScript \specials" .tex} {pstricks "LaTeX picture environment with PSTricks macros" .tex} {eepic "EEPIC -- extended LaTeX picture environment" .eepic} {gpic "GPIC -- Produce graphs in groff using the gpic preprocessor" .gpic} {tpic "TPIC -- LaTeX picture environment with tpic \\specials" .tpic} {mf "Metafont plotting standard" .mf} {mif "Frame maker MIF 3.00 format" .mif} {dxf "dxf-file for AutoCad (default size 120x80)" .dxf} {table "Dump ASCII table of X Y [Z] values to output" .tbl} {aed512 "AED 512 Terminal" .aed} {aed767 "AED 767 Terminal" .aed} {aifm "Adobe Illustrator 3.0 Format" .aif} {bitgraph "BBN Bitgraph Terminal" .bit} {corel "EPS format for CorelDRAW" .cor} {dxy800a "Roland DXY800A plotter" .dxy} {epson_180dpi "Epson LQ-style 180-dot per inch (24 pin) printers" .txt} {epson_60dpi "Epson-style 60-dot per inch printers" .txt} {epson_lx800 "Epson LX-800, Star NL-10, NX-1000, PROPRINTER ..." .txt} {excl "Talaris EXCL Laser printer (also Talaris 1590 and others)" .txt} {hp2623A "HP2623A and maybe others" .txt} {hp2648 "HP2648 and HP2647" .txt} {hp7580B "HP7580, and probably other HPs (4 pens)" .txt} {hp500c "HP DeskJet 500c, [75 100 150 300] [rle tiff]" .dkj} {hpgl "HP7475 and (hopefully) lots of others (6 pens)" .txt} {hpljii "HP Laserjet series II, [75 100 150 300]" .txt} {hpdj "HP DeskJet 500, [75 100 150 300]" .txt} {hppj "HP PaintJet and HP3630 [FNT5X9 FNT9X17 FNT13X25]" .txt} {imagen "Imagen laser printer" .txt} {kc_tek40xx "MS-DOS Kermit Tek4010 terminal emulator - color" .tek} {km_tek40xx "MS-DOS Kermit Tek4010 terminal emulator - monochrome" .tek} {tek410x "Tektronix 4106, 4107, 4109 and 420X terminals" .tek} {tek40xx "Tektronix 4010 and others; most TEK emulators" .tek} {vttek "VT-like tek40xx terminal emulator" .tek} {nec_cp6 "NEC printer CP6, Epson LQ-800 [monocrome color draft]" .cp6} {okidata "OKIDATA 320/321 Standard" .oki} {pbm "Portable bitmap [small medium large] [monochrome gray color]" .pbm} {pcl5 "HP LaserJet III [mode] [font] [point]" .txt} {prescribe "Prescribe - for the Kyocera Laser Printer" .txt} {kyo "Kyocera Laser Printer with Courier font" .kyo} {qms "QMS/QUIC Laser printer (also Talaris 1200 and others)" .qms} {regis "REGIS graphics language" .txt} {selanar "Selanar" .txt} {starc "Star Color Printer" .txt} {tandy_60dpi "Tandy DMP-130 series 60-dot per inch graphics" .txt} {vx384 "Vectrix 384 and Tandy color printer" .vec} } set gprollHelpMessage {Help Now Writing... Usage: tkgproll tkgproll -e 'x**2+y**2' tkgproll [-{xyz}range s:e] [-{xyz}label label] [-param] [-grid] [-dgrid3d] [-hidden] [-help] {foo.dat | -e equation} } ### proc gprollInitCommandOutput {} { global gprollPlotForm gprollTitleString global gp_opt global current_roll xroll zroll xlabel ylabel zlabel graph plot_opt set out gprollCommandDumb # gnuplot settings # $out $current_roll if {$gprollTitleString!=""} { $out [format "set title \"(%03d, %03d)\"" $xroll $zroll] } $out "set xlabel \"$xlabel\"" $out "set ylabel \"$ylabel\"" $out "set zlabel \"$zlabel\"" foreach x $gp_opt { $out $x } $out "$gprollPlotForm $graph $plot_opt" updateView } proc gprollInit {} { global gprollGnuplotFid gprollPlotForm set fid [open "| gnuplot -geometry 350x240 >& /dev/null" w] set gprollGnuplotFid $fid #while {[gets $fid line]>-1} { # puts stderr $line # if {$line=="gnuplot>"} {break} #} gprollInitCommandOutput } proc gprollMessage {{mess}} { .fc.mess config -text $mess } proc gprollCommandDumb {{command}} { global gprollGnuplotFid set out $gprollGnuplotFid puts $out $command flush $out } proc gprollCommand {{command}} { gprollCommandDumb $command gprollMessage "gproll> $command" } proc gprollPromptOut {{command}} { global gprollPlotForm gprollTitleString graph if {[regexp "^ *splot " $command]} { set gprollPlotForm "splot" regsub {^ *splot *} $command "" $graph } elseif {[regexp "^ *plot " $command]} { set gprollPlotForm "plot" regsub {^ *plot *} $command "" $graph } elseif {[regexp "^ *rep " $command]} { regsub {^ *rep[^ ]* *} $command "" g if {$g!=""} {set graph "$graph,$g"} } elseif {[regexp "^ *set title " $command]} { set gprollTitleString $command regsub {^ *set title } $gprollTitleString "" gprollTitleString } gprollCommand $command } proc gprollSetSaveScriptFileName {{w}} { global gprollSaveScriptFileName set gprollSaveScriptFileName [$w get] } proc gprollSaveScriptPre {} { global gprollSaveScriptFileName toplevel .p set t .p wm title $t "gproll: Save Script" frame $t.f frame $t.p -borderwidth 2 frame $t.p.dummy label $t.f.l -text "Script Name:" entry $t.f.e -width 20 button $t.p.dummy.o -text "OK" -command "gprollSetSaveScriptFileName $t.f.e; destroy $t" button $t.p.dummy.c -text "Cancel" -command "destroy $t" bind $t "gprollSetSaveScriptFileName $t.f.e; destroy $t" bind $t "destroy $t" bind $t "destroy $t" pack $t.f.l $t.f.e -side left pack $t.p.dummy.o $t.p.dummy.c -side left -anchor center pack $t.p.dummy -side top pack $t.f -side top -anchor w -fill x pack $t.p -anchor center -fill x -expand yes $t.f.e insert 0 $gprollSaveScriptFileName tkwait variable gprollSaveScriptFileName set fid [open "$gprollSaveScriptFileName" w] gprollSaveScript $fid close $fid gprollMessage "gproll> #save script '$gprollSaveScriptFileName' done." } proc gprollSaveScript {{fid}} { global gprollGnuplotFid global current_roll xroll zroll xlabel ylabel zlabel plot_opt set ftmp [format "/tmp/tkgproll_%d.gpt" [pid]] gprollCommand "save '$ftmp'" set ftmpId [open $ftmp "r"] exec "sleep" "1" while {[gets $ftmpId tmp]>-1} { puts $fid $tmp } exec "rm" "$ftmp" } proc gprollPrint {} { global gprollTermName gprollOutputFileName gprollGnuplotFid global gprollPlotForm global chkstl chkgri chkhid chkpar chkcntr chkdgr if {$gprollOutputFileName==""} { tkwait window [gprollPrintPre] } set pre_Fid $gprollGnuplotFid set out [open "| gnuplot" w+] set gprollGnuplotFid $out puts $out "set output '/dev/null'" puts $out "set term $gprollTermName" gprollInitCommandOutput puts $out "set term $gprollTermName" flush $out puts $out "set term $gprollTermName" puts $out "set output '$gprollOutputFileName'" puts $out "set $chkstl" puts $out "set $chkgri" puts $out "set $chkhid" puts $out "set $chkpar" puts $out "set $chkcntr" puts $out "set $chkdgr" updateView flush $out close $out set gprollGnuplotFid $pre_Fid gprollMessage "gproll> #print '$gprollOutputFileName' done." } proc gprollPrintPre {} { global gprollTermName gprollOutputFileName toplevel .p set t .p wm title $t "gproll: Print" frame $t.t frame $t.f frame $t.p -borderwidth 2 frame $t.p.dummy label $t.t.l -text "Term: $gprollTermName" button $t.t.b -text "Sel" -command "gprollTermSelector" label $t.f.l -text "File:" entry $t.f.e -width 20 -textvariable gprollOutputFileName button $t.p.dummy.o -text "OK" -command "destroy $t; gprollPrint" button $t.p.dummy.c -text "Cancel" -command "destroy $t" bind $t "destroy $t; gprollPrint" bind $t "destroy $t" bind $t "destroy $t" pack $t.t.l -side left pack $t.t.b -side right -fill x -expand no pack $t.f.l $t.f.e -side left pack $t.p.dummy.o $t.p.dummy.c -side left -anchor center pack $t.p.dummy -side top pack $t.t $t.f -side top -anchor w -fill x pack $t.p -anchor center -fill x -expand yes if {$gprollOutputFileName==""} { set gprollOutputFileName "foo" gprollPrintPreUpdate } return $t } proc gprollTerm2Ext {{term}} { global gprollTermList set list $gprollTermList set curId [lsearch -glob $list "$term *"] return [lindex [lindex $list $curId] 2] } proc gprollPrintPreUpdate {} { global gprollTermName gprollOutputFileName global preExt set cur $gprollTermName set fname $gprollOutputFileName set curExt [gprollTerm2Ext $cur] regsub "\." $preExt "\\." preExt regsub "$preExt$" $fname "" fname set fname "$fname$curExt" .p.t.l config -text "Term: $cur" .p.f.e delete 0 end .p.f.e insert 0 $fname } proc gprollTermSelector {} { global gprollTermList gprollTermName gprollOutputFileName global preExt toplevel .t wm title .t "gproll: Terminal Selector" set preExt [gprollTerm2Ext $gprollTermName] label .t.l -text "Terminals" -borderwidth 2 -relief raise listbox .t.lb -width 10 -selectmode single -borderwidth 0 \ -relief sunken -yscrollcommand ".t.scl set" listbox .t.lb_comment -borderwidth 0 set selcom gprollTermSelectorCommand scrollbar .t.scl -orient vertical \ -command "$selcom .t.lb .t.lb_comment yview" frame .t.p label .t.p.cur -text $gprollTermName button .t.p.o -text ok -command {set gprollTermName [.t.lb get [.t.lb curselection]]; destroy .t; gprollPrintPreUpdate} button .t.p.c -text cancel -command "destroy .t" pack .t.l -side top -expand yes -fill x pack .t.lb .t.lb_comment .t.scl -side left -fill y pack .t.p.cur .t.p.o .t.p.c -side top -expand yes -fill x pack .t.p -side top -anchor n foreach m $gprollTermList { set f [lindex $m 0] .t.lb insert end $f .t.lb_comment insert end [lindex $m 1] } set curId [lsearch -glob $gprollTermList [format "%s *" $gprollTermName]] $selcom .t.lb .t.lb_comment see $curId .t.lb select set $curId bind .t "destroy .t; set gprollTermName \"tgif\"" bind .t "destroy .t" bind .t.lb ".t.p.cur config -text \[.t.lb get \[.t.lb curselection]]" bind .t.lb_comment ".t.lb select set \[.t.lb_comment curselection]; .t.p.cur config -text \[.t.lb get \[.t.lb curselection]]" bind .t "destroy .t" } proc gprollTermSelectorCommand { w1 w2 type args } { eval $w1 $type $args eval $w2 $type $args } proc gprollPlotFormChange {} { global gprollPlotForm graph gprollGnuplotFid set out $gprollGnuplotFid gprollCommand "$gprollPlotForm $graph" if {$gprollPlotForm=="plot"} { .fc.sclx config -state disabled .fc.sclz config -state disabled } else { .fc.sclx config -state normal .fc.sclz config -state normal } updateView } proc gprollHelpPopup {} { global gprollHelpMessage toplevel .p set t .p wm title $t "gproll Help" text $t.text -width [expr 36 * 2] -background linen \ -state disabled -yscrollcommand "$t.scroll set" scrollbar $t.scroll -orient vertical -command "$t.text yview" pack $t.text -fill both -expand true -side left pack $t.scroll -side right -expand no -fill y bind $t "destroy $t; gprollQuit" bind $t "destroy $t" bind $t "destroy $t" bind $t "destroy $t" $t.text configure -state normal $t.text delete 0.0 end; $t.text insert 0.0 $gprollHelpMessage; $t.text configure -state disabled } proc gprollQuit {} { global gprollGnuplotFid destroy . close $gprollGnuplotFid exit } # # # proc idletasks {{w} {a} {b} {c} {d} {e}} {} # # Rand # set rand_next 1 proc rand {} { global rand_next; set rand_next [expr $rand_next*1103515245 + 12345] return [expr (($rand_next/65536)%32768)/32768.0]; } # # tkstars # proc tkstarsInit {{w}} { global stars star_num star_col for {set i 0} {$i < $star_num} {incr i} { set id [$w create line 0 0 0 0 -fill $star_col] set x [expr int([rand]*50-25)] set y [expr int([rand]*50-25)] set z [expr int([rand]*1000)] set stars($i) [list $id $x $y $z] } } proc tkstarsUpdate {{w}} { global width2 height2 stars star_num global flow_speed set z_d $flow_speed for {set i 0} {$i < $star_num} {incr i} { set star $stars($i) set id [lindex $star 0] set x [lindex $star 1] set y [lindex $star 2] set z [lindex $star 3] set z2 [expr $z+$z_d] if {$z2<1} { set z 1000 set z2 [expr $z+$z_d] set x [expr int([rand]*50-25)] set y [expr int([rand]*50-25)] } set ix [expr $width2+$x*2000/$z] set iy [expr $height2+$y*2000/$z] set ix2 [expr $width2+$x*2000/$z2] set iy2 [expr $height2+$y*2000/$z2] #puts [format "%d %6.3f %6.3f %6.3f" $id $z $ix $iy] #puts $id $w coords $id $ix $iy $ix2 $iy2 set z $z2 set stars($i) [list $id $x $y $z] } } # Roll and View proc updateView {} { global gprollGnuplotFid gprollPlotForm gprollTitleString global .c xroll zroll set out $gprollGnuplotFid if {$gprollTitleString==""} { if {$gprollPlotForm=="splot"} { gprollCommandDumb [format "set title \"(%03d, %03d)\"" $xroll $zroll] } elseif {$gprollPlotForm=="plot"} { gprollCommandDumb [format "set title \"2D Plot\""] } } if {$gprollPlotForm=="splot"} { gprollCommandDumb [format "set view %d,%d" $xroll $zroll] } gprollCommandDumb "rep" } proc rollX {{x}} { global zroll xroll set xroll $x updateView gprollMessage "gproll> set view $xroll,$zroll" } proc rollZ {{z}} { global zroll xroll set zroll $z updateView gprollMessage "gproll> set view $xroll,$zroll" } proc dragRollXZ {{x} {y} {set}} { global gprollPlotForm global zroll xroll global lastDragX lastDragY if {$gprollPlotForm!="splot"} { return } if {$set!=0} { set zroll [expr ($zroll+($x-$lastDragX)*2)%360] #set xroll [expr ($xroll+($y-$lastDragY)*2)%180] set xroll [expr ($xroll+($y-$lastDragY)*2)] if {$xroll<0} { set xroll 0 } elseif {$xroll>180} { set xroll 180 } } set lastDragX $x set lastDragY $y updateView gprollMessage "gproll> set view $xroll,$zroll" } #--------------------------------- # variable initialization # wm title . tkgproll wm iconname . tkgproll set gprollTermName $gprollDefaultTermName set width 180 set height 120 set xroll 60 set zroll 30 set current_roll "set view $xroll, $zroll" # option parser # #set gp_opt [concat {{set term x11}}] set gp_opt "" set plot_opt "" set xlabel "x" set ylabel "y" set zlabel "z" set graph "" set equation "" set chkstl "data style points" if {$argc == 0} { set gp_opt [concat $gp_opt {{set hidden3d}}] set gp_pot [concat $gp_opt {{set contour}}] set chkhid "hidden3d" } for {set i 0} {$i<$argc} {incr i} { set opt [lindex $argv $i] if {[regexp {^-f} $opt]} { incr i set graph [format "$graph%s " [lindex $argv $i]] } elseif {[regexp {^-e} $opt]} { incr i set equation [format "$equation%s " [lindex $argv $i]] } elseif {[regexp {^-xrange} $opt]} { incr i set gp_opt [concat $gp_opt [concat "{" [format "set xrange \[%s\]" [lindex $argv $i]] "}" ]] } elseif {[regexp {^-yrange} $opt]} { incr i set gp_opt [concat $gp_opt [concat "{" [format "set yrange \[%s\]" [lindex $argv $i]] "}" ]] } elseif {[regexp {^-zrange} $opt]} { incr i set gp_opt [concat $gp_opt [concat "{" [format "set zrange \[%s\]" [lindex $argv $i]] "}" ]] } elseif {[regexp {^-xlabel} $opt]} { incr i set xlabel [lindex $argv $i] } elseif {[regexp {^-ylabel} $opt]} { incr i set ylabel [lindex $argv $i] } elseif {[regexp {^-zlabel} $opt]} { incr i set zlabel [lindex $argv $i] } elseif {[regexp {^-using} $opt]} { incr i set plot_opt [concat $plot_opt [concat [format "using %s" [lindex $argv $i]]]] } elseif {[regexp {^-title} $opt]} { incr i set plot_opt [concat $plot_opt [concat [format "title %s" [lindex $argv $i]]]] } elseif {[regexp {^-param[etric]?} $opt]} { set gp_opt [concat $gp_opt {{set parametric}}] set chkpar "parametric" } elseif {[regexp {^-line} $opt]} { set gp_opt [concat $gp_opt {{set data style line}}] set chkstl "data style lines" } elseif {[regexp {^-grid} $opt]} { set gp_opt [concat $gp_opt {{set grid}}] set chkgri "grid" } elseif {[regexp {^-contour} $opt]} { set gp_opt [concat $gp_opt {{set contour}}] set chkcntr "contour" } elseif {[regexp {^-dgrid3d} $opt]} { set gp_opt [concat $gp_opt {{set dgrid3d}}] set chkdgr "dgrid3d" } elseif {[regexp {^-hidden} $opt]} { set gp_opt [concat $gp_opt {{set hidden3d}}] set chkhid "hidden3d" } elseif {[regexp {^-option} $opt]} { incr i set plot_opt [concat $plot_opt [lindex $argv $i]] } elseif {[regexp {^-help} $opt]} { puts stderr "Usage: tkgproll \[-{xyz}range s:e\] \[-{xyz}label label\] \[-param\] \[-grid\] \[-dgrid3d\] \[-hidden\] \[-help\] {foo.dat | -e equation} | gnuplot\n" exit } else { set graph [format "$graph%s " $opt] } } if {$graph == "" && $equation == ""} { set equation "x**2"; # default graph } if {$graph != ""} { regsub " $" $graph "" graph regsub -all " " $graph "','" graph set graph [format "'%s'" $graph] } if {$equation != ""} { if {$graph != ""} { set graph "$graph," } regsub " $" $equation "" equation regsub -all " " $equation "," equation set graph "$graph$equation" } regsub " $" $graph "" graph regsub "^ " $graph "" graph ##################### # window configure # wm title . "tkgproll: $graph" wm iconname . "$graph" # frame frame .m -borderwidth 2 -relief raised; # menu frame .fc -borderwidth 2 ; # canvas # menu menubutton .m.file -menu .m.file.menu -text "File" -underline 0 menubutton .m.edit -menu .m.edit.menu -text "Edit" -underline 0 -state disabled menubutton .m.plot -menu .m.plot.menu -text "Plot" -underline 0 menubutton .m.style -menu .m.style.menu -text "Style" -underline 0 menubutton .m.option -menu .m.option.menu -text "Options" -underline 0 menubutton .m.about -menu .m.about.menu -text "About" -underline 0 set m .m.about.menu menu $m $m add command -label "About..." -underline 1 -state disabled $m add command -label "Help" -underline 0 -command {gprollHelpPopup} set m .m.file.menu menu $m $m add command -label "File Open" -underline 5 -command {\ set tmp [tk_getOpenFile -title {gproll: Open File} -filetypes {{DAT {.dat}} {ALL {*}}}]; \ if {$tmp != ""} {set graph [format "'%s'" $tmp]; gprollInitCommandOutput}} $m add command -label "Load Script" -underline 5 -state disabled $m add command -label "Save Script" -underline 1 -command {gprollSaveScriptPre} $m add command -label "" $m add command -label "Print" -underline 0 -command {gprollPrint} $m add command -label "Print Setup" -underline 6 -command {gprollPrintPre} $m add separator $m add command -label "Show Current" -underline 5 -command {gprollSaveScript stdout} $m add separator $m add command -label "Quit" -underline 0 -command {gprollQuit} set m .m.plot.menu menu $m $m add radiobutton -label "2D Plot" -underline 0 -value "plot" -variable gprollPlotForm -command "gprollPlotFormChange" $m add radiobutton -label "3D Plot (splot)" -underline 0 -value "splot" -variable gprollPlotForm -command "gprollPlotFormChange" set m .m.option.menu menu $m $m add checkbutton -label "Grid" -underline 0 -onvalue grid -offvalue nogrid -variable chkgri -command {gprollCommand "set $chkgri"; updateView} $m add separator $m add checkbutton -label "Parametric" -underline 0 -onvalue parametric -offvalue noparametric -variable chkpar -command {gprollCommand "set $chkpar"; updateView} $m add checkbutton -label "Dgrid3D" -underline 0 -onvalue dgrid3d -offvalue nodgrid3d -variable chkdgr -command {gprollCommand "set $chkdgr"; updateView} $m add checkbutton -label "Hidden3D" -underline 0 -onvalue hidden3d -offvalue nohidden3d -variable chkhid -command {gprollCommand "set $chkhid"; updateView} $m add checkbutton -label "Contour (b)" -underline 0 -onvalue contour -offvalue nocontour -variable chkcntr -command {gprollCommand "set $chkcntr"; updateView} $m add separator $m add command -label "Label" -underline 0 -state disabled $m add command -label "Range" -underline 0 -state disabled $m add command -label "Data Using" -underline 0 -state disabled set m .m.style.menu menu $m $m add radiobutton -label "Lines" -underline 0 -value "data style lines" -variable chkstl -command {gprollCommand "set $chkstl"; updateView} $m add radiobutton -label "Points" -underline 0 -value "data style points" -variable chkstl -command {gprollCommand "set $chkstl"; updateView} $m add radiobutton -label "Linespoints" -underline 2 -value "data style linespoints" -variable chkstl -command {gprollCommand "set $chkstl"; updateView} $m add radiobutton -label "Dots" -underline 0 -value "data style dots" -variable chkstl -command {gprollCommand "set $chkstl"; updateView} $m add radiobutton -label "Steps" -underline 0 -value "data style steps" -variable chkstl -command {gprollCommand "set $chkstl"; updateView} $m add radiobutton -label "Impulses" -underline 0 -value "data style impulses" -variable chkstl -command {gprollCommand "set $chkstl"; updateView} $m add radiobutton -label "Errorbars" -underline 0 -value "data style errorbars" -variable chkstl -command {gprollCommand "set $chkstl"; updateView} $m add radiobutton -label "Boxes" -underline 0 -value "data style boxes" -variable chkstl -command {gprollCommand "set $chkstl"; updateView} $m add radiobutton -label "Boxerrorbars" -underline 1 -value "data style boxerrorbars" -variable chkstl -command {gprollCommand "set $chkstl"; updateView} # canvas entry .fc.e -textvariable current_roll canvas .fc.c -width $width -height $height -bg white -cursor "fleur" scale .fc.sclx -width 5 -sliderlength 7 -showvalue yes -resolution 5 -tickinterval 30 -from 0 -to 180 -variable xroll -command {tkstarsUpdate .fc.c; rollX} scale .fc.sclz -width 5 -length $width -orient horiz -sliderlength 7 -showvalue yes -resolution 5 -tickinterval 60 -from 0 -to 360 -variable zroll -command {tkstarsUpdate .fc.c; rollZ} frame .fc.check checkbutton .fc.check.sync -text "sync" -state disabled -variable gprollSyncRoll entry .fc.check.prompt -textvariable cur_command -width 25 -selectborderwidth 0 -insertofftime 0 label .fc.mess -borderwidth 1 -relief sunken -text "gproll> 'GNUPLOT I/F'" -width 35 -anchor w .fc.sclx set $xroll .fc.sclz set $zroll set gprollSyncRoll 1 # pack pack .m.file .m.edit .m.plot .m.style .m.option -side left pack .m.about -side right pack .fc.check.prompt -side left pack .fc.check.sync -side right pack .fc.check -side top -fill x pack .fc.mess .fc.sclz -side bottom -anchor nw pack .fc.c .fc.sclx -side left -fill y pack .m -anchor nw -side top -fill x pack .fc -anchor nw -side top -fill x # bind bind . {gprollQuit} bind . {gprollQuit} bind . {gprollPrint} bind . {gprollTermSelector} bind .fc.c {dragRollXZ %x %y 0} bind .fc.c {tkstarsUpdate .fc.c; dragRollXZ %x %y 1} bind .fc.check.prompt {gprollPromptOut [.fc.check.prompt get]; .fc.check.prompt delete 0 end; updateView} bind .fc.check.prompt {.fc.check.prompt delete 0 end} bind .fc.check.prompt {.fc.check.prompt icursor 0} bind .fc.check.prompt {.fc.check.prompt icursor end} focus .fc.check.prompt # init roll set x1 10 set x2 140 set y1 10 set y2 140 set id1 [.fc.c create rectangle 10 20 140 110] set id2 [.fc.c create rectangle 20 10 150 100] gprollInit # # Initial Setup # set width2 [expr $width/2] set height2 [expr $height/2] # tkstars set flow_speed -50 set star_num 10 set star_col gold .fc.c config -background black tkstarsInit .fc.c