Changeset 5272 for branches/1.3
- Timestamp:
- Apr 17, 2015, 11:15:55 PM (9 years ago)
- Location:
- branches/1.3
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/1.3
-
branches/1.3/gui/scripts/flowvisviewer.tcl
r5257 r5272 83 83 private method BuildViewTab {} 84 84 private method BuildVolumeTab {} 85 private method ComputeTransferFunc { tf }85 private method ComputeTransferFunction { tf } 86 86 private method Connect {} 87 87 private method CurrentVolumeIds {{what -all}} 88 88 private method Disconnect {} 89 private method DrawLegend { tf } 89 90 private method EventuallyResize { w h } 90 91 private method EventuallyGoto { nSteps } … … 94 95 private method GetPngImage { widget width height } 95 96 private method InitSettings { args } 96 private method NameTransferFunc { dataobj comp }97 private method NameTransferFunction { dataobj comp } 97 98 private method Pan {option x y} 98 99 private method PanCamera {} … … 111 112 private method SendDataObjs {} 112 113 private method SendFlowCmd { dataobj comp nbytes extents } 113 private method SendTransferFunc s {}114 private method SendTransferFunctions {} 114 115 private method SetOrientation { side } 115 116 private method Slice {option args} … … 128 129 129 130 private variable _arcball "" 130 private variable _dlist "" ;# list of data objects 131 private variable _allDataObjs 132 private variable _obj2ovride ;# maps dataobj => style override 133 private variable _serverObjs ;# maps dataobj-component to volume ID 134 # in the server 135 private variable _sendobjs "" ;# list of data objs to send to server 136 private variable _recvObjs ;# list of data objs to send to server 137 private variable _obj2style ;# maps dataobj-component to transfunc 138 private variable _style2objs ;# maps tf back to list of 139 # dataobj-components using the tf. 140 private variable _obj2flow; # Maps dataobj-component to a flow. 141 142 private variable _reset 1 ;# Connection to server has been reset 143 private variable _click ;# info used for rotate operations 144 private variable _limits ;# autoscale min/max for all axes 145 private variable _view ;# view params for 3D view 146 private variable _isomarkers ;# array of isosurface level values 0..1 131 private variable _dlist "" ;# list of data objects 132 private variable _obj2ovride ;# maps dataobj => style override 133 private variable _serverDatasets ;# maps dataobj-component to volume ID 134 # in the server 135 private variable _sendobjs "" ;# list of data objs to send to server 136 private variable _recvdDatasets ;# list of data objs to send to server 137 private variable _dataset2style ;# maps dataobj-component to transfunc 138 private variable _style2datasets ;# maps tf back to list of 139 # dataobj-components using the tf. 140 private variable _dataset2flow ;# Maps dataobj-component to a flow. 141 142 private variable _reset 1 ;# Connection to server has been reset 143 private variable _click ;# info used for rotate operations 144 private variable _limits ;# Autoscale min/max for all axes 145 private variable _view ;# View params for 3D view 146 private variable _isomarkers ;# array of isosurface level values 0..1 147 147 private common _settings 148 private variable _activeTf "" ;# The currently active transfer function.149 private variable _first "" ;# This is the topmost volume.148 private variable _activeTf "" ;# The currently active transfer function 149 private variable _first "" ;# This is the topmost volume. 150 150 private variable _nextToken 0 151 151 private variable _icon 0 152 152 private variable _flow 153 private common _downloadPopup ;# download options from popup 154 153 154 private common _downloadPopup ;# download options from popup 155 155 private common _hardcopy 156 156 private variable _width 0 … … 184 184 $_dispatcher register !send_transfunc 185 185 $_dispatcher dispatch $this !send_transfunc \ 186 "[itcl::code $this SendTransferFunc s]; list"186 "[itcl::code $this SendTransferFunctions]; list" 187 187 188 188 # Rebuild event. … … 234 234 235 235 array set _settings [subst { 236 $this-qw$_view(-qw)237 $this-qx$_view(-qx)238 $this-qy$_view(-qy)239 $this-qz$_view(-qz)240 $this-zoom$_view(-zoom)241 $this-xpan$_view(-xpan)242 $this-ypan$_view(-ypan)236 -qw $_view(-qw) 237 -qx $_view(-qx) 238 -qy $_view(-qy) 239 -qz $_view(-qz) 240 -zoom $_view(-zoom) 241 -xpan $_view(-xpan) 242 -ypan $_view(-ypan) 243 243 $this-arrows 0 244 244 $this-currenttime 0 … … 597 597 continue 598 598 } 599 set _ obj2flow($dataobj-$comp) $flowobj599 set _dataset2flow($dataobj-$comp) $flowobj 600 600 } 601 601 set pos [lsearch -exact $_dlist $dataobj] 602 602 if {$pos < 0} { 603 603 lappend _dlist $dataobj 604 set _allDataObjs($dataobj) 1605 604 set _obj2ovride($dataobj-color) $params(-color) 606 605 set _obj2ovride($dataobj-width) $params(-width) … … 686 685 set _dlist [lreplace $_dlist $pos $pos] 687 686 array unset _obj2ovride $dataobj-* 688 array unset _ obj2flow $dataobj-*689 array unset _server Objs $dataobj-*690 array unset _ obj2style $dataobj-*687 array unset _dataset2flow $dataobj-* 688 array unset _serverDatasets $dataobj-* 689 array unset _dataset2style $dataobj-* 691 690 set changed 1 692 691 } … … 695 694 if {$changed} { 696 695 # Repair the reverse lookup 697 foreach tf [array names _style2 objs] {696 foreach tf [array names _style2datasets] { 698 697 set list {} 699 foreach {dataobj comp} $_style2 objs($tf) break700 if { [info exists _server Objs($dataobj-$comp)] } {698 foreach {dataobj comp} $_style2datasets($tf) break 699 if { [info exists _serverDatasets($dataobj-$comp)] } { 701 700 lappend list $dataobj $comp 702 701 } 703 702 if { $list == "" } { 704 array unset _style2 objs $tf703 array unset _style2datasets $tf 705 704 } else { 706 set _style2 objs($tf) $list705 set _style2datasets($tf) $list 707 706 } 708 707 } … … 912 911 913 912 # disconnected -- no more data sitting on server 914 array unset _server Objs913 array unset _serverDatasets 915 914 set _sendobjs "" 916 915 } … … 950 949 return 951 950 } 952 NameTransferFunc $dataobj $comp953 set _recv Objs($dataobj-$comp) 1951 NameTransferFunction $dataobj $comp 952 set _recvdDatasets($dataobj-$comp) 1 954 953 } 955 954 } … … 975 974 array set _view $location 976 975 } 977 set _settings( $this-qw) $_view(-qw)978 set _settings( $this-qx) $_view(-qx)979 set _settings( $this-qy) $_view(-qy)980 set _settings( $this-qz) $_view(-qz)981 set _settings( $this-xpan) $_view(-xpan)982 set _settings( $this-ypan) $_view(-ypan)983 set _settings( $this-zoom) $_view(-zoom)976 set _settings(-qw) $_view(-qw) 977 set _settings(-qx) $_view(-qx) 978 set _settings(-qy) $_view(-qy) 979 set _settings(-qz) $_view(-qz) 980 set _settings(-xpan) $_view(-xpan) 981 set _settings(-ypan) $_view(-ypan) 982 set _settings(-zoom) $_view(-zoom) 984 983 set q [ViewToQuaternion] 985 984 $_arcball quaternion $q … … 993 992 # successfully transferred. 994 993 set comp [lindex [$_first components] 0] 995 set _activeTf [lindex $_ obj2style($_first-$comp) 0]994 set _activeTf [lindex $_dataset2style($_first-$comp) 0] 996 995 } 997 996 … … 1001 1000 1002 1001 # ---------------------------------------------------------------------- 1003 # USAGE: SendTransferFunc s1004 # ---------------------------------------------------------------------- 1005 itcl::body Rappture::FlowvisViewer::SendTransferFunc s {} {1002 # USAGE: SendTransferFunctions 1003 # ---------------------------------------------------------------------- 1004 itcl::body Rappture::FlowvisViewer::SendTransferFunctions {} { 1006 1005 if { $_activeTf == "" } { 1007 1006 puts stderr "no active tf" … … 1025 1024 set _settings($this-$tf-thickness) $thickness 1026 1025 1027 foreach key [array names _ obj2style $_first-*] {1028 if { [info exists _ obj2style($key)] } {1029 foreach tf $_ obj2style($key) {1030 ComputeTransferFunc $tf1026 foreach key [array names _dataset2style $_first-*] { 1027 if { [info exists _dataset2style($key)] } { 1028 foreach tf $_dataset2style($key) { 1029 ComputeTransferFunction $tf 1031 1030 } 1032 1031 } … … 1071 1070 1072 1071 # 1073 # ReceiveLegend -- 1074 # 1075 # The procedure is the response from the render server to each "legend" 1076 # command. The server sends back a "legend" command invoked our 1077 # the slave interpreter. The purpose is to collect data of the image 1078 # representing the legend in the canvas. In addition, the isomarkers 1079 # of the active transfer function are displayed. 1080 # 1081 # I don't know is this is the right place to display the isomarkers. 1082 # I don't know all the different paths used to draw the plot. There's 1083 # "Rebuild", "add", etc. 1084 # 1085 itcl::body Rappture::FlowvisViewer::ReceiveLegend { tag vmin vmax size } { 1086 if { ![isconnected] } { 1087 return 1088 } 1089 #puts stderr "receive legend $tag $vmin $vmax $size" 1090 set bytes [ReceiveBytes $size] 1091 $_image(legend) configure -data $bytes 1092 ReceiveEcho <<line "<read $size bytes for [image width $_image(legend)]x[image height $_image(legend)] legend>" 1093 1072 # DrawLegend -- 1073 # 1074 itcl::body Rappture::FlowvisViewer::DrawLegend { tag } { 1094 1075 set c $itk_component(legend) 1095 1076 set w [winfo width $c] … … 1113 1094 [itcl::code $this AddIsoMarker %x %y] 1114 1095 } 1115 # Display the markers used by the active transfer function. 1116 set tf $_obj2style($tag) 1096 1097 # Display the markers used by the current transfer function. 1098 set tf $_dataset2style($tag) 1117 1099 array set limits [limits $tf] 1118 1100 $c itemconfigure vmin -text [format %.2g $limits(vmin)] … … 1127 1109 } 1128 1110 } 1111 } 1112 1113 # 1114 # ReceiveLegend -- 1115 # 1116 # The procedure is the response from the render server to each "legend" 1117 # command. The server sends back a "legend" command invoked our 1118 # the slave interpreter. The purpose is to collect data of the image 1119 # representing the legend in the canvas. In addition, the 1120 # active transfer function is displayed. 1121 # 1122 itcl::body Rappture::FlowvisViewer::ReceiveLegend { tag vmin vmax size } { 1123 if { ![isconnected] } { 1124 return 1125 } 1126 #puts stderr "receive legend $tag $vmin $vmax $size" 1127 set bytes [ReceiveBytes $size] 1128 $_image(legend) configure -data $bytes 1129 ReceiveEcho <<line "<read $size bytes for [image width $_image(legend)]x[image height $_image(legend)] legend>" 1130 1131 DrawLegend $tag 1129 1132 } 1130 1133 … … 1138 1141 # doesn't parse 3D data formats, we rely on the server (flowvis) to 1139 1142 # tell us what the limits are. Once we've received the limits to all 1140 # the data we've sent (tracked by _recv Objs) we can then determine1143 # the data we've sent (tracked by _recvdDatasets) we can then determine 1141 1144 # what the transfer functions are for these # volumes. 1142 1145 # … … 1158 1161 set parts [split $tag -] 1159 1162 set dataobj [lindex $parts 0] 1160 set _server Objs($tag) 01163 set _serverDatasets($tag) 0 1161 1164 set _limits($tag-min) $values(min); # Minimum value of the volume. 1162 1165 set _limits($tag-max) $values(max); # Maximum value of the volume. 1163 unset _recv Objs($tag)1164 if { [array size _recv Objs] == 0 } {1166 unset _recvdDatasets($tag) 1167 if { [array size _recvdDatasets] == 0 } { 1165 1168 updateTransferFunctions 1166 1169 } … … 1233 1236 } 1234 1237 SendData $data 1235 NameTransferFunc $dataobj $comp1236 set _recv Objs($tag) 11238 NameTransferFunction $dataobj $comp 1239 set _recvdDatasets($tag) 1 1237 1240 } 1238 1241 } … … 1257 1260 1258 1261 } 1259 set _settings( $this-qw) $_view(-qw)1260 set _settings( $this-qx) $_view(-qx)1261 set _settings( $this-qy) $_view(-qy)1262 set _settings( $this-qz) $_view(-qz)1263 set _settings( $this-xpan) $_view(-xpan)1264 set _settings( $this-ypan) $_view(-ypan)1265 set _settings( $this-zoom) $_view(-zoom)1262 set _settings(-qw) $_view(-qw) 1263 set _settings(-qx) $_view(-qx) 1264 set _settings(-qy) $_view(-qy) 1265 set _settings(-qz) $_view(-qz) 1266 set _settings(-xpan) $_view(-xpan) 1267 set _settings(-ypan) $_view(-ypan) 1268 set _settings(-zoom) $_view(-zoom) 1266 1269 1267 1270 set q [ViewToQuaternion] … … 1274 1277 foreach dataobj [get] { 1275 1278 foreach comp [$dataobj components] { 1276 NameTransferFunc $dataobj $comp1279 NameTransferFunction $dataobj $comp 1277 1280 } 1278 1281 } … … 1290 1293 } 1291 1294 set comp [lindex [$_first components] 0] 1292 set _activeTf [lindex $_ obj2style($_first-$comp) 0]1295 set _activeTf [lindex $_dataset2style($_first-$comp) 0] 1293 1296 } 1294 1297 … … 1324 1327 return 1325 1328 } 1326 foreach key [array names _server Objs *-*] {1329 foreach key [array names _serverDatasets *-*] { 1327 1330 if {[string match $_first-* $key]} { 1328 1331 array set style { … … 1332 1335 array set style [lindex [$dataobj components -style $comp] 0] 1333 1336 if {$what != "-cutplanes" || $style(-cutplanes)} { 1334 lappend rlist $_server Objs($key)1337 lappend rlist $_serverDatasets($key) 1335 1338 } 1336 1339 } … … 1351 1354 "in" { 1352 1355 set _view(-zoom) [expr {$_view(-zoom)*1.25}] 1353 set _settings( $this-zoom) $_view(-zoom)1356 set _settings(-zoom) $_view(-zoom) 1354 1357 SendCmd "camera zoom $_view(-zoom)" 1355 1358 } 1356 1359 "out" { 1357 1360 set _view(-zoom) [expr {$_view(-zoom)*0.8}] 1358 set _settings( $this-zoom) $_view(-zoom)1361 set _settings(-zoom) $_view(-zoom) 1359 1362 SendCmd "camera zoom $_view(-zoom)" 1360 1363 } … … 1379 1382 SendCmd "camera orient $q" 1380 1383 SendCmd "camera reset" 1381 set _settings( $this-qw) $_view(-qw)1382 set _settings( $this-qx) $_view(-qx)1383 set _settings( $this-qy) $_view(-qy)1384 set _settings( $this-qz) $_view(-qz)1385 set _settings( $this-xpan) $_view(-xpan)1386 set _settings( $this-ypan) $_view(-ypan)1387 set _settings( $this-zoom) $_view(-zoom)1384 set _settings(-qw) $_view(-qw) 1385 set _settings(-qx) $_view(-qx) 1386 set _settings(-qy) $_view(-qy) 1387 set _settings(-qz) $_view(-qz) 1388 set _settings(-xpan) $_view(-xpan) 1389 set _settings(-ypan) $_view(-ypan) 1390 set _settings(-zoom) $_view(-zoom) 1388 1391 } 1389 1392 } … … 1431 1434 set q [$_arcball rotate $x $y $_click(x) $_click(y)] 1432 1435 QuaternionToView $q 1433 set _settings( $this-qw) $_view(-qw)1434 set _settings( $this-qx) $_view(-qx)1435 set _settings( $this-qy) $_view(-qy)1436 set _settings( $this-qz) $_view(-qz)1436 set _settings(-qw) $_view(-qw) 1437 set _settings(-qx) $_view(-qx) 1438 set _settings(-qy) $_view(-qy) 1439 set _settings(-qz) $_view(-qz) 1437 1440 SendCmd "camera orient $q" 1438 1441 … … 1470 1473 set _view(-ypan) [expr $_view(-ypan) + $y] 1471 1474 PanCamera 1472 set _settings( $this-xpan) $_view(-xpan)1473 set _settings( $this-ypan) $_view(-ypan)1475 set _settings(-xpan) $_view(-xpan) 1476 set _settings(-ypan) $_view(-ypan) 1474 1477 return 1475 1478 } … … 1487 1490 set _view(-ypan) [expr $_view(-ypan) - $dy] 1488 1491 PanCamera 1489 set _settings( $this-xpan) $_view(-xpan)1490 set _settings( $this-ypan) $_view(-ypan)1492 set _settings(-xpan) $_view(-xpan) 1493 set _settings(-ypan) $_view(-ypan) 1491 1494 } 1492 1495 if { $option == "release" } { … … 1746 1749 set comp [lindex [$_first components] 0] 1747 1750 set tag $_first-$comp 1748 #set _activeTf [lindex $_ obj2style($tag) 0]1751 #set _activeTf [lindex $_dataset2style($tag) 0] 1749 1752 if {$w > 0 && $h > 0 && "" != $_activeTf} { 1750 1753 #SendCmd "legend $_activeTf $w $h" … … 1759 1762 1760 1763 # 1761 # NameTransferFunc --1764 # NameTransferFunction -- 1762 1765 # 1763 1766 # Creates a transfer function name based on the <style> settings in the … … 1773 1776 # now. 1774 1777 # 1775 itcl::body Rappture::FlowvisViewer::NameTransferFunc { dataobj comp} {1778 itcl::body Rappture::FlowvisViewer::NameTransferFunction { dataobj cname } { 1776 1779 array set style { 1777 1780 -color BCGYR … … 1781 1784 -transp 50 1782 1785 } 1783 array set style [lindex [$dataobj components -style $c omp] 0]1786 array set style [lindex [$dataobj components -style $cname] 0] 1784 1787 set _settings($this-light) $style(-light) 1785 1788 set _settings($this-transp) $style(-transp) 1786 1789 set _settings($this-opacity) [expr $style(-opacity) * 100] 1787 1790 set tf "$style(-color):$style(-levels):$style(-opacity)" 1788 set _ obj2style($dataobj-$comp) $tf1789 lappend _style2 objs($tf) $dataobj $comp1791 set _dataset2style($dataobj-$cname) $tf 1792 lappend _style2datasets($tf) $dataobj $cname 1790 1793 return $tf 1791 1794 } 1792 1795 1793 1796 # 1794 # ComputeTransferFunc --1797 # ComputeTransferFunction -- 1795 1798 # 1796 1799 # Computes and sends the transfer function to the render server. It's … … 1800 1803 # the alpha map of the transfer function. 1801 1804 # 1802 itcl::body Rappture::FlowvisViewer::ComputeTransferFunc { tf } {1805 itcl::body Rappture::FlowvisViewer::ComputeTransferFunction { tf } { 1803 1806 array set style { 1804 1807 -color BCGYR … … 1809 1812 } 1810 1813 set dataobj ""; set comp "" 1811 foreach {dataobj comp} $_style2 objs($tf) break1814 foreach {dataobj comp} $_style2datasets($tf) break 1812 1815 if { $dataobj == "" } { 1813 1816 return 0 … … 2008 2011 2009 2012 # ---------------------------------------------------------------------- 2010 # USAGE: UpdateTransferFunc s2013 # USAGE: UpdateTransferFunctions 2011 2014 # ---------------------------------------------------------------------- 2012 2015 itcl::body Rappture::FlowvisViewer::updateTransferFunctions {} { … … 2071 2074 set _limits(vmin) 0.0 2072 2075 set _limits(vmax) 1.0 2073 if { ![info exists _style2 objs($tf)] } {2074 puts stderr "no style2objs for $tf tf=($tf)"2076 if { ![info exists _style2datasets($tf)] } { 2077 puts stderr "no _style2datasets for $tf tf=($tf)" 2075 2078 return [array get _limits] 2076 2079 } … … 2078 2081 foreach {dataobj comp} $_style2objs($tf) { 2079 2082 set tag $dataobj-$comp 2080 if { ![info exists _server Objs($tag)] } {2083 if { ![info exists _serverDatasets($tag)] } { 2081 2084 puts stderr "$tag not in serverObjs?" 2082 2085 continue … … 2400 2403 label $inner.${tag}label -text $tag -font "Arial 9" 2401 2404 entry $inner.${tag} -font "Arial 9" -bg white \ 2402 -textvariable [itcl::scope _settings( $this-$tag)]2405 -textvariable [itcl::scope _settings(-$tag)] 2403 2406 bind $inner.${tag} <Return> \ 2404 2407 [itcl::code $this camera set -${tag}] … … 2419 2422 itcl::body Rappture::FlowvisViewer::GetFlowInfo { w } { 2420 2423 set flowobj "" 2421 foreach key [array names _ obj2flow] {2422 set flowobj $_ obj2flow($key)2424 foreach key [array names _dataset2flow] { 2425 set flowobj $_dataset2flow($key) 2423 2426 break 2424 2427 } … … 2635 2638 itcl::body Rappture::FlowvisViewer::SendFlowCmd { dataobj comp nbytes extents } { 2636 2639 set tag "$dataobj-$comp" 2637 if { ![info exists _ obj2flow($tag)] } {2640 if { ![info exists _dataset2flow($tag)] } { 2638 2641 SendCmd "flow add $tag" 2639 2642 SendCmd "$tag data follows $nbytes $extents" 2640 2643 return 0 2641 2644 } 2642 set flowobj $_ obj2flow($tag)2645 set flowobj $_dataset2flow($tag) 2643 2646 if { $flowobj == "" } { 2644 2647 puts stderr "no flowobj" … … 3019 3022 set _view(-ypan) 0.0 3020 3023 set _view(-zoom) 1.0 3021 set _settings( $this-xpan) $_view(-xpan)3022 set _settings( $this-ypan) $_view(-ypan)3023 set _settings( $this-zoom) $_view(-zoom)3024 } 3024 set _settings(-xpan) $_view(-xpan) 3025 set _settings(-ypan) $_view(-ypan) 3026 set _settings(-zoom) $_view(-zoom) 3027 }
Note: See TracChangeset
for help on using the changeset viewer.