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 | 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 | ... | ... |