Commit 948769479684ef1927f2de2b72c9cb4fcda932cf
1 parent
d30339af
Exists in
master
and in
68 other branches
ENH: The option to set image tiling is working
Showing
2 changed files
with
45 additions
and
3 deletions
Show diff stats
invesalius/data/viewer_slice.py
@@ -102,6 +102,17 @@ class Viewer(wx.Panel): | @@ -102,6 +102,17 @@ class Viewer(wx.Panel): | ||
102 | def SetPopupMenu(self, menu): | 102 | def SetPopupMenu(self, menu): |
103 | self.menu = menu | 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 | def __config_interactor(self): | 116 | def __config_interactor(self): |
106 | 117 | ||
107 | ren = vtk.vtkRenderer() | 118 | ren = vtk.vtkRenderer() |
@@ -659,6 +670,10 @@ class Viewer(wx.Panel): | @@ -659,6 +670,10 @@ class Viewer(wx.Panel): | ||
659 | ps.Publisher().subscribe(self.UpdateWindowLevelValue,\ | 670 | ps.Publisher().subscribe(self.UpdateWindowLevelValue,\ |
660 | 'Update window level value') | 671 | 'Update window level value') |
661 | 672 | ||
673 | + ### | ||
674 | + ps.Publisher().subscribe(self.__set_layout, | ||
675 | + 'Set slice viewer layout') | ||
676 | + | ||
662 | def ChangeBrushOperation(self, pubsub_evt): | 677 | def ChangeBrushOperation(self, pubsub_evt): |
663 | print pubsub_evt.data | 678 | print pubsub_evt.data |
664 | self._brush_cursor_op = pubsub_evt.data | 679 | self._brush_cursor_op = pubsub_evt.data |
@@ -673,18 +688,32 @@ class Viewer(wx.Panel): | @@ -673,18 +688,32 @@ class Viewer(wx.Panel): | ||
673 | self.SetInput(imagedata) | 688 | self.SetInput(imagedata) |
674 | 689 | ||
675 | def load_renderers(self, image): | 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 | proportion_x = 1.0 / self.layout[0] | 704 | proportion_x = 1.0 / self.layout[0] |
677 | proportion_y = 1.0 / self.layout[1] | 705 | proportion_y = 1.0 / self.layout[1] |
678 | # The (0,0) in VTK is in bottom left. So the creation from renderers | 706 | # The (0,0) in VTK is in bottom left. So the creation from renderers |
679 | # must be # in inverted order, from the top left to bottom right | 707 | # must be # in inverted order, from the top left to bottom right |
708 | + n = 0 | ||
680 | for j in xrange(self.layout[1]-1, -1, -1): | 709 | for j in xrange(self.layout[1]-1, -1, -1): |
681 | for i in xrange(self.layout[0]): | 710 | for i in xrange(self.layout[0]): |
682 | position = ((i*proportion_x, j * proportion_y, | 711 | position = ((i*proportion_x, j * proportion_y, |
683 | (i+1)*proportion_x, (j+1)*proportion_y)) | 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 | slice_data.renderer.SetViewport(position) | 714 | slice_data.renderer.SetViewport(position) |
686 | slice_data.SetCursor(self.__create_cursor()) | 715 | slice_data.SetCursor(self.__create_cursor()) |
687 | - self.slice_data_list.append(slice_data) | 716 | + n += 1 |
688 | 717 | ||
689 | def __create_cursor(self): | 718 | def __create_cursor(self): |
690 | cursor = ca.CursorCircle() | 719 | cursor = ca.CursorCircle() |
@@ -710,6 +739,7 @@ class Viewer(wx.Panel): | @@ -710,6 +739,7 @@ class Viewer(wx.Panel): | ||
710 | #actor = vtk.vtkImageActor() | 739 | #actor = vtk.vtkImageActor() |
711 | #actor.SetInput(slice_.GetOutput()) | 740 | #actor.SetInput(slice_.GetOutput()) |
712 | self.load_renderers(slice_.GetOutput()) | 741 | self.load_renderers(slice_.GetOutput()) |
742 | + self.__configure_renderers() | ||
713 | ren = self.slice_data_list[0].renderer | 743 | ren = self.slice_data_list[0].renderer |
714 | actor = self.slice_data_list[0].actor | 744 | actor = self.slice_data_list[0].actor |
715 | actor_bound = actor.GetBounds() | 745 | actor_bound = actor.GetBounds() |
@@ -916,6 +946,17 @@ class Viewer(wx.Panel): | @@ -916,6 +946,17 @@ class Viewer(wx.Panel): | ||
916 | def UpdateRender(self, evt): | 946 | def UpdateRender(self, evt): |
917 | self.interactor.Render() | 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 | def set_scroll_position(self, position): | 960 | def set_scroll_position(self, position): |
920 | self.scroll.SetThumbPosition(position) | 961 | self.scroll.SetThumbPosition(position) |
921 | self.OnScrollBar() | 962 | self.OnScrollBar() |
invesalius/gui/widgets/slice_menu.py
@@ -104,7 +104,8 @@ class SliceMenu(wx.Menu): | @@ -104,7 +104,8 @@ class SliceMenu(wx.Menu): | ||
104 | 104 | ||
105 | elif(key in const.IMAGE_TILING.keys()): | 105 | elif(key in const.IMAGE_TILING.keys()): |
106 | values = const.IMAGE_TILING[key] | 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 | evt.Skip() | 110 | evt.Skip() |
110 | 111 |