source: trunk/gui/apps/vtkvolume-test @ 3618

Last change on this file since 3618 was 3177, checked in by mmc, 12 years ago

Updated all of the copyright notices to reference the transfer to
the new HUBzero Foundation, LLC.

  • Property svn:executable set to *
File size: 11.9 KB
Line 
1#!/bin/sh
2# -*- mode: Tcl -*-
3# ----------------------------------------------------------------------
4#  TEST PROGRAM for VtkVolumeViewer
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-2012  HUBzero Foundation, LLC
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 vtkdata {args} {
96        return $_data
97    }
98    public method values {args} {
99        return $_data
100    }
101    public method hints {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: load_script
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 load_script {} {
140    global widgets
141
142    set file [tk_getOpenFile -title "Open Command File"]
143    if {"" != $file && [catch {
144            set fid [open $file r]
145            fconfigure $fid -translation binary
146            set info [read $fid]
147            close $fid
148          }] == 0} {
149
150        $widgets(command) insert 0 $info
151        send_command
152    }
153}
154
155# ----------------------------------------------------------------------
156# USAGE: send_command
157#
158# Invoked automatically whenever the user enters a command and
159# presses <Return>.  Sends the command along to the rendering
160# widget.
161# ----------------------------------------------------------------------
162proc send_command {} {
163    global widgets
164    global last_command
165
166    set cmd [$widgets(command) get]
167
168    if {[string length $cmd] > 0} {
169        set last_command $cmd
170    } else {
171        set cmd $last_command
172    }
173    namespace eval Rappture::VtkVolumeViewer [list $widgets(vtkviewer) SendCmd $cmd]
174    $widgets(command) delete 0 end
175}
176
177# ----------------------------------------------------------------------
178# USAGE: reset
179#
180# Used internally to reset the connection to the rendering server.
181# Discards all data and resets the widget connection to the server.
182# ----------------------------------------------------------------------
183proc reset {} {
184    global widgets
185    $widgets(vtkviewer) delete
186    $widgets(vtkviewer) disconnect
187    $widgets(comm) configure -state normal
188    $widgets(comm) delete 1.0 end
189    $widgets(comm) configure -state disabled
190}
191
192# ----------------------------------------------------------------------
193# USAGE: show_comm <channel> <data>
194#
195# Invoked automatically whenever there is communication between
196# the rendering widget and the server.  Eavesdrops on the communication
197# and posts the commands in a text viewer.
198# ----------------------------------------------------------------------
199proc show_comm {channel {data ""}} {
200    global widgets
201
202    $widgets(comm) configure -state normal
203    switch -- $channel {
204        closed {
205            $widgets(comm) insert end "--CLOSED--\n" error
206        }
207        <<line {
208            $widgets(comm) insert end $data incoming "\n" incoming
209            images_refresh
210        }
211        >>line {
212            $widgets(comm) insert end $data outgoing "\n" outgoing
213        }
214        error {
215            $widgets(comm) insert end $data error "\n" error
216        }
217        default {
218            $widgets(comm) insert end "$data\n"
219        }
220    }
221    $widgets(comm) configure -state disabled
222    $widgets(comm) see end
223}
224
225# ----------------------------------------------------------------------
226# USAGE: activate_flow
227#
228# ----------------------------------------------------------------------
229proc activate_flow {} {
230    global widgets
231    # global img_storage_dir
232    # "flow capture 117 $img_storage_dir"
233
234    set info {flow vectorid 0
235              flow particle visible on
236              flow lic on
237              flow capture 100}
238
239    $widgets(command) insert 0 $info
240    send_command
241
242}
243
244# ----------------------------------------------------------------------
245# TOPLEVEL FOR IMAGES
246# ----------------------------------------------------------------------
247# USAGE: images_save
248#
249# Invoked when the user presses the "Save As..." button on the
250# images panel.  Saves the current image in a file, which can be
251# examined by some external program.
252# ----------------------------------------------------------------------
253proc images_save {} {
254    global widgets images
255
256    set imh [$widgets(vtkviewer) get -image $images(which)]
257
258    set file [tk_getSaveFile -title "Save Image File" \
259        -defaultextension .jpg -filetypes {{{JPEG files} .jpg} {{All Files} *}}]
260
261    if {"" != $file} {
262        set cmds {
263            $imh write $file -format jpeg
264        }
265        if {[catch $cmds err]} {
266            tk_messageBox -icon error -message "Oops!  Save failed:\n$err"
267        }
268    }
269}
270
271# ----------------------------------------------------------------------
272# USAGE: images_refresh
273#
274# Invoked automatically whenever there is a change in the view/legend
275# controls on the images panel.  Updates the image being shown based
276# on the current selection.
277# ----------------------------------------------------------------------
278proc images_refresh {} {
279    global widgets images
280    set c $widgets(viewer)
281
282    set w [winfo width $c]
283    set h [winfo height $c]
284
285    set imh [$widgets(vtkviewer) get -image $images(which)]
286    set iw [image width $imh]
287    set ih [image height $imh]
288
289    $c coords image [expr {$w/2}] [expr {$h/2}]
290    $c itemconfigure image -image $imh
291    $c coords outline [expr {$w/2-$iw/2}] [expr {$h/2-$ih/2}] \
292        [expr {$w/2+$iw/2}] [expr {$h/2+$ih/2}]
293}
294
295toplevel .images
296wm title .images "Vtkviewer: Images"
297wm withdraw .images
298wm protocol .images WM_DELETE_WINDOW {wm withdraw .images}
299
300frame .images.cntls
301pack .images.cntls -side bottom -fill x
302button .images.cntls.save -text "Save As..." -command images_save
303pack .images.cntls.save -side right -padx 4
304radiobutton .images.cntls.view -text "3D View" -variable images(which) \
305    -value "view" -command images_refresh
306pack .images.cntls.view -side top -anchor w
307radiobutton .images.cntls.legend -text "Legend" -variable images(which) \
308    -value "legend" -command images_refresh
309pack .images.cntls.legend -side top -anchor w
310set images(which) "view"
311
312canvas .images.viewer -background black -width 500 -height 500
313pack .images.viewer -expand yes -fill both
314bind .images.viewer <Configure> images_refresh
315set widgets(viewer) .images.viewer
316
317$widgets(viewer) create image 0 0 -anchor c \
318    -image [image create photo] -tags image
319$widgets(viewer) create rectangle 0 0 1 1 -width 2 -outline red -fill "" \
320    -tags outline
321
322
323# ----------------------------------------------------------------------
324# MAIN WINDOW
325# ----------------------------------------------------------------------
326menu .mbar
327menu .mbar.file
328.mbar.file add command -label "Send VTK File..." -underline 0 -command send_file
329.mbar.file add command -label "Load script..." -underline 0 -command load_script
330.mbar.file add command -label "Reset" -underline 0 -command reset
331.mbar.file add separator
332.mbar.file add command -label "Exit" -underline 1 -command exit
333.mbar add cascade -label "File" -underline 0 -menu .mbar.file
334
335menu .mbar.view
336.mbar.view add command -label "Images..." -underline 0 \
337    -command {wm deiconify .images}
338.mbar add cascade -label "View" -underline 0 -menu .mbar.view
339
340. configure -menu .mbar
341
342
343Rappture::Panes .main -sashwidth 4 -sashrelief raised -sashpadding 4 \
344    -width 6i -height 4i
345pack .main -expand yes -fill both
346
347set f [.main pane 0]
348set servers [Rappture::VisViewer::GetServerList "vtkvis"]
349Rappture::VtkVolumeViewer $f.viewer $servers
350pack $f.viewer -expand yes -fill both
351set widgets(vtkviewer) $f.viewer
352
353$f.viewer configure \
354    -sendcommand show_comm \
355    -receivecommand show_comm
356
357set f [.main insert end -fraction 0.5]
358frame $f.send
359pack $f.send -side bottom -fill x
360label $f.send.l -text "Send:"
361pack $f.send.l -side left
362set widgets(command) [entry $f.send.e]
363pack $f.send.e -side left -expand yes -fill x
364bind $f.send.e <KeyPress-Return> send_command
365
366scrollbar $f.sb -orient vertical -command "$f.comm yview"
367pack $f.sb -side right -fill y
368text $f.comm -wrap char -yscrollcommand "$f.sb set"
369pack $f.comm -expand yes -fill both
370set widgets(comm) $f.comm
371
372$widgets(comm) tag configure error -foreground red \
373    -font -*-courier-medium-o-normal-*-*-120-*
374$widgets(comm) tag configure incoming -foreground blue
Note: See TracBrowser for help on using the repository browser.