diff --git a/invesalius/constants.py b/invesalius/constants.py index 4651b65..a69f822 100644 --- a/invesalius/constants.py +++ b/invesalius/constants.py @@ -476,6 +476,7 @@ ID_SWAP_XZ = wx.NewId() ID_SWAP_YZ = wx.NewId() ID_BOOLEAN_MASK = wx.NewId() +ID_CLEAN_MASK = wx.NewId() #--------------------------------------------------------- STATE_DEFAULT = 1000 diff --git a/invesalius/data/mask.py b/invesalius/data/mask.py index d0245b9..0ddbf1a 100644 --- a/invesalius/data/mask.py +++ b/invesalius/data/mask.py @@ -285,6 +285,12 @@ class Mask(): shape = shape[0] + 1, shape[1] + 1, shape[2] + 1 self.matrix = numpy.memmap(self.temp_file, mode='w+', dtype='uint8', shape=shape) + def clean(self): + self.matrix[1:, 1:, 1:] = 0 + self.matrix[0, :, :] = 1 + self.matrix[:, 0, :] = 1 + self.matrix[:, :, 0] = 1 + def copy(self, copy_name): """ creates and return a copy from the mask instance. diff --git a/invesalius/data/slice_.py b/invesalius/data/slice_.py index 9f73e5d..6c5f04a 100644 --- a/invesalius/data/slice_.py +++ b/invesalius/data/slice_.py @@ -142,6 +142,7 @@ class Slice(object): Publisher.subscribe(self.__set_mask_name, 'Change mask name') Publisher.subscribe(self.__show_mask, 'Show mask') Publisher.subscribe(self.__hide_current_mask, 'Hide current mask') + Publisher.subscribe(self.__clean_current_mask, 'Clean current mask') Publisher.subscribe(self.__set_current_mask_threshold_limits, 'Update threshold limits') @@ -211,6 +212,7 @@ class Slice(object): buffer_.discard_vtk_mask() buffer_.discard_mask() + Publisher.sendMessage('Show mask', (item, 0)) Publisher.sendMessage('Reload actual slice') def OnDuplicateMasks(self, pubsub_evt): @@ -385,6 +387,14 @@ class Slice(object): value = False Publisher.sendMessage('Show mask', (index, value)) + def __clean_current_mask(self, pubsub_evt): + if self.current_mask: + self.current_mask.clean() + for buffer_ in self.buffer_slices.values(): + buffer_.discard_vtk_mask() + buffer_.discard_mask() + self.current_mask.clear_history() + def create_temp_mask(self): temp_file = tempfile.mktemp() shape = self.matrix.shape @@ -1012,6 +1022,7 @@ class Slice(object): if show: self.current_mask = mask + Publisher.sendMessage('Show mask', (mask.index, 1)) Publisher.sendMessage('Change mask selected', mask.index) Publisher.sendMessage('Update slice viewer') diff --git a/invesalius/gui/frame.py b/invesalius/gui/frame.py index 550b327..1e323e6 100644 --- a/invesalius/gui/frame.py +++ b/invesalius/gui/frame.py @@ -401,6 +401,8 @@ class Frame(wx.Frame): elif id == const.ID_BOOLEAN_MASK: self.OnMaskBoolean() + elif id == const.ID_CLEAN_MASK: + self.OnCleanMask() def OnSize(self, evt): """ @@ -503,11 +505,13 @@ class Frame(wx.Frame): print "Redo" Publisher.sendMessage('Redo edition') - def OnMaskBoolean(self): print "Mask boolean" Publisher.sendMessage('Show boolean dialog') - + + def OnCleanMask(self): + Publisher.sendMessage('Clean current mask') + Publisher.sendMessage('Reload actual slice') # ------------------------------------------------------------------ # ------------------------------------------------------------------ @@ -548,6 +552,7 @@ class MenuBar(wx.MenuBar): sub(self.OnAddMask, "Add mask") sub(self.OnRemoveMasks, "Remove masks") + sub(self.OnShowMask, "Show mask") self.num_masks = 0 @@ -629,6 +634,10 @@ class MenuBar(wx.MenuBar): mask_menu = wx.Menu() self.bool_op_menu = mask_menu.Append(const.ID_BOOLEAN_MASK, _(u"Boolean operations")) self.bool_op_menu.Enable(False) + + self.clean_mask_menu = mask_menu.Append(const.ID_CLEAN_MASK, _(u"Clean Mask\tCtrl+Shift+A")) + self.clean_mask_menu.Enable(False) + file_edit.AppendMenu(-1, _(u"Mask"), mask_menu) @@ -725,19 +734,17 @@ class MenuBar(wx.MenuBar): def OnAddMask(self, pubsub_evt): self.num_masks += 1 - - if self.num_masks >= 2: - self.bool_op_menu.Enable(True) - else: - self.bool_op_menu.Enable(False) + self.bool_op_menu.Enable(self.num_masks >= 2) def OnRemoveMasks(self, pubsub_evt): self.num_masks -= len(pubsub_evt.data) + self.bool_op_menu.Enable(self.num_masks >= 2) + + def OnShowMask(self, pubsub_evt): + index, value = pubsub_evt.data + self.clean_mask_menu.Enable(value) + - if self.num_masks >= 2: - self.bool_op_menu.Enable(True) - else: - self.bool_op_menu.Enable(False) # ------------------------------------------------------------------ # ------------------------------------------------------------------ # ------------------------------------------------------------------ -- libgit2 0.21.2