Commit c68dfbfb620a66c880c011d702f871c954d2ef9a
1 parent
b3f71dbc
Exists in
master
and in
68 other branches
ADD: Poup-up Menu with Window and Level
Showing
2 changed files
with
74 additions
and
16 deletions
Show diff stats
invesalius/data/slice_.py
| ... | ... | @@ -341,6 +341,7 @@ class Slice(object): |
| 341 | 341 | self.cross = cross |
| 342 | 342 | |
| 343 | 343 | self.window_level = vtk.vtkImageMapToWindowLevelColors() |
| 344 | + self.window_level.SetInput(self.imagedata) | |
| 344 | 345 | #cast = vtk.vtkImageCast() |
| 345 | 346 | #cast.SetInput(cross.GetOutput()) |
| 346 | 347 | #cast.GetOutput().SetUpdateExtentToWholeExtent() |
| ... | ... | @@ -396,15 +397,19 @@ class Slice(object): |
| 396 | 397 | def UpdateWindowLevelBackground(self, pubsub_evt): |
| 397 | 398 | window, level = pubsub_evt.data |
| 398 | 399 | window_level = self.window_level |
| 399 | - window_level.SetInput(self.imagedata) | |
| 400 | - window_level.SetWindow(window) | |
| 401 | - window_level.SetLevel(level) | |
| 402 | - window_level.SetOutputFormatToLuminance() | |
| 403 | - window_level.Update() | |
| 404 | - | |
| 405 | - thresh_min, thresh_max = window_level.GetOutput().GetScalarRange() | |
| 406 | - self.lut_bg.SetTableRange(thresh_min, thresh_max) | |
| 407 | - self.img_colours_bg.SetInput(window_level.GetOutput()) | |
| 400 | + | |
| 401 | + if not((window == window_level.GetWindow()) and\ | |
| 402 | + (level == window_level.GetLevel())): | |
| 403 | + | |
| 404 | + window_level.SetWindow(window) | |
| 405 | + window_level.SetLevel(level) | |
| 406 | + window_level.SetOutputFormatToLuminance() | |
| 407 | + window_level.Update() | |
| 408 | + | |
| 409 | + thresh_min, thresh_max = window_level.GetOutput().GetScalarRange() | |
| 410 | + self.lut_bg.SetTableRange(thresh_min, thresh_max) | |
| 411 | + self.img_colours_bg.SetInput(window_level.GetOutput()) | |
| 412 | + | |
| 408 | 413 | |
| 409 | 414 | def CreateMask(self, imagedata=None, name=None): |
| 410 | 415 | ... | ... |
invesalius/data/viewer_slice.py
| ... | ... | @@ -33,6 +33,8 @@ import data.vtk_utils as vtku |
| 33 | 33 | import project |
| 34 | 34 | from slice_data import SliceData |
| 35 | 35 | |
| 36 | +ID_TO_TOOL_ITEM = {} | |
| 37 | + | |
| 36 | 38 | class Viewer(wx.Panel): |
| 37 | 39 | |
| 38 | 40 | def __init__(self, prnt, orientation='AXIAL'): |
| ... | ... | @@ -68,6 +70,7 @@ class Viewer(wx.Panel): |
| 68 | 70 | |
| 69 | 71 | self.__bind_events() |
| 70 | 72 | self.__bind_events_wx() |
| 73 | + self.__init_menus() | |
| 71 | 74 | |
| 72 | 75 | |
| 73 | 76 | def __init_gui(self): |
| ... | ... | @@ -85,13 +88,47 @@ class Viewer(wx.Panel): |
| 85 | 88 | background_sizer.Add(scroll, 0, wx.EXPAND|wx.GROW) |
| 86 | 89 | self.SetSizer(background_sizer) |
| 87 | 90 | background_sizer.Fit(self) |
| 88 | - | |
| 91 | + | |
| 92 | + | |
| 89 | 93 | self.Layout() |
| 90 | 94 | self.Update() |
| 91 | 95 | self.SetAutoLayout(1) |
| 92 | 96 | |
| 93 | 97 | self.interactor = interactor |
| 94 | - | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + def __init_menus(self): | |
| 102 | + | |
| 103 | + menu = self.menu = wx.Menu() | |
| 104 | + submenu_wl = wx.Menu() | |
| 105 | + | |
| 106 | + for name in sorted(const.WINDOW_LEVEL): | |
| 107 | + new_id = wx.NewId() | |
| 108 | + wl_item = wx.MenuItem(submenu_wl, new_id, name, kind=wx.ITEM_RADIO) | |
| 109 | + submenu_wl.AppendItem(wl_item) | |
| 110 | + ID_TO_TOOL_ITEM[new_id] = wl_item | |
| 111 | + | |
| 112 | + menu.AppendMenu(1, "Window Width & Level", submenu_wl) | |
| 113 | + self.Bind(wx.EVT_MENU, self.OnPopupWindowLevel) | |
| 114 | + self.Fit() | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + def OnPopupWindowLevel(self, evt): | |
| 119 | + item = ID_TO_TOOL_ITEM[evt.GetId()] | |
| 120 | + key = item.GetLabel() | |
| 121 | + window, level = const.WINDOW_LEVEL[key] | |
| 122 | + | |
| 123 | + ps.Publisher().sendMessage('Bright and contrast adjustment image', | |
| 124 | + (window, level)) | |
| 125 | + ps.Publisher().sendMessage('Update slice viewer') | |
| 126 | + evt.Skip() | |
| 127 | + | |
| 128 | + def OnContextMenu(self, evt): | |
| 129 | + self.PopupMenu(self.menu) | |
| 130 | + #evt.Skip() | |
| 131 | + | |
| 95 | 132 | def __config_interactor(self): |
| 96 | 133 | |
| 97 | 134 | ren = vtk.vtkRenderer() |
| ... | ... | @@ -101,6 +138,9 @@ class Viewer(wx.Panel): |
| 101 | 138 | |
| 102 | 139 | self.cam = ren.GetActiveCamera() |
| 103 | 140 | self.ren = ren |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 104 | 144 | |
| 105 | 145 | def append_mode(self, mode): |
| 106 | 146 | |
| ... | ... | @@ -225,9 +265,8 @@ class Viewer(wx.Panel): |
| 225 | 265 | |
| 226 | 266 | ps.Publisher().sendMessage('Update window and level text',\ |
| 227 | 267 | "WL: %d WW: %d"%(proj.level, proj.window)) |
| 228 | - self.interactor.Render() | |
| 229 | - #ps.Publisher().sendMessage("Update slice viewer") | |
| 230 | - | |
| 268 | + self.interactor.Render() | |
| 269 | + | |
| 231 | 270 | |
| 232 | 271 | def OnWindowLevelClick(self, evt, obj): |
| 233 | 272 | proj = project.Project() |
| ... | ... | @@ -652,9 +691,23 @@ class Viewer(wx.Panel): |
| 652 | 691 | print pubsub_evt.data |
| 653 | 692 | self._brush_cursor_op = pubsub_evt.data |
| 654 | 693 | |
| 694 | + | |
| 695 | + def popupID1(self, evt): | |
| 696 | + print "A" | |
| 697 | + print "...b..." | |
| 698 | + | |
| 699 | + evt.Skip() | |
| 700 | + | |
| 701 | + def popupID8(self, evt): | |
| 702 | + print "B" | |
| 703 | + evt.Skip() | |
| 704 | + | |
| 655 | 705 | def __bind_events_wx(self): |
| 656 | 706 | self.scroll.Bind(wx.EVT_SCROLL, self.OnScrollBar) |
| 657 | - self.interactor.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) | |
| 707 | + self.interactor.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) | |
| 708 | + self.interactor.Bind(wx.EVT_RIGHT_DOWN, self.OnContextMenu) | |
| 709 | + | |
| 710 | + | |
| 658 | 711 | |
| 659 | 712 | def LoadImagedata(self, pubsub_evt): |
| 660 | 713 | imagedata = pubsub_evt.data |
| ... | ... | @@ -903,7 +956,7 @@ class Viewer(wx.Panel): |
| 903 | 956 | |
| 904 | 957 | def UpdateRender(self, evt): |
| 905 | 958 | self.interactor.Render() |
| 906 | - | |
| 959 | + | |
| 907 | 960 | def set_scroll_position(self, position): |
| 908 | 961 | self.scroll.SetThumbPosition(position) |
| 909 | 962 | self.OnScrollBar() | ... | ... |