From de653d326ee28fc452a65361292d6a161da7357f Mon Sep 17 00:00:00 2001 From: Thiago Franco de Moraes Date: Tue, 10 Mar 2015 10:28:59 -0300 Subject: [PATCH] Added Intesection and XOR --- invesalius/constants.py | 2 ++ invesalius/data/slice_.py | 10 +++++++++- invesalius/gui/dialogs.py | 10 +++++++--- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/invesalius/constants.py b/invesalius/constants.py index 924db39..4651b65 100644 --- a/invesalius/constants.py +++ b/invesalius/constants.py @@ -571,3 +571,5 @@ PROJECTION_MIP_SIZE=2 # ------------- Boolean operations ------------------ BOOLEAN_UNION = 1 BOOLEAN_DIFF = 2 +BOOLEAN_AND = 3 +BOOLEAN_XOR = 4 diff --git a/invesalius/data/slice_.py b/invesalius/data/slice_.py index 575cb8e..ead34b1 100644 --- a/invesalius/data/slice_.py +++ b/invesalius/data/slice_.py @@ -1222,7 +1222,9 @@ class Slice(object): def do_boolean_op(self, op, m1, m2): name_ops = {const.BOOLEAN_UNION: _(u"Union"), - const.BOOLEAN_DIFF: _(u"Diff")} + const.BOOLEAN_DIFF: _(u"Diff"), + const.BOOLEAN_AND: _(u"Intersection"), + const.BOOLEAN_XOR: _(u"XOR")} name = u"%s_%s_%s" % (name_ops[op], m1.name, m2.name) @@ -1250,6 +1252,12 @@ class Slice(object): elif op == const.BOOLEAN_DIFF: m[:] = ((m1 > 2) - (m2 > 2)) * 255 + elif op == const.BOOLEAN_AND: + m[:] = ((m1 > 2) & (m2 > 2)) * 255 + + elif op == const.BOOLEAN_XOR: + m[:] = numpy.logical_xor((m1 > 2), (m2 > 2)) * 255 + future_mask.was_edited = True self._add_mask_into_proj(future_mask) diff --git a/invesalius/gui/dialogs.py b/invesalius/gui/dialogs.py index 577924c..3d3cba4 100644 --- a/invesalius/gui/dialogs.py +++ b/invesalius/gui/dialogs.py @@ -1407,7 +1407,9 @@ class MaskBooleanDialog(wx.Dialog): self.mask2.SetSelection(0) op_choices = ((u"Union", const.BOOLEAN_UNION), - (u"Difference", const.BOOLEAN_DIFF)) + (u"Difference", const.BOOLEAN_DIFF), + (u"Intersection", const.BOOLEAN_AND), + (u"XOR", const.BOOLEAN_XOR)) self.op_boolean = wx.ComboBox(self, -1, op_choices[0][0], choices=[]) for n, i in op_choices: @@ -1443,6 +1445,8 @@ class MaskBooleanDialog(wx.Dialog): m1 = self.mask1.GetClientData(self.mask1.GetSelection()) m2 = self.mask2.GetClientData(self.mask2.GetSelection()) - print op, m1.name, m2.name - Publisher.sendMessage('Do boolean operation', (op, m1, m2)) + Publisher.sendMessage('Reload actual slice') + + self.Close() + self.Destroy() -- libgit2 0.21.2