Commit a1b9aeaa846b7631720d1922b9a08d7d67a59967
1 parent
739b8904
Exists in
master
and in
6 other branches
ENH: Restructuring state of the tools
Showing
1 changed file
with
167 additions
and
194 deletions
Show diff stats
invesalius/data/viewer_slice.py
@@ -50,7 +50,8 @@ class Viewer(wx.Panel): | @@ -50,7 +50,8 @@ class Viewer(wx.Panel): | ||
50 | 50 | ||
51 | # Interactor additional style | 51 | # Interactor additional style |
52 | self.modes = []#['DEFAULT'] | 52 | self.modes = []#['DEFAULT'] |
53 | - self.mouse_pressed = 0 | 53 | + self.left_pressed = 0 |
54 | + self.right_pressed = 0 | ||
54 | 55 | ||
55 | # All renderers and image actors in this viewer | 56 | # All renderers and image actors in this viewer |
56 | self.slice_data_list = [] | 57 | self.slice_data_list = [] |
@@ -144,121 +145,95 @@ class Viewer(wx.Panel): | @@ -144,121 +145,95 @@ class Viewer(wx.Panel): | ||
144 | self.ren = ren | 145 | self.ren = ren |
145 | 146 | ||
146 | 147 | ||
147 | - def append_mode(self, mode): | ||
148 | - if "ZOOM" in self.modes or "ZOOMSELECT" in self.modes: | ||
149 | - self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT)) | ||
150 | - | ||
151 | - action = {const.SLICE_STATE_CROSS: { | 148 | + def SetState(self, state): |
149 | + self.state = state | ||
150 | + action = {const.SLICE_STATE_CROSS: | ||
151 | + { | ||
152 | "MouseMoveEvent": self.OnCrossMove, | 152 | "MouseMoveEvent": self.OnCrossMove, |
153 | "LeftButtonPressEvent": self.OnCrossMouseClick, | 153 | "LeftButtonPressEvent": self.OnCrossMouseClick, |
154 | "LeftButtonReleaseEvent": self.OnCrossMouseRelease | 154 | "LeftButtonReleaseEvent": self.OnCrossMouseRelease |
155 | }, | 155 | }, |
156 | - const.SLICE_STATE_EDITOR: { | 156 | + const.SLICE_STATE_EDITOR: |
157 | + { | ||
157 | "MouseMoveEvent": self.OnBrushMove, | 158 | "MouseMoveEvent": self.OnBrushMove, |
158 | "LeftButtonPressEvent": self.OnBrushClick, | 159 | "LeftButtonPressEvent": self.OnBrushClick, |
159 | "LeftButtonReleaseEvent": self.OnMouseRelease, | 160 | "LeftButtonReleaseEvent": self.OnMouseRelease, |
160 | "EnterEvent": self.OnEnterInteractor, | 161 | "EnterEvent": self.OnEnterInteractor, |
161 | "LeaveEvent": self.OnLeaveInteractor | 162 | "LeaveEvent": self.OnLeaveInteractor |
162 | }, | 163 | }, |
163 | - const.STATE_PAN:{ | ||
164 | - "MouseMoveEvent": self.OnPanMove, | ||
165 | - "LeftButtonPressEvent": self.OnPanClick, | ||
166 | - "LeftButtonReleaseEvent": self.OnReleaseModes | ||
167 | - }, | ||
168 | - const.STATE_SPIN:{ | ||
169 | - "MouseMoveEvent": self.OnSpinMove, | ||
170 | - "LeftButtonPressEvent": self.OnSpinClick, | ||
171 | - "LeftButtonReleaseEvent": self.OnReleaseModes | ||
172 | - }, | ||
173 | - const.STATE_ZOOM:{ | ||
174 | - "MouseMoveEvent": self.OnZoomMove, | ||
175 | - "LeftButtonPressEvent": self.OnZoomClick, | ||
176 | - "LeftButtonReleaseEvent": self.OnReleaseModes, | ||
177 | - }, | ||
178 | - const.SLICE_STATE_SCROLL:{ | ||
179 | - "MouseMoveEvent": self.OnChangeSliceMove, | ||
180 | - "LeftButtonPressEvent": self.OnChangeSliceClick, | ||
181 | - "LeftButtonReleaseEvent": self.OnReleaseModes | ||
182 | - }, | ||
183 | - const.STATE_WL:{ | ||
184 | - "MouseMoveEvent": self.OnWindowLevelMove, | ||
185 | - "LeftButtonPressEvent": self.OnWindowLevelClick, | ||
186 | - "LeftButtonReleaseEvent": self.OnReleaseModes | ||
187 | - }, | ||
188 | - const.STATE_DEFAULT:{ | ||
189 | - } | 164 | + const.STATE_PAN: |
165 | + { | ||
166 | + "MouseMoveEvent": self.OnPanMove, | ||
167 | + "LeftButtonPressEvent": self.OnPanClick, | ||
168 | + "LeftButtonReleaseEvent": self.OnReleaseLeftButton | ||
169 | + }, | ||
170 | + const.STATE_SPIN: | ||
171 | + { | ||
172 | + "MouseMoveEvent": self.OnSpinMove, | ||
173 | + "LeftButtonPressEvent": self.OnSpinClick, | ||
174 | + "LeftButtonReleaseEvent": self.OnReleaseLeftButton | ||
175 | + }, | ||
176 | + const.STATE_ZOOM: | ||
177 | + { | ||
178 | + "MouseMoveEvent": self.OnZoomMove, | ||
179 | + "LeftButtonPressEvent": self.OnZoomLeftClick, | ||
180 | + "LeftButtonReleaseEvent": self.OnReleaseLeftButton, | ||
181 | + }, | ||
182 | + const.SLICE_STATE_SCROLL: | ||
183 | + { | ||
184 | + "MouseMoveEvent": self.OnChangeSliceMove, | ||
185 | + "LeftButtonPressEvent": self.OnChangeSliceClick, | ||
186 | + "LeftButtonReleaseEvent": self.OnReleaseLeftButton | ||
187 | + }, | ||
188 | + const.STATE_WL: | ||
189 | + { | ||
190 | + "MouseMoveEvent": self.OnWindowLevelMove, | ||
191 | + "LeftButtonPressEvent": self.OnWindowLevelClick, | ||
192 | + "LeftButtonReleaseEvent": self.OnReleaseLeftButton, | ||
193 | + }, | ||
194 | + const.STATE_DEFAULT: | ||
195 | + { | ||
196 | + "MouseMoveEvent": self.OnZoomMove, | ||
197 | + "RightButtonPressEvent": self.OnZoomLeftClick, | ||
198 | + "RightButtonReleaseEvent": self.OnReleaseRightButton, | ||
199 | + } | ||
190 | } | 200 | } |
191 | 201 | ||
192 | # Bind method according to current mode | 202 | # Bind method according to current mode |
193 | - if(mode == const.STATE_ZOOM_SL): | 203 | + if(state == const.STATE_ZOOM_SL): |
194 | style = vtk.vtkInteractorStyleRubberBandZoom() | 204 | style = vtk.vtkInteractorStyleRubberBandZoom() |
195 | else: | 205 | else: |
196 | style = vtk.vtkInteractorStyleImage() | 206 | style = vtk.vtkInteractorStyleImage() |
197 | 207 | ||
198 | - # Check each event available for each mode | ||
199 | - for event in action[mode]: | 208 | + # Check each event available for each state |
209 | + for event in action[state]: | ||
200 | # Bind event | 210 | # Bind event |
201 | style.AddObserver(event, | 211 | style.AddObserver(event, |
202 | - action[mode][event]) | 212 | + action[state][event]) |
213 | + | ||
214 | + style.AddObserver("RightButtonPressEvent",self.OnRightClick) | ||
215 | + style.AddObserver("RightButtonReleaseEvent", self.OnReleaseRightButton) | ||
203 | 216 | ||
204 | - if ((mode == const.STATE_ZOOM) or (mode == const.STATE_ZOOM_SL)): | 217 | + if ((state == const.STATE_ZOOM) or (state == const.STATE_ZOOM_SL)): |
205 | self.interactor.Bind(wx.EVT_LEFT_DCLICK, self.OnUnZoom) | 218 | self.interactor.Bind(wx.EVT_LEFT_DCLICK, self.OnUnZoom) |
206 | else: | 219 | else: |
207 | self.interactor.Bind(wx.EVT_LEFT_DCLICK, None) | 220 | self.interactor.Bind(wx.EVT_LEFT_DCLICK, None) |
208 | 221 | ||
209 | self.style = style | 222 | self.style = style |
210 | self.interactor.SetInteractorStyle(style) | 223 | self.interactor.SetInteractorStyle(style) |
211 | - | ||
212 | - | ||
213 | 224 | ||
214 | - def __set_mode_editor(self, pubsub_evt): | ||
215 | - self.append_mode(const.SLICE_STATE_EDITOR) | ||
216 | - self.mouse_pressed = 0 | ||
217 | - self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_BLANK)) | ||
218 | - | ||
219 | - def __set_mode_spin(self, pubsub_evt): | ||
220 | - self.append_mode('SPIN') | ||
221 | - self.mouse_pressed = 0 | ||
222 | - self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZING)) | 225 | + #def OnMouseMove(self, evt, obj): |
226 | + # if(self.left_pressed): | ||
227 | + | ||
228 | + # if(self.state == const.SLICE_STATE_CROSS): | ||
229 | + | ||
230 | + | ||
231 | + def OnRightClick(self, evt, obj): | ||
232 | + self.right_pressed = 1 | ||
223 | 233 | ||
224 | - def __set_mode_zoom(self, pubsub_evt): | ||
225 | - #print "Zoom" | ||
226 | - self.append_mode('ZOOM') | ||
227 | - self.mouse_pressed = 0 | ||
228 | - ICON_IMAGE = wx.Image(os.path.join(const.ICON_DIR, | ||
229 | - "tool_zoom.png"),wx.BITMAP_TYPE_PNG) | ||
230 | - self.interactor.SetCursor(wx.CursorFromImage(ICON_IMAGE)) | ||
231 | - | ||
232 | - def __set_mode_pan(self, pubsub_evt): | ||
233 | - self.append_mode('PAN') | ||
234 | - self.mouse_pressed = 0 | ||
235 | - self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZING)) | ||
236 | - | ||
237 | - def __set_mode_zoom_select(self, pubsub_evt): | ||
238 | - self.append_mode('ZOOMSELECT') | ||
239 | - ICON_IMAGE = wx.Image(os.path.join(const.ICON_DIR, | ||
240 | - "tool_zoom.png"),wx.BITMAP_TYPE_PNG) | ||
241 | - self.interactor.SetCursor(wx.CursorFromImage(ICON_IMAGE)) | ||
242 | - | ||
243 | - def __set_mode_window_level(self, pubsub_evt): | ||
244 | - self.append_mode('WINDOWLEVEL') | ||
245 | - self.mouse_pressed = 0 | ||
246 | - self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZING)) | ||
247 | - self.interactor.Render() | ||
248 | - | ||
249 | - | ||
250 | - def __set_mode_slice_scroll(self, pubsub_evt): | ||
251 | - self.append_mode('CHANGESLICE') | ||
252 | - self.mouse_pressed = 0 | ||
253 | - self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_SIZENS)) | ||
254 | - | ||
255 | - def __set_mode_cross(self, pubsub_evt): | ||
256 | - self.append_mode('CROSS') | ||
257 | - self.mouse_pressed = 0 | ||
258 | - self.cross_actor.VisibilityOn() | ||
259 | 234 | ||
260 | def OnWindowLevelMove(self, evt, obj): | 235 | def OnWindowLevelMove(self, evt, obj): |
261 | - if self.mouse_pressed: | 236 | + if (self.left_pressed): |
262 | position = self.interactor.GetLastEventPosition() | 237 | position = self.interactor.GetLastEventPosition() |
263 | mouse_x, mouse_y = self.interactor.GetEventPosition() | 238 | mouse_x, mouse_y = self.interactor.GetEventPosition() |
264 | self.acum_achange_window += mouse_x - self.last_x | 239 | self.acum_achange_window += mouse_x - self.last_x |
@@ -279,13 +254,16 @@ class Viewer(wx.Panel): | @@ -279,13 +254,16 @@ class Viewer(wx.Panel): | ||
279 | 254 | ||
280 | #Necessary update the slice plane in the volume case exists | 255 | #Necessary update the slice plane in the volume case exists |
281 | ps.Publisher().sendMessage('Render volume viewer') | 256 | ps.Publisher().sendMessage('Render volume viewer') |
282 | - | 257 | + |
258 | + elif(self.right_pressed): | ||
259 | + self.OnZoomMove(evt, obj) | ||
260 | + | ||
283 | self.interactor.Render() | 261 | self.interactor.Render() |
284 | 262 | ||
285 | 263 | ||
286 | def OnWindowLevelClick(self, evt, obj): | 264 | def OnWindowLevelClick(self, evt, obj): |
287 | self.last_x, self.last_y = self.interactor.GetLastEventPosition() | 265 | self.last_x, self.last_y = self.interactor.GetLastEventPosition() |
288 | - self.mouse_pressed = 1 | 266 | + self.left_pressed = 1 |
289 | 267 | ||
290 | def UpdateWindowLevelValue(self, pubsub_evt): | 268 | def UpdateWindowLevelValue(self, pubsub_evt): |
291 | window, level = pubsub_evt.data | 269 | window, level = pubsub_evt.data |
@@ -293,50 +271,54 @@ class Viewer(wx.Panel): | @@ -293,50 +271,54 @@ class Viewer(wx.Panel): | ||
293 | 271 | ||
294 | 272 | ||
295 | def OnChangeSliceMove(self, evt, obj): | 273 | def OnChangeSliceMove(self, evt, obj): |
296 | - | ||
297 | - min = 0 | ||
298 | - max = self.actor.GetSliceNumberMax() | ||
299 | - | ||
300 | - if (self.mouse_pressed): | ||
301 | - position = self.interactor.GetLastEventPosition() | ||
302 | - scroll_position = self.scroll.GetThumbPosition() | ||
303 | - | ||
304 | - if (position[1] > self.last_position) and\ | ||
305 | - (self.acum_achange_slice > min): | ||
306 | - self.acum_achange_slice -= 1 | ||
307 | - elif(position[1] < self.last_position) and\ | ||
308 | - (self.acum_achange_slice < max): | ||
309 | - self.acum_achange_slice += 1 | ||
310 | - self.last_position = position[1] | ||
311 | - | ||
312 | - self.scroll.SetThumbPosition(self.acum_achange_slice) | ||
313 | - self.OnScrollBar() | ||
314 | - | 274 | + if (self.left_pressed): |
275 | + min = 0 | ||
276 | + max = self.actor.GetSliceNumberMax() | ||
277 | + | ||
278 | + if (self.left_pressed): | ||
279 | + position = self.interactor.GetLastEventPosition() | ||
280 | + scroll_position = self.scroll.GetThumbPosition() | ||
281 | + | ||
282 | + if (position[1] > self.last_position) and\ | ||
283 | + (self.acum_achange_slice > min): | ||
284 | + self.acum_achange_slice -= 1 | ||
285 | + elif(position[1] < self.last_position) and\ | ||
286 | + (self.acum_achange_slice < max): | ||
287 | + self.acum_achange_slice += 1 | ||
288 | + self.last_position = position[1] | ||
289 | + | ||
290 | + self.scroll.SetThumbPosition(self.acum_achange_slice) | ||
291 | + self.OnScrollBar() | ||
292 | + | ||
293 | + elif(self.right_pressed): | ||
294 | + self.OnZoomMove(evt, obj) | ||
315 | 295 | ||
316 | def OnChangeSliceClick(self, evt, obj): | 296 | def OnChangeSliceClick(self, evt, obj): |
317 | - self.mouse_pressed = 1 | 297 | + self.left_pressed = 1 |
318 | position = list(self.interactor.GetLastEventPosition()) | 298 | position = list(self.interactor.GetLastEventPosition()) |
319 | self.acum_achange_slice = self.scroll.GetThumbPosition() | 299 | self.acum_achange_slice = self.scroll.GetThumbPosition() |
320 | self.last_position = position[1] | 300 | self.last_position = position[1] |
321 | 301 | ||
322 | def OnPanMove(self, evt, obj): | 302 | def OnPanMove(self, evt, obj): |
323 | - if (self.mouse_pressed): | 303 | + if (self.left_pressed): |
324 | evt.Pan() | 304 | evt.Pan() |
325 | evt.OnRightButtonDown() | 305 | evt.OnRightButtonDown() |
326 | - | 306 | + elif(self.right_pressed): |
307 | + self.OnZoomMove(evt, obj) | ||
308 | + | ||
327 | def OnPanClick(self, evt, obj): | 309 | def OnPanClick(self, evt, obj): |
328 | - self.mouse_pressed = 1 | 310 | + self.left_pressed = 1 |
329 | evt.StartPan() | 311 | evt.StartPan() |
330 | 312 | ||
331 | def OnZoomMove(self, evt, obj): | 313 | def OnZoomMove(self, evt, obj): |
332 | - if (self.mouse_pressed): | 314 | + if (self.left_pressed or self.right_pressed): |
333 | evt.Dolly() | 315 | evt.Dolly() |
334 | evt.OnRightButtonDown() | 316 | evt.OnRightButtonDown() |
335 | 317 | ||
336 | - def OnZoomClick(self, evt, obj): | ||
337 | - self.mouse_pressed = 1 | 318 | + def OnZoomLeftClick(self, evt, obj): |
319 | + self.left_pressed = 1 | ||
338 | evt.StartDolly() | 320 | evt.StartDolly() |
339 | - | 321 | + |
340 | def OnUnZoom(self, evt, obj = None): | 322 | def OnUnZoom(self, evt, obj = None): |
341 | mouse_x, mouse_y = self.interactor.GetLastEventPosition() | 323 | mouse_x, mouse_y = self.interactor.GetLastEventPosition() |
342 | ren = self.interactor.FindPokedRenderer(mouse_x, mouse_y) | 324 | ren = self.interactor.FindPokedRenderer(mouse_x, mouse_y) |
@@ -347,23 +329,32 @@ class Viewer(wx.Panel): | @@ -347,23 +329,32 @@ class Viewer(wx.Panel): | ||
347 | self.interactor.Render() | 329 | self.interactor.Render() |
348 | 330 | ||
349 | def OnSpinMove(self, evt, obj): | 331 | def OnSpinMove(self, evt, obj): |
350 | - if (self.mouse_pressed): | 332 | + if (self.left_pressed): |
351 | evt.Spin() | 333 | evt.Spin() |
352 | evt.OnRightButtonDown() | 334 | evt.OnRightButtonDown() |
335 | + elif(self.right_pressed): | ||
336 | + self.OnZoomMove(evt, obj) | ||
337 | + | ||
353 | 338 | ||
354 | def OnSpinClick(self, evt, obj): | 339 | def OnSpinClick(self, evt, obj): |
355 | - self.mouse_pressed = 1 | 340 | + self.left_pressed = 1 |
356 | evt.StartSpin() | 341 | evt.StartSpin() |
357 | 342 | ||
358 | - def OnReleaseModes(self, evt, obj): | ||
359 | - self.mouse_pressed = 0 | 343 | + def OnReleaseLeftButton(self, evt, obj): |
344 | + self.left_pressed = 0 | ||
360 | ps.Publisher().sendMessage('Update slice viewer') | 345 | ps.Publisher().sendMessage('Update slice viewer') |
346 | + | ||
347 | + def OnReleaseRightButton(self, evt, obj): | ||
348 | + self.right_pressed = 0 | ||
349 | + ps.Publisher().sendMessage('Update slice viewer') | ||
350 | + | ||
351 | + | ||
361 | 352 | ||
362 | - def OnEnterInteractor(self, obj, evt): | 353 | + def OnEnterInteractor(self, evt, obj): |
363 | #self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_BLANK)) | 354 | #self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_BLANK)) |
364 | pass | 355 | pass |
365 | 356 | ||
366 | - def OnLeaveInteractor(self, obj, evt): | 357 | + def OnLeaveInteractor(self, evt, obj): |
367 | for slice_data in self.slice_data_list: | 358 | for slice_data in self.slice_data_list: |
368 | slice_data.cursor.Show(0) | 359 | slice_data.cursor.Show(0) |
369 | self.interactor.Render() | 360 | self.interactor.Render() |
@@ -546,14 +537,14 @@ class Viewer(wx.Panel): | @@ -546,14 +537,14 @@ class Viewer(wx.Panel): | ||
546 | self.interactor.Render() | 537 | self.interactor.Render() |
547 | #self.cursor = cursor | 538 | #self.cursor = cursor |
548 | 539 | ||
549 | - def OnMouseClick(self, obj, evt_vtk): | ||
550 | - self.mouse_pressed = 1 | 540 | + def OnMouseClick(self, evt, obj): |
541 | + self.left_pressed = 1 | ||
551 | 542 | ||
552 | - def OnMouseRelease(self, obj, evt_vtk): | ||
553 | - self.mouse_pressed = 0 | 543 | + def OnMouseRelease(self, evt, obj): |
544 | + self.left_pressed = 0 | ||
554 | 545 | ||
555 | - def OnBrushClick(self, obj, evt_vtk): | ||
556 | - self.mouse_pressed = 1 | 546 | + def OnBrushClick(self, evt, obj): |
547 | + self.left_pressed = 1 | ||
557 | 548 | ||
558 | mouse_x, mouse_y = self.interactor.GetEventPosition() | 549 | mouse_x, mouse_y = self.interactor.GetEventPosition() |
559 | render = self.interactor.FindPokedRenderer(mouse_x, mouse_y) | 550 | render = self.interactor.FindPokedRenderer(mouse_x, mouse_y) |
@@ -581,41 +572,48 @@ class Viewer(wx.Panel): | @@ -581,41 +572,48 @@ class Viewer(wx.Panel): | ||
581 | ps.Publisher().sendMessage('Update slice viewer') | 572 | ps.Publisher().sendMessage('Update slice viewer') |
582 | ps.Publisher().sendMessage('Update slice viewer') | 573 | ps.Publisher().sendMessage('Update slice viewer') |
583 | 574 | ||
584 | - def OnBrushMove(self, obj, evt_vtk): | ||
585 | - mouse_x, mouse_y = self.interactor.GetEventPosition() | ||
586 | - render = self.interactor.FindPokedRenderer(mouse_x, mouse_y) | ||
587 | - slice_data = self.get_slice_data(render) | ||
588 | - | ||
589 | - # TODO: Improve! | ||
590 | - for i in self.slice_data_list: | ||
591 | - i.cursor.Show(0) | ||
592 | - slice_data.cursor.Show() | ||
593 | - | ||
594 | - self.pick.Pick(mouse_x, mouse_y, 0, render) | ||
595 | - coord = self.get_coordinate_cursor() | ||
596 | - slice_data.cursor.SetPosition(coord) | ||
597 | - slice_data.cursor.SetEditionPosition( | ||
598 | - self.get_coordinate_cursor_edition(slice_data)) | ||
599 | - self.__update_cursor_position(slice_data, coord) | 575 | + def OnBrushMove(self, evt, obj): |
576 | + | ||
577 | + if(self.right_pressed): | ||
578 | + self.OnZoomLeftClick(evt, obj) | ||
579 | + self.OnZoomMove(evt, obj) | ||
580 | + else: | ||
581 | + mouse_x, mouse_y = self.interactor.GetEventPosition() | ||
582 | + render = self.interactor.FindPokedRenderer(mouse_x, mouse_y) | ||
583 | + slice_data = self.get_slice_data(render) | ||
584 | + | ||
585 | + # TODO: Improve! | ||
586 | + for i in self.slice_data_list: | ||
587 | + i.cursor.Show(0) | ||
588 | + slice_data.cursor.Show() | ||
589 | + | ||
590 | + self.pick.Pick(mouse_x, mouse_y, 0, render) | ||
591 | + coord = self.get_coordinate_cursor() | ||
592 | + slice_data.cursor.SetPosition(coord) | ||
593 | + slice_data.cursor.SetEditionPosition( | ||
594 | + self.get_coordinate_cursor_edition(slice_data)) | ||
595 | + self.__update_cursor_position(slice_data, coord) | ||
596 | + | ||
597 | + if self._brush_cursor_op == const.BRUSH_ERASE: | ||
598 | + evt_msg = 'Erase mask pixel' | ||
599 | + elif self._brush_cursor_op == const.BRUSH_DRAW: | ||
600 | + evt_msg = 'Add mask pixel' | ||
601 | + elif self._brush_cursor_op == const.BRUSH_THRESH: | ||
602 | + evt_msg = 'Edit mask pixel' | ||
603 | + | ||
604 | + if (self.left_pressed): | ||
605 | + pixels = itertools.ifilter(self.test_operation_position, | ||
606 | + slice_data.cursor.GetPixels()) | ||
607 | + ps.Publisher().sendMessage(evt_msg, pixels) | ||
608 | + ps.Publisher().sendMessage('Update slice viewer') | ||
600 | 609 | ||
601 | - if self._brush_cursor_op == const.BRUSH_ERASE: | ||
602 | - evt_msg = 'Erase mask pixel' | ||
603 | - elif self._brush_cursor_op == const.BRUSH_DRAW: | ||
604 | - evt_msg = 'Add mask pixel' | ||
605 | - elif self._brush_cursor_op == const.BRUSH_THRESH: | ||
606 | - evt_msg = 'Edit mask pixel' | 610 | + self.interactor.Render() |
607 | 611 | ||
608 | 612 | ||
609 | - if self.mouse_pressed: | ||
610 | - pixels = itertools.ifilter(self.test_operation_position, | ||
611 | - slice_data.cursor.GetPixels()) | ||
612 | - ps.Publisher().sendMessage(evt_msg, pixels) | ||
613 | - ps.Publisher().sendMessage('Update slice viewer') | ||
614 | - self.interactor.Render() | ||
615 | 613 | ||
616 | - def OnCrossMove(self, obj, evt_vtk): | 614 | + def OnCrossMove(self, evt, obj): |
617 | # Update position in other slices | 615 | # Update position in other slices |
618 | - if self.mouse_pressed: | 616 | + if (self.left_pressed): |
619 | mouse_x, mouse_y = self.interactor.GetEventPosition() | 617 | mouse_x, mouse_y = self.interactor.GetEventPosition() |
620 | renderer = self.slice_data_list[0].renderer | 618 | renderer = self.slice_data_list[0].renderer |
621 | self.pick.Pick(mouse_x, mouse_y, self.slice_data_list[0].number, renderer) | 619 | self.pick.Pick(mouse_x, mouse_y, self.slice_data_list[0].number, renderer) |
@@ -629,8 +627,11 @@ class Viewer(wx.Panel): | @@ -629,8 +627,11 @@ class Viewer(wx.Panel): | ||
629 | coord[1]) | 627 | coord[1]) |
630 | ps.Publisher().sendMessage(('Set scroll position', 'AXIAL'), | 628 | ps.Publisher().sendMessage(('Set scroll position', 'AXIAL'), |
631 | coord[2]) | 629 | coord[2]) |
632 | - | ||
633 | - def OnCrossMouseClick(self, obj, evt_vtk): | 630 | + elif(self.right_pressed): |
631 | + self.OnZoomLeftClick(evt, obj) | ||
632 | + self.OnZoomMove(evt, obj) | ||
633 | + | ||
634 | + def OnCrossMouseClick(self, evt, obj): | ||
634 | mouse_x, mouse_y = self.interactor.GetEventPosition() | 635 | mouse_x, mouse_y = self.interactor.GetEventPosition() |
635 | renderer = self.slice_data_list[0].renderer | 636 | renderer = self.slice_data_list[0].renderer |
636 | self.pick.Pick(mouse_x, mouse_y, self.slice_data_list[0].number, renderer) | 637 | self.pick.Pick(mouse_x, mouse_y, self.slice_data_list[0].number, renderer) |
@@ -644,10 +645,10 @@ class Viewer(wx.Panel): | @@ -644,10 +645,10 @@ class Viewer(wx.Panel): | ||
644 | coord[1]) | 645 | coord[1]) |
645 | ps.Publisher().sendMessage(('Set scroll position', 'AXIAL'), | 646 | ps.Publisher().sendMessage(('Set scroll position', 'AXIAL'), |
646 | coord[2]) | 647 | coord[2]) |
647 | - self.mouse_pressed = 1 | 648 | + self.left_pressed = 1 |
648 | 649 | ||
649 | - def OnCrossMouseRelease(self, obj, evt_vtk): | ||
650 | - self.mouse_pressed = 0 | 650 | + def OnCrossMouseRelease(self, evt, obj): |
651 | + self.left_pressed = 0 | ||
651 | 652 | ||
652 | def get_slice_data(self, render): | 653 | def get_slice_data(self, render): |
653 | for slice_data in self.slice_data_list: | 654 | for slice_data in self.slice_data_list: |
@@ -753,34 +754,6 @@ class Viewer(wx.Panel): | @@ -753,34 +754,6 @@ class Viewer(wx.Panel): | ||
753 | ps.Publisher().subscribe(self.ChangeBrushOperation, | 754 | ps.Publisher().subscribe(self.ChangeBrushOperation, |
754 | 'Set edition operation') | 755 | 'Set edition operation') |
755 | 756 | ||
756 | - ### | ||
757 | - """ | ||
758 | - ps.Publisher().subscribe(self.__set_mode_pan, | ||
759 | - ('Set interaction mode', | ||
760 | - const.MODE_MOVE)) | ||
761 | - ps.Publisher().subscribe(self.__set_mode_editor, | ||
762 | - ('Set interaction mode', | ||
763 | - const.MODE_SLICE_EDITOR)) | ||
764 | - ps.Publisher().subscribe(self.__set_mode_spin, | ||
765 | - ('Set interaction mode', | ||
766 | - const.MODE_ROTATE)) | ||
767 | - ps.Publisher().subscribe(self.__set_mode_zoom, | ||
768 | - ('Set interaction mode', | ||
769 | - const.MODE_ZOOM)) | ||
770 | - ps.Publisher().subscribe(self.__set_mode_zoom_select, | ||
771 | - ('Set interaction mode', | ||
772 | - const.MODE_ZOOM_SELECTION)) | ||
773 | - ps.Publisher().subscribe(self.__set_mode_slice_scroll, | ||
774 | - ('Set interaction mode', | ||
775 | - const.MODE_SLICE_SCROLL)) | ||
776 | - ps.Publisher().subscribe(self.__set_mode_window_level, | ||
777 | - ('Set interaction mode', | ||
778 | - const.MODE_WW_WL)) | ||
779 | - ps.Publisher().subscribe(self.__set_mode_cross, | ||
780 | - ('Set interaction mode', | ||
781 | - const.MODE_SLICE_CROSS)) | ||
782 | - """ | ||
783 | - | ||
784 | ps.Publisher().subscribe(self.UpdateWindowLevelValue,\ | 757 | ps.Publisher().subscribe(self.UpdateWindowLevelValue,\ |
785 | 'Update window level value') | 758 | 'Update window level value') |
786 | 759 | ||
@@ -794,9 +767,9 @@ class Viewer(wx.Panel): | @@ -794,9 +767,9 @@ class Viewer(wx.Panel): | ||
794 | 'Set slice mode') | 767 | 'Set slice mode') |
795 | 768 | ||
796 | def OnSetMode(self, pubsub_evt): | 769 | def OnSetMode(self, pubsub_evt): |
797 | - mode = pubsub_evt.data | ||
798 | - self.mouse_pressed = 0 | ||
799 | - self.append_mode(mode) | 770 | + state = pubsub_evt.data |
771 | + self.left_pressed = 0 | ||
772 | + self.SetState(state) | ||
800 | 773 | ||
801 | 774 | ||
802 | def ChangeBrushOperation(self, pubsub_evt): | 775 | def ChangeBrushOperation(self, pubsub_evt): |
@@ -904,7 +877,7 @@ class Viewer(wx.Panel): | @@ -904,7 +877,7 @@ class Viewer(wx.Panel): | ||
904 | 877 | ||
905 | self.EnableText() | 878 | self.EnableText() |
906 | # Insert cursor | 879 | # Insert cursor |
907 | - self.append_mode(const.SLICE_STATE_EDITOR) | 880 | + self.SetState(const.SLICE_STATE_EDITOR) |
908 | 881 | ||
909 | self.__build_cross_lines() | 882 | self.__build_cross_lines() |
910 | 883 |