Commit 2e98f651c06f083be47f24030df49897e4b0c9d1
1 parent
e2ad208d
Exists in
master
and in
68 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)) | ... | ... |