Commit 849fd417bbfd673f44ca416d6906965bb56fb31e
1 parent
a30db684
Exists in
master
and in
26 other branches
Better clicked function
Showing
1 changed file
with
21 additions
and
4 deletions
Show diff stats
invesalius/data/styles.py
@@ -377,15 +377,16 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): | @@ -377,15 +377,16 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): | ||
377 | self._bind_events() | 377 | self._bind_events() |
378 | 378 | ||
379 | def _bind_events(self): | 379 | def _bind_events(self): |
380 | - self.AddObserver("LeftButtonPressEvent", self.OnInsertLinearMeasurePoint) | 380 | + self.AddObserver("LeftButtonPressEvent", self.OnInsertMeasurePoint) |
381 | self.AddObserver("LeftButtonReleaseEvent", self.OnReleaseMeasurePoint) | 381 | self.AddObserver("LeftButtonReleaseEvent", self.OnReleaseMeasurePoint) |
382 | self.AddObserver("MouseMoveEvent", self.OnMoveMeasurePoint) | 382 | self.AddObserver("MouseMoveEvent", self.OnMoveMeasurePoint) |
383 | 383 | ||
384 | - def OnInsertLinearMeasurePoint(self, obj, evt): | 384 | + def OnInsertMeasurePoint(self, obj, evt): |
385 | slice_number = self.slice_data.number | 385 | slice_number = self.slice_data.number |
386 | x, y, z = self._get_pos_clicked() | 386 | x, y, z = self._get_pos_clicked() |
387 | + mx, my = self.viewer.interactor.GetEventPosition() | ||
387 | 388 | ||
388 | - selected = self._verify_clicked(x, y, z) | 389 | + selected = self._verify_clicked_display(mx, my) |
389 | if selected: | 390 | if selected: |
390 | self.selected = selected | 391 | self.selected = selected |
391 | else: | 392 | else: |
@@ -416,7 +417,8 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): | @@ -416,7 +417,8 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): | ||
416 | Publisher.sendMessage('Reload actual slice %s' % self.orientation) | 417 | Publisher.sendMessage('Reload actual slice %s' % self.orientation) |
417 | 418 | ||
418 | else: | 419 | else: |
419 | - if self._verify_clicked(x, y, z): | 420 | + mx, my = self.viewer.interactor.GetEventPosition() |
421 | + if self._verify_clicked_display(mx, my): | ||
420 | self.viewer.interactor.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) | 422 | self.viewer.interactor.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) |
421 | else: | 423 | else: |
422 | self.viewer.interactor.SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT)) | 424 | self.viewer.interactor.SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT)) |
@@ -455,6 +457,21 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): | @@ -455,6 +457,21 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): | ||
455 | return (n, m, mr) | 457 | return (n, m, mr) |
456 | return None | 458 | return None |
457 | 459 | ||
460 | + def _verify_clicked_display(self, x, y, max_dist=5.0): | ||
461 | + slice_number = self.slice_data.number | ||
462 | + max_dist = max_dist**2 | ||
463 | + coord = vtk.vtkCoordinate() | ||
464 | + if slice_number in self.measures.measures[self._ori]: | ||
465 | + for m, mr in self.measures.measures[self._ori][slice_number]: | ||
466 | + if mr.IsComplete(): | ||
467 | + for n, p in enumerate(m.points): | ||
468 | + coord.SetValue(p) | ||
469 | + cx, cy = coord.GetComputedDisplayValue(self.viewer.slice_data.renderer) | ||
470 | + dist = ((cx-x)**2 + (cy-y)**2) | ||
471 | + if dist <= max_dist: | ||
472 | + return (n, m, mr) | ||
473 | + return None | ||
474 | + | ||
458 | class AngularMeasureInteractorStyle(LinearMeasureInteractorStyle): | 475 | class AngularMeasureInteractorStyle(LinearMeasureInteractorStyle): |
459 | def __init__(self, viewer): | 476 | def __init__(self, viewer): |
460 | LinearMeasureInteractorStyle.__init__(self, viewer) | 477 | LinearMeasureInteractorStyle.__init__(self, viewer) |