Commit 948769479684ef1927f2de2b72c9cb4fcda932cf

Authored by tfmoraes
1 parent d30339af

ENH: The option to set image tiling is working

invesalius/data/viewer_slice.py
... ... @@ -102,6 +102,17 @@ class Viewer(wx.Panel):
102 102 def SetPopupMenu(self, menu):
103 103 self.menu = menu
104 104  
  105 + def SetLayout(self, layout):
  106 + self.layout = layout
  107 + slice_ = sl.Slice()
  108 + self.load_renderers(slice_.GetOutput())
  109 + self.__configure_renderers()
  110 + self.__configure_scroll()
  111 +
  112 + def __set_layout(self, pubsub_evt):
  113 + layout = pubsub_evt.data
  114 + self.SetLayout(layout)
  115 +
105 116 def __config_interactor(self):
106 117  
107 118 ren = vtk.vtkRenderer()
... ... @@ -659,6 +670,10 @@ class Viewer(wx.Panel):
659 670 ps.Publisher().subscribe(self.UpdateWindowLevelValue,\
660 671 'Update window level value')
661 672  
  673 + ###
  674 + ps.Publisher().subscribe(self.__set_layout,
  675 + 'Set slice viewer layout')
  676 +
662 677 def ChangeBrushOperation(self, pubsub_evt):
663 678 print pubsub_evt.data
664 679 self._brush_cursor_op = pubsub_evt.data
... ... @@ -673,18 +688,32 @@ class Viewer(wx.Panel):
673 688 self.SetInput(imagedata)
674 689  
675 690 def load_renderers(self, image):
  691 + number_renderers = self.layout[0] * self.layout[1]
  692 + diff = number_renderers - len(self.slice_data_list)
  693 + if diff > 0:
  694 + for i in xrange(diff):
  695 + slice_data = self.create_slice_window(image)
  696 + self.slice_data_list.append(slice_data)
  697 + elif diff < 0:
  698 + to_remove = self.slice_data_list[number_renderers::]
  699 + for slice_data in to_remove:
  700 + self.interactor.GetRenderWindow().RemoveRenderer(slice_data.renderer)
  701 + self.slice_data_list = self.slice_data_list[:number_renderers]
  702 +
  703 + def __configure_renderers(self):
676 704 proportion_x = 1.0 / self.layout[0]
677 705 proportion_y = 1.0 / self.layout[1]
678 706 # The (0,0) in VTK is in bottom left. So the creation from renderers
679 707 # must be # in inverted order, from the top left to bottom right
  708 + n = 0
680 709 for j in xrange(self.layout[1]-1, -1, -1):
681 710 for i in xrange(self.layout[0]):
682 711 position = ((i*proportion_x, j * proportion_y,
683 712 (i+1)*proportion_x, (j+1)*proportion_y))
684   - slice_data = self.create_slice_window(image)
  713 + slice_data = self.slice_data_list[n]
685 714 slice_data.renderer.SetViewport(position)
686 715 slice_data.SetCursor(self.__create_cursor())
687   - self.slice_data_list.append(slice_data)
  716 + n += 1
688 717  
689 718 def __create_cursor(self):
690 719 cursor = ca.CursorCircle()
... ... @@ -710,6 +739,7 @@ class Viewer(wx.Panel):
710 739 #actor = vtk.vtkImageActor()
711 740 #actor.SetInput(slice_.GetOutput())
712 741 self.load_renderers(slice_.GetOutput())
  742 + self.__configure_renderers()
713 743 ren = self.slice_data_list[0].renderer
714 744 actor = self.slice_data_list[0].actor
715 745 actor_bound = actor.GetBounds()
... ... @@ -916,6 +946,17 @@ class Viewer(wx.Panel):
916 946 def UpdateRender(self, evt):
917 947 self.interactor.Render()
918 948  
  949 + def __configure_scroll(self):
  950 + actor = self.slice_data_list[0].actor
  951 + number_of_slices = self.layout[0] * self.layout[1]
  952 + max_slice_number = actor.GetSliceNumberMax() / \
  953 + number_of_slices
  954 + if actor.GetSliceNumberMax() % number_of_slices:
  955 + max_slice_number += 1
  956 + self.scroll.SetScrollbar(wx.SB_VERTICAL, 1, max_slice_number,
  957 + max_slice_number)
  958 + self.set_scroll_position(0)
  959 +
919 960 def set_scroll_position(self, position):
920 961 self.scroll.SetThumbPosition(position)
921 962 self.OnScrollBar()
... ...
invesalius/gui/widgets/slice_menu.py
... ... @@ -104,7 +104,8 @@ class SliceMenu(wx.Menu):
104 104  
105 105 elif(key in const.IMAGE_TILING.keys()):
106 106 values = const.IMAGE_TILING[key]
107   - print "Changed Window to ", values
  107 + ps.Publisher().sendMessage('Set slice viewer layout', values)
  108 + ps.Publisher().sendMessage('Update slice viewer')
108 109  
109 110 evt.Skip()
110 111  
... ...