source: trunk/gui/scripts/field2dresult.tcl @ 893

Last change on this file since 893 was 872, checked in by dkearney, 17 years ago

mainly code cleanups that i've made and stored in my repository over time.

File size: 5.4 KB
Line 
1# ----------------------------------------------------------------------
2#  COMPONENT: field2dresult - plot a field in a ResultSet
3#
4#  This widget visualizes scalar/vector fields on 3D meshes.
5#  It is normally used in the ResultViewer to show results from the
6#  run of a Rappture tool.  Use the "add" and "delete" methods to
7#  control the dataobjs showing on the plot.
8# ======================================================================
9#  AUTHOR:  Michael McLennan, Purdue University
10#  Copyright (c) 2004-2005  Purdue Research Foundation
11#
12#  See the file "license.terms" for information on usage and
13#  redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
14# ======================================================================
15
16package require Itk
17
18option add *Field2DResult.width 4i widgetDefault
19option add *Field2DResult.height 4i widgetDefault
20option add *Field2DResult.foreground black widgetDefault
21option add *Field2DResult.controlBackground gray widgetDefault
22option add *Field2DResult.controlDarkBackground #999999 widgetDefault
23option add *Field2DResult.plotBackground black widgetDefault
24option add *Field2DResult.plotForeground white widgetDefault
25option add *Field2DResult.font \
26    -*-helvetica-medium-r-normal-*-12-* widgetDefault
27
28itcl::class Rappture::Field2DResult {
29    inherit itk::Widget
30
31    itk_option define -mode mode Mode "auto"
32
33    constructor {args} { # defined below }
34    destructor { # defined below }
35
36    public method add {dataobj {settings ""}}
37    public method get {}
38    public method delete {args}
39    public method scale {args}
40    public method parameters {title args} { # do nothing }
41    public method download {option args}
42}
43
44# must use this name -- plugs into Rappture::resources::load
45proc field2d_init_resources {} {
46    Rappture::resources::register \
47        nanovis_server Rappture::NanovisServer::setServer
48}
49
50itk::usual Field2DResult {
51    keep -background -foreground -cursor -font
52    keep -plotbackground -plotforeground
53}
54
55# ----------------------------------------------------------------------
56# CONSTRUCTOR
57# ----------------------------------------------------------------------
58itcl::body Rappture::Field2DResult::constructor {args} {
59    array set flags {
60        -mode auto
61    }
62    array set flags $args
63    if { $flags(-mode) == "heightmap" } {
64        set servers [Rappture::NanovisServer::getServer]
65        if { $servers == "" } {
66            error "No nanovis servers available"
67        }
68        itk_component add renderer {
69            Rappture::HeightmapViewer $itk_interior.ren $servers
70        }
71        pack $itk_component(renderer) -expand yes -fill both
72    } else {
73        itk_component add renderer {
74            Rappture::ContourResult $itk_interior.ren
75        }
76        pack $itk_component(renderer) -expand yes -fill both
77    }
78    eval itk_initialize $args
79}
80
81# ----------------------------------------------------------------------
82# DESTRUCTOR
83# ----------------------------------------------------------------------
84itcl::body Rappture::Field2DResult::destructor {} {
85}
86
87# ----------------------------------------------------------------------
88# USAGE: add <dataobj> ?<settings>?
89#
90# Clients use this to add a data object to the plot.  The optional
91# <settings> are used to configure the plot.  Allowed settings are
92# -color, -brightness, -width, -linestyle, and -raise.
93# ----------------------------------------------------------------------
94itcl::body Rappture::Field2DResult::add {dataobj {settings ""}} {
95    eval $itk_component(renderer) add $dataobj [list $settings]
96}
97
98# ----------------------------------------------------------------------
99# USAGE: get
100#
101# Clients use this to query the list of objects being plotted, in
102# order from bottom to top of this result.
103# ----------------------------------------------------------------------
104itcl::body Rappture::Field2DResult::get {} {
105    return [$itk_component(renderer) get]
106}
107
108# ----------------------------------------------------------------------
109# USAGE: delete ?<dataobj1> <dataobj2> ...?
110#
111# Clients use this to delete a dataobj from the plot.  If no dataobjs
112# are specified, then all dataobjs are deleted.
113# ----------------------------------------------------------------------
114itcl::body Rappture::Field2DResult::delete {args} {
115    eval $itk_component(renderer) delete $args
116}
117
118# ----------------------------------------------------------------------
119# USAGE: scale ?<data1> <data2> ...?
120#
121# Sets the default limits for the overall plot according to the
122# limits of the data for all of the given <data> objects.  This
123# accounts for all objects--even those not showing on the screen.
124# Because of this, the limits are appropriate for all objects as
125# the user scans through data in the ResultSet viewer.
126# ----------------------------------------------------------------------
127itcl::body Rappture::Field2DResult::scale {args} {
128    eval $itk_component(renderer) scale $args
129}
130
131# ----------------------------------------------------------------------
132# USAGE: download coming
133# USAGE: download controls <downloadCommand>
134# USAGE: download now
135#
136# Clients use this method to create a downloadable representation
137# of the plot.  Returns a list of the form {ext string}, where
138# "ext" is the file extension (indicating the type of data) and
139# "string" is the data itself.
140# ----------------------------------------------------------------------
141itcl::body Rappture::Field2DResult::download {option args} {
142    $itk_component(renderer) download $option
143}
Note: See TracBrowser for help on using the repository browser.