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 | 377 | self._bind_events() |
| 378 | 378 | |
| 379 | 379 | def _bind_events(self): |
| 380 | - self.AddObserver("LeftButtonPressEvent", self.OnInsertLinearMeasurePoint) | |
| 380 | + self.AddObserver("LeftButtonPressEvent", self.OnInsertMeasurePoint) | |
| 381 | 381 | self.AddObserver("LeftButtonReleaseEvent", self.OnReleaseMeasurePoint) |
| 382 | 382 | self.AddObserver("MouseMoveEvent", self.OnMoveMeasurePoint) |
| 383 | 383 | |
| 384 | - def OnInsertLinearMeasurePoint(self, obj, evt): | |
| 384 | + def OnInsertMeasurePoint(self, obj, evt): | |
| 385 | 385 | slice_number = self.slice_data.number |
| 386 | 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 | 390 | if selected: |
| 390 | 391 | self.selected = selected |
| 391 | 392 | else: |
| ... | ... | @@ -416,7 +417,8 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): |
| 416 | 417 | Publisher.sendMessage('Reload actual slice %s' % self.orientation) |
| 417 | 418 | |
| 418 | 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 | 422 | self.viewer.interactor.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) |
| 421 | 423 | else: |
| 422 | 424 | self.viewer.interactor.SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT)) |
| ... | ... | @@ -455,6 +457,21 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): |
| 455 | 457 | return (n, m, mr) |
| 456 | 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 | 475 | class AngularMeasureInteractorStyle(LinearMeasureInteractorStyle): |
| 459 | 476 | def __init__(self, viewer): |
| 460 | 477 | LinearMeasureInteractorStyle.__init__(self, viewer) | ... | ... |