Commit 937b7ca31abcd24bb6d29bce5cc93d82ca511314

Authored by Thiago Franco de Moraes
1 parent e83c555b

Added Intesection and XOR

invesalius/constants.py
@@ -571,3 +571,5 @@ PROJECTION_MIP_SIZE=2 @@ -571,3 +571,5 @@ PROJECTION_MIP_SIZE=2
571 # ------------- Boolean operations ------------------ 571 # ------------- Boolean operations ------------------
572 BOOLEAN_UNION = 1 572 BOOLEAN_UNION = 1
573 BOOLEAN_DIFF = 2 573 BOOLEAN_DIFF = 2
  574 +BOOLEAN_AND = 3
  575 +BOOLEAN_XOR = 4
invesalius/data/slice_.py
@@ -1222,7 +1222,9 @@ class Slice(object): @@ -1222,7 +1222,9 @@ class Slice(object):
1222 1222
1223 def do_boolean_op(self, op, m1, m2): 1223 def do_boolean_op(self, op, m1, m2):
1224 name_ops = {const.BOOLEAN_UNION: _(u"Union"), 1224 name_ops = {const.BOOLEAN_UNION: _(u"Union"),
1225 - const.BOOLEAN_DIFF: _(u"Diff")} 1225 + const.BOOLEAN_DIFF: _(u"Diff"),
  1226 + const.BOOLEAN_AND: _(u"Intersection"),
  1227 + const.BOOLEAN_XOR: _(u"XOR")}
1226 1228
1227 1229
1228 name = u"%s_%s_%s" % (name_ops[op], m1.name, m2.name) 1230 name = u"%s_%s_%s" % (name_ops[op], m1.name, m2.name)
@@ -1250,6 +1252,12 @@ class Slice(object): @@ -1250,6 +1252,12 @@ class Slice(object):
1250 elif op == const.BOOLEAN_DIFF: 1252 elif op == const.BOOLEAN_DIFF:
1251 m[:] = ((m1 > 2) - (m2 > 2)) * 255 1253 m[:] = ((m1 > 2) - (m2 > 2)) * 255
1252 1254
  1255 + elif op == const.BOOLEAN_AND:
  1256 + m[:] = ((m1 > 2) & (m2 > 2)) * 255
  1257 +
  1258 + elif op == const.BOOLEAN_XOR:
  1259 + m[:] = numpy.logical_xor((m1 > 2), (m2 > 2)) * 255
  1260 +
1253 future_mask.was_edited = True 1261 future_mask.was_edited = True
1254 self._add_mask_into_proj(future_mask) 1262 self._add_mask_into_proj(future_mask)
1255 1263
invesalius/gui/dialogs.py
@@ -1492,7 +1492,9 @@ class MaskBooleanDialog(wx.Dialog): @@ -1492,7 +1492,9 @@ class MaskBooleanDialog(wx.Dialog):
1492 self.mask2.SetSelection(0) 1492 self.mask2.SetSelection(0)
1493 1493
1494 op_choices = ((u"Union", const.BOOLEAN_UNION), 1494 op_choices = ((u"Union", const.BOOLEAN_UNION),
1495 - (u"Difference", const.BOOLEAN_DIFF)) 1495 + (u"Difference", const.BOOLEAN_DIFF),
  1496 + (u"Intersection", const.BOOLEAN_AND),
  1497 + (u"XOR", const.BOOLEAN_XOR))
1496 self.op_boolean = wx.ComboBox(self, -1, op_choices[0][0], choices=[]) 1498 self.op_boolean = wx.ComboBox(self, -1, op_choices[0][0], choices=[])
1497 1499
1498 for n, i in op_choices: 1500 for n, i in op_choices:
@@ -1528,6 +1530,8 @@ class MaskBooleanDialog(wx.Dialog): @@ -1528,6 +1530,8 @@ class MaskBooleanDialog(wx.Dialog):
1528 m1 = self.mask1.GetClientData(self.mask1.GetSelection()) 1530 m1 = self.mask1.GetClientData(self.mask1.GetSelection())
1529 m2 = self.mask2.GetClientData(self.mask2.GetSelection()) 1531 m2 = self.mask2.GetClientData(self.mask2.GetSelection())
1530 1532
1531 - print op, m1.name, m2.name  
1532 -  
1533 Publisher.sendMessage('Do boolean operation', (op, m1, m2)) 1533 Publisher.sendMessage('Do boolean operation', (op, m1, m2))
  1534 + Publisher.sendMessage('Reload actual slice')
  1535 +
  1536 + self.Close()
  1537 + self.Destroy()