Commit d99aa7ccebb1005f8eefc846c90351f705a3b6ff

Authored by tatiana
1 parent 9674812b

ADD: Duplicate masks on data notebook

invesalius/data/slice_.py
@@ -93,7 +93,9 @@ class Slice(object): @@ -93,7 +93,9 @@ class Slice(object):
93 93
94 ps.Publisher().subscribe(self.OnEnableStyle, 'Enable style') 94 ps.Publisher().subscribe(self.OnEnableStyle, 'Enable style')
95 ps.Publisher().subscribe(self.OnDisableStyle, 'Disable style') 95 ps.Publisher().subscribe(self.OnDisableStyle, 'Disable style')
  96 +
96 ps.Publisher().subscribe(self.OnRemoveMasks, 'Remove masks') 97 ps.Publisher().subscribe(self.OnRemoveMasks, 'Remove masks')
  98 + ps.Publisher().subscribe(self.OnDuplicateMasks, 'Duplicate masks')
97 99
98 100
99 def OnRemoveMasks(self, pubsub_evt): 101 def OnRemoveMasks(self, pubsub_evt):
@@ -110,6 +112,25 @@ class Slice(object): @@ -110,6 +112,25 @@ class Slice(object):
110 self.blend_filter.Update() 112 self.blend_filter.Update()
111 ps.Publisher().sendMessage('Update slice viewer') 113 ps.Publisher().sendMessage('Update slice viewer')
112 114
  115 + def OnDuplicateMasks(self, pubsub_evt):
  116 + selected_items = pubsub_evt.data
  117 + proj = Project()
  118 + mask_dict = proj.mask_dict
  119 + for index in selected_items:
  120 + original_mask = mask_dict[index]
  121 + # compute copy name
  122 + name = original_mask.name
  123 + names_list = [mask_dict[i].name for i in mask_dict.keys()]
  124 + new_name = utils.next_copy_name(name, names_list)
  125 + # create new mask
  126 + self.CreateMask(imagedata = original_mask.imagedata,
  127 + name = new_name,
  128 + colour = original_mask.colour,
  129 + opacity = original_mask.opacity,
  130 + threshold_range = original_mask.threshold_range,
  131 + edition_threshold_range = original_mask.edition_threshold_range,
  132 + edited_points = original_mask.edited_points)
  133 +
113 134
114 def OnEnableStyle(self, pubsub_evt): 135 def OnEnableStyle(self, pubsub_evt):
115 state = pubsub_evt.data 136 state = pubsub_evt.data
@@ -538,18 +559,28 @@ class Slice(object): @@ -538,18 +559,28 @@ class Slice(object):
538 559
539 widget.SetInput(flip.GetOutput()) 560 widget.SetInput(flip.GetOutput())
540 561
541 -  
542 - def CreateMask(self, imagedata=None, name=None): 562 +
  563 + def CreateMask(self, imagedata=None, name=None, colour=None,
  564 + opacity=None, threshold_range=None,
  565 + edition_threshold_range = None,
  566 + edited_points=None):
543 567
544 future_mask = Mask() 568 future_mask = Mask()
  569 + if colour:
  570 + future_mask.colour = colour
  571 + if opacity:
  572 + future_mask.opacity = opacity
  573 + if threshold_range:
  574 + future_mask.threshold_range = threshold_range
  575 + if edition_threshold_range:
  576 + future_mask.edition_threshold_range = edition_threshold_range
  577 + if edited_points:
  578 + future_mask.edited_points = edited_points
545 579
546 # this is not the first mask, so we will import data from old imagedata 580 # this is not the first mask, so we will import data from old imagedata
547 if imagedata is None: 581 if imagedata is None:
548 -  
549 old_mask = self.current_mask 582 old_mask = self.current_mask
550 -  
551 imagedata = old_mask.imagedata 583 imagedata = old_mask.imagedata
552 -  
553 future_mask.threshold_range = old_mask.threshold_range 584 future_mask.threshold_range = old_mask.threshold_range
554 585
555 # if not defined in the method call, this will have been computed on 586 # if not defined in the method call, this will have been computed on
invesalius/gui/data_notebook.py
@@ -70,12 +70,12 @@ class MaskPage(wx.Panel): @@ -70,12 +70,12 @@ class MaskPage(wx.Panel):
70 """ 70 """
71 def __init__(self, parent): 71 def __init__(self, parent):
72 wx.Panel.__init__(self, parent, pos=wx.Point(0, 50), 72 wx.Panel.__init__(self, parent, pos=wx.Point(0, 50),
73 - size=wx.Size(256, 120)) 73 + size=wx.Size(256, 140))
74 self.__init_gui() 74 self.__init_gui()
75 75
76 def __init_gui(self): 76 def __init_gui(self):
77 # listctrl were existing masks will be listed 77 # listctrl were existing masks will be listed
78 - self.listctrl = MasksListCtrlPanel(self, size=wx.Size(256, 80)) 78 + self.listctrl = MasksListCtrlPanel(self, size=wx.Size(256, 100))
79 # button control with tools (eg. remove, add new, etc) 79 # button control with tools (eg. remove, add new, etc)
80 self.buttonctrl = ButtonControlPanel(self) 80 self.buttonctrl = ButtonControlPanel(self)
81 81
@@ -93,7 +93,7 @@ class ButtonControlPanel(wx.Panel): @@ -93,7 +93,7 @@ class ButtonControlPanel(wx.Panel):
93 """ 93 """
94 def __init__(self, parent): 94 def __init__(self, parent):
95 wx.Panel.__init__(self, parent, pos=wx.Point(0, 50), 95 wx.Panel.__init__(self, parent, pos=wx.Point(0, 50),
96 - size=wx.Size(256, 20)) 96 + size=wx.Size(256, 22))
97 self.parent = parent 97 self.parent = parent
98 self.__init_gui() 98 self.__init_gui()
99 99
@@ -111,13 +111,16 @@ class ButtonControlPanel(wx.Panel): @@ -111,13 +111,16 @@ class ButtonControlPanel(wx.Panel):
111 button_style = pbtn.PB_STYLE_SQUARE | pbtn.PB_STYLE_DEFAULT 111 button_style = pbtn.PB_STYLE_SQUARE | pbtn.PB_STYLE_DEFAULT
112 button_new = pbtn.PlateButton(self, BTN_NEW, "", 112 button_new = pbtn.PlateButton(self, BTN_NEW, "",
113 BMP_NEW, 113 BMP_NEW,
114 - style=button_style) 114 + style=button_style,
  115 + size = wx.Size(18, 18))
115 button_remove = pbtn.PlateButton(self, BTN_REMOVE, "", 116 button_remove = pbtn.PlateButton(self, BTN_REMOVE, "",
116 BMP_REMOVE, 117 BMP_REMOVE,
117 - style=button_style) 118 + style=button_style,
  119 + size = wx.Size(18, 18))
118 button_duplicate = pbtn.PlateButton(self, BTN_DUPLICATE, "", 120 button_duplicate = pbtn.PlateButton(self, BTN_DUPLICATE, "",
119 BMP_DUPLICATE, 121 BMP_DUPLICATE,
120 - style=button_style) 122 + style=button_style,
  123 + size = wx.Size(18, 18))
121 124
122 # Add all controls to gui 125 # Add all controls to gui
123 sizer = wx.BoxSizer(wx.HORIZONTAL) 126 sizer = wx.BoxSizer(wx.HORIZONTAL)
invesalius/gui/default_tasks.py
@@ -111,7 +111,7 @@ class LowerTaskPanel(wx.Panel): @@ -111,7 +111,7 @@ class LowerTaskPanel(wx.Panel):
111 def __init__(self, parent): 111 def __init__(self, parent):
112 wx.Panel.__init__(self, parent, pos=wx.Point(5, 5), 112 wx.Panel.__init__(self, parent, pos=wx.Point(5, 5),
113 # size=wx.Size(280, 700)) 113 # size=wx.Size(280, 700))
114 - size=wx.Size(280, 400)) 114 + size=wx.Size(280, 420))
115 115
116 fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition, 116 fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition,
117 self.GetSize(),fpb.FPB_DEFAULT_STYLE, 117 self.GetSize(),fpb.FPB_DEFAULT_STYLE,