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) | ... | ... |