Commit 849fd417bbfd673f44ca416d6906965bb56fb31e

Authored by Thiago Franco de Moraes
1 parent a30db684

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