Commit 45c7f6a48166bbc99af4b9cc59b5164f0af56e2b
1 parent
89ea441d
Exists in
get_pixel
Updated scroll interactor style to new get position methods
Showing
2 changed files
with
17 additions
and
33 deletions
Show diff stats
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 | ... | ... |