source: trunk/gui/apps/vtkstreamlines-test @ 2789

Last change on this file since 2789 was 2789, checked in by gah, 12 years ago

change $* to $@ in bash scripts

  • Property svn:executable set to *
File size: 12.8 KB
Line 
1#!/bin/sh
2# -*- mode: Tcl -*-
3# ----------------------------------------------------------------------
4#  TEST PROGRAM for VtkStreamlinesViewer
5#
6#  This program is a test harness for the VtkVis visualization
7#  engine.  It allows you to monitor the commands being sent back
8#  and forth between a standard Rappture application and the VtkVis
9#  server.  You can also send your own commands to the server, to
10#  debug new features.
11#
12# ======================================================================
13#  AUTHOR:  Michael McLennan, Purdue University
14#  Copyright (c) 2004-2007  Purdue Research Foundation
15#
16#  See the file "license.terms" for information on usage and
17#  redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
18# ======================================================================
19#\
20bindir=`dirname $0` ; \
21exec $bindir/wish "$0" "$@"
22# ----------------------------------------------------------------------
23# wish executes everything from here on...
24
25set installdir [file root $argv0]
26set libdir [file join $installdir "lib"]
27
28lappend auto_path $libdir $libdir/vtk $libdir/vtk/tcl
29
30package require Itcl
31package require Rappture
32package require RapptureGUI
33
34option add *comm.font -*-courier-medium-r-normal-*-*-120-*
35option add *Menu.tearOff off
36
37option add *Tooltip.background white
38option add *Editor.background white
39option add *Gauge.textBackground white
40option add *TemperatureGauge.textBackground white
41option add *Switch.textBackground white
42option add *Progress.barColor #ffffcc
43option add *Balloon.titleBackground #6666cc
44option add *Balloon.titleForeground white
45option add *Balloon*Label.font -*-helvetica-medium-r-normal-*-*-120-*
46option add *Balloon*Radiobutton.font -*-helvetica-medium-r-normal-*-*-120-*
47option add *Balloon*Checkbutton.font -*-helvetica-medium-r-normal-*-*-120-*
48option add *ResultSet.controlbarBackground #6666cc
49option add *ResultSet.controlbarForeground white
50option add *ResultSet.activeControlBackground #ccccff
51option add *ResultSet.activeControlForeground black
52option add *Radiodial.length 3i
53option add *BugReport*banner*foreground white
54option add *BugReport*banner*background #a9a9a9
55option add *BugReport*banner*highlightBackground #a9a9a9
56option add *BugReport*banner*font -*-helvetica-bold-r-normal-*-*-180-*
57
58# fix the "grab" command to support a stack of grab windows
59#Rappture::grab::init
60
61# ----------------------------------------------------------------------
62# LOAD RESOURCE SETTINGS
63#
64# Try to load the $SESSIONDIR/resources file, which contains
65# middleware settings, such as the application name and the
66# filexfer settings.
67# ----------------------------------------------------------------------
68Rappture::resources::load
69
70# ----------------------------------------------------------------------
71# Fake data object for sending VTK data file...
72# ----------------------------------------------------------------------
73itcl::class visData {
74    inherit Rappture::Field
75
76    constructor {args} {
77        Rappture::Field::constructor [Rappture::library standard] ""
78    } {
79        set _data [lindex $args 0]
80        set _type [lindex $args 1]
81    }
82
83    public method components {args} {
84        if {[llength $args] == 0} {
85            return "one"
86        }
87        return ""
88    }
89    public method blob {args} {
90        return $_data
91    }
92    public method data {args} {
93        return $_data
94    }
95    public method values {args} {
96        return $_data
97    }
98    public method hints {args} {
99        return ""
100    }
101    public method style {args} {
102        return ""
103    }
104    public method type {args} {
105        return $_type
106    }
107
108    private variable _data ""
109    private variable _type ""
110}
111
112# ----------------------------------------------------------------------
113# USAGE: send_file
114#
115# Prompts the user for a text file, and then sends the text within
116# that file along to the rendering widget.
117# ----------------------------------------------------------------------
118proc send_file {} {
119    global widgets
120
121    set file [tk_getOpenFile -title "Open VTK File"]
122    if {"" != $file && [catch {
123            set fid [open $file r]
124            fconfigure $fid -translation binary -encoding binary
125            set info [read $fid]
126            close $fid
127          }] == 0} {
128        set obj [visData #auto $info "vtk"]
129        $widgets(vtkviewer) add $obj
130    }
131}
132
133# ----------------------------------------------------------------------
134# USAGE: send_streamlines_file
135#
136# Prompts the user for a text file, and then sends the text within
137# that file along to the rendering widget.
138# ----------------------------------------------------------------------
139proc send_streamlines_file {} {
140    global widgets
141
142    set file [tk_getOpenFile -title "Open VTK File as Streamlines"]
143    if {"" != $file && [catch {
144            set fid [open $file r]
145            fconfigure $fid -translation binary -encoding binary
146            set info [read $fid]
147            close $fid
148          }] == 0} {
149        set obj [visData #auto $info "vtkstreamlines"]
150        $widgets(vtkviewer) add $obj
151    }
152}
153
154# ----------------------------------------------------------------------
155# USAGE: load_script
156#
157# Prompts the user for a text file, and then sends the text within
158# that file along to the rendering widget.
159# ----------------------------------------------------------------------
160proc load_script {} {
161    global widgets
162
163    set file [tk_getOpenFile -title "Open Command File"]
164    if {"" != $file && [catch {
165            set fid [open $file r]
166            fconfigure $fid -translation binary -encoding binary
167            set info [read $fid]
168            close $fid
169          }] == 0} {
170
171        $widgets(command) insert 0 $info
172        send_command
173    }
174}
175
176# ----------------------------------------------------------------------
177# USAGE: send_command
178#
179# Invoked automatically whenever the user enters a command and
180# presses <Return>.  Sends the command along to the rendering
181# widget.
182# ----------------------------------------------------------------------
183proc send_command {} {
184    global widgets
185    global last_command
186
187    set cmd [$widgets(command) get]
188
189    if {[string length $cmd] > 0} {
190        set last_command $cmd
191    } else {
192        set cmd $last_command
193    }
194    namespace eval Rappture::VtkStreamlinesViewer [list $widgets(vtkviewer) SendCmd $cmd]
195    $widgets(command) delete 0 end
196}
197
198# ----------------------------------------------------------------------
199# USAGE: reset
200#
201# Used internally to reset the connection to the rendering server.
202# Discards all data and resets the widget connection to the server.
203# ----------------------------------------------------------------------
204proc reset {} {
205    global widgets
206    $widgets(vtkviewer) delete
207    $widgets(vtkviewer) disconnect
208    $widgets(comm) configure -state normal
209    $widgets(comm) delete 1.0 end
210    $widgets(comm) configure -state disabled
211}
212
213# ----------------------------------------------------------------------
214# USAGE: show_comm <channel> <data>
215#
216# Invoked automatically whenever there is communication between
217# the rendering widget and the server.  Eavesdrops on the communication
218# and posts the commands in a text viewer.
219# ----------------------------------------------------------------------
220proc show_comm {channel {data ""}} {
221    global widgets
222
223    $widgets(comm) configure -state normal
224    switch -- $channel {
225        closed {
226            $widgets(comm) insert end "--CLOSED--\n" error
227        }
228        <<line {
229            $widgets(comm) insert end $data incoming "\n" incoming
230            images_refresh
231        }
232        >>line {
233            $widgets(comm) insert end $data outgoing "\n" outgoing
234        }
235        error {
236            $widgets(comm) insert end $data error "\n" error
237        }
238        default {
239            $widgets(comm) insert end "$data\n"
240        }
241    }
242    $widgets(comm) configure -state disabled
243    $widgets(comm) see end
244}
245
246# ----------------------------------------------------------------------
247# USAGE: activate_flow
248#
249# ----------------------------------------------------------------------
250proc activate_flow {} {
251    global widgets
252    # global img_storage_dir
253    # "flow capture 117 $img_storage_dir"
254
255    set info {flow vectorid 0
256              flow particle visible on
257              flow lic on
258              flow capture 100}
259
260    $widgets(command) insert 0 $info
261    send_command
262
263}
264
265# ----------------------------------------------------------------------
266# TOPLEVEL FOR IMAGES
267# ----------------------------------------------------------------------
268# USAGE: images_save
269#
270# Invoked when the user presses the "Save As..." button on the
271# images panel.  Saves the current image in a file, which can be
272# examined by some external program.
273# ----------------------------------------------------------------------
274proc images_save {} {
275    global widgets images
276
277    set imh [$widgets(vtkviewer) get -image $images(which)]
278
279    set file [tk_getSaveFile -title "Save Image File" \
280        -defaultextension .jpg -filetypes {{{JPEG files} .jpg} {{All Files} *}}]
281
282    if {"" != $file} {
283        set cmds {
284            $imh write $file -format jpeg
285        }
286        if {[catch $cmds err]} {
287            tk_messageBox -icon error -message "Oops!  Save failed:\n$err"
288        }
289    }
290}
291
292# ----------------------------------------------------------------------
293# USAGE: images_refresh
294#
295# Invoked automatically whenever there is a change in the view/legend
296# controls on the images panel.  Updates the image being shown based
297# on the current selection.
298# ----------------------------------------------------------------------
299proc images_refresh {} {
300    global widgets images
301    set c $widgets(viewer)
302
303    set w [winfo width $c]
304    set h [winfo height $c]
305
306    set imh [$widgets(vtkviewer) get -image $images(which)]
307    set iw [image width $imh]
308    set ih [image height $imh]
309
310    $c coords image [expr {$w/2}] [expr {$h/2}]
311    $c itemconfigure image -image $imh
312    $c coords outline [expr {$w/2-$iw/2}] [expr {$h/2-$ih/2}] \
313        [expr {$w/2+$iw/2}] [expr {$h/2+$ih/2}]
314}
315
316toplevel .images
317wm title .images "Vtkviewer: Images"
318wm withdraw .images
319wm protocol .images WM_DELETE_WINDOW {wm withdraw .images}
320
321frame .images.cntls
322pack .images.cntls -side bottom -fill x
323button .images.cntls.save -text "Save As..." -command images_save
324pack .images.cntls.save -side right -padx 4
325radiobutton .images.cntls.view -text "3D View" -variable images(which) \
326    -value "view" -command images_refresh
327pack .images.cntls.view -side top -anchor w
328radiobutton .images.cntls.legend -text "Legend" -variable images(which) \
329    -value "legend" -command images_refresh
330pack .images.cntls.legend -side top -anchor w
331set images(which) "view"
332
333canvas .images.viewer -background black -width 500 -height 500
334pack .images.viewer -expand yes -fill both
335bind .images.viewer <Configure> images_refresh
336set widgets(viewer) .images.viewer
337
338$widgets(viewer) create image 0 0 -anchor c \
339    -image [image create photo] -tags image
340$widgets(viewer) create rectangle 0 0 1 1 -width 2 -outline red -fill "" \
341    -tags outline
342
343
344# ----------------------------------------------------------------------
345# MAIN WINDOW
346# ----------------------------------------------------------------------
347menu .mbar
348menu .mbar.file
349.mbar.file add command -label "Send VTK File..." -underline 0 -command send_file
350.mbar.file add command -label "Send VTK File as Streamlines..." -underline 0 -command send_streamlines_file
351.mbar.file add command -label "Load script..." -underline 0 -command load_script
352.mbar.file add command -label "Reset" -underline 0 -command reset
353.mbar.file add separator
354.mbar.file add command -label "Exit" -underline 1 -command exit
355.mbar add cascade -label "File" -underline 0 -menu .mbar.file
356
357menu .mbar.view
358.mbar.view add command -label "Images..." -underline 0 \
359    -command {wm deiconify .images}
360.mbar add cascade -label "View" -underline 0 -menu .mbar.view
361
362. configure -menu .mbar
363
364
365Rappture::Panes .main -sashwidth 4 -sashrelief raised -sashpadding 4 \
366    -width 6i -height 4i
367pack .main -expand yes -fill both
368
369set f [.main pane 0]
370set servers [Rappture::VisViewer::GetServerList "vtkvis"]
371Rappture::VtkStreamlinesViewer $f.viewer $servers
372pack $f.viewer -expand yes -fill both
373set widgets(vtkviewer) $f.viewer
374
375$f.viewer configure \
376    -sendcommand show_comm \
377    -receivecommand show_comm
378
379set f [.main insert end -fraction 0.5]
380frame $f.send
381pack $f.send -side bottom -fill x
382label $f.send.l -text "Send:"
383pack $f.send.l -side left
384set widgets(command) [entry $f.send.e]
385pack $f.send.e -side left -expand yes -fill x
386bind $f.send.e <KeyPress-Return> send_command
387
388scrollbar $f.sb -orient vertical -command "$f.comm yview"
389pack $f.sb -side right -fill y
390text $f.comm -wrap char -yscrollcommand "$f.sb set"
391pack $f.comm -expand yes -fill both
392set widgets(comm) $f.comm
393
394$widgets(comm) tag configure error -foreground red \
395    -font -*-courier-medium-o-normal-*-*-120-*
396$widgets(comm) tag configure incoming -foreground blue
Note: See TracBrowser for help on using the repository browser.