Commit 244981372332711cc3b0e370b3247d73f7fdb549

Authored by Paulo Henrique Junqueira Amorim
1 parent b017bf00

ADD: Window and level other option

invesalius/constants.py
@@ -155,6 +155,7 @@ WINDOW_LEVEL = {"Abdomen":(350,50), @@ -155,6 +155,7 @@ WINDOW_LEVEL = {"Abdomen":(350,50),
155 "Lung - Soft":(1600,-600), 155 "Lung - Soft":(1600,-600),
156 "Lung - Hard":(1000,-600), 156 "Lung - Hard":(1000,-600),
157 "Mediastinum":(350,25), 157 "Mediastinum":(350,25),
  158 + "Other":(None, None), #Case the user change window and level
158 "Pelvis": (450,50), 159 "Pelvis": (450,50),
159 "Sinus":(4000, 400), 160 "Sinus":(4000, 400),
160 "Vasculature - Hard":(240,80), 161 "Vasculature - Hard":(240,80),
invesalius/control.py
@@ -92,6 +92,7 @@ class Controller(): @@ -92,6 +92,7 @@ class Controller():
92 proj.window = window = float(window) 92 proj.window = window = float(window)
93 proj.level = level = float(level) 93 proj.level = level = float(level)
94 const.WINDOW_LEVEL['Default'] = (window, level) 94 const.WINDOW_LEVEL['Default'] = (window, level)
  95 + const.WINDOW_LEVEL['Other'] = (window, level)
95 96
96 threshold_range = proj.imagedata.GetScalarRange() 97 threshold_range = proj.imagedata.GetScalarRange()
97 const.THRESHOLD_OUTVALUE = threshold_range[0] 98 const.THRESHOLD_OUTVALUE = threshold_range[0]
@@ -106,7 +107,7 @@ class Controller(): @@ -106,7 +107,7 @@ class Controller():
106 #Initial Window and Level 107 #Initial Window and Level
107 ps.Publisher().sendMessage('Bright and contrast adjustment image',\ 108 ps.Publisher().sendMessage('Bright and contrast adjustment image',\
108 (proj.window, proj.level)) 109 (proj.window, proj.level))
109 - 110 +
110 ps.Publisher().sendMessage('Update window level value',\ 111 ps.Publisher().sendMessage('Update window level value',\
111 (proj.window, proj.level)) 112 (proj.window, proj.level))
112 113
invesalius/gui/widgets/slice_menu.py
@@ -32,18 +32,28 @@ class SliceMenu(wx.Menu): @@ -32,18 +32,28 @@ class SliceMenu(wx.Menu):
32 32
33 #------------ Sub menu of the window and level ---------- 33 #------------ Sub menu of the window and level ----------
34 submenu_wl = wx.Menu() 34 submenu_wl = wx.Menu()
  35 +
  36 + #Window and level from DICOM
35 new_id = wx.NewId() 37 new_id = wx.NewId()
36 wl_item = wx.MenuItem(submenu_wl, new_id,\ 38 wl_item = wx.MenuItem(submenu_wl, new_id,\
37 'Default', kind=wx.ITEM_RADIO) 39 'Default', kind=wx.ITEM_RADIO)
38 submenu_wl.AppendItem(wl_item) 40 submenu_wl.AppendItem(wl_item)
39 - self.ID_TO_TOOL_ITEM[new_id] = 'Default' 41 + self.ID_TO_TOOL_ITEM[new_id] = wl_item
  42 +
  43 + #Case the user change window and level
  44 + new_id = self.other_wl_id = wx.NewId()
  45 + wl_item = wx.MenuItem(submenu_wl, new_id,\
  46 + 'Other', kind=wx.ITEM_RADIO)
  47 + submenu_wl.AppendItem(wl_item)
  48 + self.ID_TO_TOOL_ITEM[new_id] = wl_item
  49 +
40 for name in sorted(const.WINDOW_LEVEL): 50 for name in sorted(const.WINDOW_LEVEL):
41 - if not(name == 'Default'): 51 + if not(name == 'Default' or name == 'Other'):
42 new_id = wx.NewId() 52 new_id = wx.NewId()
43 wl_item = wx.MenuItem(submenu_wl, new_id,\ 53 wl_item = wx.MenuItem(submenu_wl, new_id,\
44 name, kind=wx.ITEM_RADIO) 54 name, kind=wx.ITEM_RADIO)
45 submenu_wl.AppendItem(wl_item) 55 submenu_wl.AppendItem(wl_item)
46 - self.ID_TO_TOOL_ITEM[new_id] = name 56 + self.ID_TO_TOOL_ITEM[new_id] = wl_item
47 57
48 #------------ Sub menu of the pseudo colors ------------- 58 #------------ Sub menu of the pseudo colors -------------
49 submenu_pseudo_colours = wx.Menu() 59 submenu_pseudo_colours = wx.Menu()
@@ -51,14 +61,15 @@ class SliceMenu(wx.Menu): @@ -51,14 +61,15 @@ class SliceMenu(wx.Menu):
51 color_item = wx.MenuItem(submenu_pseudo_colours, new_id,\ 61 color_item = wx.MenuItem(submenu_pseudo_colours, new_id,\
52 'Default ', kind=wx.ITEM_RADIO) 62 'Default ', kind=wx.ITEM_RADIO)
53 submenu_pseudo_colours.AppendItem(color_item) 63 submenu_pseudo_colours.AppendItem(color_item)
54 - self.ID_TO_TOOL_ITEM[new_id] = 'Default ' 64 + self.ID_TO_TOOL_ITEM[new_id] = color_item
  65 +
55 for name in sorted(const.SLICE_COLOR_TABLE): 66 for name in sorted(const.SLICE_COLOR_TABLE):
56 if not(name == 'Default '): 67 if not(name == 'Default '):
57 new_id = wx.NewId() 68 new_id = wx.NewId()
58 color_item = wx.MenuItem(submenu_wl, new_id,\ 69 color_item = wx.MenuItem(submenu_wl, new_id,\
59 name, kind=wx.ITEM_RADIO) 70 name, kind=wx.ITEM_RADIO)
60 submenu_pseudo_colours.AppendItem(color_item) 71 submenu_pseudo_colours.AppendItem(color_item)
61 - self.ID_TO_TOOL_ITEM[new_id] = name 72 + self.ID_TO_TOOL_ITEM[new_id] = color_item
62 73
63 #------------ Sub menu of the image tiling --------------- 74 #------------ Sub menu of the image tiling ---------------
64 submenu_image_tiling = wx.Menu() 75 submenu_image_tiling = wx.Menu()
@@ -67,7 +78,7 @@ class SliceMenu(wx.Menu): @@ -67,7 +78,7 @@ class SliceMenu(wx.Menu):
67 image_tiling_item = wx.MenuItem(submenu_image_tiling, new_id,\ 78 image_tiling_item = wx.MenuItem(submenu_image_tiling, new_id,\
68 name, kind=wx.ITEM_RADIO) 79 name, kind=wx.ITEM_RADIO)
69 submenu_image_tiling.AppendItem(image_tiling_item) 80 submenu_image_tiling.AppendItem(image_tiling_item)
70 - self.ID_TO_TOOL_ITEM[new_id] = name 81 + self.ID_TO_TOOL_ITEM[new_id] = image_tiling_item
71 82
72 # Add sub itens in the menu 83 # Add sub itens in the menu
73 self.AppendMenu(-1, "Window Width and Level", submenu_wl) 84 self.AppendMenu(-1, "Window Width and Level", submenu_wl)
@@ -82,10 +93,20 @@ class SliceMenu(wx.Menu): @@ -82,10 +93,20 @@ class SliceMenu(wx.Menu):
82 submenu_pseudo_colours.Bind(wx.EVT_MENU, self.OnPopup) 93 submenu_pseudo_colours.Bind(wx.EVT_MENU, self.OnPopup)
83 submenu_image_tiling.Bind(wx.EVT_MENU, self.OnPopup) 94 submenu_image_tiling.Bind(wx.EVT_MENU, self.OnPopup)
84 95
  96 + self.__bind_events()
  97 +
  98 + def __bind_events(self):
  99 + ps.Publisher().subscribe(self.CheckWindowLevelOther, 'Check window and level other')
  100 +
  101 + def CheckWindowLevelOther(self, pubsub_evt):
  102 + item = self.ID_TO_TOOL_ITEM[self.other_wl_id]
  103 + item.Check()
  104 +
85 def OnPopup(self, evt): 105 def OnPopup(self, evt):
86 106
87 id = evt.GetId() 107 id = evt.GetId()
88 - key = self.ID_TO_TOOL_ITEM[evt.GetId()] 108 + item = self.ID_TO_TOOL_ITEM[evt.GetId()]
  109 + key = item.GetLabel()
89 110
90 if(key in const.WINDOW_LEVEL.keys()): 111 if(key in const.WINDOW_LEVEL.keys()):
91 window, level = const.WINDOW_LEVEL[key] 112 window, level = const.WINDOW_LEVEL[key]