From 849fd417bbfd673f44ca416d6906965bb56fb31e Mon Sep 17 00:00:00 2001 From: Thiago Franco de Moraes Date: Mon, 18 Jul 2016 16:23:53 -0300 Subject: [PATCH] Better clicked function --- invesalius/data/styles.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/invesalius/data/styles.py b/invesalius/data/styles.py index 3ba7ab8..78fe880 100644 --- a/invesalius/data/styles.py +++ b/invesalius/data/styles.py @@ -377,15 +377,16 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): self._bind_events() def _bind_events(self): - self.AddObserver("LeftButtonPressEvent", self.OnInsertLinearMeasurePoint) + self.AddObserver("LeftButtonPressEvent", self.OnInsertMeasurePoint) self.AddObserver("LeftButtonReleaseEvent", self.OnReleaseMeasurePoint) self.AddObserver("MouseMoveEvent", self.OnMoveMeasurePoint) - def OnInsertLinearMeasurePoint(self, obj, evt): + def OnInsertMeasurePoint(self, obj, evt): slice_number = self.slice_data.number x, y, z = self._get_pos_clicked() + mx, my = self.viewer.interactor.GetEventPosition() - selected = self._verify_clicked(x, y, z) + selected = self._verify_clicked_display(mx, my) if selected: self.selected = selected else: @@ -416,7 +417,8 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): Publisher.sendMessage('Reload actual slice %s' % self.orientation) else: - if self._verify_clicked(x, y, z): + mx, my = self.viewer.interactor.GetEventPosition() + if self._verify_clicked_display(mx, my): self.viewer.interactor.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) else: self.viewer.interactor.SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT)) @@ -455,6 +457,21 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): return (n, m, mr) return None + def _verify_clicked_display(self, x, y, max_dist=5.0): + slice_number = self.slice_data.number + max_dist = max_dist**2 + coord = vtk.vtkCoordinate() + if slice_number in self.measures.measures[self._ori]: + for m, mr in self.measures.measures[self._ori][slice_number]: + if mr.IsComplete(): + for n, p in enumerate(m.points): + coord.SetValue(p) + cx, cy = coord.GetComputedDisplayValue(self.viewer.slice_data.renderer) + dist = ((cx-x)**2 + (cy-y)**2) + if dist <= max_dist: + return (n, m, mr) + return None + class AngularMeasureInteractorStyle(LinearMeasureInteractorStyle): def __init__(self, viewer): LinearMeasureInteractorStyle.__init__(self, viewer) -- libgit2 0.21.2