diff --git a/invesalius/data/slice_.py b/invesalius/data/slice_.py index b5841ad..9db4490 100644 --- a/invesalius/data/slice_.py +++ b/invesalius/data/slice_.py @@ -341,6 +341,7 @@ class Slice(object): self.cross = cross self.window_level = vtk.vtkImageMapToWindowLevelColors() + self.window_level.SetInput(self.imagedata) #cast = vtk.vtkImageCast() #cast.SetInput(cross.GetOutput()) #cast.GetOutput().SetUpdateExtentToWholeExtent() @@ -396,15 +397,19 @@ class Slice(object): def UpdateWindowLevelBackground(self, pubsub_evt): window, level = pubsub_evt.data window_level = self.window_level - window_level.SetInput(self.imagedata) - window_level.SetWindow(window) - window_level.SetLevel(level) - window_level.SetOutputFormatToLuminance() - window_level.Update() - - thresh_min, thresh_max = window_level.GetOutput().GetScalarRange() - self.lut_bg.SetTableRange(thresh_min, thresh_max) - self.img_colours_bg.SetInput(window_level.GetOutput()) + + if not((window == window_level.GetWindow()) and\ + (level == window_level.GetLevel())): + + window_level.SetWindow(window) + window_level.SetLevel(level) + window_level.SetOutputFormatToLuminance() + window_level.Update() + + thresh_min, thresh_max = window_level.GetOutput().GetScalarRange() + self.lut_bg.SetTableRange(thresh_min, thresh_max) + self.img_colours_bg.SetInput(window_level.GetOutput()) + def CreateMask(self, imagedata=None, name=None): diff --git a/invesalius/data/viewer_slice.py b/invesalius/data/viewer_slice.py index 18c67f5..d0918fb 100755 --- a/invesalius/data/viewer_slice.py +++ b/invesalius/data/viewer_slice.py @@ -33,6 +33,8 @@ import data.vtk_utils as vtku import project from slice_data import SliceData +ID_TO_TOOL_ITEM = {} + class Viewer(wx.Panel): def __init__(self, prnt, orientation='AXIAL'): @@ -68,6 +70,7 @@ class Viewer(wx.Panel): self.__bind_events() self.__bind_events_wx() + self.__init_menus() def __init_gui(self): @@ -85,13 +88,47 @@ class Viewer(wx.Panel): background_sizer.Add(scroll, 0, wx.EXPAND|wx.GROW) self.SetSizer(background_sizer) background_sizer.Fit(self) - + + self.Layout() self.Update() self.SetAutoLayout(1) self.interactor = interactor - + + + + def __init_menus(self): + + menu = self.menu = wx.Menu() + submenu_wl = wx.Menu() + + for name in sorted(const.WINDOW_LEVEL): + new_id = wx.NewId() + wl_item = wx.MenuItem(submenu_wl, new_id, name, kind=wx.ITEM_RADIO) + submenu_wl.AppendItem(wl_item) + ID_TO_TOOL_ITEM[new_id] = wl_item + + menu.AppendMenu(1, "Window Width & Level", submenu_wl) + self.Bind(wx.EVT_MENU, self.OnPopupWindowLevel) + self.Fit() + + + + def OnPopupWindowLevel(self, evt): + item = ID_TO_TOOL_ITEM[evt.GetId()] + key = item.GetLabel() + window, level = const.WINDOW_LEVEL[key] + + ps.Publisher().sendMessage('Bright and contrast adjustment image', + (window, level)) + ps.Publisher().sendMessage('Update slice viewer') + evt.Skip() + + def OnContextMenu(self, evt): + self.PopupMenu(self.menu) + #evt.Skip() + def __config_interactor(self): ren = vtk.vtkRenderer() @@ -101,6 +138,9 @@ class Viewer(wx.Panel): self.cam = ren.GetActiveCamera() self.ren = ren + + + def append_mode(self, mode): @@ -225,9 +265,8 @@ class Viewer(wx.Panel): ps.Publisher().sendMessage('Update window and level text',\ "WL: %d WW: %d"%(proj.level, proj.window)) - self.interactor.Render() - #ps.Publisher().sendMessage("Update slice viewer") - + self.interactor.Render() + def OnWindowLevelClick(self, evt, obj): proj = project.Project() @@ -652,9 +691,23 @@ class Viewer(wx.Panel): print pubsub_evt.data self._brush_cursor_op = pubsub_evt.data + + def popupID1(self, evt): + print "A" + print "...b..." + + evt.Skip() + + def popupID8(self, evt): + print "B" + evt.Skip() + def __bind_events_wx(self): self.scroll.Bind(wx.EVT_SCROLL, self.OnScrollBar) - self.interactor.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) + self.interactor.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) + self.interactor.Bind(wx.EVT_RIGHT_DOWN, self.OnContextMenu) + + def LoadImagedata(self, pubsub_evt): imagedata = pubsub_evt.data @@ -903,7 +956,7 @@ class Viewer(wx.Panel): def UpdateRender(self, evt): self.interactor.Render() - + def set_scroll_position(self, position): self.scroll.SetThumbPosition(position) self.OnScrollBar() -- libgit2 0.21.2