1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
package require BLT
source ./data/dentalscan.tcl
#option add *Axis.tickDirection in
blt::vector create dentalscan
dentalscan set $data
set mesh [blt::mesh create regular regular -x "0 512 512" -y "0 512 512"]
blt::contour .g -highlightthickness 0
set palette spectral.rgb
.g element create myContour -values dentalscan -mesh $mesh
.g isoline steps 6 -element myContour
.g legend configure -hide yes
.g axis configure z \
-palette $palette \
-margin left \
-colorbarthickness 20
proc UpdateColors {} {
global usePaletteColors
if { $usePaletteColors } {
.g element configure myContour -color palette -fill palette
} else {
.g element configure myContour -color black -fill red
}
}
proc FixPalette {} {
global usePalette
.g axis configure z -palette $usePalette
.g2 axis configure x -palette $usePalette
}
proc Fix { what } {
global show
set bool $show($what)
.g element configure myContour -show$what $bool
}
array set show {
boundary 0
values 0
symbols 0
isolines 0
colormap 0
symbols 0
wireframe 0
}
blt::tk::checkbutton .boundary -text "Boundary" -variable show(boundary) \
-command "Fix boundary"
blt::tk::checkbutton .wireframe -text "Wireframe" -variable show(wireframe) \
-command "Fix wireframe"
blt::tk::checkbutton .colormap -text "Colormap" \
-variable show(colormap) -command "Fix colormap"
blt::tk::checkbutton .isolines -text "Isolines" \
-variable show(isolines) -command "Fix isolines"
blt::tk::checkbutton .values -text "Values" \
-variable show(values) -command "Fix values"
blt::tk::checkbutton .symbols -text "Symbols" \
-variable show(symbols) -command "Fix symbols"
blt::tk::checkbutton .interp -text "Use palette colors" \
-variable usePaletteColors -command "UpdateColors"
blt::combobutton .palettes \
-textvariable usePalette \
-relief sunken \
-background white \
-arrowon yes \
-menu .palettes.menu
blt::tk::label .palettesl -text "Palettes"
blt::combomenu .palettes.menu \
-background white \
-textvariable usePalette \
-height 200 \
-yscrollbar .palettes.menu.ybar \
-xscrollbar .palettes.menu.xbar
blt::tk::scrollbar .palettes.menu.xbar
blt::tk::scrollbar .palettes.menu.ybar
foreach pal [blt::palette names] {
set pal [string trim $pal ::]
lappend palettes $pal
}
.palettes.menu listadd [lsort -dictionary $palettes] -command FixPalette
set usePalette $palette
blt::table . \
1,0 .g -fill both -rowspan 10 \
1,1 .boundary -anchor w \
2,1 .colormap -anchor w \
3,1 .isolines -anchor w \
4,1 .wireframe -anchor w \
5,1 .symbols -anchor w \
6,1 .values -anchor w \
7,1 .interp -anchor w \
8,1 .palettesl -anchor w \
9,1 .palettes -fill x
foreach key [array names show] {
set show($key) [.g element cget myContour -show$key]
}
Blt_ZoomStack .g
set numBins 256
set min [dentalscan min]
set max [dentalscan max]
set freq [blt::vector create]
# Get a histogram of the dental scan values
$freq frequency dentalscan $numBins
set w [expr ($max - $min) / double($numBins)]
# Compute the location for the bins within the range of values
set x [blt::vector create]
$x linspace [expr $min + ($w * 0.5)] [expr $max - ($w - 0.5)] $numBins
blt::graph .g2 \
-height 1i -highlightthickness 0
.g2 axis configure x -stepsize 0 -palette $palette -loose no
.g2 axis configure y -logscale yes -grid no -subdivisions 0
.g2 element create hist -x $x -y $freq -colormap x -symbol scross -pixels 1
.g2 legend configure -hide yes
Blt_ZoomStack .g2
blt::table . \
11,0 .g2 -fill both
blt::table configure . r* c* -resize none
blt::table configure . c0 r10 r11 -resize both
|