]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/tcl/windows/u_mip.tcl
creaMaracasVisu Library
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / tcl / windows / u_mip.tcl
1 namespace eval u_mip {
2
3     # public interface
4     namespace export        \
5         create              \
6         positionate         \
7         forget
8     
9     # variables
10     variable widgets
11     variable reference_actor
12     variable mip_volume
13
14 }
15
16 proc u_mip::reset { parent } {
17
18     # For programming facilities
19     upvar u_mip::widgets widgets
20
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"
33
34 }
35
36 proc u_mip::create { parent } {
37
38     # For programming facilities
39     upvar u_mip::widgets widgets
40
41     u_mip::reset $parent
42
43     # frames
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 
47
48     # labels
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 
52
53 }
54
55 proc u_mip::positionate { } {
56
57     # For programming facilities
58     upvar u_mip::widgets widgets
59     upvar u_mip::mip_volume mip_volume
60
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 
72
73     $widgets(btnGrey)      deselect
74     $widgets(btnColor)     deselect
75     $widgets(btnNeighbor)  deselect
76     $widgets(btnTrilinear) deselect
77
78     $widgets(btnGrey)     invoke
79     $widgets(btnNeighbor) invoke
80     
81     [ $widgets(work3D) GetRenderWindow ] Render
82
83 }
84
85 proc u_mip::forget { } {
86
87     # For programming facilities
88     upvar u_mip::widgets widgets
89     upvar u_mip::mip_volume mip_volume
90
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) }
102
103 }
104
105 proc u_mip::set_data { } {
106
107     # For programming facilities
108     upvar u_mip::widgets widgets
109     upvar u_mip::mip_volume mip_volume
110
111     # render widget
112     destroy $widgets(work3D)
113     vtkTkRenderWidget $widgets(work3D) -width 30 -height 30
114
115     # TODO: change
116     bindBasicEvents $widgets(work3D)
117
118     catch { renderer_$widgets(work3D) Delete }
119     vtkRenderer renderer_$widgets(work3D)
120     set render [ $widgets(work3D) GetRenderWindow ]
121     $render AddRenderer renderer_$widgets(work3D)
122     $render SetSize 1 1
123
124     # radiobuttons
125     destroy $widgets(btnNeighbor)
126     destroy $widgets(btnTrilinear)
127     destroy $widgets(btnGrey)
128     destroy $widgets(btnColor)
129
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 }"
134
135     set resample [ GetVTKVolume_dll ]
136     set bounds   [ $resample GetBounds ]
137     set range    [ GetImageRange_dll ]
138
139     # 3D outline
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 }
152
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 ]
161
162     vtkPolyDataMapper outlineMapper_$widgets(work3D)
163         outlineMapper_$widgets(work3D) SetInput [ outlineSource_$widgets(work3D) GetOutput ]
164         outlineMapper_$widgets(work3D) ImmediateModeRenderingOn
165
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
173
174     renderer_$widgets(work3D) AddActor outlineActor_$widgets(work3D)
175
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
179
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
183
184
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
191
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)
195
196     vtkVolumeRayCastMIPFunction  mip_func_$widgets(work3D)
197         mip_func_$widgets(work3D) SetMaximizeMethodToScalarValue
198
199     vtkVolumeRayCastMapper mip_volmap_$widgets(work3D)
200         mip_volmap_$widgets(work3D) SetInput $resample
201         mip_volmap_$widgets(work3D) SetVolumeRayCastFunction mip_func_$widgets(work3D)
202
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)
206
207     renderer_$widgets(work3D) AddVolume mip_volume_$widgets(work3D)
208
209 }
210
211 proc u_mip::set_mouse_left_events { mask } {
212
213     # For programming facilities
214     upvar u_mip::widgets widgets
215
216     # TODO : change
217     catch { bind $widgets(work3D) <Any-ButtonPress>   { ev_startMotion %W %x %y } }
218     catch { bind $widgets(work3D) <Any-ButtonRelease> { ev_endMotion %W %x %y } }
219
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 } } }
222
223 }
224
225 proc u_mip::set_mouse_right_events { mask } {
226
227     # For programming facilities
228     upvar u_mip::widgets widgets
229
230     catch { bind $widgets(work3D) <Any-ButtonPress>   { ev_startMotion %W %x %y } }
231     catch { bind $widgets(work3D) <Any-ButtonRelease> { ev_endMotion %W %x %y } }
232
233     if { [ expr $mask & 0x4 ] == 0x4 } { catch { bind $widgets(work3D) <B3-Motion> { evz_zoom %W %x %y } } }
234     
235 }
236
237 # EOF - u_mip.tcl