Commit 9f6c35ce639df1ac057dfb0bb3fd8488a61bdcc4
1 parent
939ae52f
Exists in
master
and in
68 other branches
ENH: Using vtkCursor3D instead of vtkImageCursor3D to represent Cross reference in slices
Showing
1 changed file
with
90 additions
and
3 deletions
Show diff stats
invesalius/data/viewer_slice.py
@@ -42,7 +42,7 @@ class Viewer(wx.Panel): | @@ -42,7 +42,7 @@ class Viewer(wx.Panel): | ||
42 | self.SetBackgroundColour(colour) | 42 | self.SetBackgroundColour(colour) |
43 | 43 | ||
44 | # Interactor additional style | 44 | # Interactor additional style |
45 | - self.modes = ['DEFAULT'] | 45 | + self.modes = [] #['DEFAULT'] |
46 | self.mouse_pressed = 0 | 46 | self.mouse_pressed = 0 |
47 | 47 | ||
48 | # All renderers and image actors in this viewer | 48 | # All renderers and image actors in this viewer |
@@ -181,6 +181,7 @@ class Viewer(wx.Panel): | @@ -181,6 +181,7 @@ class Viewer(wx.Panel): | ||
181 | self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZING)) | 181 | self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZING)) |
182 | 182 | ||
183 | def __set_mode_zoom(self, pubsub_evt): | 183 | def __set_mode_zoom(self, pubsub_evt): |
184 | + print "Zoom" | ||
184 | self.append_mode('ZOOM') | 185 | self.append_mode('ZOOM') |
185 | self.mouse_pressed = 0 | 186 | self.mouse_pressed = 0 |
186 | ICON_IMAGE = wx.Image("../icons/tool_zoom.png",wx.BITMAP_TYPE_PNG) | 187 | ICON_IMAGE = wx.Image("../icons/tool_zoom.png",wx.BITMAP_TYPE_PNG) |
@@ -496,14 +497,15 @@ class Viewer(wx.Panel): | @@ -496,14 +497,15 @@ class Viewer(wx.Panel): | ||
496 | evt_msg = 'Add mask pixel' | 497 | evt_msg = 'Add mask pixel' |
497 | elif self._brush_cursor_op == const.BRUSH_THRESH: | 498 | elif self._brush_cursor_op == const.BRUSH_THRESH: |
498 | evt_msg = 'Edit mask pixel' | 499 | evt_msg = 'Edit mask pixel' |
500 | + | ||
501 | + self.__update_cross_position(*coord) | ||
499 | 502 | ||
500 | if self.mouse_pressed: | 503 | if self.mouse_pressed: |
501 | pixels = itertools.ifilter(self.test_operation_position, | 504 | pixels = itertools.ifilter(self.test_operation_position, |
502 | slice_data.cursor.GetPixels()) | 505 | slice_data.cursor.GetPixels()) |
503 | ps.Publisher().sendMessage(evt_msg, pixels) | 506 | ps.Publisher().sendMessage(evt_msg, pixels) |
504 | ps.Publisher().sendMessage('Update slice viewer') | 507 | ps.Publisher().sendMessage('Update slice viewer') |
505 | - else: | ||
506 | - self.interactor.Render() | 508 | + self.interactor.Render() |
507 | 509 | ||
508 | def OnCrossMove(self, obj, evt_vtk): | 510 | def OnCrossMove(self, obj, evt_vtk): |
509 | coord = self.get_coordinate() | 511 | coord = self.get_coordinate() |
@@ -738,6 +740,91 @@ class Viewer(wx.Panel): | @@ -738,6 +740,91 @@ class Viewer(wx.Panel): | ||
738 | # Insert cursor | 740 | # Insert cursor |
739 | self.append_mode('EDITOR') | 741 | self.append_mode('EDITOR') |
740 | 742 | ||
743 | + self.__build_cross_lines() | ||
744 | + | ||
745 | + def __build_cross_lines(self): | ||
746 | + actor = self.slice_data_list[0].actor | ||
747 | + renderer = self.slice_data_list[0].renderer | ||
748 | + xi, xf, yi, yf, zi, zf = actor.GetBounds() | ||
749 | + | ||
750 | + #vline = vtk.vtkLineSource() | ||
751 | + #vline.SetPoint1(xi, yi, zi) | ||
752 | + #vline.SetPoint2(xi, yf, zi) | ||
753 | + #self.vline = vline | ||
754 | + | ||
755 | + #hline = vtk.vtkLineSource() | ||
756 | + #hline.SetPoint1(xi, yi, zi) | ||
757 | + #hline.SetPoint2(xf, yi, zi) | ||
758 | + #self.hline = hline | ||
759 | + | ||
760 | + #cross = vtk.vtkAppendPolyData() | ||
761 | + #cross.AddInput(vline.GetOutput()) | ||
762 | + #cross.AddInput(hline.GetOutput()) | ||
763 | + cross = vtk.vtkCursor3D() | ||
764 | + cross.AllOff() | ||
765 | + cross.AxesOn() | ||
766 | + #cross.WrapOn() | ||
767 | + #cross.OutlineOff() | ||
768 | + #cross.ZShadowsOff() | ||
769 | + #cross.YShadowsOff() | ||
770 | + #cross.XShadowsOff() | ||
771 | + cross.SetModelBounds(self.imagedata.GetBounds()) | ||
772 | + self.cross = cross | ||
773 | + | ||
774 | + cross_mapper = vtk.vtkPolyDataMapper() | ||
775 | + cross_mapper.SetInput(cross.GetOutput()) | ||
776 | + | ||
777 | + property = vtk.vtkProperty() | ||
778 | + property.SetColor(1, 0, 0) | ||
779 | + | ||
780 | + cross_actor = vtk.vtkActor() | ||
781 | + cross_actor.SetMapper(cross_mapper) | ||
782 | + cross_actor.SetProperty(property) | ||
783 | + # Only the slices are pickable | ||
784 | + cross_actor.PickableOff() | ||
785 | + | ||
786 | + renderer.AddActor(cross_actor) | ||
787 | + | ||
788 | + def __update_cross_position(self, x, y, z): | ||
789 | + #xi, yi, zi = self.vline.GetPoint1() | ||
790 | + #xf, yf, zf = self.vline.GetPoint2() | ||
791 | + #self.vline.SetPoint1(x, yi, z) | ||
792 | + #self.vline.SetPoint2(x, yf, z) | ||
793 | + #self.vline.Update() | ||
794 | + | ||
795 | + #xi, yi, zi = self.hline.GetPoint1() | ||
796 | + #xf, yf, zf = self.hline.GetPoint2() | ||
797 | + #self.hline.SetPoint1(xi, y, z) | ||
798 | + #self.hline.SetPoint2(xf, y, z) | ||
799 | + #self.hline.Update() | ||
800 | + slice_data = self.slice_data_list[0] | ||
801 | + slice_number = slice_data.number | ||
802 | + actor_bound = slice_data.actor.GetBounds() | ||
803 | + | ||
804 | + yz = [actor_bound[1] + 1 + slice_number, y, z] | ||
805 | + xz = [x, actor_bound[3] - 1 - slice_number, z] | ||
806 | + xy = [x, y, actor_bound[5] + 1 + slice_number] | ||
807 | + | ||
808 | + proj = project.Project() | ||
809 | + orig_orien = proj.original_orientation | ||
810 | + | ||
811 | + if (orig_orien == const.SAGITAL): | ||
812 | + coordinates = {"SAGITAL": xy, "CORONAL": yz, "AXIAL": xz} | ||
813 | + elif(orig_orien == const.CORONAL): | ||
814 | + coordinates = {"SAGITAL": yz, "CORONAL": xy, "AXIAL": xz} | ||
815 | + else: | ||
816 | + coordinates = {"SAGITAL": yz, "CORONAL": xz, "AXIAL": xy} | ||
817 | + | ||
818 | + self.cross.SetFocalPoint(coordinates[self.orientation]) | ||
819 | + | ||
820 | |||
821 | + #print slice_number | ||
822 | + #print x, y, z | ||
823 | + #print "Focal", self.cross.GetFocalPoint() | ||
824 | + #print "bounds", self.cross.GetModelBounds() | ||
825 | + #print "actor bounds", slice_data.actor.GetBounds() | ||
826 | |||
827 | + | ||
741 | def __update_cursor_position(self, slice_data, position): | 828 | def __update_cursor_position(self, slice_data, position): |
742 | x, y, z = position | 829 | x, y, z = position |
743 | if (slice_data.cursor): | 830 | if (slice_data.cursor): |