Commit 5cc84dd2df654ff86432b3e142c4ab52fdedfcbb

Authored by Thiago Franco de Moraes
1 parent 1e33187c
Exists in ff_mask

Split the the fill and remove in 2 interaction styles

invesalius/constants.py
@@ -501,6 +501,7 @@ SLICE_STATE_EDITOR = 3008 @@ -501,6 +501,7 @@ SLICE_STATE_EDITOR = 3008
501 SLICE_STATE_WATERSHED = 3009 501 SLICE_STATE_WATERSHED = 3009
502 SLICE_STATE_REORIENT = 3010 502 SLICE_STATE_REORIENT = 3010
503 SLICE_STATE_MASK_FFILL = 3011 503 SLICE_STATE_MASK_FFILL = 3011
  504 +SLICE_STATE_REMOVE_MASK_PARTS = 3012
504 505
505 VOLUME_STATE_SEED = 2001 506 VOLUME_STATE_SEED = 2001
506 # STATE_LINEAR_MEASURE = 3001 507 # STATE_LINEAR_MEASURE = 3001
@@ -519,6 +520,7 @@ SLICE_STYLES.append(STATE_DEFAULT) @@ -519,6 +520,7 @@ SLICE_STYLES.append(STATE_DEFAULT)
519 SLICE_STYLES.append(SLICE_STATE_EDITOR) 520 SLICE_STYLES.append(SLICE_STATE_EDITOR)
520 SLICE_STYLES.append(SLICE_STATE_WATERSHED) 521 SLICE_STYLES.append(SLICE_STATE_WATERSHED)
521 SLICE_STYLES.append(SLICE_STATE_MASK_FFILL) 522 SLICE_STYLES.append(SLICE_STATE_MASK_FFILL)
  523 +SLICE_STYLES.append(SLICE_STATE_REMOVE_MASK_PARTS)
522 524
523 VOLUME_STYLES = TOOL_STATES + [VOLUME_STATE_SEED, STATE_MEASURE_DISTANCE, 525 VOLUME_STYLES = TOOL_STATES + [VOLUME_STATE_SEED, STATE_MEASURE_DISTANCE,
524 STATE_MEASURE_ANGLE] 526 STATE_MEASURE_ANGLE]
@@ -528,6 +530,7 @@ VOLUME_STYLES.append(STATE_DEFAULT) @@ -528,6 +530,7 @@ VOLUME_STYLES.append(STATE_DEFAULT)
528 STYLE_LEVEL = {SLICE_STATE_EDITOR: 1, 530 STYLE_LEVEL = {SLICE_STATE_EDITOR: 1,
529 SLICE_STATE_WATERSHED: 1, 531 SLICE_STATE_WATERSHED: 1,
530 SLICE_STATE_MASK_FFILL: 2, 532 SLICE_STATE_MASK_FFILL: 2,
  533 + SLICE_STATE_REMOVE_MASK_PARTS: 2,
531 SLICE_STATE_CROSS: 2, 534 SLICE_STATE_CROSS: 2,
532 SLICE_STATE_SCROLL: 2, 535 SLICE_STATE_SCROLL: 2,
533 SLICE_STATE_REORIENT: 2, 536 SLICE_STATE_REORIENT: 2,
invesalius/data/styles.py
@@ -1774,6 +1774,10 @@ class FloodFillMaskInteractorStyle(DefaultInteractorStyle): @@ -1774,6 +1774,10 @@ class FloodFillMaskInteractorStyle(DefaultInteractorStyle):
1774 self.config = FFillConfig() 1774 self.config = FFillConfig()
1775 self.dlg_ffill = None 1775 self.dlg_ffill = None
1776 1776
  1777 + self.t0 = 0
  1778 + self.t1 = 1
  1779 + self.fill_value = 254
  1780 +
1777 self.AddObserver("LeftButtonPressEvent", self.OnFFClick) 1781 self.AddObserver("LeftButtonPressEvent", self.OnFFClick)
1778 1782
1779 def SetUp(self): 1783 def SetUp(self):
@@ -1831,16 +1835,7 @@ class FloodFillMaskInteractorStyle(DefaultInteractorStyle): @@ -1831,16 +1835,7 @@ class FloodFillMaskInteractorStyle(DefaultInteractorStyle):
1831 mask = self.viewer.slice_.current_mask.matrix[1:, 1:, 1:] 1835 mask = self.viewer.slice_.current_mask.matrix[1:, 1:, 1:]
1832 cp_mask = mask 1836 cp_mask = mask
1833 1837
1834 - if iren.GetControlKey():  
1835 - t0 = 254  
1836 - t1 = 255  
1837 - fill = 1  
1838 - else:  
1839 - t0 = 0  
1840 - t1 = 1  
1841 - fill = 254  
1842 -  
1843 - floodfill.floodfill_threshold(cp_mask, [[x, y, z]], t0, t1, fill, bstruct, mask) 1838 + floodfill.floodfill_threshold(cp_mask, [[x, y, z]], self.t0, self.t1, self.fill_value, bstruct, mask)
1844 1839
1845 self.viewer.slice_.buffer_slices['AXIAL'].discard_mask() 1840 self.viewer.slice_.buffer_slices['AXIAL'].discard_mask()
1846 self.viewer.slice_.buffer_slices['CORONAL'].discard_mask() 1841 self.viewer.slice_.buffer_slices['CORONAL'].discard_mask()
@@ -1891,6 +1886,14 @@ class FloodFillMaskInteractorStyle(DefaultInteractorStyle): @@ -1891,6 +1886,14 @@ class FloodFillMaskInteractorStyle(DefaultInteractorStyle):
1891 return sagital, coronal, axial 1886 return sagital, coronal, axial
1892 1887
1893 1888
  1889 +class RemoveMaskPartsInteractorStyle(FloodFillMaskInteractorStyle):
  1890 + def __init__(self, viewer):
  1891 + FloodFillMaskInteractorStyle.__init__(self, viewer)
  1892 + self.t0 = 254
  1893 + self.t1 = 255
  1894 + self.fill_value = 1
  1895 +
  1896 +
1894 def get_style(style): 1897 def get_style(style):
1895 STYLES = { 1898 STYLES = {
1896 const.STATE_DEFAULT: DefaultInteractorStyle, 1899 const.STATE_DEFAULT: DefaultInteractorStyle,
@@ -1907,6 +1910,7 @@ def get_style(style): @@ -1907,6 +1910,7 @@ def get_style(style):
1907 const.SLICE_STATE_WATERSHED: WaterShedInteractorStyle, 1910 const.SLICE_STATE_WATERSHED: WaterShedInteractorStyle,
1908 const.SLICE_STATE_REORIENT: ReorientImageInteractorStyle, 1911 const.SLICE_STATE_REORIENT: ReorientImageInteractorStyle,
1909 const.SLICE_STATE_MASK_FFILL: FloodFillMaskInteractorStyle, 1912 const.SLICE_STATE_MASK_FFILL: FloodFillMaskInteractorStyle,
  1913 + const.SLICE_STATE_REMOVE_MASK_PARTS: RemoveMaskPartsInteractorStyle,
1910 } 1914 }
1911 return STYLES[style] 1915 return STYLES[style]
1912 1916
invesalius/gui/frame.py
@@ -569,7 +569,7 @@ class Frame(wx.Frame): @@ -569,7 +569,7 @@ class Frame(wx.Frame):
569 Publisher.sendMessage('Enable style', const.SLICE_STATE_MASK_FFILL) 569 Publisher.sendMessage('Enable style', const.SLICE_STATE_MASK_FFILL)
570 570
571 def OnRemoveMaskParts(self): 571 def OnRemoveMaskParts(self):
572 - Publisher.sendMessage('Enable style', const.SLICE_STATE_MASK_FFILL) 572 + Publisher.sendMessage('Enable style', const.SLICE_STATE_REMOVE_MASK_PARTS)
573 573
574 # ------------------------------------------------------------------ 574 # ------------------------------------------------------------------
575 # ------------------------------------------------------------------ 575 # ------------------------------------------------------------------