Commit 2e98f651c06f083be47f24030df49897e4b0c9d1
1 parent
e2ad208d
Exists in
master
and in
6 other branches
ENC: Changed GUI related to raycasting set/not set and type
Showing
4 changed files
with
77 additions
and
55 deletions
Show diff stats
invesalius/constants.py
... | ... | @@ -157,6 +157,7 @@ folder=RAYCASTING_PRESETS_DIRECTORY= os.path.join("..", "presets", "raycasting") |
157 | 157 | RAYCASTING_TYPES = [filename.split(".")[0] for filename in |
158 | 158 | os.listdir(folder) if |
159 | 159 | os.path.isfile(os.path.join(folder,filename))] |
160 | +RAYCASTING_TYPES.append(' Off') | |
160 | 161 | RAYCASTING_TYPES.sort() |
161 | -RAYCASTING_LABEL = "Skin On Blue" | |
162 | +RAYCASTING_OFF_LABEL = ' Off' | |
162 | 163 | ... | ... |
invesalius/control.py
... | ... | @@ -107,10 +107,13 @@ class Controller(): |
107 | 107 | |
108 | 108 | def LoadRaycastingPreset(self, pubsub_evt): |
109 | 109 | label = pubsub_evt.data |
110 | - if not label: | |
111 | - label = const.RAYCASTING_LABEL | |
112 | - | |
113 | - path = os.path.join(const.RAYCASTING_PRESETS_DIRECTORY, | |
114 | - label+".plist") | |
115 | - preset = plistlib.readPlist(path) | |
116 | - prj.Project().raycasting_preset = preset | |
110 | + if label != const.RAYCASTING_OFF_LABEL: | |
111 | + path = os.path.join(const.RAYCASTING_PRESETS_DIRECTORY, | |
112 | + label+".plist") | |
113 | + preset = plistlib.readPlist(path) | |
114 | + prj.Project().raycasting_preset = preset | |
115 | + # Notify volume | |
116 | + # TODO: Chamar grafico tb! | |
117 | + ps.Publisher().sendMessage('Update raycasting preset') | |
118 | + else: | |
119 | + ps.Publisher().sendMessage("Hide raycasting volume") | ... | ... |
invesalius/data/volume.py
... | ... | @@ -24,7 +24,7 @@ import wx |
24 | 24 | import wx.lib.pubsub as ps |
25 | 25 | |
26 | 26 | import constants as const |
27 | -from project import Project | |
27 | +import project as prj | |
28 | 28 | |
29 | 29 | Kernels = { |
30 | 30 | "Basic Smooth 5x5" : [1.0, 1.0, 1.0, 1.0, 1.0, |
... | ... | @@ -80,12 +80,12 @@ class Volume(): |
80 | 80 | |
81 | 81 | def __bind_events(self): |
82 | 82 | #ps.Publisher().subscribe(self.OnLoadVolume, 'Create volume raycasting') |
83 | - ps.Publisher().subscribe(self.OnShowVolume, | |
84 | - 'Show raycasting volume') | |
83 | + #ps.Publisher().subscribe(self.OnShowVolume, | |
84 | + # 'Show raycasting volume') | |
85 | 85 | ps.Publisher().subscribe(self.OnHideVolume, |
86 | 86 | 'Hide raycasting volume') |
87 | - ps.Publisher().subscribe(self.SetRaycastPreset, | |
88 | - 'Set raycasting preset') | |
87 | + ps.Publisher().subscribe(self.OnUpdatePreset, | |
88 | + 'Update raycasting preset') | |
89 | 89 | ps.Publisher().subscribe(self.OnSetWindowLevel, |
90 | 90 | 'Set raycasting wwwl') |
91 | 91 | ps.Publisher().subscribe(self.Refresh, |
... | ... | @@ -98,9 +98,6 @@ class Volume(): |
98 | 98 | #self.LoadConfig(label) |
99 | 99 | self.LoadVolume() |
100 | 100 | |
101 | - def LoadConfig(self): | |
102 | - self.config = Project().raycasting_preset | |
103 | - | |
104 | 101 | def OnHideVolume(self, pubsub_evt): |
105 | 102 | self.volume.SetVisibility(0) |
106 | 103 | ps.Publisher().sendMessage('Render volume viewer') |
... | ... | @@ -115,22 +112,41 @@ class Volume(): |
115 | 112 | self.LoadVolume() |
116 | 113 | self.exist = 1 |
117 | 114 | |
118 | - def SetRaycastPreset(self, pubsub_evt): | |
119 | - self.LoadConfig() | |
120 | - self.__config_preset() | |
121 | - self.SetShading() | |
122 | - colour = self.CreateBackgroundColor() | |
123 | - ps.Publisher.sendMessage('Change volume viewer background colour', colour) | |
115 | + def OnUpdatePreset(self, pubsub_evt): | |
116 | + self.__load_preset_config() | |
117 | + if self.exist: | |
118 | + self.__load_preset() | |
119 | + self.volume.SetVisibility(1) | |
120 | + ps.Publisher().sendMessage('Render volume viewer') | |
121 | + else: | |
122 | + self.LoadVolume() | |
123 | + self.exist = 1 | |
124 | 124 | |
125 | - def __config_preset(self): | |
125 | + def __load_preset_config(self): | |
126 | + self.config = prj.Project().raycasting_preset | |
127 | + | |
128 | + def __update_colour_table(self): | |
126 | 129 | if self.config['advancedCLUT']: |
127 | 130 | self.Create16bColorTable(self.scale) |
128 | 131 | self.CreateOpacityTable(self.scale) |
129 | 132 | else: |
130 | 133 | self.Create8bColorTable(self.scale) |
131 | 134 | self.Create8bOpacityTable(self.scale) |
132 | - image = self.DoConvolutionFilters(self.imagedata.GetOutput()) | |
133 | - self.volume_mapper.SetInput(image) | |
135 | + | |
136 | + def __load_preset(self): | |
137 | + # Update colour table | |
138 | + self.__update_colour_table() | |
139 | + | |
140 | + # Update convolution filter | |
141 | + original_imagedata = self.imagedata.GetOutput() | |
142 | + imagedata = self.ApplyConvolution(original_imagedata) | |
143 | + self.volume_mapper.SetInput(imagedata) | |
144 | + | |
145 | + # Update other information | |
146 | + self.SetShading() | |
147 | + colour = self.GetBackgroundColour() | |
148 | + ps.Publisher.sendMessage('Change volume viewer background colour', colour) | |
149 | + | |
134 | 150 | |
135 | 151 | def OnSetRelativeWindowLevel(self, pubsub_evt): |
136 | 152 | diff_ww, diff_wl = pubsub_evt.data |
... | ... | @@ -144,7 +160,8 @@ class Volume(): |
144 | 160 | |
145 | 161 | def OnSetWindowLevel(self, pubsub_evt): |
146 | 162 | ww, wl, n = pubsub_evt.data |
147 | - self.SetWWWL(ww,wl,n) | |
163 | + self.n = n | |
164 | + self.SetWWWL(ww,wl) | |
148 | 165 | |
149 | 166 | def SetWWWL(self, ww, wl): |
150 | 167 | |
... | ... | @@ -173,11 +190,11 @@ class Volume(): |
173 | 190 | self.config['wl'] = wl |
174 | 191 | self.config['ww'] = ww |
175 | 192 | |
176 | - self.__config_preset() | |
177 | - #ps.Publisher().sendMessage('Render volume viewer', None) | |
193 | + self.__update_colour_table() | |
194 | + ps.Publisher().sendMessage('Render volume viewer') | |
178 | 195 | |
179 | 196 | def Refresh(self, pubsub_evt): |
180 | - self.__config_preset() | |
197 | + self.__set_preset() | |
181 | 198 | |
182 | 199 | #*************** |
183 | 200 | def Create16bColorTable(self, scale): |
... | ... | @@ -287,11 +304,11 @@ class Volume(): |
287 | 304 | self.opacity_transfer_func = opacity_transfer_func |
288 | 305 | return opacity_transfer_func |
289 | 306 | |
290 | - def CreateBackgroundColor(self): | |
291 | - color_background = (self.config['backgroundColorRedComponent'], | |
307 | + def GetBackgroundColour(self): | |
308 | + colour = (self.config['backgroundColorRedComponent'], | |
292 | 309 | self.config['backgroundColorGreenComponent'], |
293 | 310 | self.config['backgroundColorBlueComponent']) |
294 | - return color_background | |
311 | + return colour | |
295 | 312 | |
296 | 313 | def BuildTable(): |
297 | 314 | curve_table = p['16bitClutCurves'] |
... | ... | @@ -329,7 +346,7 @@ class Volume(): |
329 | 346 | self.volume_properties.SetSpecular(shading['specular']) |
330 | 347 | self.volume_properties.SetSpecularPower(shading['specularPower']) |
331 | 348 | |
332 | - def DoConvolutionFilters(self, imagedata): | |
349 | + def ApplyConvolution(self, imagedata): | |
333 | 350 | for filter in self.config['convolutionFilters']: |
334 | 351 | convolve = vtk.vtkImageConvolve() |
335 | 352 | convolve.SetInput(imagedata) |
... | ... | @@ -339,7 +356,7 @@ class Volume(): |
339 | 356 | return imagedata |
340 | 357 | |
341 | 358 | def LoadVolume(self): |
342 | - proj = Project() | |
359 | + proj = prj.Project() | |
343 | 360 | image = proj.imagedata |
344 | 361 | |
345 | 362 | # Flip original vtkImageData |
... | ... | @@ -368,7 +385,7 @@ class Volume(): |
368 | 385 | self.Create8bColorTable(scale) |
369 | 386 | self.Create8bOpacityTable(scale) |
370 | 387 | |
371 | - image2 = self.DoConvolutionFilters(image2.GetOutput()) | |
388 | + image2 = self.ApplyConvolution(image2.GetOutput()) | |
372 | 389 | |
373 | 390 | composite_function = vtk.vtkVolumeRayCastCompositeFunction() |
374 | 391 | composite_function.SetCompositeMethodToInterpolateFirst() |
... | ... | @@ -399,7 +416,7 @@ class Volume(): |
399 | 416 | #volume_mapper.SetInput(image2.GetOutput()) |
400 | 417 | |
401 | 418 | #Cut Plane |
402 | - CutPlane(image2, volume_mapper) | |
419 | + #CutPlane(image2, volume_mapper) | |
403 | 420 | |
404 | 421 | #self.color_transfer = color_transfer |
405 | 422 | |
... | ... | @@ -434,7 +451,7 @@ class Volume(): |
434 | 451 | volume.SetProperty(volume_properties) |
435 | 452 | self.volume = volume |
436 | 453 | |
437 | - colour = self.CreateBackgroundColor() | |
454 | + colour = self.GetBackgroundColour() | |
438 | 455 | ps.Publisher().sendMessage('Load volume into viewer', (volume, colour)) |
439 | 456 | |
440 | 457 | def TranslateScale(self, scale, value): | ... | ... |
invesalius/gui/default_viewers.py
... | ... | @@ -212,18 +212,18 @@ class VolumeToolPanel(wx.Panel): |
212 | 212 | id = wx.NewId() |
213 | 213 | item = wx.MenuItem(menu, id, name, kind=wx.ITEM_RADIO) |
214 | 214 | menu.AppendItem(item) |
215 | - if name == const.RAYCASTING_LABEL: | |
215 | + if name == const.RAYCASTING_OFF_LABEL: | |
216 | 216 | item.Check(1) |
217 | 217 | ID_TO_NAME[id] = name |
218 | 218 | self.menu_raycasting = menu |
219 | 219 | menu.Bind(wx.EVT_MENU, self.OnMenuRaycasting) |
220 | 220 | |
221 | 221 | #button_raycasting=btn.GenBitmapToggleButton(self, 1, BMP_RAYCASTING, size=(24,24)) |
222 | - self.button_raycasting_toggle = 0 | |
222 | + #self.button_raycasting_toggle = 0 | |
223 | 223 | button_raycasting = pbtn.PlateButton(self, BUTTON_RAYCASTING,"", |
224 | 224 | BMP_RAYCASTING, style=pbtn.PB_STYLE_SQUARE, |
225 | 225 | size=(24,24)) |
226 | - self.Bind(wx.EVT_BUTTON, self.OnToggleRaycasting) | |
226 | + #self.Bind(wx.EVT_BUTTON, self.OnToggleRaycasting) | |
227 | 227 | button_raycasting.SetMenu(menu) |
228 | 228 | |
229 | 229 | self.button_raycasting = button_raycasting |
... | ... | @@ -261,11 +261,12 @@ class VolumeToolPanel(wx.Panel): |
261 | 261 | sizer.Fit(self) |
262 | 262 | |
263 | 263 | def OnMenuRaycasting(self, evt): |
264 | - """Events from button menus.""" | |
264 | + """Events from raycasting menu.""" | |
265 | 265 | ps.Publisher().sendMessage('Load raycasting preset', |
266 | 266 | ID_TO_NAME[evt.GetId()]) |
267 | - ps.Publisher().sendMessage('Set raycasting preset', None) | |
268 | - ps.Publisher().sendMessage('Render volume viewer') | |
267 | + # ps.Publisher().sendMessage('Set raycasting preset', None) | |
268 | + # ps.Publisher().sendMessage('Render volume viewer') | |
269 | + | |
269 | 270 | |
270 | 271 | def OnMenuView(self, evt): |
271 | 272 | """Events from button menus.""" |
... | ... | @@ -279,15 +280,15 @@ class VolumeToolPanel(wx.Panel): |
279 | 280 | colour = c = [i/255.0 for i in evt.GetValue()] |
280 | 281 | ps.Publisher().sendMessage('Change volume viewer background colour', colour) |
281 | 282 | |
282 | - def OnToggleRaycasting(self, evt): | |
283 | - print "oi" | |
284 | - if self.button_raycasting_toggle: | |
285 | - ps.Publisher().sendMessage('Hide raycasting volume') | |
286 | - self.button_raycasting.SetBackgroundColour(self.GetParent().GetBackgroundColour()) | |
287 | - #self.button_raycasting.SetBitmapSelected(ID_TO_BMP2[0]) | |
288 | - self.button_raycasting_toggle = 0 | |
289 | - else: | |
290 | - ps.Publisher().sendMessage('Show raycasting volume') | |
291 | - self.button_raycasting_toggle = 1 | |
292 | - #self.button_raycasting.SetBitmapSelected(ID_TO_BMP2[1]) | |
293 | - self.button_raycasting.SetBackgroundColour((255,255,255)) | |
283 | + #def OnToggleRaycasting(self, evt): | |
284 | + # print "oi" | |
285 | + # if self.button_raycasting_toggle: | |
286 | + # ps.Publisher().sendMessage('Hide raycasting volume') | |
287 | + # self.button_raycasting.SetBackgroundColour(self.GetParent().GetBackgroundColour()) | |
288 | + # #self.button_raycasting.SetBitmapSelected(ID_TO_BMP2[0]) | |
289 | + # self.button_raycasting_toggle = 0 | |
290 | + # else: | |
291 | + # ps.Publisher().sendMessage('Show raycasting volume') | |
292 | + # self.button_raycasting_toggle = 1 | |
293 | + # #self.button_raycasting.SetBitmapSelected(ID_TO_BMP2[1]) | |
294 | + # self.button_raycasting.SetBackgroundColour((255,255,255)) | ... | ... |