From 2e98f651c06f083be47f24030df49897e4b0c9d1 Mon Sep 17 00:00:00 2001 From: tatiana Date: Mon, 17 Aug 2009 14:24:10 +0000 Subject: [PATCH] ENC: Changed GUI related to raycasting set/not set and type --- invesalius/constants.py | 3 ++- invesalius/control.py | 17 ++++++++++------- invesalius/data/volume.py | 75 ++++++++++++++++++++++++++++++++++++++++++++++----------------------------- invesalius/gui/default_viewers.py | 37 +++++++++++++++++++------------------ 4 files changed, 77 insertions(+), 55 deletions(-) diff --git a/invesalius/constants.py b/invesalius/constants.py index cda6735..c0b3a3e 100644 --- a/invesalius/constants.py +++ b/invesalius/constants.py @@ -157,6 +157,7 @@ folder=RAYCASTING_PRESETS_DIRECTORY= os.path.join("..", "presets", "raycasting") RAYCASTING_TYPES = [filename.split(".")[0] for filename in os.listdir(folder) if os.path.isfile(os.path.join(folder,filename))] +RAYCASTING_TYPES.append(' Off') RAYCASTING_TYPES.sort() -RAYCASTING_LABEL = "Skin On Blue" +RAYCASTING_OFF_LABEL = ' Off' diff --git a/invesalius/control.py b/invesalius/control.py index 0c5a9ca..a7e0190 100755 --- a/invesalius/control.py +++ b/invesalius/control.py @@ -107,10 +107,13 @@ class Controller(): def LoadRaycastingPreset(self, pubsub_evt): label = pubsub_evt.data - if not label: - label = const.RAYCASTING_LABEL - - path = os.path.join(const.RAYCASTING_PRESETS_DIRECTORY, - label+".plist") - preset = plistlib.readPlist(path) - prj.Project().raycasting_preset = preset + if label != const.RAYCASTING_OFF_LABEL: + path = os.path.join(const.RAYCASTING_PRESETS_DIRECTORY, + label+".plist") + preset = plistlib.readPlist(path) + prj.Project().raycasting_preset = preset + # Notify volume + # TODO: Chamar grafico tb! + ps.Publisher().sendMessage('Update raycasting preset') + else: + ps.Publisher().sendMessage("Hide raycasting volume") diff --git a/invesalius/data/volume.py b/invesalius/data/volume.py index 3eda336..a138b85 100755 --- a/invesalius/data/volume.py +++ b/invesalius/data/volume.py @@ -24,7 +24,7 @@ import wx import wx.lib.pubsub as ps import constants as const -from project import Project +import project as prj Kernels = { "Basic Smooth 5x5" : [1.0, 1.0, 1.0, 1.0, 1.0, @@ -80,12 +80,12 @@ class Volume(): def __bind_events(self): #ps.Publisher().subscribe(self.OnLoadVolume, 'Create volume raycasting') - ps.Publisher().subscribe(self.OnShowVolume, - 'Show raycasting volume') + #ps.Publisher().subscribe(self.OnShowVolume, + # 'Show raycasting volume') ps.Publisher().subscribe(self.OnHideVolume, 'Hide raycasting volume') - ps.Publisher().subscribe(self.SetRaycastPreset, - 'Set raycasting preset') + ps.Publisher().subscribe(self.OnUpdatePreset, + 'Update raycasting preset') ps.Publisher().subscribe(self.OnSetWindowLevel, 'Set raycasting wwwl') ps.Publisher().subscribe(self.Refresh, @@ -98,9 +98,6 @@ class Volume(): #self.LoadConfig(label) self.LoadVolume() - def LoadConfig(self): - self.config = Project().raycasting_preset - def OnHideVolume(self, pubsub_evt): self.volume.SetVisibility(0) ps.Publisher().sendMessage('Render volume viewer') @@ -115,22 +112,41 @@ class Volume(): self.LoadVolume() self.exist = 1 - def SetRaycastPreset(self, pubsub_evt): - self.LoadConfig() - self.__config_preset() - self.SetShading() - colour = self.CreateBackgroundColor() - ps.Publisher.sendMessage('Change volume viewer background colour', colour) + def OnUpdatePreset(self, pubsub_evt): + self.__load_preset_config() + if self.exist: + self.__load_preset() + self.volume.SetVisibility(1) + ps.Publisher().sendMessage('Render volume viewer') + else: + self.LoadVolume() + self.exist = 1 - def __config_preset(self): + def __load_preset_config(self): + self.config = prj.Project().raycasting_preset + + def __update_colour_table(self): if self.config['advancedCLUT']: self.Create16bColorTable(self.scale) self.CreateOpacityTable(self.scale) else: self.Create8bColorTable(self.scale) self.Create8bOpacityTable(self.scale) - image = self.DoConvolutionFilters(self.imagedata.GetOutput()) - self.volume_mapper.SetInput(image) + + def __load_preset(self): + # Update colour table + self.__update_colour_table() + + # Update convolution filter + original_imagedata = self.imagedata.GetOutput() + imagedata = self.ApplyConvolution(original_imagedata) + self.volume_mapper.SetInput(imagedata) + + # Update other information + self.SetShading() + colour = self.GetBackgroundColour() + ps.Publisher.sendMessage('Change volume viewer background colour', colour) + def OnSetRelativeWindowLevel(self, pubsub_evt): diff_ww, diff_wl = pubsub_evt.data @@ -144,7 +160,8 @@ class Volume(): def OnSetWindowLevel(self, pubsub_evt): ww, wl, n = pubsub_evt.data - self.SetWWWL(ww,wl,n) + self.n = n + self.SetWWWL(ww,wl) def SetWWWL(self, ww, wl): @@ -173,11 +190,11 @@ class Volume(): self.config['wl'] = wl self.config['ww'] = ww - self.__config_preset() - #ps.Publisher().sendMessage('Render volume viewer', None) + self.__update_colour_table() + ps.Publisher().sendMessage('Render volume viewer') def Refresh(self, pubsub_evt): - self.__config_preset() + self.__set_preset() #*************** def Create16bColorTable(self, scale): @@ -287,11 +304,11 @@ class Volume(): self.opacity_transfer_func = opacity_transfer_func return opacity_transfer_func - def CreateBackgroundColor(self): - color_background = (self.config['backgroundColorRedComponent'], + def GetBackgroundColour(self): + colour = (self.config['backgroundColorRedComponent'], self.config['backgroundColorGreenComponent'], self.config['backgroundColorBlueComponent']) - return color_background + return colour def BuildTable(): curve_table = p['16bitClutCurves'] @@ -329,7 +346,7 @@ class Volume(): self.volume_properties.SetSpecular(shading['specular']) self.volume_properties.SetSpecularPower(shading['specularPower']) - def DoConvolutionFilters(self, imagedata): + def ApplyConvolution(self, imagedata): for filter in self.config['convolutionFilters']: convolve = vtk.vtkImageConvolve() convolve.SetInput(imagedata) @@ -339,7 +356,7 @@ class Volume(): return imagedata def LoadVolume(self): - proj = Project() + proj = prj.Project() image = proj.imagedata # Flip original vtkImageData @@ -368,7 +385,7 @@ class Volume(): self.Create8bColorTable(scale) self.Create8bOpacityTable(scale) - image2 = self.DoConvolutionFilters(image2.GetOutput()) + image2 = self.ApplyConvolution(image2.GetOutput()) composite_function = vtk.vtkVolumeRayCastCompositeFunction() composite_function.SetCompositeMethodToInterpolateFirst() @@ -399,7 +416,7 @@ class Volume(): #volume_mapper.SetInput(image2.GetOutput()) #Cut Plane - CutPlane(image2, volume_mapper) + #CutPlane(image2, volume_mapper) #self.color_transfer = color_transfer @@ -434,7 +451,7 @@ class Volume(): volume.SetProperty(volume_properties) self.volume = volume - colour = self.CreateBackgroundColor() + colour = self.GetBackgroundColour() ps.Publisher().sendMessage('Load volume into viewer', (volume, colour)) def TranslateScale(self, scale, value): diff --git a/invesalius/gui/default_viewers.py b/invesalius/gui/default_viewers.py index aef9289..731612e 100755 --- a/invesalius/gui/default_viewers.py +++ b/invesalius/gui/default_viewers.py @@ -212,18 +212,18 @@ class VolumeToolPanel(wx.Panel): id = wx.NewId() item = wx.MenuItem(menu, id, name, kind=wx.ITEM_RADIO) menu.AppendItem(item) - if name == const.RAYCASTING_LABEL: + if name == const.RAYCASTING_OFF_LABEL: item.Check(1) ID_TO_NAME[id] = name self.menu_raycasting = menu menu.Bind(wx.EVT_MENU, self.OnMenuRaycasting) #button_raycasting=btn.GenBitmapToggleButton(self, 1, BMP_RAYCASTING, size=(24,24)) - self.button_raycasting_toggle = 0 + #self.button_raycasting_toggle = 0 button_raycasting = pbtn.PlateButton(self, BUTTON_RAYCASTING,"", BMP_RAYCASTING, style=pbtn.PB_STYLE_SQUARE, size=(24,24)) - self.Bind(wx.EVT_BUTTON, self.OnToggleRaycasting) + #self.Bind(wx.EVT_BUTTON, self.OnToggleRaycasting) button_raycasting.SetMenu(menu) self.button_raycasting = button_raycasting @@ -261,11 +261,12 @@ class VolumeToolPanel(wx.Panel): sizer.Fit(self) def OnMenuRaycasting(self, evt): - """Events from button menus.""" + """Events from raycasting menu.""" ps.Publisher().sendMessage('Load raycasting preset', ID_TO_NAME[evt.GetId()]) - ps.Publisher().sendMessage('Set raycasting preset', None) - ps.Publisher().sendMessage('Render volume viewer') + # ps.Publisher().sendMessage('Set raycasting preset', None) + # ps.Publisher().sendMessage('Render volume viewer') + def OnMenuView(self, evt): """Events from button menus.""" @@ -279,15 +280,15 @@ class VolumeToolPanel(wx.Panel): colour = c = [i/255.0 for i in evt.GetValue()] ps.Publisher().sendMessage('Change volume viewer background colour', colour) - def OnToggleRaycasting(self, evt): - print "oi" - if self.button_raycasting_toggle: - ps.Publisher().sendMessage('Hide raycasting volume') - self.button_raycasting.SetBackgroundColour(self.GetParent().GetBackgroundColour()) - #self.button_raycasting.SetBitmapSelected(ID_TO_BMP2[0]) - self.button_raycasting_toggle = 0 - else: - ps.Publisher().sendMessage('Show raycasting volume') - self.button_raycasting_toggle = 1 - #self.button_raycasting.SetBitmapSelected(ID_TO_BMP2[1]) - self.button_raycasting.SetBackgroundColour((255,255,255)) + #def OnToggleRaycasting(self, evt): + # print "oi" + # if self.button_raycasting_toggle: + # ps.Publisher().sendMessage('Hide raycasting volume') + # self.button_raycasting.SetBackgroundColour(self.GetParent().GetBackgroundColour()) + # #self.button_raycasting.SetBitmapSelected(ID_TO_BMP2[0]) + # self.button_raycasting_toggle = 0 + # else: + # ps.Publisher().sendMessage('Show raycasting volume') + # self.button_raycasting_toggle = 1 + # #self.button_raycasting.SetBitmapSelected(ID_TO_BMP2[1]) + # self.button_raycasting.SetBackgroundColour((255,255,255)) -- libgit2 0.21.2