11 variable reference_actor
16 proc u_mip::reset { parent } {
18 # For programming facilities
19 upvar u_mip::widgets widgets
21 set widgets(base) "$parent"
22 set widgets(work3D) "$parent\.mip"
23 set widgets(controls) "$parent\.mipControls"
24 set widgets(frType) "$parent\.mipControls.type"
25 set widgets(frColor) "$parent\.mipControls.colors"
26 set widgets(btnNeighbor) "$parent\.mipControls.type.btnNeighbor"
27 set widgets(btnTrilinear) "$parent\.mipControls.type.btnTrilinear"
28 set widgets(btnGrey) "$parent\.mipControls.colors.btnGrey"
29 set widgets(btnColor) "$parent\.mipControls.colors.btnColor"
30 set widgets(lbl001) "$parent\.mipControls.lbl001"
31 set widgets(lbl002) "$parent\.mipControls.lbl002"
32 set widgets(lbl003) "$parent\.mipControls.lbl003"
36 proc u_mip::create { parent } {
38 # For programming facilities
39 upvar u_mip::widgets widgets
44 frame $widgets(controls) -borderwidth 1 -height 75 -relief groove -width 191
45 frame $widgets(frType) -borderwidth 2 -height 75 -relief groove -width 125
46 frame $widgets(frColor) -borderwidth 2 -height 75 -relief groove -width 125
49 label $widgets(lbl001) -borderwidth 0 -text $string_table::str_mip_controls
50 label $widgets(lbl002) -borderwidth 0 -text $string_table::str_interpolation_type
51 label $widgets(lbl003) -borderwidth 0 -text $string_table::str_colormap
55 proc u_mip::positionate { } {
57 # For programming facilities
58 upvar u_mip::widgets widgets
59 upvar u_mip::mip_volume mip_volume
61 pack $widgets(work3D) -anchor nw -expand 1 -fill both -side left
62 pack $widgets(controls) -anchor nw -expand 0 -fill both -side left
63 place $widgets(lbl001) -x 55 -y 15 -anchor nw -bordermode ignore
64 place $widgets(frType) -x 10 -y 60 -width 170 -height 95 -anchor nw -bordermode ignore
65 place $widgets(btnNeighbor) -x 25 -y 20 -anchor nw -bordermode ignore
66 place $widgets(btnTrilinear) -x 25 -y 50 -anchor nw -bordermode ignore
67 place $widgets(frColor) -x 10 -y 175 -width 170 -height 95 -anchor nw -bordermode ignore
68 place $widgets(btnGrey) -x 30 -y 20 -anchor nw -bordermode ignore
69 place $widgets(btnColor) -x 30 -y 50 -anchor nw -bordermode ignore
70 place $widgets(lbl002) -x 15 -y 50 -anchor nw -bordermode ignore
71 place $widgets(lbl003) -x 15 -y 165 -anchor nw -bordermode ignore
73 $widgets(btnGrey) deselect
74 $widgets(btnColor) deselect
75 $widgets(btnNeighbor) deselect
76 $widgets(btnTrilinear) deselect
78 $widgets(btnGrey) invoke
79 $widgets(btnNeighbor) invoke
81 [ $widgets(work3D) GetRenderWindow ] Render
85 proc u_mip::forget { } {
87 # For programming facilities
88 upvar u_mip::widgets widgets
89 upvar u_mip::mip_volume mip_volume
91 catch { place forget $widgets(lbl003) }
92 catch { place forget $widgets(lbl002) }
93 catch { place forget $widgets(btnColor) }
94 catch { place forget $widgets(btnGrey) }
95 catch { place forget $widgets(frColor) }
96 catch { place forget $widgets(btnTrilinear) }
97 catch { place forget $widgets(btnNeighbor) }
98 catch { place forget $widgets(frType) }
99 catch { place forget $widgets(lbl001) }
100 catch { pack forget $widgets(controls) }
101 catch { pack forget $widgets(work3D) }
105 proc u_mip::set_data { } {
107 # For programming facilities
108 upvar u_mip::widgets widgets
109 upvar u_mip::mip_volume mip_volume
112 destroy $widgets(work3D)
113 vtkTkRenderWidget $widgets(work3D) -width 30 -height 30
116 bindBasicEvents $widgets(work3D)
118 catch { renderer_$widgets(work3D) Delete }
119 vtkRenderer renderer_$widgets(work3D)
120 set render [ $widgets(work3D) GetRenderWindow ]
121 $render AddRenderer renderer_$widgets(work3D)
125 destroy $widgets(btnNeighbor)
126 destroy $widgets(btnTrilinear)
127 destroy $widgets(btnGrey)
128 destroy $widgets(btnColor)
130 radiobutton $widgets(btnNeighbor) -text $string_table::str_near_neighbor -variable var_type -value 1 -command "catch { mip_prop_$widgets(work3D) SetInterpolationTypeToNearest; [ $widgets(work3D) GetRenderWindow ] Render }"
131 radiobutton $widgets(btnTrilinear) -text $string_table::str_trilinear -variable var_type -value 2 -command "catch { mip_prop_$widgets(work3D) SetInterpolationTypeToLinear; [ $widgets(work3D) GetRenderWindow ] Render }"
132 radiobutton $widgets(btnGrey) -text $string_table::str_greyscale -variable var_color -value 1 -command "catch { mip_prop_$widgets(work3D) SetColor gtfun_$widgets(work3D); [ $widgets(work3D) GetRenderWindow ] Render }"
133 radiobutton $widgets(btnColor) -text $string_table::str_color -variable var_color -value 2 -command "catch { mip_prop_$widgets(work3D) SetColor ctfun_$widgets(work3D); [ $widgets(work3D) GetRenderWindow ] Render }"
135 set resample [ GetVTKVolume_dll ]
136 set bounds [ $resample GetBounds ]
137 set range [ GetImageRange_dll ]
140 catch { renderer_$widgets(work3D) RemoveActor outlineActor_$widgets(work3D) }
141 catch { outlineActor_$widgets(work3D) Delete }
142 catch { outlineMapper_$widgets(work3D) Delete }
143 catch { outlineSource_$widgets(work3D) Delete }
144 catch { renderer_$widgets(work3D) RemoveVolume mip_volume_$widgets(work3D) }
145 catch { mip_volume_$widgets(work3D) Delete }
146 catch { mip_volmap_$widgets(work3D) Delete }
147 catch { mip_func_$widgets(work3D) Delete }
148 catch { mip_prop_$widgets(work3D) Delete }
149 catch { ctfun_$widgets(work3D) Delete }
150 catch { gtfun_$widgets(work3D) Delete }
151 catch { mip_tfun_$widgets(work3D) Delete }
153 vtkCubeSource outlineSource_$widgets(work3D)
154 outlineSource_$widgets(work3D) SetXLength [ expr [ lindex $bounds 1 ] - [ lindex $bounds 0 ] ]
155 outlineSource_$widgets(work3D) SetYLength [ expr [ lindex $bounds 3 ] - [ lindex $bounds 2 ] ]
156 outlineSource_$widgets(work3D) SetZLength [ expr [ lindex $bounds 5 ] - [ lindex $bounds 4 ] ]
157 outlineSource_$widgets(work3D) SetCenter \
158 [ expr ( [ lindex $bounds 0 ] + [ lindex $bounds 1 ] ) / 2 ] \
159 [ expr ( [ lindex $bounds 2 ] + [ lindex $bounds 3 ] ) / 2 ] \
160 [ expr ( [ lindex $bounds 4 ] + [ lindex $bounds 5 ] ) / 2 ]
162 vtkPolyDataMapper outlineMapper_$widgets(work3D)
163 outlineMapper_$widgets(work3D) SetInput [ outlineSource_$widgets(work3D) GetOutput ]
164 outlineMapper_$widgets(work3D) ImmediateModeRenderingOn
166 vtkActor outlineActor_$widgets(work3D)
167 outlineActor_$widgets(work3D) SetMapper outlineMapper_$widgets(work3D)
168 [ outlineActor_$widgets(work3D) GetProperty ] SetRepresentationToWireframe
169 [ outlineActor_$widgets(work3D) GetProperty ] SetColor 0.7 0.0 0.9
170 [ outlineActor_$widgets(work3D) GetProperty ] SetAmbient 1
171 [ outlineActor_$widgets(work3D) GetProperty ] SetDiffuse 0
172 [ outlineActor_$widgets(work3D) GetProperty ] SetSpecular 0
174 renderer_$widgets(work3D) AddActor outlineActor_$widgets(work3D)
176 vtkPiecewiseFunction mip_tfun_$widgets(work3D)
177 mip_tfun_$widgets(work3D) AddPoint 0 0.0
178 mip_tfun_$widgets(work3D) AddPoint [ expr ( [ lindex $range 1 ] / 2 ) ] 1.0
180 vtkPiecewiseFunction gtfun_$widgets(work3D)
181 gtfun_$widgets(work3D) AddPoint 0 0.0
182 gtfun_$widgets(work3D) AddPoint [ expr ( [ lindex $range 1 ] / 4 ) ] 1.0
185 vtkColorTransferFunction ctfun_$widgets(work3D)
186 ctfun_$widgets(work3D) AddRGBPoint 0.0 0.0 0.0 0.0
187 #; ctfun_$widgets(work3D) AddRGBPoint [ expr [ lindex $range 1 ] / 8 ] 0.0 0.0 0.0
188 ctfun_$widgets(work3D) AddRGBPoint [ expr [ lindex $range 1 ] / 4 ] 1.0 0.0 0.0
189 ctfun_$widgets(work3D) AddRGBPoint [ expr [ lindex $range 1 ] / 2 ] 0.0 0.0 1.0
190 ctfun_$widgets(work3D) AddRGBPoint [ lindex $range 1 ] 0.0 1.0 0.0
192 vtkVolumeProperty mip_prop_$widgets(work3D)
193 mip_prop_$widgets(work3D) SetColor gtfun_$widgets(work3D)
194 mip_prop_$widgets(work3D) SetScalarOpacity mip_tfun_$widgets(work3D)
196 vtkVolumeRayCastMIPFunction mip_func_$widgets(work3D)
197 mip_func_$widgets(work3D) SetMaximizeMethodToScalarValue
199 vtkVolumeRayCastMapper mip_volmap_$widgets(work3D)
200 mip_volmap_$widgets(work3D) SetInput $resample
201 mip_volmap_$widgets(work3D) SetVolumeRayCastFunction mip_func_$widgets(work3D)
203 vtkVolume mip_volume_$widgets(work3D)
204 mip_volume_$widgets(work3D) SetMapper mip_volmap_$widgets(work3D)
205 mip_volume_$widgets(work3D) SetProperty mip_prop_$widgets(work3D)
207 renderer_$widgets(work3D) AddVolume mip_volume_$widgets(work3D)
211 proc u_mip::set_mouse_left_events { mask } {
213 # For programming facilities
214 upvar u_mip::widgets widgets
217 catch { bind $widgets(work3D) <Any-ButtonPress> { ev_startMotion %W %x %y } }
218 catch { bind $widgets(work3D) <Any-ButtonRelease> { ev_endMotion %W %x %y } }
220 if { [ expr $mask & 0x4 ] == 0x4 } { catch { bind $widgets(work3D) <B1-Motion> { evz_rotate %W %x %y } } }
221 if { [ expr $mask & 0x2 ] == 0x2 } { catch { bind $widgets(work3D) <B1-Motion> { evz_pan %W %x %y } } }
225 proc u_mip::set_mouse_right_events { mask } {
227 # For programming facilities
228 upvar u_mip::widgets widgets
230 catch { bind $widgets(work3D) <Any-ButtonPress> { ev_startMotion %W %x %y } }
231 catch { bind $widgets(work3D) <Any-ButtonRelease> { ev_endMotion %W %x %y } }
233 if { [ expr $mask & 0x4 ] == 0x4 } { catch { bind $widgets(work3D) <B3-Motion> { evz_zoom %W %x %y } } }