Commit 985022bdb98e9eb7b095998c0a37ba70a8308095

Authored by Paulo Henrique Junqueira Amorim
1 parent 522f098d

ADD: Tool to change slices with left button

Showing 1 changed file with 118 additions and 81 deletions   Show diff stats
invesalius/data/viewer_slice.py
@@ -47,7 +47,7 @@ class Viewer(wx.Panel): @@ -47,7 +47,7 @@ class Viewer(wx.Panel):
47 self.slice_data_list = [] 47 self.slice_data_list = []
48 # The layout from slice_data, the first is number of cols, the second 48 # The layout from slice_data, the first is number of cols, the second
49 # is the number of rows 49 # is the number of rows
50 - self.layout = (2, 2) 50 + self.layout = (1, 1)
51 51
52 self.__init_gui() 52 self.__init_gui()
53 53
@@ -138,7 +138,12 @@ class Viewer(wx.Panel): @@ -138,7 +138,12 @@ class Viewer(wx.Panel):
138 }, 138 },
139 'ZOOMSELECT':{ 139 'ZOOMSELECT':{
140 "RightButtonReleaseEvent":self.OnUnZoom 140 "RightButtonReleaseEvent":self.OnUnZoom
141 - } 141 + },
  142 + 'CHANGESLICE':{
  143 + "MouseMoveEvent": self.OnChangeSliceMove,
  144 + "LeftButtonPressEvent": self.OnChangeSliceClick,
  145 + "LeftButtonReleaseEvent": self.OnReleaseModes
  146 + }
142 } 147 }
143 148
144 # Bind method according to current mode 149 # Bind method according to current mode
@@ -156,8 +161,108 @@ class Viewer(wx.Panel): @@ -156,8 +161,108 @@ class Viewer(wx.Panel):
156 action[mode][event]) 161 action[mode][event])
157 self.style = style 162 self.style = style
158 self.interactor.SetInteractorStyle(style) 163 self.interactor.SetInteractorStyle(style)
  164 +
  165 + def EditorMode(self, pubsub_evt):
  166 + self.append_mode('EDITOR')
  167 + self.mouse_pressed = 0
  168 + self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_BLANK))
  169 +
  170 + def SpinMode(self, pubsub_evt):
  171 + self.append_mode('SPIN')
  172 + self.mouse_pressed = 0
  173 + self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZING))
  174 +
  175 + def ZoomMode(self, pubsub_evt):
  176 + self.append_mode('ZOOM')
  177 + self.mouse_pressed = 0
  178 + ICON_IMAGE = wx.Image("../icons/tool_zoom.png",wx.BITMAP_TYPE_PNG)
  179 + self.interactor.SetCursor(wx.CursorFromImage(ICON_IMAGE))
  180 +
  181 + def PanMode(self, pubsub_evt):
  182 + self.append_mode('PAN')
  183 + self.mouse_pressed = 0
  184 + self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZING))
  185 +
  186 + def ZoomSelectMode(self, pubsub_evt):
  187 + self.append_mode('ZOOMSELECT')
  188 + ICON_IMAGE = wx.Image("../icons/tool_zoom.png",wx.BITMAP_TYPE_PNG)
  189 + self.interactor.SetCursor(wx.CursorFromImage(ICON_IMAGE))
  190 +
  191 + def ChangeSliceMode(self, pubsub_evt):
  192 + self.append_mode('CHANGESLICE')
  193 + self.mouse_pressed = 0
  194 + self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZENS))
  195 +
  196 + def OnChangeSliceMove(self, evt, obj):
  197 +
  198 + min = 0
  199 + max = self.actor.GetSliceNumberMax()
  200 +
  201 + if (self.mouse_pressed):
  202 + position = self.interactor.GetLastEventPosition()
  203 + scroll_position = self.scroll.GetThumbPosition()
  204 +
  205 + if (position[1] > self.last_position) and\
  206 + (self.acum_achange_slice > min):
  207 + self.acum_achange_slice -= 1
  208 + elif(position[1] < self.last_position) and\
  209 + (self.acum_achange_slice < max):
  210 + self.acum_achange_slice += 1
  211 + self.last_position = position[1]
  212 +
  213 + self.scroll.SetThumbPosition(self.acum_achange_slice)
  214 + self.OnScrollBar()
  215 +
  216 +
  217 + def OnChangeSliceClick(self, evt, obj):
  218 + self.mouse_pressed = 1
  219 + position = list(self.interactor.GetLastEventPosition())
  220 + self.acum_achange_slice = self.scroll.GetThumbPosition()
  221 + self.last_position = position[1]
  222 +
  223 + def OnPanMove(self, evt, obj):
  224 + if (self.mouse_pressed):
  225 + evt.Pan()
  226 + evt.OnRightButtonDown()
  227 +
  228 + def OnPanClick(self, evt, obj):
  229 + self.mouse_pressed = 1
  230 + evt.StartPan()
  231 +
  232 + def OnZoomMove(self, evt, obj):
  233 + if (self.mouse_pressed):
  234 + evt.Dolly()
  235 + evt.OnRightButtonDown()
  236 +
  237 + def OnZoomClick(self, evt, obj):
  238 + self.mouse_pressed = 1
  239 + evt.StartDolly()
159 240
  241 + def OnUnZoom(self, evt, obj):
  242 + self.ren.ResetCamera()
  243 + self.ren.ResetCameraClippingRange()
  244 + self.Reposition()
160 245
  246 + def OnSpinMove(self, evt, obj):
  247 + if (self.mouse_pressed):
  248 + evt.Spin()
  249 + evt.OnRightButtonDown()
  250 +
  251 + def OnSpinClick(self, evt, obj):
  252 + self.mouse_pressed = 1
  253 + evt.StartSpin()
  254 +
  255 + def OnReleaseModes(self, evt, obj):
  256 + self.mouse_pressed = 0
  257 +
  258 + def OnEnterInteractor(self, obj, evt):
  259 + self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_BLANK))
  260 +
  261 + def OnLeaveInteractor(self, obj, evt):
  262 + for slice_data in self.slice_data_list:
  263 + slice_data.cursor.Show(0)
  264 + self.interactor.Render()
  265 +
161 def Reposition(self): 266 def Reposition(self):
162 """ 267 """
163 Based on code of method Zoom in the 268 Based on code of method Zoom in the
@@ -224,80 +329,7 @@ class Viewer(wx.Panel): @@ -224,80 +329,7 @@ class Viewer(wx.Panel):
224 cam.Zoom(size[1] / height) 329 cam.Zoom(size[1] / height)
225 330
226 self.interactor.Render() 331 self.interactor.Render()
227 -  
228 -  
229 - def ChangeEditorMode(self, pubsub_evt):  
230 - self.append_mode('EDITOR')  
231 - self.mouse_pressed = 0  
232 - self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_BLANK))  
233 -  
234 - def ChangeSpinMode(self, pubsub_evt):  
235 - self.append_mode('SPIN')  
236 - self.mouse_pressed = 0  
237 - self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZING))  
238 332
239 - def ChangeZoomMode(self, pubsub_evt):  
240 - self.append_mode('ZOOM')  
241 - print "Zoom"  
242 - self.mouse_pressed = 0  
243 - ICON_IMAGE = wx.Image("../icons/tool_zoom.png",wx.BITMAP_TYPE_PNG)  
244 - ICON_IMAGE.SetOptionInt(wx.IMAGE_OPTION_CUR_HOTSPOT_X, 0)  
245 - ICON_IMAGE.SetOptionInt(wx.IMAGE_OPTION_CUR_HOTSPOT_Y, 0)  
246 - wx.SetCursor(wx.CursorFromImage(ICON_IMAGE))  
247 -  
248 - def ChangePanMode(self, pubsub_evt):  
249 - self.append_mode('PAN')  
250 - self.mouse_pressed = 0  
251 - self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZING))  
252 -  
253 - def ChangeZoomSelectMode(self, pubsub_evt):  
254 - self.append_mode('ZOOMSELECT')  
255 - ICON_IMAGE = wx.Image("../icons/tool_zoom.png",wx.BITMAP_TYPE_PNG)  
256 - wx.SetCursor(wx.CursorFromImage(ICON_IMAGE))  
257 -  
258 - def OnPanMove(self, evt, obj):  
259 - if (self.mouse_pressed):  
260 - evt.Pan()  
261 - evt.OnRightButtonDown()  
262 -  
263 - def OnPanClick(self, evt, obj):  
264 - self.mouse_pressed = 1  
265 - evt.StartPan()  
266 -  
267 - def OnZoomMove(self, evt, obj):  
268 - if (self.mouse_pressed):  
269 - evt.Dolly()  
270 - evt.OnRightButtonDown()  
271 -  
272 - def OnZoomClick(self, evt, obj):  
273 - self.mouse_pressed = 1  
274 - evt.StartDolly()  
275 -  
276 - def OnUnZoom(self, evt, obj):  
277 - self.ren.ResetCamera()  
278 - self.ren.ResetCameraClippingRange()  
279 - self.Reposition()  
280 -  
281 - def OnSpinMove(self, evt, obj):  
282 - if (self.mouse_pressed):  
283 - evt.Spin()  
284 - evt.OnRightButtonDown()  
285 -  
286 - def OnSpinClick(self, evt, obj):  
287 - self.mouse_pressed = 1  
288 - evt.StartSpin()  
289 -  
290 - def OnReleaseModes(self, evt, obj):  
291 - self.mouse_pressed = 0  
292 -  
293 - def OnEnterInteractor(self, obj, evt):  
294 - self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_BLANK))  
295 -  
296 - def OnLeaveInteractor(self, obj, evt):  
297 - for slice_data in self.slice_data_list:  
298 - slice_data.cursor.Show(0)  
299 - self.interactor.Render()  
300 -  
301 def ChangeBrushSize(self, pubsub_evt): 333 def ChangeBrushSize(self, pubsub_evt):
302 size = pubsub_evt.data 334 size = pubsub_evt.data
303 self._brush_cursor_size = size 335 self._brush_cursor_size = size
@@ -526,17 +558,22 @@ class Viewer(wx.Panel): @@ -526,17 +558,22 @@ class Viewer(wx.Panel):
526 'Set brush format') 558 'Set brush format')
527 ps.Publisher().subscribe(self.ChangeBrushOperation, 559 ps.Publisher().subscribe(self.ChangeBrushOperation,
528 'Set edition operation') 560 'Set edition operation')
529 - ps.Publisher().subscribe(self.ChangePanMode, 561 + ps.Publisher().subscribe(self.PanMode,
530 'Set Pan Mode') 562 'Set Pan Mode')
531 - ps.Publisher().subscribe(self.ChangeEditorMode, 563 + ps.Publisher().subscribe(self.EditorMode,
532 'Set Editor Mode') 564 'Set Editor Mode')
533 - ps.Publisher().subscribe(self.ChangeSpinMode, 565 + ps.Publisher().subscribe(self.SpinMode,
534 'Set Spin Mode') 566 'Set Spin Mode')
535 - ps.Publisher().subscribe(self.ChangeZoomMode, 567 + ps.Publisher().subscribe(self.ZoomMode,
536 'Set Zoom Mode') 568 'Set Zoom Mode')
537 - ps.Publisher().subscribe(self.ChangeZoomSelectMode, 569 + ps.Publisher().subscribe(self.ZoomSelectMode,
538 'Set Zoom Select Mode') 570 'Set Zoom Select Mode')
539 - 571 + ps.Publisher().subscribe(self.ZoomSelectMode,
  572 + 'Set Zoom Select Mode')
  573 +
  574 + ps.Publisher().subscribe(self.ChangeSliceMode,
  575 + 'Set Change Slice Mode')
  576 +
540 def ChangeBrushOperation(self, pubsub_evt): 577 def ChangeBrushOperation(self, pubsub_evt):
541 print pubsub_evt.data 578 print pubsub_evt.data
542 self._brush_cursor_op = pubsub_evt.data 579 self._brush_cursor_op = pubsub_evt.data