Commit 244981372332711cc3b0e370b3247d73f7fdb549
1 parent
b017bf00
Exists in
master
and in
68 other branches
ADD: Window and level other option
Showing
3 changed files
with
31 additions
and
8 deletions
Show diff stats
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] |