Commit 45c7f6a48166bbc99af4b9cc59b5164f0af56e2b

Authored by Thiago Franco de Moraes
1 parent 89ea441d
Exists in get_pixel

Updated scroll interactor style to new get position methods

invesalius/data/styles.py
... ... @@ -213,22 +213,14 @@ class CrossInteractorStyle(DefaultInteractorStyle):
213 213  
214 214 def ChangeCrossPosition(self, iren):
215 215 mouse_x, mouse_y = iren.GetEventPosition()
216   - ren = iren.GetRenderWindow().GetRenderers().GetFirstRenderer()
217   - self.picker.Pick(mouse_x, mouse_y, 0, ren)
218   -
219   - # Get in what slice data the click occurred
220   - # pick to get click position in the 3d world
221   - coord_cross = self.viewer.get_coordinate_cursor(self.picker)
222   - position = self.slice_actor.GetInput().FindPoint(coord_cross)
223   - # Forcing focal point to be setted in the center of the pixel.
224   - coord_cross = self.slice_actor.GetInput().GetPoint(position)
225   -
226   - coord = self.viewer.calcultate_scroll_position(position)
227   - Publisher.sendMessage('Update cross position', coord_cross)
  216 + wx, wy, wz = self.viewer.get_coordinate_cursor(mouse_x, mouse_y, self.picker)
  217 + px, py = self.viewer.get_slice_pixel_coord_by_world_pos(wx, wy, wz)
  218 + coord = self.viewer.calcultate_scroll_position(px, py)
  219 + Publisher.sendMessage('Update cross position', (wx, wy, wz))
228 220 self.ScrollSlice(coord)
229 221 Publisher.sendMessage('Set ball reference position based on bound',
230   - coord_cross)
231   - Publisher.sendMessage('Set camera in volume', coord_cross)
  222 + (wx, wy, wz))
  223 + Publisher.sendMessage('Set camera in volume', (wx, wy, wz))
232 224 Publisher.sendMessage('Render volume viewer')
233 225  
234 226 iren.Render()
... ... @@ -1115,7 +1107,7 @@ class WaterShedInteractorStyle(DefaultInteractorStyle):
1115 1107 render = iren.FindPokedRenderer(mouse_x, mouse_y)
1116 1108 slice_data = viewer.get_slice_data(render)
1117 1109  
1118   - coord = self.viewer.get_coord_inside_volume(mouse_x, mouse_y, picker=None)
  1110 + coord = self.viewer.get_coordinate_cursor(mouse_x, mouse_y, picker=None)
1119 1111 position = self.viewer.get_slice_pixel_coord_by_screen_pos(mouse_x, mouse_y, self.picker)
1120 1112  
1121 1113 slice_data.cursor.Show()
... ... @@ -1162,7 +1154,7 @@ class WaterShedInteractorStyle(DefaultInteractorStyle):
1162 1154 render = iren.FindPokedRenderer(mouse_x, mouse_y)
1163 1155 slice_data = viewer.get_slice_data(render)
1164 1156  
1165   - coord = self.viewer.get_coord_inside_volume(mouse_x, mouse_y, self.picker)
  1157 + coord = self.viewer.get_coordinate_cursor(mouse_x, mouse_y, self.picker)
1166 1158 slice_data.cursor.SetPosition(coord)
1167 1159  
1168 1160 if (self.left_pressed):
... ...
invesalius/data/viewer_slice.py
... ... @@ -975,11 +975,15 @@ class Viewer(wx.Panel):
975 975 my = round((z - zi)/self.slice_.spacing[2], 0)
976 976 return mx, my
977 977  
978   - def get_coordinate_cursor(self, picker=None):
  978 + def get_coordinate_cursor(self, mx, my, picker=None):
979 979 # Find position
980 980 if picker is None:
981 981 picker = self.pick
982 982  
  983 + slice_data = self.slice_data
  984 + renderer = slice_data.renderer
  985 +
  986 + picker.Pick(mx, my, 0, renderer)
983 987 x, y, z = picker.GetPickPosition()
984 988 bounds = self.slice_data.actor.GetBounds()
985 989 if bounds[0] == bounds[1]:
... ... @@ -1030,7 +1034,7 @@ class Viewer(wx.Panel):
1030 1034 def get_voxel_coord_by_screen_pos(self, mx, my, picker=None):
1031 1035 """
1032 1036 Given the (mx, my) screen position returns the voxel coordinate
1033   - of the voxel at (that mx, my) position.
  1037 + of the volume at (that mx, my) position.
1034 1038  
1035 1039 Parameters:
1036 1040 mx (int): x position.
... ... @@ -1044,12 +1048,7 @@ class Viewer(wx.Panel):
1044 1048 if picker is None:
1045 1049 picker = self.pick
1046 1050  
1047   - slice_data = self.slice_data
1048   - renderer = slice_data.renderer
1049   -
1050   - picker.Pick(mx, my, 0, renderer)
1051   -
1052   - wx, wy, wz = self.get_coordinate_cursor(picker)
  1051 + wx, wy, wz = self.get_coordinate_cursor(mx, my, picker)
1053 1052 x, y, z = self.get_voxel_coord_by_world_pos(wx, wy, wz)
1054 1053  
1055 1054 return (x, y, z)
... ... @@ -1057,7 +1056,7 @@ class Viewer(wx.Panel):
1057 1056 def get_voxel_coord_by_world_pos(self, wx, wy, wz):
1058 1057 """
1059 1058 Given the (x, my) screen position returns the voxel coordinate
1060   - of the voxel at (that mx, my) position.
  1059 + of the volume at (that mx, my) position.
1061 1060  
1062 1061 Parameters:
1063 1062 wx (float): x position.
... ... @@ -1091,12 +1090,7 @@ class Viewer(wx.Panel):
1091 1090 if picker is None:
1092 1091 picker = self.pick
1093 1092  
1094   - slice_data = self.slice_data
1095   - renderer = slice_data.renderer
1096   -
1097   - picker.Pick(mx, my, 0, renderer)
1098   -
1099   - wx, wy, wz = self.get_coordinate_cursor(picker)
  1093 + wx, wy, wz = self.get_coordinate_cursor(mx, my, picker)
1100 1094 return self.get_slice_pixel_coord_by_world_pos(wx, wy, wz)
1101 1095  
1102 1096 return px, py
... ... @@ -1127,8 +1121,6 @@ class Viewer(wx.Panel):
1127 1121 slice_data = self.slice_data
1128 1122 renderer = slice_data.renderer
1129 1123  
1130   - picker.Pick(mx, my, 0, renderer)
1131   -
1132 1124 coord = self.get_coordinate_cursor(picker)
1133 1125 position = slice_data.actor.GetInput().FindPoint(coord)
1134 1126  
... ...